Liigu sisu juurde

Merql

Puhas PHP kolme osapoole andmebaasiliitmine koos veerutaseme konfliktide lahendamisega. Git-laadne liitmise semantika MySQL ja SQLite tabelitele.

Terminal
composer require merql/merql

Viimane väljalase v0.4.1 MIT PHP 8.2+

Praktikas

Ühendamine loeb kolme salvestatud hetktõmmist ja tagastab kirjutatavad toimingud ning lahendamist vajavad konfliktid.

Ühenda kolm hetktõmmist

Tee baasi hetktõmmis enne kahe koopia lahknemist, seejärel loo mõlemast poolest hetktõmmis, näiteks aktiivsest andmebaasist ja liivakasti koopiast. ThreeWayMerge võrdleb mõlemat poolt baasiga ja ühendab kaks muudatuste kogumit.

Tulemuse vahekaardil muutis meie pool content ning nende pool title ja status samas reas, nii et ühendamisel säilivad kõik kolm muudatust konfliktita.

PHP
use Merql\Merge\ThreeWayMerge;

$merge = new ThreeWayMerge();
$result = $merge->merge($base, $ours, $theirs);

echo $result->operationCount(); // resolved operations
echo $result->conflictCount();  // unresolved conflicts

Kolme osapoole liitmine

Alus, meie muudatused, nende muudatused. git-laadne kolmesuunaline liitmine võtmega ridade ja veergude põhjal, mitte ridade kaupa. Tuvastab lisamised, uuendused ja kustutamised kahes harus.

Lahendamine veerutasemel

Kui mõlemad pooled muudavad sama rida, võrdleb merql veerge ükshaaval. Konflikt tekib ainult siis, kui sama veerg muudetakse erinevateks väärtusteks.

Lahtrite ühendamine valikulise seadistusega

Edasta ThreeWayMerge'ile CellMergeConfig ning TEXT-veerge ühendatakse Myersi diffi abil rida-realt ja JSON veerge võti-võtme haaval. Merql fassaad ja CLI seda ei luba.

Mitu andmebaasi

Vahetatavad ühenduseadapterid ja dialektidraiverid, sisseehitatud MySQL ja SQLite toega.

Konfliktide tuvastamine

Uuendamine vs. uuendamine, uuendamine vs. kustutamine, kustutamine vs. uuendamine ja lisamine vs. lisamine; iga konfliktiga esitatakse tabel ja rida. Uuendamise konfliktides nimetatakse ka veerg.

SQL genereerimine

Parameetritega INSERT-, UPDATE- ja DELETE-laused koos välisvõtmeid arvestava järjestusega. Kuivkäivituse eelvaade või rakendamine tehingus.

CLI

Loo käsurealt hetktõmmis, diff ja ühendamine. Toetab keskkonnamuutujate kaudu MySQL ja SQLite.

Testitud

32 käsitsi kirjutatud ootustega regressioonistsenaariumi (composer test:oracle). CI käivitab 231 ühik- ja integratsioonitestid ning PHPStan taseme 10.

Miks Merql

Hetktõmmised on failid

Iga hetktõmmis on üks JSON fail, mida saad masinate vahel kopeerida või versioonihaldusse lisada. Diff ja ühendamine loevad neid faile, seega töötavad need andmebaasiühenduseta.

Vaata üle enne kirjutamist

Ühendamisplaan annab igale toimingule ja muudatuste rühmale püsiva ID ning säilitab baasi, meie poole, nende poole ja tulemuse read. Vali soovitud rühmad ja rakenda ainult need.

Aegunud plaanid peatatakse

Kaitstud rakendus kirjutab ainult neisse ridadesse, mis vastavad endiselt üle vaadatud hetktõmmisele. Kui lause mõjutab null rida, tehakse tehing tagasi ja tulemuses kuvatakse viga.

Tagasipööre koos muutuste kontrolliga

Koosta tagasipööramisplaan aktiivsete ridade põhjal vahetult enne kirjutamist ja salvesta see kui JSON. Enne tagasipööramist võrdleb muutuste kontroll ridade sõrmejälgi ja tagastab toimingud, mille read on vahepeal muutunud.

Võrdlus

Merql ühendab kolme hetktõmmise ridade andmed. Need tööriistad versioonivad, sünkroonivad või migreerivad andmebaase, mis on seotud, kuid eraldi ülesanded.

Merql võrrelduna teiste tööriistadega
Dolt Sobib hästiDolt on SQL andmebaas, mida saab nagu Git hoidlat hargneda, kloonida, harusid luua, ühendada, üles lükata ja alla tõmmata. Sellega ühendutakse nagu iga MySQL andmebaasiga ning see jälgib iga lahtri päritolu. Erinevus võrreldes Merql-gaMerql jätab alles sinu olemasoleva MySQL või SQLite andmebaasi. See salvestab tabelid JSON hetktõmmisfailidena ja ühendab neist kolm; sina valid baasi hetktõmmise.
pt-table-sync Sobib hästipt-table-sync leiab ja parandab erinevused MySQL tabelite vahel ühes või mõlemas suunas serverite vahel. Replika sünkroonimisel teeb see muudatused replikatsiooni lähteallikas. Erinevus võrreldes Merql-gaKahesuunalise sünkroonimise korral valib pt-table-sync võitjaks rea konfliktiveeru põhjal ja kopeerib selle väärtused. Merql võrdleb mõlemat poolt ühise baasiga, ühendab sama rea eri veergude muudatused ning annab ühildumatud muudatused sulle lahendamiseks konfliktidena teada.
sqldiff Sobib hästisqldiff võrdleb kaht SQLite andmebaasi ja väljastab SQL skripti, mis muudab esimese teiseks. Samuti saab see kirjutada binaarse muudatuste kogumi SQLite seansilaienduse jaoks või teha tabelite kaupa muudetud ridade kokkuvõtte. Erinevus võrreldes Merql-gaKahepoolne diff ei näita, kas ühelt poolt lisati rida või teiselt poolt kustutati see. Merql lisab vastuse leidmiseks baasi hetktõmmise, ühendab kaks muudatuste kogumit ja töötab ka MySQL-ga.
Doctrine Migrations Sobib hästiDoctrine Migrations versioonib andmebaasi skeemi, nii et skeemimuudatused saab enne tootmiskeskkonda juurutamist üle vaadata ja testida. Erinevus võrreldes Merql-gaMerql ei ole skeemi migratsioonitööriist. See ühendab ridade andmeid ja annab teada hetktõmmiste vahel lisatud või eemaldatud veergudest, jättes skeemimuudatuse sinu teha.

Küsimused ja vastused

Lühikesed vastused Merql dokumentatsioonist.

Järgi juhendit alates esimesest hetktõmmisest kuni ühendamisplaanide, kaitstud rakendamise ja tagasipööramiseni.