هل ترغب في تكرار العمليات الروتينية من وقت لآخر؟ أنا هنا. لكن في كل مرة في عميل SQL عند العمل مع مستودع Rostelecom ، كان علي تسجيل جميع الروابط بين مقابض الجداول. وهذا على الرغم من حقيقة أنه في 90٪ من الحالات ، تزامنت الحقول وشروط الانضمام إلى الجداول من استعلام إلى استعلام! يبدو أن أي عميل SQL لديه وظائف الإكمال التلقائي ، لكنه لا يعمل دائمًا في المخازن: نادرًا ما يكون لديه قيد فريد ومفتاح خارجي من أجل تحسين الأداء ، وبدون ذلك ، لا يمكن للبرنامج معرفة كيفية ارتباط الكيانات وما يمكن أن يفعله لك أن أقترح.

بعد أن مررت بالإنكار والغضب والمساومة والاكتئاب والاقتراب من القبول ، قررت - لماذا لا أحاول تطبيق الإكمال التلقائي مع لعبة البلاك جاك بنفسي وكما ينبغي؟ يمكنني استخدام عميل dbeaver المكتوب بلغة جافا ، ولديه إصدار مجتمع مفتوح المصدر. لقد انضجت خطة بسيطة:
- البحث عن فئات الإكمال التلقائي في التعليمات البرمجية المصدر
- إعادة توجيههم للعمل مع البيانات الوصفية الخارجية وسحب معلومات حول الصلات من هناك
- ؟؟؟؟؟؟
- PROFIT
لقد اكتشفت بسرعة العنصر الأول - لقد وجدت طلبًا لضبط الملء التلقائي في bugtracker ووجدت فئة SQLCompletionAnalyzer في الالتزام ذي الصلة. نظرت إلى الكود - ما أحتاجه. يبقى لإعادة كتابته حتى يعمل كل شيء. انتظرت أمسية مجانية وبدأت أفكر في تنفيذها. قررت قواعد ربط الجدول (البيانات الوصفية) أن تؤدي في json. لم يكن لدي أي خبرة عملية مع هذا التنسيق واعتبرت المهمة الحالية فرصة لتصحيح هذا الإغفال.
للعمل مع json ، قررت استخدام مكتبة
json-simple من Google. هنا بدأت المفاجآت. كما اتضح فيما بعد ، يتم كتابة dbeaver ، كتطبيق حقيقي ، على منصة الكسوف باستخدام إطار عمل OSGi. بالنسبة للمطورين ذوي الخبرة ، يمنح هذا الأمر راحة إدارة التبعية ، لكن بالنسبة لي كان الأمر أشبه بالسحر المظلم ، الذي لم أكن جاهزًا بشكل واضح: كالمعتاد ، أسجل استيراد الفئات التي أحتاجها من المكتبة البسيطة json في رأس الفصل الذي تم تحريره ، وقمت بتحديده في pom. XML ، وبعد ذلك يرفض المشروع بشكل قاطع التجميع بشكل صحيح وفشل مع الأخطاء.
ونتيجة لذلك ، تمكنا من إصلاح أخطاء التجميع: لقد سجلت المكتبة ليس في pom.xml ، ولكن في بيان manifest.mf ، كما هو مطلوب بواسطة OSGI ، مع تحديده كحزمة استيراد. ليس هو الحل الأكثر جمالا ، لكنه يعمل. ثم ظهرت المفاجأة التالية. إذا كنت تعمل على تطوير فكرة intellij ، فلا يمكنك الحصول على تصحيح مشروعك وتشغيله استنادًا إلى منصة الكسوف: يجب أن يعاني المطور الذي لا يتمتع بخبرة كاملة من محلل دون الإكمال التلقائي للطلبات. جاء مطورو القندس أنفسهم إلى الإنقاذ ، مشيرين في الويكي إلى جميع الرقصات مع الدف الذي يتعين القيام به. الشيء الأكثر إزعاجًا هو أنه حتى بعد كل هذه القرفصاء ، لم يرغب المشروع في البدء في تصحيح الأخطاء مع مكتبة json المتصلة عبر حزمة الاستيراد (على الرغم من حقيقة أنه لا يزال تم تجميعها بنجاح في المنتج النهائي).
بحلول ذلك الوقت ، تمكنت من الشعور بالإزعاج من استخدام json لمهمتي - بعد كل شيء ، كان من المفترض أن يتم تحرير بيانات التعريف يدويًا ، ولهذا فإن تنسيق xml مناسب بشكل أفضل. كانت الحجة الثانية لصالح xml هي وجود جميع الفئات اللازمة في JDK ، مما أتاح إيقاف القتال مع مكتبة خارجية. بسرور كبير نقلت جميع البيانات الوصفية من json إلى xml وشرعت في تحرير منطق الإكمال التلقائي.
مثال البيانات الوصفية<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <tableRelations> <tableRelation> <leftTable>dim_account</leftTable> <rightTable>dim_partner</rightTable> <joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/> <joinColumnPair leftColumn="src_id" rightColumn="src_id"/> </tableRelation> <tableRelation> <leftTable>dim_account</leftTable> <rightTable>dim_branch</rightTable> <joinColumnPair leftColumn="src_id" rightColumn="src_id"/> <joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/> </tableRelation> </tableRelations>
نتيجة لذلك ، قمت
بإجراء تغييرات على فئات SQLUtils و SQLCompletionAnalyzer. الفكرة هي: إذا فشل البرنامج في العثور على جمل تكميلية تلقائية مناسبة وفقًا للمنطق الأساسي ، فإنه يتحقق من الصلات المحتملة باستخدام ملف xml خارجي. يحتوي الملف نفسه على أزواج من الجداول تشير إلى الحقول التي يجب ربط هذه الجداول بها. يتم تعيين القيود على تواريخ الصلاحية الفنية لإدخالات eff_dttm و exp_dttm وعلم الحذف المنطقي delete_ind افتراضيًا.
عندما تم إجراء تغييرات على الكود ، ظهر السؤال - من سيملأ ملف البيانات الوصفية؟ يوجد الكثير من الكيانات في المستودع ؛ ومن غير المربح تسجيل جميع الاتصالات بنفسك. في النهاية ، قررت تعليق هذه المهمة على زملائي المحللين. تم تحميل ملف البيانات الوصفية إلى svn ، حيث يتم إجراء تسجيل الخروج في دليل محلي مع البرنامج. المبدأ هو هذا: كيان جديد قد ظهر في المستودع؟ يتيح أحد المحللين إمكانية الربط بالملف ، ويلتزم بإجراء التغييرات ، ويقوم الباقون بالتحقق من أنفسهم والتمتع بالإكمال التلقائي للعمل: المجتمع ، وتراكم المعرفة ، وكل ذلك. عقدت ورشة عمل للزملاء حول استخدام البرنامج ، وكتب مقال في التقاء - والآن لدى الشركة أكثر من أداة واحدة مريحة.
أعطاني العمل في هذه الميزة فهمًا مفاده أنه يجب ألا يخاف المرء من اختيار مشاريع مفتوحة المصدر - كقاعدة عامة ، لديهم بنية واضحة ، وحتى المعرفة الأساسية باللغة ستكون كافية للتجارب. ومع درجة معينة من المثابرة ، يمكنك حتى التخلص من العمليات الروتينية المكروهة ، مما يوفر لك الوقت للتجارب الجديدة.