Jinsi ya kuacha kufanya kitu kimoja

Je, ungependa kurudia shughuli za kawaida tena na tena? Kwa hiyo sifanyi. Lakini kila wakati katika mteja wa SQL wakati wa kufanya kazi na hifadhi ya Rostelecom, nilipaswa kujiandikisha viungo vyote kati ya meza kwa manually. Na hii licha ya ukweli kwamba katika 90% ya kesi mashamba na masharti ya kujiunga na meza sanjari kutoka ombi ombi! Inaweza kuonekana kuwa mteja yeyote wa SQL ana kazi za kukamilisha kiotomatiki, lakini kwa uhifadhi haifanyi kazi kila wakati: mara chache hujumuisha kizuizi cha kipekee na ufunguo wa kigeni ili kuboresha utendaji, na bila hii programu haitajua jinsi vyombo vinahusiana na kila moja. nyingine na kile kinachoweza kukufanyia.

Jinsi ya kuacha kufanya kitu kimoja

Baada ya kupitia kukataa, hasira, kujadiliana, unyogovu na kukubalika kukaribia, niliamua - kwa nini nisijaribu kutekeleza kujaza kiotomatiki na blackjack mwenyewe na kuifanya kwa njia sahihi? Ninatumia mteja wa dbeaver, iliyoandikwa katika java, ina toleo la wazi la jamii. Mpango rahisi umekomaa:

  1. Tafuta madarasa katika msimbo wa chanzo ambayo yanawajibika kwa kukamilisha kiotomatiki
  2. Zielekeze upya zifanye kazi na metadata ya nje na uvute maelezo kuhusu viungio kutoka hapo
  3. ??????
  4. Faida

Niligundua jambo la kwanza haraka sana - nilipata ombi kwenye kifuatiliaji cha hitilafu ili kurekebisha ujazo otomatiki na unaohusiana. kujitolea aligundua darasa la SQLCompletionAnalyzer. Niliangalia nambari na ndio ninayohitaji. Kilichobaki ni kuandika upya ili kila kitu kifanye kazi. Nilisubiri jioni ya bure na nikaanza kufikiria juu ya utekelezaji. Niliamua kuandika sheria za kiunga cha jedwali (metadata) katika json. Sikuwa na uzoefu wa kufanya kazi na umbizo hili na kazi ya sasa ilionekana kama fursa ya kusahihisha upungufu huu.

Kufanya kazi na json niliamua kutumia maktaba json-rahisi kutoka Google. Hapa ndipo mshangao ulipoanzia. Kama ilivyotokea, dbeaver, kama maombi ya kweli, iliandikwa kwenye jukwaa la Eclipse kwa kutumia mfumo wa OSGi. Kwa watengenezaji wenye uzoefu, jambo hili linaifanya iwe rahisi kudhibiti utegemezi, lakini kwangu ilikuwa kama uchawi wa giza, ambao kwa wazi sikuwa tayari: kama kawaida, mimi huingiza darasa ninazohitaji kutoka kwa maktaba ya json-rahisi kwenye kichwa cha habari. darasa lililohaririwa, libainishe kwenye pom.xml, baada ya hapo mradi unakataa katakata kukusanyika kawaida na kugongana na hitilafu.

Mwishowe, nilifanikiwa kurekebisha hitilafu za muundo: Nilisajili maktaba si katika pom.xml, lakini katika faili ya manifest.mf, kama inavyotakiwa na OSGI, huku nikibainisha kama kifurushi cha kuingiza. Sio suluhisho nzuri zaidi, lakini inafanya kazi. Kisha mshangao uliofuata ulionekana. Ikiwa unakuza katika Intellij Idea, huwezi tu kwenda na kuanza kutatua mradi wako kulingana na jukwaa la kupatwa kwa jua: msanidi programu asiye na uzoefu anapaswa kuteseka sio chini ya mchambuzi bila kukamilika kwa hoja. Waendelezaji wa beaver wenyewe walikuja kuwaokoa, wakionyesha katika wiki ngoma zote na tambourini ambazo zinahitajika kufanywa. Jambo la kukasirisha zaidi ni kwamba hata baada ya squats hizi zote, mradi haukutaka kuzinduliwa kwa utatuzi na maktaba ya json iliyounganishwa kupitia kifurushi cha kuagiza (licha ya ukweli kwamba bado ilikusanywa kwa mafanikio kwenye bidhaa iliyokamilishwa).

Kufikia wakati huo, nilikuwa tayari nimegundua usumbufu wa kutumia json kwa kazi yangu - baada ya yote, metadata ilitakiwa kuhaririwa kwa mikono, na umbizo la xml linafaa zaidi kwa hili. Hoja ya pili iliyounga mkono xml ilikuwa uwepo wa madarasa yote muhimu katika JDK, ambayo ilifanya iwezekane kuacha kupigana na maktaba ya nje. Kwa furaha kubwa, nilihamisha metadata zote kutoka json hadi xml na kuanza kuhariri mantiki ya kukamilisha kiotomatiki.

Mfano wa 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>

Matokeo yake mimi alifanya mabadiliko kwenye madarasa ya SQLUtils na SQLCompletionAnalyzer. Wazo ni hili: ikiwa programu haikuweza kupata mapendekezo yanayofaa ya kukamilisha kiotomatiki kwa kutumia mantiki ya msingi, basi inakagua uwepo wa viungio vinavyowezekana kwa kutumia faili ya xml ya nje. Faili yenyewe huhifadhi jozi za meza zinazoonyesha sehemu ambazo meza hizi zinahitaji kuunganishwa. Vikwazo kwenye tarehe za uhalali wa kiufundi wa rekodi eff_dttm na exp_dttm na alama ya kimantiki ya kufuta deleted_ind huwekwa kwa chaguomsingi.

Wakati mabadiliko yalifanywa kwa nambari, swali liliibuka - ni nani atakayejaza faili na metadata? Kuna vyombo vingi kwenye hazina, ni ghali kusajili miunganisho yote mwenyewe. Kwa sababu hiyo, niliamua kuwapa kazi hii wachambuzi wenzangu. Nilichapisha faili ya metadata katika svn, kutoka ambapo malipo hufanywa kwa saraka ya ndani na programu. Kanuni ni hii: je, chombo kipya kimeonekana kwenye hifadhi? Mchambuzi mmoja anaingia kwenye faili zinazowezekana, anafanya mabadiliko, wengine wajiangalie wenyewe na wafurahie ukamilishaji otomatiki wa kufanya kazi: jamii, mkusanyiko wa maarifa na yote hayo. Ilifanya warsha juu ya kutumia programu kwa wenzake, aliandika makala katika Confluence - sasa kampuni ina chombo kimoja rahisi zaidi.

Kufanya kazi kwenye kipengele hiki kulinipa ufahamu kwamba hakuna haja ya kuogopa kutafakari na miradi ya chanzo wazi - kama sheria, wana usanifu wazi, na hata ujuzi wa kimsingi wa lugha utatosha kwa majaribio. Na kwa kiasi fulani cha kuendelea, utaweza hata kuondokana na shughuli za kawaida zinazochukiwa, ukijiokoa wakati wa majaribio mapya.

Chanzo: mapenzi.com

Kuongeza maoni