Kā pārtraukt darīt to paŔu

Vai jums patÄ«k atkārtot rutÄ«nas darbÄ«bas atkal un atkal? Tāpēc man nav. Bet katru reizi SQL klientā, strādājot ar Rostelecom krātuvi, man bija manuāli jāreÄ£istrē visi savienojumi starp tabulām. Un tas neskatoties uz to, ka 90% gadÄ«jumu tabulu savienoÅ”anas lauki un nosacÄ«jumi sakrita no pieprasÄ«juma lÄ«dz pieprasÄ«jumam! Å Ä·iet, ka jebkuram SQL klientam ir automātiskās pabeigÅ”anas funkcijas, taču krātuvēm tas ne vienmēr darbojas: tie reti ietver unikālu ierobežojumu un ārējo atslēgu, lai uzlabotu veiktspēju, un bez tā programma nezinās, kā entÄ«tijas ir saistÄ«tas ar katru. citi un ko tas var sniegt jÅ«su labā.

Kā pārtraukt darīt to paŔu

PārdzÄ«vojis noliegumu, dusmas, kaulÄ“Å”anos, depresiju un tuvojoties pieņemÅ”anai, nolēmu ā€“ kāpēc gan paÅ”am nemēģināt ieviest automātisko aizpildÄ«Å”anu ar blekdžeku un nedarÄ«t to pareizi? Es izmantoju dbeaver klientu, kas rakstÄ«ts java, tam ir atvērtā koda kopienas versija. Ir nobriedis vienkārÅ”s plāns:

  1. Atrodiet avota kodā klases, kas ir atbildīgas par automātisko pabeigŔanu
  2. Novirziet tos darbam ar ārējiem metadatiem un iegÅ«stiet informāciju par pievienoÅ”anos no turienes
  3. ??
  4. PEĻŅA

Pirmo punktu izdomāju diezgan ātri - kļūdu izsekotājā atradu lÅ«gumu pielāgot automātisko aizpildÄ«Å”anu un saistÄ«tajā apņemties atklāja SQLCompletionAnalyzer klasi. Es paskatÄ«jos uz kodu un tas ir tas, kas man vajadzÄ«gs. Atliek tikai to pārrakstÄ«t, lai viss darbotos. SagaidÄ«ju brÄ«vu vakaru un sāku domāt par ievieÅ”anu. Es nolēmu uzrakstÄ«t tabulas saiÅ”u noteikumus (metadatus) json valodā. Man nebija praktiskas pieredzes darbā ar Å”o formātu, un paÅ”reizējais uzdevums tika uzskatÄ«ts par iespēju labot Å”o izlaidumu.

Lai strādātu ar json, es nolēmu izmantot bibliotēku json-vienkārÅ”s no Google. Å eit sākās pārsteigumi. Kā izrādÄ«jās, dbeaver kā patiesa lietojumprogramma tika uzrakstÄ«ta uz Eclipse platformas, izmantojot OSGi ietvaru. PieredzējuÅ”iem izstrādātājiem Ŕī lieta atvieglo atkarÄ«bu pārvaldÄ«bu, bet man tā bija vairāk kā tumŔā maÄ£ija, kurai es acÄ«mredzami nebiju gatavs: kā parasti, es importēju vajadzÄ«gās klases no json-simple bibliotēkas galvenē. rediģēto klasi, norādiet to pom.xml, pēc kura projekts kategoriski atsakās normāli salikt un avarē ar kļūdām.

Beigās man izdevās izlabot bÅ«vÄ“Å”anas kļūdas: es reÄ£istrēju bibliotēku nevis pom.xml, bet manifest.mf manifestā, kā to prasa OSGI, vienlaikus norādot to kā import-package. Nav tas skaistākais risinājums, bet darbojas. Tad parādÄ«jās nākamais pārsteigums. Ja izstrādājat Intellij Idea, jÅ«s nevarat vienkārÅ”i sākt atkļūdot savu projektu, pamatojoties uz Eclipse platformu: nepieredzējuÅ”am izstrādātājam vajadzētu ciest ne mazāk kā analÄ«tiÄ·im bez vaicājuma pabeigÅ”anas. PaÅ”i bebru izstrādātāji nāca palÄ«gā, viki norādot visas dejas ar tamburÄ«nu, kas jāizpilda. Pats kaitinoŔākais ir tas, ka pat pēc visiem Å”iem squats projekts nevēlējās tikt palaists atkļūdoÅ”anā ar json bibliotēku, kas savienota ar importa pakotni (neskatoties uz to, ka tā joprojām tika veiksmÄ«gi samontēta gatavajā produktā).

LÄ«dz tam laikam es jau biju sapratis neērtÄ«bas, ko rada json izmantoÅ”ana savam uzdevumam - galu galā metadati bija jārediģē manuāli, un xml formāts tam ir labāk piemērots. Otrs arguments par labu xml bija visu nepiecieÅ”amo klaÅ”u klātbÅ«tne JDK, kas ļāva pārtraukt cīņu ar ārēju bibliotēku. Ar lielu prieku pārsÅ«tÄ«ju visus metadatus no json uz xml un sāku rediģēt automātiskās pabeigÅ”anas loÄ£iku.

Metadatu piemērs

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

Rezultātā es veiktas izmaiņas SQLUtils un SQLCompletionAnalyzer klasēs. Ideja ir Ŕāda: ja programma nevarēja atrast piemērotus automātiskās pabeigÅ”anas ieteikumus, izmantojot pamata loÄ£iku, tā pārbauda iespējamo savienojumu klātbÅ«tni, izmantojot ārēju xml failu. PaŔā failā tiek saglabāti tabulu pāri, kas norāda laukus, ar kuriem Ŕīs tabulas ir jāsaista. Ierakstu eff_dttm un exp_dttm tehnisko derÄ«guma datumu un loÄ£iskās dzÄ“Å”anas karoga deleted_ind ierobežojumi ir iestatÄ«ti pēc noklusējuma.

Kad tika veiktas izmaiņas kodā, radās jautājums ā€“ kurÅ” aizpildÄ«s failu ar metadatiem? Repozitorijā ir daudz entÄ«tiju, ir dārgi paÅ”am reÄ£istrēt visus savienojumus. Rezultātā es nolēmu uzticēt Å”o uzdevumu saviem kolēģiem analÄ«tiÄ·iem. Es ievietoju metadatu failu svn, no kurienes tiek veikta izrakstÄ«Å”anās uz vietējo direktoriju ar programmu. Princips ir Ŕāds: vai repozitorijā ir parādÄ«jusies jauna entÄ«tija? Viens analÄ«tiÄ·is failā ievada iespējamos savienojumus, veic izmaiņas, pārējie pārbauda paÅ”i un izbauda darba automātisko pabeigÅ”anu: kopienu, zināŔanu uzkrāŔanu un visu to. NovadÄ«ja semināru par programmas lietoÅ”anu kolēģiem, uzrakstÄ«ja rakstu Confluence - tagad uzņēmumam ir vēl viens ērtāks rÄ«ks.

Strādājot pie Ŕīs funkcijas, es sapratu, ka nav jābaidās Ä·erties pie atvērtā pirmkoda projektiem ā€“ tiem parasti ir skaidra arhitektÅ«ra, un eksperimentiem pietiks pat valodas pamatzināŔanām. Un ar zināmu neatlaidÄ«bu jÅ«s pat varēsit atbrÄ«voties no ienÄ«stām ikdienas operācijām, ietaupot laiku jauniem eksperimentiem.

Avots: www.habr.com

Pievieno komentāru