Paano itigil ang paggawa ng parehong bagay

Gusto mo bang ulitin ang mga nakagawiang operasyon nang paulit-ulit? Kaya hindi ko. Ngunit sa bawat oras sa SQL client kapag nagtatrabaho sa imbakan ng Rostelecom, kailangan kong irehistro nang manu-mano ang lahat ng mga pagsali sa pagitan ng mga talahanayan. At ito sa kabila ng katotohanan na sa 90% ng mga kaso ang mga patlang at kundisyon para sa pagsali sa mga talahanayan ay nag-tutugma mula sa query hanggang sa query! Tila ang anumang kliyente ng SQL ay may mga function ng auto-completion, ngunit para sa mga imbakan ay hindi ito palaging gumagana: bihira silang magsama ng natatanging pagpilit at dayuhang key upang mapabuti ang pagganap, at kung wala ito ay hindi malalaman ng programa kung paano nauugnay ang mga entity sa bawat isa. iba pa at kung ano ang magagawa nito para sa iyong inaalok.

Paano itigil ang paggawa ng parehong bagay

Nang dumaan sa pagtanggi, galit, pakikipagtawaran, depresyon at papalapit na pagtanggap, nagpasya ako - bakit hindi subukang mag-autofill sa blackjack mismo at gawin ito sa tamang paraan? Ginagamit ko ang dbeaver client, nakasulat sa java, mayroon itong open source na bersyon ng komunidad. Ang isang simpleng plano ay tumanda:

  1. Maghanap ng mga klase sa source code na responsable para sa autocompletion
  2. I-redirect ang mga ito upang gumana sa panlabas na metadata at kumuha ng impormasyon tungkol sa mga pagsali mula doon
  3. ?
  4. PROFIT

Mabilis kong naisip ang unang punto - Nakahanap ako ng kahilingan sa tracker ng bug upang ayusin ang autofill at sa mga nauugnay na mangako natuklasan ang klase ng SQLCompletionAnalyzer. Tiningnan ko ang code at ito ang kailangan ko. Ang natitira na lang ay muling isulat ito upang gumana ang lahat. Naghintay ako ng isang libreng gabi at nagsimulang mag-isip sa pagpapatupad. Nagpasya akong magsulat ng mga panuntunan sa link ng talahanayan (metadata) sa json. Wala akong praktikal na karanasan sa pagtatrabaho sa format na ito at ang kasalukuyang gawain ay nakita bilang isang pagkakataon upang itama ang pagkukulang na ito.

Upang magtrabaho kasama si json nagpasya akong gamitin ang library json-simple mula sa Google. Dito nagsimula ang mga sorpresa. Tulad ng nangyari, ang dbeaver, bilang isang tunay na aplikasyon, ay isinulat sa platform ng Eclipse gamit ang balangkas ng OSGi. Para sa mga may karanasang developer, ginagawa nitong maginhawang pamahalaan ang mga dependency, ngunit para sa akin ito ay mas katulad ng dark magic, kung saan malinaw na hindi ako handa: gaya ng dati, ini-import ko ang mga klase na kailangan ko mula sa json-simpleng library sa header ng ang na-edit na klase, tukuyin ito sa pom.xml, pagkatapos nito ay tiyak na tumanggi ang proyekto na mag-assemble nang normal at nag-crash na may mga error.

Sa huli, nagawa kong ayusin ang mga error sa build: Nirehistro ko ang library hindi sa pom.xml, ngunit sa manifest.mf manifest, ayon sa hinihingi ng OSGI, habang tinutukoy ito bilang import-package. Hindi ang pinakamagandang solusyon, ngunit ito ay gumagana. Pagkatapos ay lumitaw ang susunod na sorpresa. Kung nagde-develop ka sa Intellij Idea, hindi ka maaaring pumunta lang at simulan ang pag-debug ng iyong proyekto batay sa platform ng eclipse: ang isang walang karanasan na developer ay dapat magdusa nang hindi bababa sa isang analyst nang hindi nakumpleto ang query. Ang mga developer ng beaver mismo ay dumating upang iligtas, na nagpapahiwatig sa wiki ng lahat ng mga sayaw na may tamburin na kailangang gawin. Ang pinaka-nakakainis na bagay ay na kahit na matapos ang lahat ng mga squats na ito, ang proyekto ay hindi nais na ilunsad sa debug na may json library na konektado sa pamamagitan ng import-package (sa kabila ng katotohanan na matagumpay pa rin itong na-assemble sa tapos na produkto).

Sa oras na iyon, napagtanto ko na ang abala ng paggamit ng json para sa aking gawain - pagkatapos ng lahat, ang metadata ay dapat na manu-manong i-edit, at ang xml na format ay mas angkop para dito. Ang pangalawang argumento na pabor sa xml ay ang pagkakaroon ng lahat ng kinakailangang klase sa JDK, na naging posible upang ihinto ang pakikipaglaban sa isang panlabas na aklatan. Sa sobrang kasiyahan, inilipat ko ang lahat ng metadata mula sa json patungo sa xml at sinimulan kong i-edit ang autocomplete logic.

Halimbawa ng 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>

Bilang resulta ako gumawa ng mga pagbabago sa mga klase ng SQLUtils at SQLCompletionAnalyzer. Ang ideya ay ito: kung ang programa ay hindi makahanap ng angkop na mga suhestyon sa autocomplete gamit ang pangunahing lohika, pagkatapos ay sinusuri nito ang pagkakaroon ng mga posibleng pagsali gamit ang isang panlabas na xml file. Ang file mismo ay nag-iimbak ng mga pares ng mga talahanayan na nagpapahiwatig ng mga patlang kung saan kailangang maiugnay ang mga talahanayang ito. Ang mga paghihigpit sa mga teknikal na petsa ng validity ng mga record na eff_dttm at exp_dttm at ang lohikal na pagtanggal ng flag na deleted_ind ay itinakda bilang default.

Kapag ginawa ang mga pagbabago sa code, lumitaw ang tanong - sino ang pupunuin ang file ng metadata? Mayroong maraming mga entity sa repository, mahal na irehistro ang lahat ng mga koneksyon sa iyong sarili. Bilang resulta, nagpasya akong italaga ang gawaing ito sa aking mga kapwa analyst. Na-post ko ang metadata file sa svn, mula sa kung saan ang isang checkout ay ginawa sa lokal na direktoryo na may programa. Ang prinsipyo ay ito: may lumabas bang bagong entity sa repository? Ang isang analyst ay nagpasok ng mga posibleng pagsali sa file, gumawa ng mga pagbabago, ang iba ay nag-check out sa kanilang sarili at tamasahin ang gumaganang auto-completion: komunidad, akumulasyon ng kaalaman at lahat ng iyon. Nagsagawa ng workshop sa paggamit ng programa para sa mga kasamahan, nagsulat ng isang artikulo sa Confluence - ngayon ang kumpanya ay may isa pang maginhawang tool.

Ang pagtatrabaho sa tampok na ito ay nagbigay sa akin ng pag-unawa na hindi kailangang matakot na makipag-usap sa mga open source na proyekto - bilang isang patakaran, mayroon silang isang malinaw na arkitektura, at kahit na ang pangunahing kaalaman sa wika ay magiging sapat para sa mga eksperimento. At sa isang tiyak na halaga ng pagtitiyaga, maaalis mo pa ang mga kinasusuklaman na operasyon, na nakakatipid ng oras para sa mga bagong eksperimento.

Pinagmulan: www.habr.com

Magdagdag ng komento