Unsaon paghunong sa pagbuhat sa samang butang

Ganahan ka ba nga balik-balikon ang naandan nga mga operasyon? So dili ko. Apan sa matag higayon sa kliyente sa SQL kung nagtrabaho kauban ang pagtipig sa Rostelecom, kinahanglan nako nga irehistro ang tanan nga mga pagdugtong taliwala sa mga lamesa nga mano-mano. Ug kini bisan pa sa kamatuoran nga sa 90% sa mga kaso ang mga uma ug mga kondisyon alang sa pag-apil sa mga lamesa nagdungan gikan sa pangutana ngadto sa pangutana! Mopatim-aw nga ang bisan unsang kliyente sa SQL adunay mga function sa auto-completion, apan alang sa mga pagtipig dili kini kanunay nga molihok: panagsa ra nila gilakip ang talagsaon nga pagpugong ug langyaw nga yawe aron mapauswag ang pasundayag, ug kung wala kini ang programa dili mahibal-an kung giunsa ang mga entidad adunay kalabotan sa matag usa. uban pa ug kung unsa ang mahimo niini alang sa imong gitanyag.

Unsaon paghunong sa pagbuhat sa samang butang

Nakaagi sa pagdumili, kasuko, bargaining, depresyon ug nagkaduol nga pagdawat, nakahukom ko - nganong dili sulayan nga ipatuman ang autofill sa blackjack sa akong kaugalingon ug buhaton kini sa husto nga paagi? Gigamit nako ang kliyente sa dbeaver, gisulat sa java, kini adunay bukas nga gigikanan nga bersyon sa komunidad. Usa ka yano nga plano nahamtong:

  1. Pangitag mga klase sa source code nga maoy responsable sa autocompletion
  2. I-redirect sila aron magtrabaho uban ang eksternal nga metadata ug kuhaa ang kasayuran bahin sa mga pag-apil gikan didto
  3. ???
  4. kapuslanan

Dali nakong nahibal-an ang una nga punto - nakit-an nako ang usa ka hangyo sa tracker sa bug aron ma-adjust ang autofill ug sa mga may kalabutan pasalig nakit-an ang klase sa SQLCompletionAnalyzer. Gitan-aw nako ang code ug kini ang akong kinahanglan. Ang nahabilin mao ang pagsulat pag-usab aron ang tanan molihok. Naghulat ako alang sa usa ka libre nga gabii ug nagsugod sa paghunahuna sa pagpatuman. Nakahukom ko nga isulat ang mga lagda sa pag-link sa lamesa (metadata) sa json. Wala akoy praktikal nga kasinatian sa pagtrabaho niini nga pormat ug ang kasamtangan nga buluhaton nakita nga usa ka oportunidad sa pagtul-id niini nga pagkawala.

Aron magtrabaho kauban si json nakahukom ko nga gamiton ang librarya json-simple gikan sa Google. Dinhi nagsugod ang mga surpresa. Ingon sa nahimo, ang dbeaver, ingon usa ka tinuud nga aplikasyon, gisulat sa platform sa Eclipse gamit ang balangkas sa OSGi. Alang sa mga eksperyensiyado nga mga developer, kini nga butang naghimo nga sayon ​​​​sa pagdumala sa mga dependency, apan alang kanako kini sama sa itom nga salamangka, nga klaro nga dili ako andam: sama sa naandan, akong gi-import ang mga klase nga akong gikinahanglan gikan sa json-simple nga librarya sa ulohan sa ang gi-edit nga klase, espesipiko kini sa pom.xml, pagkahuman ang proyekto hingpit nga nagdumili sa pag-assemble sa normal ug nahagsa sa mga sayup.

