Liigu sisu juurde

CLI viide

merql sisaldab CLI-i hetktõmmiste tegemiseks, erinevuste arvutamiseks ja liitmiste käivitamiseks otse terminalist. Composer installib selle nimega vendor/bin/merql; merql-i lähtekoodi väljavõttes on selle nimi bin/merql.

vendor/bin/merql töötab sõltuvusena installimisel, sest merql 0.4.1. Varasemad versioonid otsisid Composer autoloaderit ainult paketi enda vendor/ kataloogist ja ebaõnnestusid, kui merql oli installitud sõltuvusena.

Kiire alustamine

Shell
# Capture a baseline from your database.
export MERQL_DB_DSN="sqlite:/path/to/db.sqlite"
vendor/bin/merql snapshot base

# Make some changes, then capture again.
vendor/bin/merql snapshot current

# See what changed.
vendor/bin/merql diff base current

Kolmesuunaliseks liitmiseks tuleb meie ja nende hetktõmmised teha kahest baasist lahknenud andmebaasist. Suunake MERQL_DB_DSN iga hetktõmmise jaoks õigesse andmebaasi:

Shell
# Base: live before the sandbox was copied from it.
MERQL_DB_DSN="sqlite:/data/live.sqlite" vendor/bin/merql snapshot base

# ... copy live.sqlite to sandbox.sqlite, then both databases change ...

MERQL_DB_DSN="sqlite:/data/sandbox.sqlite" vendor/bin/merql snapshot ours
MERQL_DB_DSN="sqlite:/data/live.sqlite" vendor/bin/merql snapshot theirs

# Three-way merge with dry-run preview.
vendor/bin/merql merge base ours theirs --dry-run

Kõigi kolme hetktõmmise järjestikune tegemine samast andmebaasist ei sobi liitmiseks: nende hetktõmmis sisaldaks juba meie muudatusi, mistõttu teatatakse igast meie lisatud reast kui konfliktist insert_insert.

Keskkonnamuutujad

CLI loeb andmebaasi ühenduse üksikasjad keskkonnamuutujatest. Ühenduse saate luua kas PDO DSN-stringi või üksikute MySQL parameetrite abil.

DSN-põhine ühendus

PDO-põhiste ühenduste jaoks kasutage väärtust MERQL_DB_DSN. See on soovitatav lähenemine SQLite ja mittestandardsete seadistuste puhul. DSN peab viitama MySQL või SQLite andmebaasile: CLI ei saa teiste andmebaasimootorite jaoks draiverit registreerida.

Muutuja Kirjeldus Näide
MERQL_DB_DSN Täielik PDO DSN-string sqlite:/path/to/db.sqlite
MERQL_DB_USER Kasutajanimi (DSN-i korral valikuline) root
MERQL_DB_PASS Parool (DSN-i korral valikuline) secret
Shell
# SQLite file.
export MERQL_DB_DSN="sqlite:/var/data/myapp.sqlite"

# MySQL via DSN.
export MERQL_DB_DSN="mysql:host=127.0.0.1;dbname=mydb;charset=utf8mb4"
export MERQL_DB_USER="root"
export MERQL_DB_PASS="secret"

Kasutage failipõhist SQLite andmebaasi. Iga CLI käsk käivitatakse eraldi protsessis, seega avab sqlite::memory: alati uue tühja andmebaasi ning selle hetktõmmis ei sisalda ühtegi tabelit.

MySQL lühivorm

Kui MERQL_DB_DSN pole määratud, kasutab CLI varuvariandina MySQL-põhiseid muutujaid.

Muutuja Vaikeväärtus Kirjeldus
MERQL_DB_NAME (nõutav) Andmebaasi nimi
MERQL_DB_HOST 127.0.0.1 MySQL host
MERQL_DB_PORT 3306 MySQL port
MERQL_DB_USER root MySQL kasutajanimi
MERQL_DB_PASS (tühi) MySQL parool
MERQL_DB_ADAPTER pdo Seadke väärtuseks mysqli, et kasutada mysqli-adapterit
Shell
export MERQL_DB_NAME="wordpress"
export MERQL_DB_HOST="127.0.0.1"
export MERQL_DB_PORT="3306"
export MERQL_DB_USER="root"
export MERQL_DB_PASS="password"

Käsud

merql snapshot <name>

Salvestage keskkonnamuutujates määratud andmebaasi praegune olek nimega hetktõmmisena. See on ainus käsk, mis loob ühenduse andmebaasiga.

Shell
vendor/bin/merql snapshot baseline

Väljund:

Kood
Snapshot 'baseline' saved
Tables: posts, comments, users, settings

Hetktõmmised salvestatakse kataloogi .merql/snapshots/ töökausta all JSON-failidena (vt Hetktõmmiste talletamine). Nimi võib sisaldada ainult tähti ja numbreid, sidekriipse ning allkriipse.

Tüüpiline töövoog: tehke enne muudatuste tegemist hetktõmmis ja seejärel teine pärast muudatuste tegemist. Need kaks hetktõmmist on võrdluse või liitmise aluseks.

merql diff <base> <current>

