Siirry sisältöön

Merql

Puhdas PHP-tietokannan kolmen tilan yhdistäminen saraketason ristiriitojen ratkaisulla. Git-tyylinen yhdistämissemantiikka MySQL- ja SQLite-tauluille.

Pääte
composer require merql/merql

Uusin julkaisu v0.4.1 MIT PHP 8.2+

Käytännössä

Yhdistäminen lukee kolme tallennettua tilannevedosta ja palauttaa kirjoitettavat toiminnot sekä ratkaistavat ristiriidat.

Yhdistä kolme tilannevedosta

Ota perustan tilannevedos ennen kuin kaksi kopiota erkanee toisistaan. Ota sitten tilannevedos kummastakin puolesta, esimerkiksi käytössä olevasta tietokannasta ja hiekkalaatikkokopiosta. ThreeWayMerge vertaa molempia puolia perustaan ja yhdistää kaksi muutossarjaa.

Tulosvälilehdellä meidän puolemme muokkasi content ja heidän puolensa muokkasi saman rivin kohtia title ja status, joten yhdistäminen säilyttää kaikki kolme muutosta ilman ristiriitaa.

PHP
use Merql\Merge\ThreeWayMerge;

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

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

Kolmen tilan yhdistäminen

Lähtötila, meidän tilamme ja heidän tilansa. Kyseessä on git-tyylinen kolmisuuntainen yhdistäminen tietokannan avaimellisille riveille ja sarakkeille tekstirivien sijaan. Havaitsee lisäykset, päivitykset ja poistot kahden haaran välillä.

Saraketason ratkaisu

Kun molemmat puolet muuttavat samaa riviä, merql vertaa sarakkeita yksitellen. Ristiriita syntyy vain, jos sama sarake muutetaan eri arvoon.

Valinnainen solujen yhdistäminen

Välitä CellMergeConfig ThreeWayMerge-toiminnolle, niin TEXT-sarakkeet yhdistetään rivi riviltä Myers-diffillä ja JSON-sarakkeet avain avaimelta. Merql-julkisivu ja CLI eivät ota sitä käyttöön.

Useita tietokantoja

Liitettävät yhteyssovittimet ja murreajurit, joiden mukana tulevat MySQL ja SQLite.

Ristiriitojen tunnistus

Päivitys vastaan päivitys, päivitys vastaan poisto, poisto vastaan päivitys ja lisäys vastaan lisäys ilmoitetaan kukin taulun ja rivin kera. Päivitysten välisissä ristiriidoissa ilmoitetaan myös sarake.

SQL-luonti

Parametrisoidut INSERT-, UPDATE- ja DELETE-lauseet vierasavaimet huomioivalla järjestyksellä. Kuivan ajon esikatselu tai käyttöönotto tapahtumassa.

CLI

Tilannevedokset, muutosten vertailu ja yhdistäminen komentoriviltä. MySQL- ja SQLite-yhteydet määritetään ympäristömuuttujilla.

Testattu

32 regressiotilannetta käsin laadituin odotuksin (composer test:oracle). CI suorittaa 231-yksikkö- ja integraatiotestit sekä PHPStan-tason 10.

Miksi Merql

Tilannevedokset ovat tiedostoja

Jokainen tilannevedos on yksi JSON tiedosto, jonka voit kopioida koneelta toiselle tai tallentaa versionhallintaan. Erotusvertailu ja yhdistäminen lukevat näitä tiedostoja, joten ne toimivat ilman tietokantayhteyttä.

Tarkista ennen kirjoittamista

Yhdistämissuunnitelma antaa jokaiselle toiminnolle ja muutosryhmälle pysyvän tunnisteen ja säilyttää pohjan, meidän, heidän ja tuloksen rivit. Valitse haluamasi ryhmät ja ota käyttöön vain ne.

Vanhentuneet suunnitelmat pysäytetään

Suojattu käyttöönotto kirjoittaa vain riveihin, jotka vastaavat edelleen tarkistamaasi tilannevedosta. Jos lauseke vaikuttaa nollaan riviin, tapahtuma peruutetaan ja tulos sisältää virheen.

Palautus muutosten tarkistuksella

Luo palautussuunnitelma juuri ennen kirjoitusta käytössä olevista riveistä ja tallenna se muodossa JSON. Ennen palautusta muutosten tarkistus vertaa rivien sormenjälkiä ja palauttaa niiden rivien toiminnot, jotka ovat muuttuneet tarkistuksen jälkeen.

Vertailu

Merql yhdistää rivitiedot kolmesta tilannevedoksesta. Nämä työkalut versioivat, synkronoivat tai siirtävät tietokantoja, eli hoitavat lähialueen tehtäviä.

Merql verrattuna muihin työkaluihin
Dolt Sopii hyvinDolt on SQL-tietokanta, jonka voit haaroittaa, kloonata, luoda haaroja, yhdistää, lähettää ja hakea kuten Git-tietovarastoa. Siihen yhdistetään kuten mihin tahansa MySQL-tietokantaan, ja se seuraa jokaisen solun alkuperää. Ero kohteeseen MerqlMerql säilyttää jo käytössäsi olevan MySQL- tai SQLite-tietokannan. Se tallentaa taulut JSON-tilannevedostiedostoina ja yhdistää niistä kolme valitsemasi pohjatilannevedoksen avulla.
pt-table-sync Sopii hyvinpt-table-sync etsii ja korjaa eroja MySQL-taulujen välillä yhteen tai molempiin suuntiin palvelinten välillä. Kun se synkronoi replikan, se tekee muutokset replikaation lähteeseen. Ero kohteeseen MerqlKaksisuuntaisessa synkronoinnissa pt-table-sync valitsee voittavan rivin ristiriitasarakkeen perusteella ja kopioi sen arvot. Merql vertaa molempia puolia yhteiseen pohjaan, yhdistää saman rivin eri sarakkeisiin tehdyt muokkaukset ja ilmoittaa yhteensopimattomista muutoksista ratkaistavina ristiriitoina.
sqldiff Sopii hyvinsqldiff vertaa kahta SQLite-tietokantaa ja tulostaa SQL-skriptin, joka muuttaa ensimmäisen toiseksi. Se voi myös kirjoittaa binäärisen muutossarjan SQLite-istuntolaajennusta varten tai tehdä yhteenvedon taulukoittain muuttuneista riveistä. Ero kohteeseen MerqlKaksisuuntainen erotusvertailu ei pysty päättelemään, lisäsikö toinen puoli rivin vai poistiko toinen sen. Merql lisää pohjatilannevedoksen, joka ratkaisee tämän, yhdistää kaksi muutosjoukkoa ja toimii myös MySQL-järjestelmän kanssa.
Doctrine Migrations Sopii hyvinDoctrine Migrations versioi tietokantasi skeeman, joten skeemamuutokset voidaan tarkistaa ja testata ennen niiden käyttöönottoa tuotannossa. Ero kohteeseen MerqlMerql ei ole skeeman siirtotyökalu. Se yhdistää rivitietoja ja ilmoittaa tilannevedosten välillä lisätyistä tai poistetuista sarakkeista. Skeemamuutoksen tekeminen jää sinulle.

Kysymykset ja vastaukset

Lyhyet vastaukset Merql-dokumentaatiosta.

Seuraa opasta ensimmäisestä tilannevedoksestasi yhdistämissuunnitelmiin, suojattuun käyttöönottoon ja palautukseen.