Ugrás a tartalomhoz

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
PHP
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.

PHP
// 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
}