Sut i roi'r gorau i wneud yr un peth

Ydych chi'n hoffi ailadrodd llawdriniaethau arferol dro ar ôl tro? Felly dydw i ddim. Ond bob tro yn y cleient SQL wrth weithio gyda storfa Rostelecom, roedd yn rhaid i mi gofrestru'r holl gysylltiadau rhwng y byrddau â llaw. Ac mae hyn er gwaethaf y ffaith bod y meysydd a'r amodau ar gyfer ymuno â byrddau yn cyd-daro o gais i gais mewn 90% o achosion! Mae'n ymddangos bod gan unrhyw gleient SQL swyddogaethau cwblhau auto, ond ar gyfer storfeydd nid yw bob amser yn gweithio: anaml y maent yn cynnwys cyfyngiad unigryw ac allwedd dramor er mwyn gwella perfformiad, a heb hyn ni fydd y rhaglen yn gwybod sut mae endidau'n gysylltiedig â phob un. arall a beth y gall ei wneud i chi ei gynnig.

Sut i roi'r gorau i wneud yr un peth

Ar ôl mynd trwy wadu, dicter, bargeinio, iselder a nesáu at dderbyn, penderfynais - beth am geisio gweithredu autofill gyda blackjack fy hun a'i wneud yn y ffordd iawn? Rwy'n defnyddio'r cleient dbeaver, wedi'i ysgrifennu yn java, mae ganddo fersiwn gymunedol ffynhonnell agored. Mae cynllun syml wedi aeddfedu:

  1. Dewch o hyd i ddosbarthiadau yn y cod ffynhonnell sy'n gyfrifol am awtolenwi
  2. Ailgyfeirio nhw i weithio gyda metadata allanol a thynnu gwybodaeth am uniadau oddi yno
  3. ??????
  4. ELW

Fe wnes i gyfrifo'r pwynt cyntaf yn eithaf cyflym - darganfyddais gais yn y traciwr nam i addasu'r autofill ac yn y cysylltiedig ymrwymo darganfod y dosbarth SQLCompletionAnalyzer. Edrychais ar y cod a dyna sydd ei angen arnaf. Y cyfan sydd ar ôl yw ei ailysgrifennu fel bod popeth yn gweithio. Arhosais am noson rydd a dechreuais feddwl am y gweithredu. Penderfynais ysgrifennu rheolau cyswllt tabl (metadata) yn json. Nid oedd gennyf unrhyw brofiad ymarferol o weithio gyda'r fformat hwn a gwelwyd y dasg bresennol fel cyfle i gywiro'r diffyg hwn.

Er mwyn gweithio gyda json penderfynais ddefnyddio'r llyfrgell json-syml oddi wrth Google. Dyma lle dechreuodd y syndod. Fel y digwyddodd, ysgrifennwyd dbeaver, fel cymhwysiad gwirioneddol, ar lwyfan Eclipse gan ddefnyddio fframwaith OSGi. I ddatblygwyr profiadol, mae'r peth hwn yn ei gwneud hi'n gyfleus i reoli dibyniaethau, ond i mi roedd yn debycach i hud tywyll, ac yn amlwg nid oeddwn yn barod ar ei gyfer: yn ôl yr arfer, rwy'n mewnforio'r dosbarthiadau sydd eu hangen arnaf o'r llyfrgell json-syml ym mhennawd y dosbarth golygedig, nodwch ef yn y pom.xml, ac ar ôl hynny mae'r prosiect yn bendant yn gwrthod cydosod yn normal ac yn gwrthdaro â gwallau.

