# 2011 May 04 # # 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. # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE_ENABLE_FTS3 is defined, omit this file. ifcapable !fts3 { finish_test return } set testprefix fts3sort proc build_database {nRow} { db close forcedelete test.db sqlite3 db test.db set vocab [list aa ab ac ba bb bc ca cb cc da] expr srand(0) execsql { CREATE VIRTUAL TABLE t1 USING fts4 } for {set i 0} {$i < $nRow} {incr i} { set v [expr int(rand()*1000000)] set doc [list] for {set div 1} {$div < 1000000} {set div [expr $div*10]} { lappend doc [lindex $vocab [expr ($v/$div) % 10]] } execsql { INSERT INTO t1 VALUES($doc) } } } set nRow 1000 do_test 1.0 { build_database $nRow execsql { SELECT count(*) FROM t1 } } $nRow foreach {tn query} { 1 "SELECT docid, * FROM t1" 2 "SELECT docid, * FROM t1 WHERE t1 MATCH 'aa'" 3 "SELECT docid, * FROM t1 WHERE t1 MATCH 'a*'" 4 "SELECT docid, quote(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'a*'" 5 "SELECT docid, quote(matchinfo(t1,'pcnxals')) FROM t1 WHERE t1 MATCH 'b*'" 6 "SELECT docid, * FROM t1 WHERE t1 MATCH 'a* b* c*'" 7 "SELECT docid, * FROM t1 WHERE t1 MATCH 'aa OR da'" 8 "SELECT docid, * FROM t1 WHERE t1 MATCH 'nosuchtoken'" 9 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'aa OR da'" 10 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'aa OR nosuchtoken'" } { unset -nocomplain A B C D set A_list [list] set B_list [list] set C_list [list] set D_list [list] unset -nocomplain X db eval "$query ORDER BY rowid ASC" X { set A($X(docid)) [array get X] lappend A_list $X(docid) } unset -nocomplain X db eval "$query ORDER BY rowid DESC" X { set B($X(docid)) [array get X] lappend B_list $X(docid) } unset -nocomplain X db eval "$query ORDER BY docid ASC" X { set C($X(docid)) [array get X] lappend C_list $X(docid) } unset -nocomplain X db eval "$query ORDER BY docid DESC" X { set D($X(docid)) [array get X] lappend D_list $X(docid) } do_test 1.$tn.1 { set A_list } [lsort -integer -increasing $A_list] do_test 1.$tn.2 { set B_list } [lsort -integer -decreasing $B_list] do_test 1.$tn.3 { set C_list } [lsort -integer -increasing $C_list] do_test 1.$tn.4 { set D_list } [lsort -integer -decreasing $D_list] unset -nocomplain DATA unset -nocomplain X db eval "$query" X { set DATA($X(docid)) [array get X] } do_test 1.$tn.5 { lsort [array get A] } [lsort [array get DATA]] do_test 1.$tn.6 { lsort [array get B] } [lsort [array get DATA]] do_test 1.$tn.7 { lsort [array get C] } [lsort [array get DATA]] do_test 1.$tn.8 { lsort [array get D] } [lsort [array get DATA]] } finish_test