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
# 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:
# 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 |
# 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 |
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.
vendor/bin/merql snapshot baseline
Väljund:
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.
vendor/bin/merql diff baseline current
Väljund:
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.
vendor/bin/merql merge base ours theirs
Väljund:
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.
vendor/bin/merql merge base ours theirs --dry-run
Väljund:
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:
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.