Yn y diwedd, llwyddais i drwsio'r gwallau adeiladu: cofrestrais y llyfrgell nid yn pom.xml, ond ym maniffest manifest.mf, fel sy'n ofynnol gan OSGI, wrth ei nodi fel pecyn mewnforio. Nid yr ateb mwyaf prydferth, ond mae'n gweithio. Yna ymddangosodd y syndod nesaf. Os ydych chi'n datblygu yn Intellij Idea, ni allwch chi fynd a dechrau dadfygio'ch prosiect yn seiliedig ar y platfform eclipse: ni ddylai datblygwr dibrofiad ddioddef dim llai na dadansoddwr heb gwblhau ymholiad. Daeth datblygwyr yr afanc eu hunain i'r adwy, gan nodi yn y wici yr holl ddawnsfeydd gyda thambwrîn y mae angen eu gwneud. Y peth mwyaf annifyr yw hyd yn oed ar ôl yr holl sgwatiau hyn, nid oedd y prosiect am gael ei lansio mewn dadfygio gyda'r llyfrgell json wedi'i chysylltu trwy becyn mewnforio (er gwaethaf y ffaith ei fod yn dal i gael ei ymgynnull yn llwyddiannus yn y cynnyrch gorffenedig).

Erbyn hynny, roeddwn eisoes wedi sylweddoli'r anghyfleustra o ddefnyddio json ar gyfer fy nhasg - wedi'r cyfan, roedd y metadata i fod i gael ei olygu â llaw, ac mae'r fformat xml yn fwy addas ar gyfer hyn. Yr ail ddadl o blaid xml oedd presenoldeb yr holl ddosbarthiadau angenrheidiol yn y JDK, yr hyn a'i gwnaeth yn bosibl i atal ymladd â llyfrgell allanol. Gyda phleser mawr, trosglwyddais yr holl fetadata o json i xml a dechrau golygu'r rhesymeg awtolenwi.

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

O ganlyniad dwi gwneud newidiadau i mewn i ddosbarthiadau SQLUtils a SQLCompletionAnalyzer. Y syniad yw hyn: pe na bai'r rhaglen yn gallu dod o hyd i awgrymiadau awtolenwi addas gan ddefnyddio'r rhesymeg sylfaenol, yna mae'n gwirio am bresenoldeb uniadau posibl gan ddefnyddio ffeil xml allanol. Mae'r ffeil ei hun yn storio parau o dablau sy'n nodi'r meysydd y mae angen cysylltu'r tablau hyn â hwy. Mae cyfyngiadau ar ddyddiadau dilysrwydd technegol cofnodion eff_dttm a exp_dttm a'r faner dileu rhesymegol deleted_ind yn cael eu gosod yn ddiofyn.

Pan wnaed newidiadau i'r cod, cododd y cwestiwn - pwy fydd yn llenwi'r ffeil â metadata? Mae yna lawer o endidau yn y gadwrfa, mae'n ddrud cofrestru'r holl gysylltiadau eich hun. O ganlyniad, penderfynais aseinio'r dasg hon i'm cyd-ddadansoddwyr. Postiais y ffeil metadata yn svn, o ble gwneir til i'r cyfeiriadur lleol gyda'r rhaglen. Yr egwyddor yw hyn: a oes endid newydd wedi ymddangos yn y gadwrfa? Mae un dadansoddwr yn mynd i mewn i ymuno posibl i mewn i'r ffeil, yn ymrwymo newidiadau, mae'r gweddill yn gwirio allan iddynt eu hunain ac yn mwynhau'r gwaith auto-gwblhau: cymuned, casgliad o wybodaeth a hynny i gyd. Cynnal gweithdy ar ddefnyddio'r rhaglen ar gyfer cydweithwyr, ysgrifennodd erthygl yn Confluence - erbyn hyn mae gan y cwmni un offeryn mwy cyfleus.

Rhoddodd gweithio ar y nodwedd hon y ddealltwriaeth i mi nad oes angen bod ofn tincian gyda phrosiectau ffynhonnell agored - fel rheol, mae ganddyn nhw bensaernïaeth glir, a bydd hyd yn oed gwybodaeth sylfaenol o'r iaith yn ddigon ar gyfer arbrofion. A chyda rhywfaint o ddyfalbarhad, byddwch hyd yn oed yn gallu cael gwared ar weithrediadau arferol casineb, gan arbed amser i chi'ch hun ar gyfer arbrofion newydd.

Ffynhonnell: hab.com

Ychwanegu sylw