# 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