Preskočiť na obsah

Merql

Čisté trojstranné zlúčenie databáz v jazyku PHP s riešením konfliktov na úrovni stĺpcov. Sémantika zlúčenia v štýle Git pre tabuľky MySQL a SQLite.

Terminál
composer require merql/merql

Najnovšie vydanie v0.4.1 MIT PHP 8.2+

V praxi

Zlúčenie načíta tri uložené snímky a vráti operácie na zápis a konflikty, ktoré treba vyriešiť.

Zlúčiť tri snímky

Vytvorte snímku základnej verzie skôr, než sa obe kópie rozídu, a potom zaznamenajte každú stranu, napríklad živú databázu a sandboxovú kópiu. ThreeWayMerge porovná obe strany so základnou verziou a zlúči obe sady zmien.

Na karte výsledku naša strana upravila content a ich strana upravila title a status v tom istom riadku, takže zlúčenie zachová všetky tri úpravy bez konfliktu.

PHP
use Merql\Merge\ThreeWayMerge;

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

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

Trojstranné zlúčenie

Základná verzia, naša strana, ich strana. Trojstranné zlúčenie v štýle git nad riadkami a stĺpcami s kľúčmi namiesto riadkov textu. Zisťuje vloženia, aktualizácie a odstránenia v dvoch vetvách.

Riešenie na úrovni stĺpcov

Keď obe strany zmenia ten istý riadok, merql porovnáva jednotlivé stĺpce. Konflikt vznikne iba vtedy, keď sa ten istý stĺpec zmení na odlišné hodnoty.

Voliteľné zlučovanie buniek

Odovzdajte CellMergeConfig do ThreeWayMerge a stĺpce TEXT sa zlúčia riadok po riadku pomocou rozdielového algoritmu Myers, stĺpce JSON kľúč po kľúči. Fasáda Merql ani CLI túto funkciu nepovoľujú.

Viacero databáz

Pripojiteľné adaptéry pripojenia a ovládače dialektov; MySQL a SQLite sú súčasťou balenia.

Zisťovanie konfliktov

Aktualizácia oproti aktualizácii, aktualizácia oproti odstráneniu, odstránenie oproti aktualizácii a vloženie oproti vloženiu; každý konflikt sa nahlási spolu s tabuľkou a riadkom. Pri konfliktoch medzi aktualizáciami sa uvedie aj stĺpec.

Generovanie SQL

Parametrizované príkazy INSERT, UPDATE a DELETE s poradím zohľadňujúcim FK. Náhľad nanečisto alebo použitie v transakcii.

CLI

Vytvárajte snímky, rozdiely a zlúčenia z príkazového riadka. Podporuje MySQL a SQLite prostredníctvom premenných prostredia.

Testované

32 regresných scenárov s ručne napísanými očakávanými výsledkami (composer test:oracle). CI spúšťa 231 jednotkové a integračné testy a PHPStan úrovne 10.

Prečo Merql

Snímky sú súbory

Každá snímka je jeden súbor JSON, ktorý môžete kopírovať medzi počítačmi alebo odovzdať do systému správy verzií. Porovnávanie a zlúčenie čítajú tieto súbory, takže fungujú bez pripojenia k databáze.

Pred zápisom všetko skontrolujte

Plán zlúčenia priradí každej operácii a skupine zmien stabilné ID a uchová riadky zo základnej verzie, našej strany, ich strany a výsledku. Vyberte požadované skupiny a použite iba ich.

Zastavenie zastaraných plánov

Riadené použitie zapisuje iba do riadkov, ktoré sa stále zhodujú so skontrolovanou snímkou. Ak príkaz ovplyvní nula riadkov, transakcia sa vráti späť a výsledok obsahuje chybu.

Vrátenie zmien s kontrolou odchýlok

Vytvorte plán na vrátenie zmien zo živých riadkov tesne pred zápisom a uložte ho ako JSON. Pred vrátením kontrola odchýlok porovná odtlačky riadkov a vráti operácie pre riadky, ktoré sa odvtedy zmenili.

V porovnaní s

Merql zlučuje údaje o riadkoch z troch snímok. Tieto nástroje vytvárajú verzie databáz, synchronizujú ich alebo migrujú – ide o príbuzné úlohy.

Merql v porovnaní s inými nástrojmi
Dolt V čom vynikáDolt je databáza SQL, ktorú možno rozdeliť, klonovať, vetviť, zlúčiť, odosielať a sťahovať ako repozitár Git. Pripojíte sa k nej ako ku každej databáze MySQL a sleduje pôvod každej bunky. Rozdiel oproti MerqlMerql zachová databázu MySQL alebo SQLite, ktorú už používate. Ukladá tabuľky ako súbory snímok JSON a zlúči tri takéto súbory; základnú snímku vyberáte vy.
pt-table-sync V čom vynikápt-table-sync vyhľadáva a opravuje rozdiely medzi tabuľkami MySQL jedným smerom alebo oboma smermi medzi servermi. Pri synchronizácii repliky vykonáva zmeny na zdroji replikácie. Rozdiel oproti MerqlPri obojsmernej synchronizácii pt-table-sync vyberie víťazný riadok podľa stĺpca konfliktu a skopíruje jeho hodnoty. Merql porovnáva obe strany so spoločnou základnou verziou, zlučuje úpravy rôznych stĺpcov toho istého riadka a nekompatibilné zmeny hlási ako konflikty, ktoré treba vyriešiť.
sqldiff V čom vynikásqldiff porovná dve databázy SQLite a vypíše skript SQL, ktorý prevedie prvú na druhú. Môže tiež zapísať binárnu sadu zmien pre rozšírenie relácie SQLite alebo zhrnúť zmenené riadky v jednotlivých tabuľkách. Rozdiel oproti MerqlObojsmerné porovnanie nedokáže určiť, či jedna strana pridala riadok, alebo ho druhá odstránila. Merql pridáva základnú snímku, ktorá na to odpovie, zlúči dve sady zmien a funguje aj s MySQL.
Doctrine Migrations V čom vynikáDoctrine Migrations spravuje verzie schémy databázy, takže zmeny schémy možno skontrolovať a otestovať pred nasadením do produkcie. Rozdiel oproti MerqlMerql nie je nástroj na migráciu schémy. Zlučuje údaje o riadkoch a nahlasuje stĺpce pridané alebo odstránené medzi snímkami; zmenu schémy necháva na vás.

Otázky a odpovede

Stručné odpovede z dokumentácie Merql.

Postupujte podľa príručky od prvej snímky cez plány zlúčenia až po bezpečné použitie a vrátenie zmien.