Wéi ophalen déi selwecht Saach ze maachen

Wëllt Dir Routine Operatiounen ëmmer erëm widderhuelen? Also ech net. Awer all Kéier am SQL Client wann ech mat der Rostelecom Späichere schaffen, hunn ech all d'Joints tëscht den Dëscher manuell registréiert. An dat trotz der Tatsaach, datt an 90% vun de Fäll d'Felder an d'Konditioune fir Dëscher matzemaachen aus Ufro un Ufro zesummegefall! Et géif schéngen datt all SQL Client automatesch Fäerdegstellungsfunktiounen huet, awer fir Späichere funktionnéiert et net ëmmer: si enthalen selten eenzegaartegen Zwang an auslännesche Schlëssel fir d'Performance ze verbesseren, an ouni dëst wäert de Programm net wëssen wéi Entitéite mat all Zesummenhang sinn. aner a wat et kann fir Iech bidden.

Wéi ophalen déi selwecht Saach ze maachen

Пройдя через отрицание, гнев, торг, депрессию и приближаясь к принятию, я решил — а почему бы самому не попробовать реализовать автозаполнение с блекджеком и как положено? Я пользуюсь клиентом dbeaver, написанным на java, у него есть комьюнити версия с открытым исходным кодом. Созрел нехитрый план:

  1. Найти в исходном коде классы, отвечающие за автозаполнение
  2. Переориентировать их на работу с внешними метаданными и подтягивать оттуда информацию о джойнах
  3. ??????
  4. PROFIT

С первым пунктом достаточно быстро разобрался — нашел в багтрекере запрос на корректировку автозаполнения и в связанном engagéieren entdeckt d'SQLCompletionAnalyzer Klass. Ech hunn de Code gekuckt an et ass wat ech brauch. Et bleift just fir et ëmzeschreiwen sou datt alles funktionnéiert. Ech hunn op e fräien Owend gewaart an hunn ugefaang iwwer d'Ëmsetzung ze denken. Ech hu beschloss, Tabelllinkregelen (Metadaten) an json ze schreiwen. Ech hat keng praktesch Erfarung mat dësem Format ze schaffen an déi aktuell Aufgab gouf als eng Geleeënheet gesi fir dës Ofdreiwung ze korrigéieren.

Fir mat json ze schaffen, hunn ech decidéiert d'Bibliothéik ze benotzen json-einfach vu Google. Dëst ass wou d'Iwwerraschungen ugefaang hunn. Wéi et sech erausstellt, gouf dbeaver, als richteg Applikatioun, op der Eclipse Plattform geschriwwe mam OSGi Kader. Fir erfuerene Entwéckler mécht dës Saach et bequem fir Ofhängegkeeten ze managen, awer fir mech war et méi wéi donkel Magie, fir déi ech kloer net prett war: wéi gewinnt importéieren ech d'Klassen déi ech brauch aus der json-simple Bibliothéik am Header vun der editéierter Klass, spezifizéiert se an der pom.xml, no deem de Projet kategoresch refuséiert normal ze montéieren a mat Feeler ofbriechen.

Um Enn hunn ech et fäerdeg bruecht d'Baufehler ze fixéieren: Ech hunn d'Bibliothéik net an pom.xml registréiert, awer am manifest.mf Manifest, wéi vun OSGI gefuerdert, wärend et als Import-Package uginn. Net déi schéinste Léisung, awer et funktionnéiert. Dunn ass déi nächst Iwwerraschung opgetaucht. Wann Dir an Intellij Idea entwéckelt, kënnt Dir net einfach goen a fänken un Äre Projet op Basis vun der Sonnendäischtertplattform ze Debuggen: en onerfueren Entwéckler soll net manner wéi en Analyst leiden ouni Ufroen fäerdeg ze maachen. D'Beaver-Entwéckler selwer koumen zur Rettung, an hunn an der Wiki all d'Dänz mat enger Tambourin uginn, déi musse gemaach ginn. Déi lästegst Saach ass datt och no all dëse Squats de Projet net an Debug mat der json Bibliothéik lancéiert wollt ginn, déi iwwer Import-Package verbonne sinn (trotz der Tatsaach datt et nach ëmmer erfollegräich an de fäerdege Produkt zesummegesat gouf).

Zu där Zäit hat ech schonn d'Onbequemlechkeet gemierkt fir json fir meng Aufgab ze benotzen - schliisslech sollten d'Metadaten manuell geännert ginn, an d'Xml-Format ass besser fir dëst gëeegent. Dat zweet Argument fir xml war d'Präsenz vun all néideg Klassen am JDK, wat et méiglech gemaach huet mat enger externer Bibliothéik ze kämpfen. Mat grousser Freed hunn ech all Metadaten vun json op xml transferéiert an ugefaang d'Autokomplett Logik z'änneren.

Metadaten Beispill

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

Als Resultat hunn ech Ännerungen gemaach an de SQLUtils an SQLCompletionAnalyzer Klassen. D'Iddi ass dëst: wann de Programm net fäeg ass gëeegent Autocomplete Suggestiounen mat der Basislogik ze fannen, da kontrolléiert et op d'Präsenz vu méigleche Joints mat enger externer XML Datei. D'Datei selwer späichert Pairen vun Dëscher, déi d'Felder uginn, mat deenen dës Tabelle verbonne musse ginn. Restriktiounen op d'technesch Validitéitsdatum vun de Rekorder eff_dttm an exp_dttm an de logesche Läschflag deleted_ind ginn als Standard festgeluecht.

Wann Ännerungen am Code gemaach goufen, ass d'Fro opgestan - wien fëllt d'Datei mat Metadaten? Et gi vill Entitéiten am Repository, et ass deier fir all Verbindungen selwer ze registréieren. Als Resultat hunn ech décidéiert dës Aufgab fir meng Matbierger Analysten ze ginn. Ech hunn d'Metadatendatei an svn gepost, vu wou e Kasse an de lokalen Verzeichnis mam Programm gemaach gëtt. De Prinzip ass dëst: ass eng nei Entitéit am Repository opgetaucht? Een Analyst trëtt méiglech Umeldungen an d'Datei, engagéiert Ännerunge, de Rescht kontrolléiert sech selwer a genéisst déi funktionnéierend Auto-Fäerdegstellung: Gemeinschaft, Akkumulation vu Wëssen an all dat. Huet e Workshop iwwer d'Benotzung vum Programm fir Kollegen, geschriwwen en Artikel am Confluence - elo huet d'Firma e méi praktescht Tool.

D'Aarbecht un dëser Fonktioun huet mir d'Versteesdemech ginn, datt et net néideg ze fäerten mat Open Source Projeten ze bastelen - als Regel, si hunn eng kloer Architektur, an och Basis Wëssen vun der Sprooch wäert genuch fir Experimenter ginn. A mat enger gewësser Quantitéit vu Persistenz kënnt Dir souguer vun haassen Routine-Operatiounen lass ginn, spuert Iech Zäit fir nei Experimenter.

Source: will.com

Setzt e Commentaire