Hogyan lehet abbahagyni ugyanazt

Szereted újra és újra megismételni a rutinműveleteket? Szóval én nem. De minden alkalommal, amikor az SQL-kliensben a Rostelecom tárolóval dolgoztam, manuálisan kellett regisztrálnom a táblák közötti összes csatlakozást. És mindez annak ellenére, hogy az esetek 90%-ában a táblák összekapcsolásának mezői és feltételei kérésről kérésre egybeestek! Úgy tűnik, hogy bármelyik SQL-kliens rendelkezik automatikus kiegészítési funkciókkal, de a tárolók esetében ez nem mindig működik: ritkán tartalmaznak egyedi kényszert és idegen kulcsot a teljesítmény javítása érdekében, és e nélkül a program nem fogja tudni, hogy az entitások hogyan kapcsolódnak egymáshoz. egyéb, és mit tud nyújtani az Ön számára.

Hogyan lehet abbahagyni ugyanazt

Miután átmentem a tagadáson, a haragon, az alkudozáson, a depresszión és az elfogadás közeledtén, úgy döntöttem – miért ne próbálnám meg magam is végrehajtani az automatikus kitöltést a blackjack segítségével, és ezt a helyes módon? A dbeaver klienst használom, java-ban íródott, van nyílt forráskódú közösségi verziója. Kifejlett egy egyszerű terv:

  1. Keresse meg a forráskódban azokat az osztályokat, amelyek felelősek az automatikus kiegészítésért
  2. Átirányítsa őket a külső metaadatokkal való munkavégzésre, és onnan gyűjtsön információkat a csatlakozásokról
  3. ??????
  4. NYERESÉG

Az első pontot elég gyorsan kitaláltam - a hibakövetőben találtam egy kérést az automatikus kitöltés beállítására és a kapcsolódó elkövetni felfedezte az SQLCompletionAnalyzer osztályt. Megnéztem a kódot és ez kell. Már csak át kell írni, hogy minden működjön. Vártam egy szabad estét, és elkezdtem gondolkodni a megvalósításon. Úgy döntöttem, hogy a táblahivatkozási szabályokat (metaadatokat) json-ban írom. Gyakorlati tapasztalatom nem volt ezzel a formátummal dolgozni, és a mostani feladatot lehetőségnek tekintették ennek a hiányosságnak a kijavítására.

A json használatához úgy döntöttem, hogy a könyvtárat használom json-egyszerű a Google-tól. Itt kezdődtek a meglepetések. Mint kiderült, a dbeaver, mint valódi alkalmazás, az Eclipse platformra íródott az OSGi keretrendszer segítségével. A tapasztalt fejlesztők számára ez a dolog kényelmessé teszi a függőségek kezelését, de számomra ez inkább sötét mágia volt, amire nyilvánvalóan nem voltam felkészülve: szokás szerint importálom a szükséges osztályokat a json-simple könyvtárból a fejlécben. a szerkesztett osztályt, adja meg a pom.xml-ben, ami után a projekt kategorikusan megtagadja a normál összeállítást és hibákkal összeomlik.

A build hibákat végül sikerült kijavítanom: a könyvtárat nem pom.xml-ben, hanem az OSGI által megkövetelt manifest.mf manifestben regisztráltam, miközben import-package-ként adtam meg. Nem a legszebb megoldás, de működik. Aztán jött a következő meglepetés. Ha az Intellij Idea-ban fejleszt, akkor nem mehet egyszerűen és kezdheti el az eclipse platformon alapuló projektjének hibakeresését: egy tapasztalatlan fejlesztőnek nem kevesebbet kell szenvednie, mint egy elemzőnek a lekérdezés befejezése nélkül. Maguk a hódfejlesztők segítettek, és a wikiben jelezték az összes táncot egy tamburával, amelyet meg kell tenni. A legbosszantóbb az, hogy a projekt még ennyi guggolás után sem akart debug-ban elindulni az import-csomaggal összekapcsolt json könyvtárral (annak ellenére, hogy a késztermékbe így is sikeresen összerakták).

Ekkor már rájöttem, hogy milyen kényelmetlenséget okoz a json használata a feladatomra - elvégre a metaadatokat manuálisan kellett volna szerkeszteni, és erre az xml formátum jobban megfelel. A második érv az xml mellett az összes szükséges osztály jelenléte volt a JDK-ban, ami lehetővé tette a külső könyvtárral való küzdelem leállítását. Nagy örömmel átvittem az összes metaadatot a json-ból xml-be, és elkezdtem szerkeszteni az automatikus kiegészítési logikát.

Metaadat példa

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

Ennek eredményeként I változtatásokat hajtott végre az SQLUtils és az SQLCompletionAnalyzer osztályokba. Az ötlet a következő: ha a program nem talált megfelelő automatikus kiegészítési javaslatokat az alap logikával, akkor egy külső xml fájl segítségével ellenőrzi a lehetséges csatlakozások meglétét. Maga a fájl táblapárokat tárol, amelyek jelzik azokat a mezőket, amelyekkel ezeket a táblákat összekapcsolni kell. Az eff_dttm és exp_dttm rekordok műszaki érvényességi dátumaira vonatkozó korlátozások, valamint a deleted_ind logikai törlés jelzője alapértelmezés szerint be van állítva.

Amikor megváltoztatták a kódot, felmerült a kérdés – ki fogja kitölteni a fájlt metaadatokkal? Sok entitás van az adattárban, költséges az összes kapcsolatot saját kezűleg regisztrálni. Ennek eredményeként úgy döntöttem, hogy ezt a feladatot elemzőtársaimra bízom. A metaadat fájlt svn-ben tettem fel, ahonnan a helyi könyvtárba történik a fizetés a programmal. Az elv a következő: megjelent-e új entitás a repositoryban? Az egyik elemző beírja a fájlba a lehetséges csatlakozásokat, végrehajtja a változtatásokat, a többiek megnézik magukat, és élvezik a működő automatikus kiegészítést: közösséget, tudásgyűjtést és minden mást. Munkaértekezletet tartott a program használatáról kollégái számára, cikket írt a Confluence-ben - most a cég egy kényelmesebb eszközzel rendelkezik.

Ezen a funkción való munka során megértettem, hogy nem kell félni a nyílt forráskódú projektekkel való bütyköléstől - ezek általában tiszta architektúrával rendelkeznek, és még az alapvető nyelvtudás is elegendő lesz a kísérletekhez. És bizonyos kitartással még a gyűlölt rutinműveletektől is megszabadulhat, időt spórolva meg magának az új kísérletekre.

Forrás: will.com

Hozzászólás