Võrrelge kaht nimega hetktõmmist ja kuvage erinevuste kokkuvõte.

Shell
vendor/bin/merql diff baseline current

Väljund:

Kood
Changeset: baseline -> current
  Inserts: 3
  Updates: 7
  Deletes: 1

Mõlemad hetktõmmised peavad juba olemas olema (varem väärtusega merql snapshot tehtud). Võrdlus ei vaja andmebaasiühendust, sest see töötab salvestatud hetktõmmisefailidega.

merql merge <base> <ours> <theirs>

Tehke kolme nimega hetktõmmise põhjal kolmesuunaline liitmine.

Shell
vendor/bin/merql merge base ours theirs

Väljund:

Kood
Merge: base + ours + theirs
  Operations: 12
  Conflicts:  0
  Clean:      yes

Kõik kolm hetktõmmist peavad juba olemas olema. Liitmine ei vaja andmebaasiühendust, sest see töötab salvestatud hetktõmmisefailidega, ega kirjuta kunagi andmebaasi: CLI-il pole rakendamise käsku. Kasutage liitmistulemuse rakendamiseks käsku PHP API.

CLI ühendab veerutasemel. See ei rakenda TEXT- ega JSON-veergudele lahtritasemel ühendamist, seega on sama veeru kaks erinevat muudatust siin alati konflikt (#7). Lahtritasemel ühendamiseks kasutage ThreeWayMerge koos CellMergeConfig-ga PHP-s.

--dry-run

Lisage lipp --dry-run, et vaadata eelvaates SQL-lauseid, mille ühendamine looks, ilma midagi käivitamata. Laused kirjeldavad, kuidas baasolukorrast ühendatud tulemuseni jõuda, seega sisaldavad need mõlema poole muudatusi.

Shell
vendor/bin/merql merge base ours theirs --dry-run

Väljund:

Kood
Merge: base + ours + theirs
  Operations: 3
  Conflicts:  0
  Clean:      yes

Dry run SQL:
  INSERT INTO `posts` (`id`, `title`, `status`) VALUES ('10', 'New Post', 'draft');
  UPDATE `posts` SET `title` = 'Updated Title' WHERE `id` = '5';
  DELETE FROM `comments` WHERE `id` = '3';

Arenduskäsud

merqli hoidla väljavõttes on bin/ all rohkem skripte oraaklipõhise testikomplekti jaoks. Need ei kuulu Composer paketti, seega on sõltuvuste paigaldamisel saadaval ainult vendor/bin/merql. Käivitage need hoidla juurkataloogist pärast composer install.

Käsk Kirjeldus
./bin/oracle <name> Arvutab stsenaariumi eeldatava ühendamistulemuse
./bin/actual <name> Käivitab merqli stsenaariumil ja salvestab väljundi
./bin/compare <name> Võrdleb oraakli ja tegelikku väljundit
./bin/test-scenario <name> Täielik töövoog: seadistamine, oraakel, tegelik tulemus, võrdlus
./bin/test-regression Käivitab kõik stsenaariumid
./bin/test-regression --category clean Käivitab ühe kategooria: clean, conflict, identity, types, scale või edge
./bin/test-regression --fast Ainult läbimise või nurjumise tulemus, aruanneteta
./bin/verify-compliance Täielik vastavusaruanne
./bin/verify-all PHPStan + koodistiil + PHPUnit + oraakli regressioonitest

bin/test-regression aktsepteerib ka väärtust --jobs, kuid eirab seda praegu ja käivitab stsenaariumid üksteise järel (#5). Tundmatu --category korral kuvatakse No scenarios found ja väljutakse edukalt.

Stsenaariumide ülesehituse kohta vaadake testimisstrateegiat.

Väljumisolek

merql snapshot, diff ja merge väljuvad olekuga 1, kui argument puudub; snapshot teeb sama ka siis, kui ühendust pole seadistatud. Puuduva hetktõmmise korral lõpeb käsk käsitlemata SnapshotException-iga ja nullist erineva olekuga. Tundmatu käsu korral kuvatakse Unknown command, kuid praegu väljutakse olekuga 0 (#3).

Hetktõmmiste salvestamine

Hetktõmmised salvestatakse töökataloogi suhtes asukohta .merql/snapshots/. Iga hetktõmmis on üks JSON-fail nimega <name>.json. Käivitage kõik käsud samast kataloogist, et need leiaksid üksteise hetktõmmised.

CLI-l pole teise asukoha määramiseks valikut ega keskkonnamuutujat (#8). Selle kasutamiseks liikuge enne käivitamist teise töökataloogi. Määrake kataloog asukohas PHP enne hetktõmmiste salvestamist või laadimist:

PHP
use Merql\Snapshot\SnapshotStore;

SnapshotStore::setDirectory('/var/data/merql-snapshots');

Hetktõmmiste failid on teisaldatavad. Saate neid kopeerida arvutite vahel, lisada versioonihaldusse või jagada ühiseks silumiseks. CLI abil salvestatud hetktõmmise saab laadida käsuga SnapshotStore::load() rakenduses PHP ja ka vastupidi, kui mõlemad kasutavad sama kataloogi.