Προεπισκόπηση δοκιμαστικής εκτέλεσης
Το DryRun::generate() παράγει αναγνώσιμες από τον άνθρωπο εντολές SQL με τις τιμές ενσωματωμένες. Χρησιμοποιήστε το για να ελέγξετε τι θα έκανε μια συγχώνευση πριν την εφαρμόσετε στη βάση δεδομένων.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Η προεπισκόπηση περιέχει μία εντολή για κάθε λειτουργία του αποτελέσματος, ομαδοποιημένη όπως τις ομαδοποιεί το
Applier: πρώτα οι εισαγωγές, έπειτα οι ενημερώσεις και τέλος οι διαγραφές. Για το πλήρες
αποτέλεσμα μιας συγχώνευσης, περιλαμβάνονται όλες οι αλλαγές και των δύο πλευρών σε σχέση με τη βάση, δηλαδή όσες
θα εκτελούσε το Merql::apply() σε μια βάση δεδομένων που εξακολουθεί να περιέχει
τη βάση. Δείτε σε προεπισκόπηση ένα επιλεγμένο αποτέλεσμα για να εμφανίσετε μόνο τις εντολές
των λειτουργιών που σκοπεύετε να εφαρμόσετε.
Παράδειγμα εξόδου
INSERT INTO `posts` (`id`, `title`, `content`, `status`) VALUES ('42', 'New Post', 'Body text', 'draft');
UPDATE `posts` SET `title` = 'Updated Title', `status` = 'publish' WHERE `id` = '42';
DELETE FROM `posts` WHERE `id` = '99';
Οι ενημερώσεις ορίζουν κάθε στήλη που δεν αφορά την ταυτότητα και περιλαμβάνεται στη λειτουργία, όχι μόνο όσες άλλαξαν. Μια ενημέρωση που δεν θα όριζε καμία στήλη παραλείπεται.
Μορφοποίηση τιμών
Όλες οι τιμές περικλείονται σε μονά εισαγωγικά. Οι ειδικοί χαρακτήρες διαφεύγονται για ασφαλή εμφάνιση:
| Χαρακτήρας | Διαφεύγει ως |
|---|---|
\ (ανάστροφη κάθετος) |
\\ |
' (μονό εισαγωγικό) |
'' |
\0 (μηδενικό byte) |
\0 |
\n (νέα γραμμή) |
\n |
\r (επιστροφή υποδεσμού) |
\r |
Οι τιμές NULL εμφανίζονται ως το κυριολεκτικό χωρίς εισαγωγικά NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Παράμετροι
Το DryRun::generate() δέχεται τις ίδιες παραμέτρους με το SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Παράμετρος | Τύπος | Περιγραφή |
|---|---|---|
$result |
MergeResult |
Το αποτέλεσμα συγχώνευσης για προεπισκόπηση. |
$base |
?Snapshot |
Βασικό στιγμιότυπο για στήλες ταυτότητας. Αν δεν υπάρχει, χρησιμοποιείται το $result->baseSnapshot(). |
$fkDependencies |
array |
Αντιστοίχιση εξαρτήσεων ξένων κλειδιών για τον καθορισμό σειράς. |
$driver |
?Driver |
Οδηγός βάσης δεδομένων για την παράθεση αναγνωριστικών. |
Δοκιμαστική εκτέλεση και SqlGenerator
Το DryRun περιβάλλει το SqlGenerator. Η διαφορά:
- Το
SqlGenerator::generate()επιστρέφει πίνακες['sql' => '...', 'params' => [...]]για εκτέλεση προετοιμασμένων εντολών από προσαρμογέα. - Το
DryRun::generate()επιστρέφει απλές συμβολοσειρές με ενσωματωμένες τιμές, για ανάγνωση από ανθρώπους.
Μην εκτελείτε την έξοδο δοκιμαστικής εκτέλεσης ως SQL. Είναι μορφοποιημένη για εμφάνιση, όχι για ασφαλή εκτέλεση. Για εκτελέσεις συγχώνευσης, χρησιμοποιήστε απευθείας το Applier ή το SqlGenerator με προετοιμασμένες εντολές.
Χρήση μέσω της πρόσοψης
Μέσω της πρόσοψης, καταγράψτε ένα αποτέλεσμα συγχώνευσης και δείτε το σε προεπισκόπηση:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Ή από το CLI με τη σημαία --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
Το CLI εκτυπώνει τις εντολές χωρίς σειρά ξένων κλειδιών ή οδηγό,
οπότε τα αναγνωριστικά χρησιμοποιούν τα προεπιλεγμένα εισαγωγικά ανάστροφης αποστρόφου ανεξάρτητα από τη βάση δεδομένων. Περνά
το βασικό στιγμιότυπο για τις στήλες ταυτότητας. Η συγχώνευσή του γίνεται σε επίπεδο στήλης, όπως
στο Merql::merge().