Sémaellenőrzés
Ha a pillanatfelvételek között változik a séma (oszlopok hozzáadása, eltávolítása vagy átnevezése), a merql észleli és jelenti ezeket az eltéréseket. A sémák közötti eltérések nem akadályozzák a merge-et, de láthatóvá válnak, így a hívó fél eldöntheti, hogyan járjon el.
Észlelés
A SchemaValidator::validate() összehasonlítja az egyes táblák oszlopkészletét a base, ours és theirs pillanatfelvételek között. A következőket jelenti:
- Az ours állapotban hozzáadott oszlopok (jelen vannak az ours-ban, de a base-ben nem)
- Az ours állapotból eltávolított oszlopok (jelen vannak a base-ben, de az ours-ban nem)
- A theirs állapotban hozzáadott oszlopok
- A theirs állapotból eltávolított oszlopok
use Merql\Merge\ThreeWayMerge;
$merge = new ThreeWayMerge();
$result = $merge->merge($base, $ours, $theirs);
if ($result->hasSchemaMismatches()) {
foreach ($result->schemaMismatches() as $mismatch) {
echo $mismatch->getMessage() . "\n";
// "Schema mismatch on table 'posts': columns added in theirs: subtitle"
}
}
Mit észlel
| Változás | Észleli | Megjegyzések |
|---|---|---|
| Oszlop hozzáadása | Igen | Oldalanként jelenti (ours/theirs) |
| Oszlop eltávolítása | Igen | Oldalanként jelenti |
| Oszloptípus megváltozása | Nem | A típusokat tárolja, de nem hasonlítja össze |
| Oszlop átnevezése | Nem | Hozzáadásként és eltávolításként jelenik meg |
| Elsődleges kulcs megváltozása | Nem | Az azonosító a pillanatfelvétel készítésekor rögzül |
Működés merge közben
Ha egy oszlop szerepel az egyik pillanatfelvételben, a másikban azonban nem, a merge a hiányzó oszlop értékét null értékként kezeli. Ez azt jelenti, hogy:
- A theirs állapotban hozzáadott, nem null értékű oszlop
null -> valueértékként jelenik meg (a theirs módosításaként elfogadva) - A theirs állapotból eltávolított oszlop minden sorban
nullértékkel jelenik meg a theirs állapotban
A merge lefut, és eredményt állít elő. A sémák közötti eltérések tájékoztató jellegűek. Alkalmazás előtt a hívó félnek ellenőriznie kell, hogy a céladatbázis sémája megfelel-e az egyesített adatoknak.
Az eltérések elérése
A sémaeltérések a ThreeWayMerge felületen (a schemaMismatches() segítségével) és a MergeResult felületen (a schemaMismatches() és a hasSchemaMismatches() segítségével) is elérhetők. A ConflictResolver::resolve() során is megmaradnak.
// On the merge result directly
$result->hasSchemaMismatches(); // bool
$result->schemaMismatches(); // list<SchemaException>
// Each mismatch is a SchemaException with a descriptive message
foreach ($result->schemaMismatches() as $e) {
// $e->getMessage() includes table name and column details
}