Eine Datenbank mit verify prüfen
Vorläufige, ungeprüfte automatische Übersetzung. Im Zweifelsfall konsultieren Sie die englische Version, die als Referenzversion gilt.
kent verify vergleicht die Struktur einer Datenbank mit dem Schema, das dieser
Cordelia-Build anlegen würde, und meldet die Unterschiede.
Er liest nur und ist der Diagnosebefehl: Wo die anderen eine Datenbank ablehnen, die sie nicht lesen können, öffnet dieser sie trotzdem und sagt Ihnen, warum.
Übersicht
kent verify <dbfilename>
Eine Datenbank, die übereinstimmt
$ kent verify mydata.sqlite
Database: mydata.sqlite
No differences: every table this database has matches the schema this build creates.
$ echo $?
0
Eine Datenbank, die abweicht
Jeder Unterschied ist eine Zeile, und die Anzahl steht am Ende noch einmal, damit auch ein langer Bericht lesbar bleibt. Dies ist eine unter Schema 1 geschriebene Datenbank, geprüft von einem Build, der Schema 2 anlegt:
$ kent verify old.sqlite
Database: old.sqlite
difference: user_version: this build writes 2, the database reports 1
difference: Monitoring.intensity: the database says INTEGER, this build says REAL
difference: Monitoring.ascent: the database says INTEGER, this build says REAL
difference: Monitoring.descent: the database says INTEGER, this build says REAL
4 differences from the schema this build creates.
$ echo $?
1
Eine Spalte, die die Datenbank hat und Cordelia nicht anlegt, wird genauso gemeldet; das sehen Sie, wenn etwas außerhalb von Cordelia in die Datei geschrieben hat:
$ kent verify drifted.sqlite
Database: drifted.sqlite
difference: Session.my_extra_column: the database has this column, this build does not create it
1 difference from the schema this build creates.
$ echo $?
1
Er liest eine Datenbank, die die anderen ablehnen
info,
details,
files,
activities und
sports lehnen alle eine Datenbank ab, deren
user_version älter ist als erwartet. verify tut das
nicht, und zwar absichtlich: Eine falsche Version ist genau der Fall, den er
diagnostizieren soll, also würde ein Verweigern ihn nutzlos machen, wenn man ihn braucht.
Was er nicht prüft
Er vergleicht Struktur, nicht Inhalt: Tabellen, Spalten und ihre deklarierten Typen sowie die
Schemaversion. Er prüft weder die Daten in den Zeilen noch, ob SQLites eigenes Dateiformat
intakt ist. Für Letzteres ist SQLites PRAGMA integrity_check das richtige
Werkzeug.
Er meldet außerdem nur Unterschiede in Tabellen, die die Datenbank hat. Eine von Cordelia definierte Tabelle, die diese Datenbank nie angelegt hat, ist kein Befund, denn eine Datenbank legt nur an, was ihre importierten Daten brauchten. Das ist normal, und die veröffentlichten Sportdatenbanken sind alle so: 14 Tabellen von den 128, die das Schema definiert.
Exit-Codes
0, wenn nichts abweicht, 1, wenn irgendetwas abweicht. Damit ist er
als Test in einem Skript brauchbar, und deshalb gibt er neben den Zeilen auch eine Anzahl
aus.