Μετάβαση στο περιεχόμενο

Επικύρωση σχήματος

Όταν τα σχήματα εξελίσσονται μεταξύ στιγμιότυπων (με προσθήκη, αφαίρεση ή μετονομασία στηλών), το merql εντοπίζει και αναφέρει αυτές τις διαφορές. Οι ασυμφωνίες σχήματος δεν εμποδίζουν τη συγχώνευση, αλλά επισημαίνονται ώστε ο καλών να αποφασίσει πώς θα προχωρήσει.

Εντοπισμός

Το SchemaValidator::validate() συγκρίνει τα σύνολα στηλών κάθε πίνακα στα στιγμιότυπα base, ours και theirs. Αναφέρει:

  • Στήλες που προστέθηκαν στο ours (υπάρχουν στο ours αλλά όχι στο base)
  • Στήλες που αφαιρέθηκαν από το ours (υπάρχουν στο base αλλά όχι στο ours)
  • Στήλες που προστέθηκαν στο theirs
  • Στήλες που αφαιρέθηκαν από το theirs
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"
    }
}

Τι εντοπίζεται

Αλλαγή Εντοπίζεται Σημειώσεις
Προσθήκη στήλης Ναι Αναφέρεται ανά πλευρά (ours/theirs)
Αφαίρεση στήλης Ναι Αναφέρεται ανά πλευρά
Αλλαγή τύπου στήλης Όχι Οι τύποι αποθηκεύονται, αλλά δεν συγκρίνονται
Μετονομασία στήλης Όχι Εμφανίζεται ως προσθήκη και αφαίρεση
Αλλαγή πρωτεύοντος κλειδιού Όχι Η ταυτοποίηση ορίζεται κατά τη δημιουργία του στιγμιότυπου

Συμπεριφορά κατά τη συγχώνευση

Όταν μια στήλη υπάρχει σε ένα στιγμιότυπο αλλά όχι σε άλλο, η συγχώνευση θεωρεί ότι η τιμή της στήλης που λείπει είναι null. Αυτό σημαίνει:

  • Μια στήλη που προστέθηκε στο theirs με μη κενή τιμή εμφανίζεται ως null -> value (γίνεται αποδεκτή ως αλλαγή του theirs)
  • Μια στήλη που αφαιρέθηκε από το theirs εμφανίζεται σαν να έχει null για όλες τις γραμμές στο theirs

Η συγχώνευση συνεχίζεται και παράγει αποτέλεσμα. Οι ασυμφωνίες σχήματος είναι ενημερωτικές. Ο καλών πρέπει να επαληθεύσει ότι το σχήμα της βάσης δεδομένων-στόχου αντιστοιχεί στα συγχωνευμένα δεδομένα πριν από την εφαρμογή τους.

Πρόσβαση στις ασυμφωνίες

Οι ασυμφωνίες σχήματος είναι διαθέσιμες τόσο στο ThreeWayMerge (μέσω του schemaMismatches()) όσο και στο MergeResult (μέσω των schemaMismatches() και hasSchemaMismatches()). Διατηρούνται μέσω του ConflictResolver::resolve().

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
}