0f0d3ddf71
turning DEFENSIVE off in order to dodgy things to the database for testing purposes. No all of those cases are yet handled, so "make test" does not run to completion. FossilOrigin-Name: a1d6c6712c3304fd736077432c8c180692cf7d79be7f3a073510b6dab0eb951f
149 lines
3.8 KiB
Plaintext
149 lines
3.8 KiB
Plaintext
# 2006 September 9
|
|
#
|
|
# 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. The
|
|
# focus of this script is testing the FTS3 module.
|
|
#
|
|
# $Id: fts3aa.test,v 1.1 2007/08/20 17:38:42 shess Exp $
|
|
#
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
set testprefix fts3corrupt4
|
|
|
|
# If SQLITE_ENABLE_FTS3 is defined, omit this file.
|
|
ifcapable !fts3 {
|
|
finish_test
|
|
return
|
|
}
|
|
|
|
do_execsql_test 1.0 {
|
|
BEGIN;
|
|
CREATE VIRTUAL TABLE ft USING fts3;
|
|
INSERT INTO ft VALUES('aback');
|
|
INSERT INTO ft VALUES('abaft');
|
|
INSERT INTO ft VALUES('abandon');
|
|
COMMIT;
|
|
}
|
|
|
|
proc blob {a} { binary decode hex $a }
|
|
db func blob blob
|
|
|
|
do_execsql_test 1.1 {
|
|
SELECT quote(root) FROM ft_segdir;
|
|
} {X'0005616261636B03010200030266740302020003046E646F6E03030200'}
|
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 1.2 {
|
|
UPDATE ft_segdir SET root = blob(
|
|
'0005616261636B03010200 FFFFFFFF0702 66740302020003046E646F6E03030200'
|
|
);
|
|
}
|
|
|
|
do_catchsql_test 1.3 {
|
|
SELECT * FROM ft WHERE ft MATCH 'abandon';
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
reset_db
|
|
do_execsql_test 2.0.0 {
|
|
CREATE VIRTUAL TABLE ft USING fts3;
|
|
INSERT INTO ft(ft) VALUES('nodesize=32');
|
|
}
|
|
do_test 2.0.1 {
|
|
for {set i 0} {$i < 12} {incr i} {
|
|
execsql {
|
|
BEGIN;
|
|
INSERT INTO ft VALUES('abc' || $i);
|
|
INSERT INTO ft VALUES('abc' || $i || 'x' );
|
|
INSERT INTO ft VALUES('abc' || $i || 'xx' );
|
|
COMMIT
|
|
}
|
|
}
|
|
execsql {
|
|
SELECT count(*) FROM ft_segdir;
|
|
SELECT count(*) FROM ft_segments;
|
|
}
|
|
} {12 0}
|
|
|
|
do_execsql_test 2.1 {
|
|
INSERT INTO ft(ft) VALUES('merge=1,4');
|
|
SELECT count(*) FROM ft_segdir;
|
|
SELECT count(*) FROM ft_segments;
|
|
} {12 3}
|
|
|
|
do_execsql_test 2.2 {
|
|
SELECT quote(block) FROM ft_segments WHERE blockid=2
|
|
} {X'00056162633130031F0200'}
|
|
|
|
db func blob blob
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 2.3.1 {
|
|
UPDATE ft_segments SET block =
|
|
blob('00056162633130031F0200 FFFFFFFF07FF55 66740302020003046E646F6E03030200')
|
|
WHERE blockid=2;
|
|
} {}
|
|
do_catchsql_test 2.3.2 {
|
|
INSERT INTO ft(ft) VALUES('merge=1,4');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_execsql_test 2.4.1 {
|
|
UPDATE ft_segments SET block =
|
|
blob('00056162633130031F0200 02FFFFFFFF07 66740302020003046E646F6E03030200')
|
|
WHERE blockid=2;
|
|
} {}
|
|
do_catchsql_test 2.4.2 {
|
|
INSERT INTO ft(ft) VALUES('merge=1,4');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_execsql_test 2.5.1 {
|
|
UPDATE ft_segments SET block =
|
|
blob('00056162633130031F0200 0202 6674 FFFFFF070302020003046E646F6E030200')
|
|
WHERE blockid=2;
|
|
} {}
|
|
do_catchsql_test 2.5.2 {
|
|
INSERT INTO ft(ft) VALUES('merge=1,4');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
reset_db
|
|
do_execsql_test 3.0.0 {
|
|
CREATE VIRTUAL TABLE ft USING fts3;
|
|
INSERT INTO ft(ft) VALUES('nodesize=32');
|
|
}
|
|
do_test 3.0.1 {
|
|
execsql BEGIN
|
|
for {set i 0} {$i < 20} {incr i} {
|
|
execsql { INSERT INTO ft VALUES('abc' || $i) }
|
|
}
|
|
execsql {
|
|
COMMIT;
|
|
SELECT count(*) FROM ft_segdir;
|
|
SELECT count(*) FROM ft_segments;
|
|
}
|
|
} {1 5}
|
|
|
|
do_execsql_test 3.1 {
|
|
SELECT quote(root) FROM ft_segdir
|
|
} {X'0101056162633132040136030132030136'}
|
|
|
|
db func blob blob
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 3.2 {
|
|
UPDATE ft_segdir
|
|
SET root = blob('0101056162633132FFFFFFFF070236030132030136');
|
|
}
|
|
|
|
do_catchsql_test 3.1 {
|
|
SELECT * FROM ft WHERE ft MATCH 'abc20'
|
|
} {1 {database disk image is malformed}}
|
|
|
|
finish_test
|