2018-11-03 19:51:30 +03:00
|
|
|
# 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'}
|
|
|
|
|
2018-11-06 22:26:04 +03:00
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
2018-11-03 19:51:30 +03:00
|
|
|
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
|
2018-11-06 22:26:04 +03:00
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
2018-11-03 19:51:30 +03:00
|
|
|
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
|
2018-11-06 22:26:04 +03:00
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
2018-11-03 19:51:30 +03:00
|
|
|
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}}
|
|
|
|
|
2018-12-21 14:53:43 +03:00
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
reset_db
|
|
|
|
do_execsql_test 4.0 {
|
|
|
|
CREATE VIRTUAL TABLE t1 USING fts3();
|
|
|
|
INSERT INTO t1 VALUES('one two three');
|
|
|
|
UPDATE t1_segdir SET start_block = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
do_catchsql_test 4.1 {
|
|
|
|
SELECT * FROM t1 WHERE t1 MATCH 'one';
|
|
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_catchsql_test 4.2 {
|
|
|
|
SELECT * FROM t1 WHERE t1 MATCH 'two';
|
|
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_catchsql_test 4.3 {
|
|
|
|
SELECT * FROM t1 WHERE t1 MATCH 'three';
|
|
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_execsql_test 4.4 {
|
|
|
|
INSERT INTO t1(t1) VALUES('optimize');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-11-03 19:51:30 +03:00
|
|
|
finish_test
|