Xuddi shu narsani qilishni qanday to'xtatish kerak

Muntazam operatsiyalarni qayta-qayta takrorlashni yoqtirasizmi? Demak, men buni qilmayman. Ammo har safar SQL mijozida Rostelecom xotirasi bilan ishlaganda, men jadvallar orasidagi barcha ulanishlarni qo'lda ro'yxatdan o'tkazishim kerak edi. Va bu 90% hollarda jadvallarni birlashtirish uchun maydonlar va shartlar so'rovdan so'rovga mos kelishiga qaramay! Ko'rinishidan, har qanday SQL mijozi avtomatik to'ldirish funksiyalariga ega, ammo saqlash uchun u har doim ham ishlamaydi: ishlashni yaxshilash uchun ular kamdan-kam hollarda noyob cheklash va tashqi kalitni o'z ichiga oladi va busiz dastur ob'ektlarning har biriga qanday bog'liqligini bilmaydi. boshqa va u sizga nima taklif qilishi mumkin.

Xuddi shu narsani qilishni qanday to'xtatish kerak

Rad etish, g'azab, savdolashish, tushkunlik va qabulga yaqinlashib, men qaror qildim - nega o'zim blackjack bilan avtomatik to'ldirishni amalga oshirishga va buni to'g'ri yo'l tutishga harakat qilmayman? Men java-da yozilgan dbeaver mijozidan foydalanaman, u ochiq manbali hamjamiyat versiyasiga ega. Oddiy reja ishlab chiqildi:

  1. Manba kodida avtomatik to'ldirish uchun mas'ul bo'lgan sinflarni toping
  2. Ularni tashqi metama'lumotlar bilan ishlashga yo'naltiring va u erdan birlashmalar haqidagi ma'lumotlarni oling
  3. ??????
  4. PROFIT

Men birinchi nuqtani juda tez tushundim - xato kuzatuvchisida avtomatik to'ldirishni sozlash bo'yicha so'rovni topdim. topshirmoq SQLCompletionAnalyzer sinfini topdi. Men kodga qaradim va bu menga kerak bo'lgan narsa. Hamma narsa ishlashi uchun uni qayta yozish qoladi. Men bepul oqshomni kutdim va amalga oshirish haqida o'ylay boshladim. Men json-da jadvalga havola qoidalarini (metadata) yozishga qaror qildim. Ushbu format bilan ishlashda amaliy tajribam yo'q edi va hozirgi vazifa bu kamchilikni tuzatish uchun imkoniyat sifatida qaraldi.

json bilan ishlash uchun kutubxonadan foydalanishga qaror qildim json-oddiy Google'dan. Bu erda kutilmagan hodisalar boshlandi. Ma'lum bo'lishicha, dbeaver haqiqiy dastur sifatida Eclipse platformasida OSGi ramkasidan foydalangan holda yozilgan. Tajribali ishlab chiquvchilar uchun bu narsa bog'liqliklarni boshqarishni qulay qiladi, lekin men uchun bu ko'proq qorong'u sehrga o'xshardi, men bunga tayyor emasligim aniq edi: odatdagidek, men sarlavhadagi json-simple kutubxonasidan kerakli sinflarni import qilaman. tahrirlangan sinf, uni pom.xml da ko'rsating, shundan so'ng loyiha odatdagi tarzda yig'ishdan qat'iyan rad etadi va xatolar bilan ishdan chiqadi.

Oxir-oqibat, men qurish xatolarini tuzatishga muvaffaq bo'ldim: kutubxonani pom.xml da emas, balki OSGI talab qilgan manifest.mf manifestida import-paket sifatida ko'rsatgan holda ro'yxatdan o'tkazdim. Eng chiroyli yechim emas, lekin u ishlaydi. Keyin navbatdagi ajablanib paydo bo'ldi. Agar siz Intellij Idea-da ishlayotgan bo'lsangiz, shunchaki borib, Eclipse platformasi asosida loyihangizni disk raskadrovka qilishni boshlay olmaysiz: tajribasiz ishlab chiquvchi so'rovni bajarmasdan tahlilchidan kam bo'lmasligi kerak. Qunduz ishlab chiqaruvchilarining o'zlari yordamga kelishdi, bu esa wiki-da daf bilan bajarilishi kerak bo'lgan barcha raqslarni ko'rsatib berdi. Eng zerikarli tomoni shundaki, bunchalik squatsdan keyin ham loyiha import-paket orqali ulangan json kutubxonasi bilan disk raskadrovkada ishga tushishni istamadi (u tayyor mahsulotga muvaffaqiyatli yig'ilganiga qaramay).

O'sha vaqtga kelib, men o'z vazifam uchun json-dan foydalanishning noqulayligini allaqachon tushungan edim - axir, metama'lumotlar qo'lda tahrirlanishi kerak edi va xml formati buning uchun ko'proq mos keladi. Xml foydasiga ikkinchi dalil JDKda barcha kerakli sinflarning mavjudligi bo'lib, bu tashqi kutubxona bilan kurashni to'xtatishga imkon berdi. Men katta mamnuniyat bilan barcha metama'lumotlarni json-dan xml-ga o'tkazdim va avtoto'ldirish mantiqini tahrirlashni boshladim.

Metadata misoli

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

Natijada I o'zgarishlar kiritdi SQLUtils va SQLCompletionAnalyzer sinflariga. G'oya shunday: agar dastur asosiy mantiqdan foydalangan holda mos avtomatik to'ldirish takliflarini topa olmasa, u tashqi xml fayli yordamida mumkin bo'lgan qo'shilishlar mavjudligini tekshiradi. Faylning o'zi ushbu jadvallarni bog'lash kerak bo'lgan maydonlarni ko'rsatadigan juft jadvallarni saqlaydi. Eff_dttm va exp_dttm yozuvlarining texnik amal qilish sanalari va deleted_ind mantiqiy o'chirish bayrog'i sukut bo'yicha o'rnatiladi.

Kodga o'zgartirishlar kiritilganda, savol tug'ildi - faylni metadata bilan kim to'ldiradi? Omborda ko'plab ob'ektlar mavjud, barcha ulanishlarni o'zingiz ro'yxatdan o'tkazish qimmat. Natijada men bu vazifani tahlilchi hamkasblarimga topshirishga qaror qildim. Men metadata faylini svn-ga joylashtirdim, u erdan dastur bilan mahalliy katalogga to'lov amalga oshiriladi. Printsip shunday: omborda yangi ob'ekt paydo bo'ldimi? Bitta tahlilchi faylga mumkin bo'lgan qo'shilishlarni kiritadi, o'zgarishlarni amalga oshiradi, qolganlari o'zlarini tekshiradilar va ishlaydigan avtomatik yakunlashdan zavqlanadilar: jamoa, bilim to'plash va boshqalar. Hamkasblar uchun dasturdan foydalanish bo'yicha seminar o'tkazdi, Confluence-da maqola yozdi - endi kompaniyada yana bir qulay vosita bor.

Ushbu xususiyat ustida ishlash menga ochiq kodli loyihalar bilan shug'ullanishdan qo'rqishning hojati yo'qligini tushunishga yordam berdi - qoida tariqasida, ular aniq arxitekturaga ega va hatto tajribalar uchun tilning asosiy bilimlari ham etarli bo'ladi. Va ma'lum miqdordagi qat'iyat bilan siz hatto yangi tajribalar uchun vaqtni tejab, nafratlanadigan muntazam operatsiyalardan xalos bo'lishingiz mumkin.

Manba: www.habr.com

a Izoh qo'shish