Бірдей әрекетті қалай тоқтатуға болады

Сіз әдеттегі операцияларды қайта-қайта қайталауды ұнатасыз ба? Сондықтан мен жоқ. Бірақ SQL клиентінде Rostelecom қоймасымен жұмыс істеген сайын, мен кестелер арасындағы барлық қосылуларды қолмен тіркеуге тура келді. Және бұл 90% жағдайда кестелерді қосу өрістері мен шарттары сұраудан сұрауға сәйкес келетініне қарамастан! Кез келген SQL клиентінің автоматты аяқтау функциялары бар сияқты, бірақ сақтау қоймалары үшін ол әрқашан жұмыс істемейді: өнімділікті жақсарту үшін олар сирек бірегей шектеуді және сыртқы кілтті қамтиды және онсыз бағдарлама субъектілердің әрқайсысымен қалай байланысты екенін білмейді. басқа және ол сіз үшін не ұсына алады.

Бірдей әрекетті қалай тоқтатуға болады

Бас тартуды, ашулануды, мәмілелерді, депрессияны және қабылдауға жақындап, мен шешім қабылдадым - неге автотолтыруды блэкджекпен өзім енгізуге тырыспасқа және оны дұрыс істемеске? Мен java тілінде жазылған dbeaver клиентін қолданамын, оның ашық бастапқы қауымдастық нұсқасы бар. Қарапайым жоспар жетілді:

  1. Бастапқы кодта автотолтыруға жауапты сыныптарды табыңыз
  2. Оларды сыртқы метадеректермен жұмыс істеуге қайта бағыттаңыз және сол жерден біріктірулер туралы ақпаратты алыңыз
  3. ??????
  4. ПАЙДА

Мен бірінші тармақты тез түсіндім - мен қателерді бақылаушыдан автотолтыруды реттеуге және қатысты сұрауды таптым. міндеттеу SQLCompletionAnalyzer сыныбын ашты. Мен кодты қарадым және бұл маған қажет нәрсе. Барлығы жұмыс істейтіндей етіп қайта жазу ғана қалады. Мен тегін кешті күтіп, жүзеге асыруды ойластырдым. Мен json жүйесінде кесте сілтеме ережелерін (метадеректер) жазуды шештім. Менде бұл форматпен жұмыс істеу практикалық тәжірибем болмады және ағымдағы тапсырма бұл олқылықты түзету мүмкіндігі ретінде қарастырылды.

json-мен жұмыс істеу үшін мен кітапхананы пайдалануды шештім json-қарапайым Google-дан. Міне, тосын сыйлар басталды. Белгілі болғандай, dbeaver шынайы қосымша ретінде Eclipse платформасында OSGi негізін пайдаланып жазылған. Тәжірибелі әзірлеушілер үшін бұл нәрсе тәуелділіктерді басқаруды ыңғайлы етеді, бірақ мен үшін бұл қараңғы сиқыр сияқты болды, мен оған дайын емес едім: әдеттегідей, мен тақырыптағы json-simple кітапханасынан қажетті сыныптарды импорттаймын. өңделген класс, оны pom.xml ішінде көрсетіңіз, содан кейін жоба қалыпты түрде құрастырудан үзілді-кесілді бас тартады және қателермен бұзылады.

Соңында мен құрастыру қателерін түзетіп алдым: кітапхананы pom.xml емес, OSGI талап еткендей manifest.mf манифестінде импорт-пакет ретінде көрсете отырып тіркедім. Ең әдемі шешім емес, бірақ ол жұмыс істейді. Содан кейін келесі тосынсый пайда болды. Егер сіз Intellij Idea-да дамып жатсаңыз, сіз Eclipse платформасы негізінде жобаңызды жөндеуге кірісе алмайсыз: тәжірибесіз әзірлеуші ​​​​сұрауды аяқтамай-ақ талдаушыдан кем зардап шегуі керек. Құндызды әзірлеушілердің өздері көмекке келді, викиде жасалуы керек барлық билерді домбырамен көрсетті. Ең тітіркендіретін нәрсе, тіпті осы скваттардан кейін де жоба импорт-пакет арқылы қосылған json кітапханасымен отладта іске қосылғысы келмеді (ол әлі де дайын өнімге сәтті жинақталғанына қарамастан).

Осы уақытқа дейін мен json-ды өз тапсырмам үшін пайдаланудың ыңғайсыздығын түсіндім - метадеректер қолмен өңделуі керек еді, ал xml пішімі бұл үшін жақсырақ. xml пайдасына екінші аргумент JDK-де барлық қажетті сыныптардың болуы болды, бұл сыртқы кітапханамен күресуді тоқтатуға мүмкіндік берді. Үлкен қуанышпен мен барлық метадеректерді json-дан xml-ге ауыстырдым және автотолтыру логикасын өңдеуге кірістім.

Метадеректер мысалы

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

Нәтижесінде И өзгерістер енгізді SQLUtils және SQLCompletionAnalyzer сыныптарына. Идея мынада: егер бағдарлама негізгі логиканы пайдаланып қолайлы автотолтыру ұсыныстарын таба алмаса, онда ол сыртқы xml файлын пайдаланып ықтимал қосылулардың бар-жоғын тексереді. Файлдың өзі осы кестелерді байланыстыру қажет өрістерді көрсететін жұп кестелерді сақтайды. eff_dttm және exp_dttm жазбаларының техникалық жарамдылық мерзімдеріне және deleted_ind логикалық жою жалауына шектеулер әдепкі бойынша орнатылады.

Кодқа өзгертулер енгізілгенде, сұрақ туындады - файлды метадеректермен кім толтырады? Репозиторийде көптеген нысандар бар, барлық қосылымдарды өзіңіз тіркеу қымбатқа түседі. Нәтижесінде мен бұл тапсырманы аналитик әріптестеріме тапсыруды жөн көрдім. Мен метадеректер файлын svn ішінде орналастырдым, ол жерден бағдарлама арқылы жергілікті каталогқа тексеру жүргізіледі. Бұл принцип: репозиторийде жаңа нысан пайда болды ма? Бір аналитик файлға ықтимал қосылымдарды енгізеді, өзгерістер жасайды, қалғандары өздерін тексереді және жұмыс істейтін автотолтырудан ләззат алады: қауымдастық, білім жинақтау және т.б. Әріптестер үшін бағдарламаны пайдалану бойынша семинар өткізді, Confluence-те мақала жазды - енді компанияда тағы бір ыңғайлы құрал бар.

Бұл функциямен жұмыс істеу маған ашық бастапқы жобалармен айналысудан қорықпаудың қажеті жоқ екенін түсінуге мүмкіндік берді - әдетте, олардың нақты архитектурасы бар, тіпті эксперименттер үшін тілдің қарапайым білімі жеткілікті болады. Белгілі бір табандылықпен сіз жаңа эксперименттерге уақытыңызды үнемдей отырып, тіпті жиіркенішті операциялардан арыла аласыз.

Ақпарат көзі: www.habr.com

пікір қалдыру