blob: aac2ed9164bac030282262ead7e0ac8227ba2b48 [file] [log] [blame]
# 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