Adakah anda suka mengulang operasi rutin berulang kali? Jadi saya tidak. Tetapi setiap kali dalam klien SQL apabila bekerja dengan storan Rostelecom, saya perlu mendaftarkan semua sambungan antara jadual secara manual. Dan ini walaupun fakta bahawa dalam 90% kes medan dan syarat untuk menyertai jadual bertepatan dari permintaan untuk meminta! Nampaknya mana-mana klien SQL mempunyai fungsi auto-lengkap, tetapi untuk storan ia tidak selalu berfungsi: mereka jarang memasukkan kekangan unik dan kunci asing untuk meningkatkan prestasi, dan tanpa ini program tidak akan mengetahui bagaimana entiti berkaitan dengan setiap lain dan perkara yang ia boleh lakukan untuk anda tawarkan.
Setelah melalui penafian, kemarahan, tawar-menawar, kemurungan dan menghampiri penerimaan, saya memutuskan - mengapa tidak cuba untuk melaksanakan autoisi dengan blackjack sendiri dan melakukannya dengan cara yang betul? Saya menggunakan klien dbeaver, yang ditulis dalam java, ia mempunyai versi komuniti sumber terbuka. Pelan mudah telah matang:
- Cari kelas dalam kod sumber yang bertanggungjawab untuk autolengkap
- Ubah hala mereka untuk bekerja dengan metadata luaran dan tarik maklumat tentang gabungan dari sana
- ??
- KEUNTUNGAN
Saya mengetahui perkara pertama dengan cepat - saya menemui permintaan dalam penjejak pepijat untuk melaraskan autolengkap dan dalam yang berkaitan
Untuk bekerja dengan json saya memutuskan untuk menggunakan perpustakaan
Akhirnya, saya berjaya membetulkan ralat binaan: Saya mendaftarkan perpustakaan bukan dalam pom.xml, tetapi dalam manifes manifest.mf, seperti yang dikehendaki oleh OSGI, sambil menyatakannya sebagai pakej import. Bukan penyelesaian yang paling indah, tetapi ia berfungsi. Kemudian kejutan seterusnya muncul. Jika anda sedang membangun dalam Intellij Idea, anda tidak boleh pergi dan mula menyahpepijat projek anda berdasarkan platform eclipse: pembangun yang tidak berpengalaman harus menderita tidak kurang daripada seorang penganalisis tanpa menyelesaikan pertanyaan. Pembangun memerang sendiri datang untuk menyelamatkan, menunjukkan dalam wiki semua tarian dengan tamborin yang perlu dilakukan. Perkara yang paling menjengkelkan ialah walaupun selepas semua squats ini, projek itu tidak mahu dilancarkan dalam nyahpepijat dengan perpustakaan json yang disambungkan melalui pakej import (walaupun hakikatnya ia masih berjaya dipasang ke dalam produk siap).
Pada masa itu, saya sudah menyedari kesulitan menggunakan json untuk tugas saya - lagipun, metadata sepatutnya diedit secara manual, dan format xml lebih sesuai untuk ini. Hujah kedua yang memihak kepada xml ialah kehadiran semua kelas yang diperlukan dalam JDK, yang memungkinkan untuk berhenti berjuang dengan perpustakaan luaran. Dengan sukacitanya, saya memindahkan semua metadata dari json ke xml dan mula mengedit logik autolengkap.
Contoh 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>
Akibatnya saya
Apabila perubahan dibuat pada kod, persoalan timbul - siapa yang akan mengisi fail dengan metadata? Terdapat banyak entiti dalam repositori, mahal untuk mendaftarkan semua sambungan sendiri. Akibatnya, saya memutuskan untuk menyerahkan tugas ini kepada rakan penganalisis saya. Saya menyiarkan fail metadata dalam svn, dari mana pembayaran dibuat ke direktori tempatan dengan program. Prinsipnya ialah: adakah entiti baharu telah muncul dalam repositori? Seorang penganalisis memasukkan kemungkinan gabungan ke dalam fail, melakukan perubahan, selebihnya menyemak sendiri dan menikmati pelengkapan automatik yang berfungsi: komuniti, pengumpulan pengetahuan dan semua itu. Menjalankan bengkel menggunakan program untuk rakan sekerja, menulis artikel di Confluence - kini syarikat itu mempunyai satu alat yang lebih mudah.
Mengusahakan ciri ini memberi saya pemahaman bahawa tidak perlu takut untuk bermain-main dengan projek sumber terbuka - sebagai peraturan, mereka mempunyai seni bina yang jelas, malah pengetahuan asas bahasa akan mencukupi untuk eksperimen. Dan dengan jumlah kegigihan tertentu, anda juga akan dapat menyingkirkan operasi rutin yang dibenci, menjimatkan masa anda untuk eksperimen baharu.
Sumber: www.habr.com