# 2014 June 17 # # 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 FTS5 module. # # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix fts5ae # If SQLITE_ENABLE_FTS3 is defined, omit this file. ifcapable !fts3 { finish_test return } do_execsql_test 1.0 { CREATE VIRTUAL TABLE t1 USING fts5(a, b); INSERT INTO t1(t1) VALUES('pgsz=32'); } do_execsql_test 1.1 { INSERT INTO t1 VALUES('hello', 'world'); SELECT rowid FROM t1 WHERE t1 MATCH 'hello' ORDER BY rowid ASC; } {1} do_execsql_test 1.2 { INSERT INTO t1 VALUES('world', 'hello'); SELECT rowid FROM t1 WHERE t1 MATCH 'hello' ORDER BY rowid ASC; } {1 2} do_execsql_test 1.3 { INSERT INTO t1 VALUES('world', 'world'); SELECT rowid FROM t1 WHERE t1 MATCH 'hello' ORDER BY rowid ASC; } {1 2} do_execsql_test 1.4.1 { INSERT INTO t1 VALUES('hello', 'hello'); } do_execsql_test 1.4.2 { SELECT rowid FROM t1 WHERE t1 MATCH 'hello' ORDER BY rowid ASC; } {1 2 4} #------------------------------------------------------------------------- # do_execsql_test 2.0 { CREATE VIRTUAL TABLE t2 USING fts5(x, y); INSERT INTO t2 VALUES('u t l w w m s', 'm f m o l t k o p e'); INSERT INTO t2 VALUES('f g q e l n d m z x q', 'z s i i i m f w w f n g p'); } do_execsql_test 2.1 { SELECT rowid, fts5_test(t2, 'poslist') FROM t2 WHERE t2 MATCH 'm' ORDER BY rowid; } { 1 {{0.5 1.0 1.2}} 2 {{0.7 1.5}} } do_execsql_test 2.2 { SELECT rowid, fts5_test(t2, 'poslist') FROM t2 WHERE t2 MATCH 'u OR q' ORDER BY rowid; } { 1 {0.0 {}} 2 {{} {0.2 0.10}} } do_execsql_test 2.3 { SELECT rowid, fts5_test(t2, 'poslist') FROM t2 WHERE t2 MATCH 'y:o' ORDER BY rowid; } { 1 {{1.3 1.7}} } #------------------------------------------------------------------------- # do_execsql_test 3.0 { CREATE VIRTUAL TABLE t3 USING fts5(x, y); INSERT INTO t3 VALUES( 'j f h o x x a z g b a f a m i b', 'j z c z y x w t'); INSERT INTO t3 VALUES( 'r c', ''); } do_execsql_test 3.1 { SELECT rowid, fts5_test(t3, 'poslist') FROM t3 WHERE t3 MATCH 'NEAR(a b)'; } { 1 {{0.6 0.10 0.12} {0.9 0.15}} } do_execsql_test 3.2 { SELECT rowid, fts5_test(t3, 'poslist') FROM t3 WHERE t3 MATCH 'NEAR(r c)'; } { 2 {0.0 0.1} } do_execsql_test 3.3 { INSERT INTO t3 VALUES('k x j r m a d o i z j', 'r t t t f e b r x i v j v g o'); SELECT rowid, fts5_test(t3, 'poslist') FROM t3 WHERE t3 MATCH 'a OR b AND c'; } { 3 {0.5 {} {}} 1 {{0.6 0.10 0.12} {0.9 0.15} 1.2} } #------------------------------------------------------------------------- # do_execsql_test 4.0 { CREATE VIRTUAL TABLE t4 USING fts5(x, y); INSERT INTO t4 VALUES('k x j r m a d o i z j', 'r t t t f e b r x i v j v g o'); } do_execsql_test 4.1 { SELECT rowid, fts5_test(t4, 'poslist') FROM t4 WHERE t4 MATCH 'a OR b AND c'; } { 1 {0.5 {} {}} } #------------------------------------------------------------------------- # Test that the xColumnSize() API works. # reset_db do_execsql_test 5.1 { CREATE VIRTUAL TABLE t5 USING fts5(x, y); INSERT INTO t5 VALUES('a b c d', 'e f g h i j'); INSERT INTO t5 VALUES('', 'a'); INSERT INTO t5 VALUES('a', ''); } do_execsql_test 5.2 { SELECT rowid, fts5_test(t5, 'columnsize') FROM t5 WHERE t5 MATCH 'a' ORDER BY rowid DESC; } { 3 {1 0} 2 {0 1} 1 {4 6} } finish_test