Kif tieqaf tagħmel l-istess ħaġa

Tħobb tirrepeti operazzjonijiet ta' rutina għal darb'oħra? Allura jien ma. Imma kull darba fil-klijent SQL meta naħdem mal-ħażna Rostelecom, kelli nirreġistra l-joints kollha bejn it-tabelli manwalment. U dan minkejja l-fatt li f'90% tal-każijiet l-oqsma u l-kundizzjonijiet biex tgħaqqad it-tabelli ħabtu minn mistoqsija għal mistoqsija! Jidher li kwalunkwe klijent SQL għandu funzjonijiet ta 'awto-kompletazzjoni, iżda għall-ħażniet mhux dejjem jaħdem: rari jinkludu restrizzjoni unika u ċavetta barranija sabiex titjieb il-prestazzjoni, u mingħajr dan il-programm ma jkunx jaf kif l-entitajiet huma relatati ma' kull wieħed. oħra u dak li jista 'jagħmel għalik toffri.

Kif tieqaf tagħmel l-istess ħaġa

Wara li għaddejt minn ċaħda, rabja, negozjar, dipressjoni u riesaq lejn l-aċċettazzjoni, iddeċidejt - għaliex ma nipprovax nimplimenta l-autofill bil-blackjack jien stess u nagħmel dan bil-mod it-tajjeb? Jiena nuża l-klijent dbeaver, miktub bil-java, għandu verżjoni tal-komunità ta 'sors miftuħ. Pjan sempliċi mmatura:

  1. Sib klassijiet fil-kodiċi sors li huma responsabbli għall-awtokompletazzjoni
  2. Idderieġihom mill-ġdid biex jaħdmu b'metadejta esterna u iġbed l-informazzjoni dwar il-joints minn hemm
  3. ??????
  4. QLIGĦ

I dehret l-ewwel punt pjuttost malajr - sibt talba fil-bug tracker biex taġġusta l-autofill u fil-relatat jikkommettu skoprew il-klassi SQLCompletionAnalyzer. Ħarist lejn il-kodiċi u huwa dak li għandi bżonn. Fadal biss li terġa’ tiktebha biex kollox jaħdem. Stennejt għal lejla ħielsa u bdejt naħseb fl-implimentazzjoni. Iddeċidejt li nikteb ir-regoli tal-link tat-tabella (metadata) f'json. Ma kelli l-ebda esperjenza prattika ta' xogħol b'dan il-format u l-kompitu attwali kien meqjus bħala opportunità biex jikkoreġi din l-ommissjoni.

Biex naħdem ma 'json iddeċidejt li nuża l-librerija json-sempliċi minn Google. Minn hawn bdew is-sorpriżi. Kif irriżulta, dbeaver, bħala applikazzjoni vera, inkiteb fuq il-pjattaforma Eclipse bl-użu tal-qafas OSGi. Għall-iżviluppaturi b'esperjenza, din il-ħaġa tagħmilha konvenjenti li timmaniġġja d-dipendenzi, iżda għalija kienet aktar bħal maġija skura, li b'mod ċar ma kontx lest għaliha: bħas-soltu, jien jimporta l-klassijiet li għandi bżonn mil-librerija json-sempliċi fl-intestatura ta ' il-klassi editjata, speċifikaha fil-pom.xml, wara li l-proġett jirrifjuta kategorikament li jiġbor b'mod normali u jiġġarraf bi żbalji.

Fl-aħħar, irnexxieli nirranġa l-iżbalji tal-bini: irreġistrajt il-librerija mhux f'pom.xml, iżda fil-manifest.mf manifest, kif meħtieġ mill-OSGI, filwaqt li speċifikajt bħala pakkett ta 'importazzjoni. Mhux l-isbaħ soluzzjoni, iżda taħdem. Imbagħad dehret is-sorpriża li jmiss. Jekk qed tiżviluppa f'Intellij Idea, ma tistax sempliċement tmur u tibda tiddibaggja l-proġett tiegħek ibbażat fuq il-pjattaforma eclipse: żviluppatur mingħajr esperjenza għandu jbati xejn inqas minn analista mingħajr it-tlestija tal-mistoqsija. L-iżviluppaturi tal-kasturi nfushom ġew għas-salvataġġ, u indikaw fil-wiki iż-żfin kollha b'tambourine li jeħtieġ li jsiru. L-iktar ħaġa tedjanti hija li anke wara dawn l-isquats kollha, il-proġett ma riedx li jiġi mniedi fid-debug bil-librerija json konnessa permezz ta 'pakkett ta' importazzjoni (minkejja l-fatt li kien għadu mmuntat b'suċċess fil-prodott lest).

Sa dak iż-żmien, kont diġà rrealizzajt l-inkonvenjenza li nuża json għall-kompitu tiegħi - wara kollox, il-metadata suppost kellha tiġi editjata manwalment, u l-format xml huwa aktar adattat għal dan. It-tieni argument favur xml kien il-preżenza tal-klassijiet kollha meħtieġa fil-JDK, li għamilha possibbli li tieqaf tiġġieled ma 'librerija esterna. Bi pjaċir kbir, ittrasferijt il-metadata kollha minn json għal xml u bdejt neditja l-loġika tal-awtokompletazzjoni.

Eżempju ta' 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>

Bħala riżultat I għamel bidliet fil-klassijiet SQLUtils u SQLCompletionAnalyzer. L-idea hija din: jekk il-programm ma setax isib suġġerimenti ta 'awtocomplete xierqa bl-użu tal-loġika bażika, allura jiċċekkja għall-preżenza ta' tingħaqad possibbli permezz ta 'fajl xml estern. Il-fajl innifsu jaħżen pari ta' tabelli li jindikaw l-oqsma li bihom dawn it-tabelli jeħtieġ li jiġu konnessi. Ir-restrizzjonijiet fuq id-dati ta' validità teknika tar-rekords eff_dttm u exp_dttm u l-marka tat-tħassir loġiku deleted_ind huma stabbiliti b'mod awtomatiku.

Meta saru bidliet fil-kodiċi, qamet il-mistoqsija - min se jimla l-fajl bil-metadata? Hemm ħafna entitajiet fir-repożitorju, huwa għali li tirreġistra l-konnessjonijiet kollha lilek innifsek. Bħala riżultat, iddeċidejt li nagħmel dan il-kompitu lill-analisti sħabi. Poġġejt il-fajl tal-metadata f'svn, minn fejn isir checkout għad-direttorju lokali bil-programm. Il-prinċipju huwa dan: dehret entità ġdida fir-repożitorju? Analista wieħed jidħol possibbli jingħaqad fil-fajl, jikkommetti bidliet, il-bqija jiċċekkjaw lilhom infushom u jgawdu l-awto-tlestija tax-xogħol: komunità, akkumulazzjoni ta 'għarfien u dak kollu. Mexxa workshop dwar l-użu tal-programm għall-kollegi, kiteb artiklu f'Confluence - issa l-kumpanija għandha għodda waħda aktar konvenjenti.

Il-ħidma fuq din il-karatteristika tatni l-fehim li m'hemmx għalfejn nibża' li tpinġi proġetti ta 'sors miftuħ - bħala regola, għandhom arkitettura ċara, u anke għarfien bażiku tal-lingwa se jkun biżżejjed għall-esperimenti. U b'ċertu ammont ta 'persistenza, int saħansitra tkun tista' teħles minn operazzjonijiet ta 'rutina mibegħda, u tiffranka ħin lilek innifsek għal esperimenti ġodda.

Sors: www.habr.com

Żid kumment