Carane mungkasi nindakake bab sing padha

Apa sampeyan seneng mbaleni operasi rutin bola-bali? Dadi aku ora. Nanging saben-saben ing klien SQL nalika nggarap panyimpenan Rostelecom, aku kudu ndhaptar kabeh gabungan antarane tabel kanthi manual. Lan iki sanajan kasunyatane ing 90% kasus, lapangan lan kahanan kanggo gabung karo tabel bertepatan saka pitakon menyang pitakon! Katon manawa klien SQL duwe fungsi ngrampungake otomatis, nanging kanggo panyimpenan ora bisa digunakake: arang banget kalebu kendala unik lan kunci manca kanggo nambah kinerja, lan tanpa program kasebut ora bakal ngerti kepiye entitas ana gandhengane karo saben. liyane lan apa bisa nindakake kanggo sampeyan kurban.

Carane mungkasi nindakake bab sing padha

Duwe liwat ora ngaku, nesu, tawar-menawar, depresi lan nyedhak acceptance, Aku mutusaké - kok ora nyoba kanggo ngleksanakake autofill karo blackjack dhewe lan nindakaken cara tengen? Aku nggunakake klien dbeaver, ditulis ing java, wis versi komunitas open source. Rencana prasaja wis diwasa:

  1. Golek kelas ing kode sumber sing tanggung jawab kanggo autocompletion
  2. Ngalihake wong-wong mau kanggo nggarap metadata eksternal lan narik informasi babagan gabung saka kono
  3. ??????
  4. PROFIT

Aku ngerteni titik pisanan kanthi cepet - aku nemokake panjaluk ing tracker bug kanggo nyetel isi otomatis lan ing sing gegandhengan netepi nemokake kelas SQLCompletionAnalyzer. Aku katon ing kode lan iku apa aku kudu. Sing isih ana yaiku nulis maneh supaya kabeh bisa digunakake. Aku ngenteni sore free lan wiwit mikir liwat implementasine. Aku mutusake kanggo nulis aturan link tabel (metadata) ing json. Aku ora duwe pengalaman praktis nggarap format iki lan tugas saiki katon minangka kesempatan kanggo mbenerake omission iki.

Kanggo nggarap json aku mutusake nggunakake perpustakaan json-simple saka Google. Iki ngendi surprises wiwit. Ternyata, dbeaver, minangka aplikasi sing bener, ditulis ing platform Eclipse nggunakake kerangka OSGi. Kanggo pangembang sing berpengalaman, perkara iki ndadekake gampang ngatur dependensi, nanging kanggo aku luwih kaya sihir peteng, sing jelas aku durung siap: kaya biasane, aku ngimpor kelas sing dibutuhake saka perpustakaan json-simple ing header saka kelas sing wis diowahi, nemtokaken ing pom xml, sawise proyek kasebut kanthi kategori nolak ngumpul kanthi normal lan nabrak kanthi kasalahan.

Pungkasane, aku bisa ndandani kesalahan mbangun: Aku ndhaptar perpustakaan ora ing pom.xml, nanging ing manifest.mf manifest, kaya sing dibutuhake dening OSGI, nalika nemtokake minangka paket impor. Ora solusi sing paling ayu, nanging kerjane. Banjur kejutan sabanjure muncul. Yen sampeyan ngembangake Intellij Idea, sampeyan ora bisa miwiti debugging proyek sampeyan adhedhasar platform eclipse: pangembang sing ora duwe pengalaman kudu nandhang sangsara ora kurang saka analis tanpa ngrampungake pitakon. Pengembang berang-berang dhewe teka kanggo ngluwari, nuduhake ing wiki kabeh tarian karo rebana sing kudu dilakoni. Sing paling ngganggu yaiku sanajan sawise kabeh squats iki, proyek kasebut ora pengin diluncurake ing debug karo perpustakaan json sing disambungake liwat paket impor (senadyan kasunyatane isih kasil dirakit menyang produk rampung).

Ing wektu iku, aku wis nyadari ora nyaman nggunakake json kanggo tugasku - sawise kabeh, metadata mesthine diowahi kanthi manual, lan format xml luwih cocog kanggo iki. Argumentasi kapindho sing ndhukung xml yaiku anané kabeh kelas sing dibutuhake ing JDK, sing bisa mungkasi perang karo perpustakaan eksternal. Kanthi seneng banget, aku nransfer kabeh metadata saka json menyang xml lan miwiti nyunting logika autocomplete.

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

Akibaté aku digawe owah-owahan menyang kelas SQLUtils lan SQLCompletionAnalyzer. Ide iki: yen program ora bisa nemokake saran autocomplete sing cocok nggunakake logika dhasar, banjur mriksa ana kemungkinan gabung nggunakake file xml eksternal. File kasebut dhewe nyimpen pasangan tabel sing nuduhake kolom sing kudu disambungake tabel kasebut. Watesan tanggal validitas teknis saka cathetan eff_dttm lan exp_dttm lan gendera pambusakan logis deleted_ind disetel kanthi gawan.

Nalika owah-owahan digawe ing kode, muncul pitakonan - sapa sing bakal ngisi file kanthi metadata? Ana akeh entitas ing repositori, larang kanggo ndhaptar kabeh sambungan dhewe. Akibaté, aku mutusaké kanggo nemtokake tugas iki kanggo kanca-kanca analis. Aku dikirim file metadata ing svn, saka ngendi checkout digawe kanggo direktori lokal karo program. Prinsip iki: apa entitas anyar katon ing repositori? Siji analis bisa gabung menyang file kasebut, nindakake owah-owahan, liyane mriksa dhewe lan seneng ngrampungake otomatis: komunitas, akumulasi kawruh lan liya-liyane. Nindakake lokakarya babagan nggunakake program kanggo kolega, nulis artikel ing Confluence - saiki perusahaan duwe alat sing luwih trep.

Nggarap fitur iki menehi kula pangerten sing ana ora perlu wedi kanggo tinker karo proyèk open source - minangka aturan, padha duwe arsitektur cetha, lan malah kawruh dhasar saka basa bakal cukup kanggo nyobi. Lan kanthi ketekunan tartamtu, sampeyan bakal bisa nyingkirake operasi rutin sing disengiti, ngirit wektu kanggo eksperimen anyar.

Source: www.habr.com

Add a comment