Sa katapusan, nakahimo ako sa pag-ayo sa mga sayop sa pagtukod: Girehistro nako ang librarya dili sa pom.xml, apan sa manifest.mf manifest, sumala sa gikinahanglan sa OSGI, samtang gipiho kini isip import-package. Dili ang labing nindot nga solusyon, apan kini molihok. Unya mitungha ang sunod nga surpresa. Kung nag-develop ka sa Intellij Idea, dili ka mahimo nga moadto ug magsugod sa pag-debug sa imong proyekto base sa eclipse platform: ang usa ka walay kasinatian nga developer kinahanglan nga mag-antus dili moubos sa usa ka analista nga wala’y pagkompleto sa pangutana. Ang mga nag-develop sa beaver mismo mitabang, nga nagpakita sa wiki sa tanan nga mga sayaw nga adunay tamburin nga kinahanglan buhaton. Ang labing makalagot nga butang mao nga bisan human niining tanan nga mga squats, ang proyekto dili gusto nga ilunsad sa debug uban sa json library nga konektado pinaagi sa import-package (bisan pa sa kamatuoran nga kini malampuson gihapon nga gitigum ngadto sa nahuman nga produkto).

Nianang panahona, nakaamgo na ko sa kahasol sa paggamit sa json alang sa akong buluhaton - human sa tanan, ang metadata kinahanglan nga i-edit sa mano-mano, ug ang xml format mas haum alang niini. Ang ikaduha nga argumento pabor sa xml mao ang presensya sa tanan nga gikinahanglan nga mga klase sa JDK, nga nagpaposible sa paghunong sa pagpakig-away sa usa ka eksternal nga librarya. Uban sa dakong kalipay, akong gibalhin ang tanang metadata gikan sa json ngadto sa xml ug gisugdan ang pag-edit sa autocomplete logic.

Pananglitan sa metadata

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

Ingon usa ka sangputanan ako naghimo og mga kausaban ngadto sa mga klase sa SQLUtils ug SQLCompletionAnalyzer. Ang ideya mao kini: kung ang programa wala makapangita sa angay nga autocomplete nga mga sugyot gamit ang sukaranan nga lohika, nan kini nagsusi sa presensya sa posible nga pag-apil gamit ang usa ka eksternal nga xml file. Ang file mismo nagtipig sa mga pares sa mga lamesa nga nagpakita sa mga natad diin kini nga mga lamesa kinahanglan nga masumpay. Ang mga pagdili sa teknikal nga balido nga petsa sa mga rekord nga eff_dttm ug exp_dttm ug ang lohikal nga pagtangtang nga bandila deleted_ind gitakda nga default.

Kung gihimo ang mga pagbag-o sa code, mitungha ang pangutana - kinsa ang mopuno sa file sa metadata? Adunay daghang mga entidad sa repository, mahal ang pagparehistro sa tanan nga mga koneksyon sa imong kaugalingon. Ingon usa ka sangputanan, nakahukom ako nga ihatag kini nga buluhaton sa akong kauban nga mga analista. Gi-post nako ang metadata file sa svn, gikan diin ang usa ka checkout gihimo sa lokal nga direktoryo nga adunay programa. Ang prinsipyo mao kini: adunay bag-ong entidad nga nagpakita sa repository? Ang usa ka analista mosulod sa posible nga pag-apil sa file, maghimo mga pagbag-o, ang uban magsusi sa ilang kaugalingon ug malingaw sa pagtrabaho nga auto-completion: komunidad, panagtigum sa kahibalo ug tanan nga. Naghimo usa ka workshop sa paggamit sa programa alang sa mga kauban, nagsulat usa ka artikulo sa Confluence - karon ang kompanya adunay usa nga labi ka dali nga himan.

Ang pagtrabaho sa kini nga bahin naghatag kanako sa pagsabut nga dili kinahanglan nga mahadlok nga mag-tinker sa mga bukas nga gigikanan nga mga proyekto - ingon usa ka lagda, sila adunay usa ka tin-aw nga arkitektura, ug bisan ang sukaranan nga kahibalo sa sinultian igo na alang sa mga eksperimento. Ug sa usa ka piho nga kantidad sa pagpadayon, mahimo nimong mapapas ang dili gusto nga naandan nga mga operasyon, nga makatipig oras sa imong kaugalingon alang sa mga bag-ong eksperimento.

Source: www.habr.com

Idugang sa usa ka comment