Siirry sisältöön

Skeeman kelpoisuuden tarkistus

Kun skeemat muuttuvat tilannevedosten välillä (sarakkeita lisätään, poistetaan tai nimetään uudelleen), merql havaitsee ja raportoi erot. Skeemavirheet eivät estä yhdistämistä, mutta ne tuodaan esiin, jotta kutsuja voi päättää, miten toimia.

Havaitseminen

SchemaValidator::validate() vertaa kunkin taulun sarakejoukkoja base-, ours- ja theirs-tilannevedoksissa. Se raportoi:

  • Ours-tilanteeseen lisätyt sarakkeet (ovat ours-tilanteessa mutta eivät basessa)
  • Ours-tilanteesta poistetut sarakkeet (ovat basessa mutta eivät ours-tilanteessa)
  • Theirs-tilanteeseen lisätyt sarakkeet
  • Theirs-tilanteesta poistetut sarakkeet
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ä havaitaan

Muutos Havaitaan Huomautukset
Sarake lisätty Kyllä Raportoidaan puolen mukaan (ours/theirs)
Sarake poistettu Kyllä Raportoidaan puolen mukaan
Sarakkeen tyyppi muuttunut Ei Tyypit tallennetaan, mutta niitä ei verrata
Sarake nimetty uudelleen Ei Näkyy lisäyksenä ja poistona
Pääavain muuttunut Ei Identiteetti määräytyy tilannevedoksen tallennushetkellä

Toiminta yhdistämisen aikana

Jos sarake on yhdessä tilannevedoksessa mutta puuttuu toisesta, yhdistäminen käsittelee puuttuvan sarakearvon arvona null. Tämä tarkoittaa seuraavaa:

  • Theirs-tilanteeseen lisätty sarake, jonka arvo ei ole null, näkyy arvona null -> value (hyväksytty theirs-muutos)
  • Theirs-tilanteesta poistettu sarake näkyy siten, että sen arvo on null kaikilla theirs-tilanteen riveillä

Yhdistäminen jatkuu ja tuottaa tuloksen. Skeemaerot ovat tiedoksi. Kutsujan tulee varmistaa, että kohdetietokannan skeema vastaa yhdistettyjä tietoja ennen niiden käyttöönottoa.

Erojen tarkastelu

Skeemaerot ovat saatavilla sekä kohteessa ThreeWayMerge (metodin schemaMismatches() kautta) että kohteessa MergeResult (metodien schemaMismatches() ja hasSchemaMismatches() kautta). Ne säilyvät kohteen ConflictResolver::resolve() läpi.

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
}