2015-08-10 2 views
4

Часть процедуры запуска в моем приложении проверяет базы данных SQLite с помощью API PRAGMA integrity_check;. Я ищу способ законно испортить базу данных SQLite, чтобы эта «проверка целостности» не удалась.Как смоделировать поврежденную базу данных SQLite

Я пытался испортить файл базы данных в текстовом редакторе, но это вызывает тип коррупции, который обнаруживается при открытии базы данных, намного раньше, чем мой запрос на проверку целостности.

Любые идеи?

ответ

3

PRAGMA writable_schema позволяет изменять схему базы данных за спиной SQLite, и таким образом нарушать ограничения:

$ sqlite3 test.db 
> CREATE TABLE t(x); 
> CREATE INDEX tx ON t(x); 
> INSERT INTO t VALUES (1), (1); 
> PRAGMA writable_schema = 1; 
> UPDATE sqlite_master 
> SET sql = 'CREATE UNIQUE INDEX tx ON t(x)' 
> WHERE type = 'index' AND name = 'tx'; 
> .quit 
$ sqlite3 test.db # reload 
> PRAGMA integrity_check; 
non-unique entry in index tx