Kas sa armastad rutiinseid toiminguid jĂ€rjestikku kordama? Mina kindlasti mitte. Kuid iga kord, kui töötasin Rostelecomi andmebaasis SQL-kliendis, pidin kirjutama kĂ”ik tabelite ĂŒhendused kĂ€sitsi. Ja sellegipoolest, 90% juhtudest olid tabelite ĂŒhendamise vĂ€ljad ja tingimused iga pĂ€ringu puhul samad! Tundub, et igal SQL-kliendil on automaatse tĂ€itmise funktsioonid, kuid andmebaasides ei tööta see alati: seal on harva unikaalsed piirangud ja vĂ€lisvĂ”tmed tulemuslikkuse suurendamiseks, ning ilma nendeta ei tea programm, kuidas entiteedid omavahel seotud on ja mida ta sulle pakkuda saab.
PĂ€rast eitamist, viha, kauplemist, depressiooni ja lĂ€henemist aktsepteerimisele otsustasin â miks mitte proovida automatiseeritud tĂ€itmist mustade kaartide ja kĂ”igi asjadega? Kasutan Java-s kirjutatud dbeaveri klienti, millel on avatud lĂ€htekoodiga kogukonna versioon. Olin vĂ€lja mĂ”elnud lihtsa plaani:
- Leida avatud koodi klassid, mis vastutavad automaatse tÀitmise eest
- Suunata need töötama vĂ€liste metaandmete kallal ja tĂ”mmata sealt ĂŒhenduste kohta teavet
- ??????
- PROFIT
Esimese punktiga sain piisavalt kiiresti hakkama â leidsin veaaruandest soovi automaatse tĂ€itmise kohandamiseks ja seotud avastasin klassi SQLCompletionAnalyzer. Vaatasin koodi â tĂ€pselt see, mida vajan. JĂ€i ĂŒle see ĂŒmber kirjutada, et kĂ”ik töötaks. Ootasin vaba Ă”htut ja hakkasin teostust lĂ€bi mĂ”tlema. Tabelite seosereeglid (metaandmed) otsustasin viia json-formaadis. Mul ei olnud selle formaadi suhtes praktilisi kogemusi ja praegune ĂŒlesanne tundus vĂ”imalus selle puudujÀÀgi parandamiseks.
JSON-i töötlemiseks otsustasin kasutada teeki Googlest. Siin hakkasid ĂŒllatused pihta. Kuidas selgus, on dbeaver, nagu tĂ”eline rakendus, kirjutatud Eclipse'i platvormil kasutades OSGi raamistikku. Kogemustega arendajatele pakub see mugavust sĂ”ltuvuste haldamisel, ent minu jaoks nĂ€is see rohkem tumeda maagia sarnane, millega ma kindlasti ei olnud valmis tegelema: tavaliselt kirjutan vajalike klasside impordi json-simple teegist redigeeritava klassi pealkirja, mÀÀran selle pom.xml-is, kuid seejĂ€rel keeldub projekt normaalselt kogunemast ja kukub vigadega kokku.
Kohandmine ehitusvigu lĂ”puks selgus: ma registreerisin teegi mitte pom.xml-is, vaid manifest.mf-is, nagu nĂ”uab OSGI, mĂ€rkides selle import-package'ina. See pole kĂ”ige kaunim lahendus, aga töötab. Siin ilmus jĂ€rgmine ĂŒllatus. Kui sa teed arendust intellij idea's, ei saa lihtsalt niisama vĂ”tta ja kĂ€ivitada oma projekti hÀÀlestust, mis pĂ”hineb eclipse'i platvormil: kogenematu arendaja peab kannatama mitte vĂ€hem kui analĂŒĂŒtik ilma automaatse pĂ€ringu tĂ€iendamiseta. Appi tulid isegi bobri arendajad, kes on wikis vĂ€lja toonud kĂ”ik nende tantsud, mida on vaja teha. KĂ”ige kurvem on see, et isegi pĂ€rast kĂ”iki neid hĂŒppeid ei soovinud projekt kĂ€ivituda hÀÀlestuses import-package kaudu laaditud json teegiga (kuigi valmis toode kogunes endiselt edukalt).
Sel hetkel olin juba tundnud ebamugavust json'i kasutamisest minu ĂŒlesande jaoks â lĂ”puks pidi metaandmeid kĂ€sitsi redigeerima, ja selleks sobib xml formaat paremini. Teiseks argumendiks xml kasuks oli vajalikud klassid, mis olid olemas JDK-s, mis vĂ”imaldas lĂ”petada vĂ€lise teegi vĂ”itluse. Suure rÔÔmuga kolisin kĂ”ik metaandmed json'ist xml'i ja hakkasin autofill loogika redigeerimisega tegelema.
Metaandmete nÀide
dim_account
dim_partner
dim_account
dim_branchKokkuvĂ”ttes ma SQLUtils ja SQLCompletionAnalyzer klassidesse. Idee on jĂ€rgmine: kui programm ei suutnud leida sobivaid autofill ettepanekuid aluselogi jĂ€rgi, kontrollib see vĂ”imalike ĂŒhenduste olemasolu vĂ€lises xml failis. Failis hoitakse tabelite paare koos vĂ€lja nimedega, mille kaudu need tabelid tuleb seostada. Tehniliste kuupĂ€evade piirangud registreerimise eff_dttm ja exp_dttm ning loogilise kustutamise flaga deleted_ind on seejuures vaikimisi seadistatud.
Kui koodimuudatused on tehtud, tekkis kĂŒsimus - kes hakkab tĂ€itma metadata faili? Andmehoidlas on palju objekte ja kĂ”iki seoseid ise ĂŒles kirjutada on tĂŒlikas. LĂ”puks otsustasin selle ĂŒlesande oma kolleegidele analĂŒĂŒtikutele anda. Metaandmete faili panin svn-i, kust tehakse checkout kohalikku kausta programmiga. PĂ”himĂ”te on selline: kui andmehoidlas tekib uus objekt? Ăks analĂŒĂŒtik lisab faili vĂ”imalikud seosed, kommitab muudatused, teised teevad checkout enda juurde ja naudivad töötavat automaatset tĂ€itmist: kogukond, teadmiste kogumine ja kĂ”ik selline. Kolleegidele tegin töötoa programmi kasutamiseks, kirjutasin artikli Confluence'i - nĂŒĂŒd on firmas ĂŒks mugavam tööriist rohkem.
Töö selle funktsiooni kallal andis mulle aru, et ei tasu karta avatud lÀhtekoodiga projektides nurgataguste kaevamist - tavaliselt on neil arusaadav arhitektuur ja isegi baaskeele teadmised on katsetamiseks piisavad. Ja teatud mÀÀral visadust kasutades saab lahti unustatud rutiinsetest operatsioonidest, sÀÀstes aega uute katsetuste jaoks.
Allikas: habr.com
