e1c8e13bf6
FossilOrigin-Name: 95e09b20e9aad28f829c8950f3632debe473070a
109 lines
3.1 KiB
Plaintext
109 lines
3.1 KiB
Plaintext
# 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
|