Eyni şeyi etməyi necə dayandırmaq olar

Rutin əməliyyatları təkrar-təkrar təkrarlamağı xoşlayırsınız? Mən yox. Ancaq hər dəfə SQL müştərisində Rostelecom yaddaşı ilə işləyərkən cədvəllər arasındakı bütün birləşmələri əl ilə qeyd etməli oldum. Və bu baxmayaraq ki, 90% hallarda cədvəllərə qoşulma sahələri və şərtləri sorğudan sorğuya üst-üstə düşür! Görünür ki, hər hansı bir SQL müştərisinin avtomatik tamamlama funksiyaları var, lakin saxlama üçün həmişə işləmir: performansı yaxşılaşdırmaq üçün nadir hallarda unikal məhdudiyyət və xarici açar daxildir və bunsuz proqram subyektlərin hər biri ilə necə əlaqəli olduğunu bilməyəcək. digər və sizin üçün nə edə bilər.

Eyni şeyi etməyi necə dayandırmaq olar

İnkar, qəzəb, sövdələşmə, depressiya və qəbula yaxınlaşaraq qərara gəldim - niyə özüm blackjack ilə avtomatik doldurma tətbiq etməyə və bunu düzgün şəkildə etməyə çalışmayaq? Mən java-da yazılmış dbeaver müştərisindən istifadə edirəm, onun açıq mənbə icma versiyası var. Sadə bir plan yetişdi:

  1. Mənbə kodunda avtomatik tamamlamadan məsul olan sinifləri tapın
  2. Xarici metadata ilə işləmək üçün onları yönləndirin və oradan birləşmələr haqqında məlumatı çəkin
  3. ??
  4. MƏNFƏƏT

Birinci nöqtəni çox tez başa düşdüm - səhv izləyicisində avtomatik doldurmanı tənzimləmək üçün bir sorğu tapdım və əlaqəli törətmək SQLCompletionAnalyzer sinfini kəşf etdi. Koda baxdım və mənə lazım olan budur. Hər şeyin işləməsi üçün onu yenidən yazmaq qalır. Pulsuz bir axşam gözlədim və həyata keçirməyi düşünməyə başladım. Cədvəl keçid qaydalarını (metadata) json-da yazmağa qərar verdim. Bu formatla işləmək üçün praktiki təcrübəm yox idi və cari tapşırıq bu nöqsanı düzəltmək üçün bir fürsət kimi qəbul edildi.

json ilə işləmək üçün kitabxanadan istifadə etmək qərarına gəldim json-sadə Google-dan. Burada sürprizlər başladı. Məlum oldu ki, dbeaver əsl tətbiq kimi OSGi çərçivəsindən istifadə edərək Eclipse platformasında yazılmışdır. Təcrübəli tərtibatçılar üçün bu şey asılılıqları idarə etməyi rahatlaşdırır, amma mənim üçün bu, daha çox qaranlıq sehr kimi idi, mən açıq şəkildə buna hazır deyildim: həmişəki kimi, mən lazım olan sinifləri json-simple kitabxanasının başlığında idxal edirəm. redaktə edilmiş sinif, onu pom.xml-də göstərin, bundan sonra layihə normal yığılmaqdan qəti şəkildə imtina edir və səhvlərlə çökür.

Sonda quraşdırma xətalarını düzəldə bildim: kitabxananı pom.xml-də deyil, OSGI-nin tələb etdiyi kimi manifest.mf manifestində idxal-paket kimi göstərərək qeydiyyatdan keçirdim. Ən gözəl həll deyil, amma işləyir. Sonra növbəti sürpriz peyda oldu. Əgər siz Intellij Idea-da inkişaf edirsinizsə, sadəcə gedib Eclipse platforması əsasında layihənizi sazlamağa başlaya bilməzsiniz: təcrübəsiz tərtibatçı sorğunu tamamlamadan analitikdən az əziyyət çəkməlidir. Qunduz tərtibatçılarının özləri köməyə gəldilər, vikidə edilməsi lazım olan bir dəf ilə bütün rəqsləri göstərdilər. Ən bezdiricisi odur ki, bütün bu çömbəlmələrdən sonra belə, layihə idxal-paket vasitəsilə qoşulmuş json kitabxanası ilə (hələ də hazır məhsula uğurla yığılmasına baxmayaraq) debugda işə salınmaq istəmədi.

O vaxta qədər mən öz tapşırığım üçün json istifadə etməyin narahatlığını artıq başa düşmüşdüm - axı metadata əl ilə redaktə edilməli idi və xml formatı bunun üçün daha uyğundur. Xml lehinə ikinci arqument JDK-da bütün zəruri siniflərin olması idi ki, bu da xarici kitabxana ilə mübarizəni dayandırmağa imkan verdi. Böyük məmnuniyyətlə bütün metaməlumatları json-dan xml-ə köçürdüm və avtomatik tamamlama məntiqini redaktə etməyə başladım.

Metadata nümunəsi

<?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>

Nəticədə İ dəyişikliklər etdi SQLUtils və SQLCompletionAnalyzer siniflərinə. İdeya budur: proqram əsas məntiqdən istifadə edərək uyğun avtomatik tamamlama təkliflərini tapa bilmədisə, o zaman xarici xml faylından istifadə edərək mümkün birləşmələrin olub olmadığını yoxlayır. Faylın özü bu cədvəllərin əlaqələndirilməsi lazım olan sahələri göstərən cədvəl cütlərini saxlayır. eff_dttm və exp_dttm qeydlərinin texniki etibarlılıq tarixlərinə məhdudiyyətlər və deleted_ind məntiqi silmə bayrağı defolt olaraq təyin edilir.

Koda dəyişikliklər edildikdə, sual yarandı - faylı metadata ilə kim dolduracaq? Anbarda bir çox qurum var, bütün əlaqələri özünüz qeydiyyatdan keçirmək bahadır. Nəticədə bu vəzifəni analitik yoldaşlarıma həvalə etmək qərarına gəldim. Mən metadata faylını svn-də yerləşdirdim, oradan proqramla yerli qovluğa yoxlama aparılır. Prinsip belədir: repozitoriyada yeni varlıq yaranıbmı? Bir analitik fayla mümkün birləşmələri daxil edir, dəyişikliklər edir, qalanları özlərini yoxlayır və işləyən avtomatik tamamlamadan həzz alır: icma, biliklərin toplanması və bütün bunlar. Həmkarları üçün proqramdan istifadə ilə bağlı seminar keçirdi, Confluence-də məqalə yazdı - indi şirkətin daha rahat bir aləti var.

Bu xüsusiyyət üzərində işləmək mənə belə bir anlayış verdi ki, açıq mənbəli layihələrlə məşğul olmaqdan qorxmaq lazım deyil - bir qayda olaraq, onlar aydın arxitekturaya malikdirlər və eksperimentlər üçün hətta əsas dil bilikləri də kifayət edəcəkdir. Və müəyyən bir əzmkarlıqla, hətta yeni təcrübələr üçün vaxtınıza qənaət edərək, nifrət edilən rutin əməliyyatlardan qurtula biləcəksiniz.

Mənbə: www.habr.com

Добавить комментарий