| Index: third_party/sqlite/src/test/recover0.test
|
| diff --git a/third_party/sqlite/src/test/recover0.test b/third_party/sqlite/src/test/recover0.test
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aac2ed9164bac030282262ead7e0ac8227ba2b48
|
| --- /dev/null
|
| +++ b/third_party/sqlite/src/test/recover0.test
|
| @@ -0,0 +1,532 @@
|
| +# 2012 January 4 {}
|
| +#
|
| +# The author disclaims copyright to this source code. In place of
|
| +# a legal notice, here is a blessing:
|
| +#
|
| +# May you do good and not evil.
|
| +# May you find forgiveness for yourself and forgive others.
|
| +# May you share freely, never taking more than you give.
|
| +#
|
| +#***********************************************************************
|
| +# This file implements regression tests for SQLite library.
|
| +#
|
| +# Test recover module syntax.
|
| +#
|
| +# $Id$
|
| +
|
| +# TODO(shess): Test with attached databases.
|
| +
|
| +# TODO(shess): Handle column mismatches? As things stand, the code
|
| +# only needs to pull the root page, so that may not be completely
|
| +# feasible.
|
| +
|
| +set testdir [file dirname $argv0]
|
| +source $testdir/tester.tcl
|
| +
|
| +db eval {
|
| + DROP TABLE IF EXISTS backing;
|
| + CREATE TABLE backing (t TEXT);
|
| +
|
| + DROP TABLE IF EXISTS backing2;
|
| + CREATE TABLE backing2 (id INTEGER PRIMARY KEY, t TEXT);
|
| +}
|
| +
|
| +# Baseline create works.
|
| +do_test recover-syntax-0.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {0 {}}
|
| +
|
| +# Can specify database.
|
| +do_test recover-syntax-0.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + main.backing,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {0 {}}
|
| +
|
| +# Can specify sqlite_master.
|
| +do_test recover-syntax-0.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + sqlite_master,
|
| + type TEXT,
|
| + name TEXT,
|
| + tbl_name TEXT,
|
| + rootpage INTEGER,
|
| + sql TEXT
|
| + );
|
| + }
|
| +} {0 {}}
|
| +
|
| +# Fails if virtual table is not in the temp database.
|
| +do_test recover-syntax-1.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE syntax USING recover(
|
| + backing,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {recover table must be in temp database}}
|
| +
|
| +# Fails if mentions missing table.
|
| +do_test recover-syntax-2.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + snacking,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {unable to find backing table}}
|
| +
|
| +# Fails if mentions missing database.
|
| +do_test recover-syntax-2.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + db.backing,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {unable to find backing table}}
|
| +
|
| +# Fails if mentions garbage backing.
|
| +do_test recover-syntax-2.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + main.backing excess,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {unable to find backing table}}
|
| +
|
| +# Database only fails.
|
| +do_test recover-syntax-2.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + main.,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {ill-formed table specifier}}
|
| +
|
| +# Table only fails.
|
| +do_test recover-syntax-2.4 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax;}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + .backing,
|
| + t TEXT
|
| + );
|
| + }
|
| +} {1 {ill-formed table specifier}}
|
| +
|
| +# Manifest typing.
|
| +do_test recover-syntax-3.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t {} 0 {} 0}
|
| +
|
| +# ANY as an alternative for manifest typing.
|
| +do_test recover-syntax-3.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t ANY
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t {} 0 {} 0}
|
| +
|
| +# ANY NOT NULL
|
| +do_test recover-syntax-3.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t ANY NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t {} 1 {} 0}
|
| +
|
| +# ANY STRICT is not sensible.
|
| +do_test recover-syntax-3.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v ANY STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +# TEXT column by type works.
|
| +do_test recover-syntax-4.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t TEXT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t TEXT 0 {} 0}
|
| +
|
| +# TEXT NOT NULL
|
| +do_test recover-syntax-4.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t TEXT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t TEXT 1 {} 0}
|
| +
|
| +# TEXT STRICT
|
| +do_test recover-syntax-4.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t TEXT STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t TEXT 0 {} 0}
|
| +
|
| +# TEXT STRICT NOT NULL
|
| +do_test recover-syntax-4.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + t TEXT STRICT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 t TEXT 1 {} 0}
|
| +
|
| +# INTEGER
|
| +do_test recover-syntax-5.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + i INTEGER
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 i INTEGER 0 {} 0}
|
| +
|
| +# INTEGER NOT NULL
|
| +do_test recover-syntax-5.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + i INTEGER NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 i INTEGER 1 {} 0}
|
| +
|
| +# INTEGER STRICT
|
| +do_test recover-syntax-5.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + i INTEGER STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 i INTEGER 0 {} 0}
|
| +
|
| +# INTEGER STRICT NOT NULL
|
| +do_test recover-syntax-5.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + i INTEGER STRICT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 i INTEGER 1 {} 0}
|
| +
|
| +# BLOB
|
| +do_test recover-syntax-6.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + b BLOB
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 b BLOB 0 {} 0}
|
| +
|
| +# BLOB NOT NULL
|
| +do_test recover-syntax-6.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + b BLOB NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 b BLOB 1 {} 0}
|
| +
|
| +# BLOB STRICT
|
| +do_test recover-syntax-6.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + b BLOB STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 b BLOB 0 {} 0}
|
| +
|
| +# BLOB STRICT NOT NULL
|
| +do_test recover-syntax-6.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + b BLOB STRICT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 b BLOB 1 {} 0}
|
| +
|
| +# FLOAT
|
| +do_test recover-syntax-7.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f FLOAT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f FLOAT 0 {} 0}
|
| +
|
| +# FLOAT NOT NULL
|
| +do_test recover-syntax-7.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f FLOAT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f FLOAT 1 {} 0}
|
| +
|
| +# FLOAT STRICT
|
| +do_test recover-syntax-7.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f FLOAT STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f FLOAT 0 {} 0}
|
| +
|
| +# FLOAT STRICT NOT NULL
|
| +do_test recover-syntax-7.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f FLOAT STRICT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f FLOAT 1 {} 0}
|
| +
|
| +# NUMERIC
|
| +do_test recover-syntax-8.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f NUMERIC
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f NUMERIC 0 {} 0}
|
| +
|
| +# NUMERIC NOT NULL
|
| +do_test recover-syntax-8.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f NUMERIC NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f NUMERIC 1 {} 0}
|
| +
|
| +# NUMERIC STRICT
|
| +do_test recover-syntax-8.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f NUMERIC STRICT
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f NUMERIC 0 {} 0}
|
| +
|
| +# NUMERIC STRICT NOT NULL
|
| +do_test recover-syntax-8.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + f NUMERIC STRICT NOT NULL
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 f NUMERIC 1 {} 0}
|
| +
|
| +# ROWID
|
| +do_test recover-syntax-9.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing2,
|
| + id ROWID,
|
| + v
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
|
| +
|
| +# ROWID NOT NULL (is default)
|
| +do_test recover-syntax-9.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing2,
|
| + id ROWID NOT NULL,
|
| + v
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
|
| +
|
| +# ROWID STRICT
|
| +do_test recover-syntax-9.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing2,
|
| + id ROWID STRICT,
|
| + v
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
|
| +
|
| +# ROWID STRICT NOT NULL (is default)
|
| +do_test recover-syntax-9.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + execsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing2,
|
| + id ROWID STRICT NOT NULL,
|
| + v
|
| + );
|
| + PRAGMA table_info(syntax);
|
| + }
|
| +} {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
|
| +
|
| +# Invalid type info is not ignored.
|
| +do_test recover-syntax-10.0 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v GARBAGE
|
| + );
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +# Extraneous type info is not ignored.
|
| +do_test recover-syntax-10.1 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v INTEGER GARBAGE
|
| + );
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +# Extraneous type info is not ignored.
|
| +do_test recover-syntax-10.2 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v INTEGER NOT NULL GARBAGE
|
| + );
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +# Multiple types don't work.
|
| +do_test recover-syntax-10.3 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v INTEGER FLOAT BLOB
|
| + );
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +# Multiple types don't work.
|
| +do_test recover-syntax-10.4 {
|
| + db eval {DROP TABLE IF EXISTS temp.syntax}
|
| + catchsql {
|
| + CREATE VIRTUAL TABLE temp.syntax USING recover(
|
| + backing,
|
| + v INTEGER NOT NULL TEXT
|
| + );
|
| + }
|
| +} {1 {unable to parse column 0}}
|
| +
|
| +finish_test
|
|
|