Annotation of embedaddon/sqlite3/test/fts3sort.test, revision 1.1
1.1 ! misho 1: # 2011 May 04
! 2: #
! 3: # The author disclaims copyright to this source code. In place of
! 4: # a legal notice, here is a blessing:
! 5: #
! 6: # May you do good and not evil.
! 7: # May you find forgiveness for yourself and forgive others.
! 8: # May you share freely, never taking more than you give.
! 9: #
! 10: #*************************************************************************
! 11: # This file implements regression tests for SQLite library. The
! 12: # focus of this script is testing the FTS3 module.
! 13: #
! 14:
! 15: set testdir [file dirname $argv0]
! 16: source $testdir/tester.tcl
! 17:
! 18: # If SQLITE_ENABLE_FTS3 is defined, omit this file.
! 19: ifcapable !fts3 {
! 20: finish_test
! 21: return
! 22: }
! 23:
! 24:
! 25: proc build_database {nRow param} {
! 26: db close
! 27: forcedelete test.db
! 28: sqlite3 db test.db
! 29:
! 30: set vocab [list aa ab ac ba bb bc ca cb cc da]
! 31: expr srand(0)
! 32:
! 33: execsql "CREATE VIRTUAL TABLE t1 USING fts4($param)"
! 34: for {set i 0} {$i < $nRow} {incr i} {
! 35: set v [expr int(rand()*1000000)]
! 36: set doc [list]
! 37: for {set div 1} {$div < 1000000} {set div [expr $div*10]} {
! 38: lappend doc [lindex $vocab [expr ($v/$div) % 10]]
! 39: }
! 40: execsql { INSERT INTO t1 VALUES($doc) }
! 41: }
! 42: }
! 43:
! 44: set testprefix fts3sort
! 45:
! 46: unset -nocomplain CONTROL
! 47: foreach {t param} {
! 48: 1 ""
! 49: 2 "order=asc"
! 50: 3 "order=desc"
! 51: } {
! 52:
! 53: set testprefix fts3sort-1.$t
! 54:
! 55: set nRow 1000
! 56: do_test 1.0 {
! 57: build_database $nRow $param
! 58: execsql { SELECT count(*) FROM t1 }
! 59: } $nRow
! 60:
! 61: foreach {tn query} {
! 62: 1 "SELECT docid, * FROM t1"
! 63: 2 "SELECT docid, * FROM t1 WHERE t1 MATCH 'aa'"
! 64: 3 "SELECT docid, * FROM t1 WHERE t1 MATCH 'a*'"
! 65: 4 "SELECT docid, quote(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'a*'"
! 66: 5 "SELECT docid, quote(matchinfo(t1,'pcnxals')) FROM t1 WHERE t1 MATCH 'b*'"
! 67: 6 "SELECT docid, * FROM t1 WHERE t1 MATCH 'a* b* c*'"
! 68: 7 "SELECT docid, * FROM t1 WHERE t1 MATCH 'aa OR da'"
! 69: 8 "SELECT docid, * FROM t1 WHERE t1 MATCH 'nosuchtoken'"
! 70: 9 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'aa OR da'"
! 71: 10 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'aa OR nosuchtoken'"
! 72: 11 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'aa NEAR bb'"
! 73: 12 "SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH '\"aa bb\"'"
! 74: 13 "SELECT docid, content FROM t1 WHERE t1 MATCH 'aa NEAR/2 bb NEAR/3 cc'"
! 75: 14 "SELECT docid, content FROM t1 WHERE t1 MATCH '\"aa bb cc\"'"
! 76: } {
! 77:
! 78: unset -nocomplain A B C D
! 79: set A_list [list]
! 80: set B_list [list]
! 81: set C_list [list]
! 82: set D_list [list]
! 83:
! 84: unset -nocomplain X
! 85: db eval "$query ORDER BY rowid ASC" X {
! 86: set A($X(docid)) [array get X]
! 87: lappend A_list $X(docid)
! 88: }
! 89: unset -nocomplain X
! 90: db eval "$query ORDER BY rowid DESC" X {
! 91: set B($X(docid)) [array get X]
! 92: lappend B_list $X(docid)
! 93: }
! 94: unset -nocomplain X
! 95: db eval "$query ORDER BY docid ASC" X {
! 96: set C($X(docid)) [array get X]
! 97: lappend C_list $X(docid)
! 98: }
! 99: unset -nocomplain X
! 100: db eval "$query ORDER BY docid DESC" X {
! 101: set D($X(docid)) [array get X]
! 102: lappend D_list $X(docid)
! 103: }
! 104:
! 105: do_test $tn.1 { set A_list } [lsort -integer -increasing $A_list]
! 106: do_test $tn.2 { set B_list } [lsort -integer -decreasing $B_list]
! 107: do_test $tn.3 { set C_list } [lsort -integer -increasing $C_list]
! 108: do_test $tn.4 { set D_list } [lsort -integer -decreasing $D_list]
! 109:
! 110: unset -nocomplain DATA
! 111: unset -nocomplain X
! 112: db eval "$query" X {
! 113: set DATA($X(docid)) [array get X]
! 114: }
! 115:
! 116: do_test $tn.5 { lsort [array get A] } [lsort [array get DATA]]
! 117: do_test $tn.6 { lsort [array get B] } [lsort [array get DATA]]
! 118: do_test $tn.7 { lsort [array get C] } [lsort [array get DATA]]
! 119: do_test $tn.8 { lsort [array get D] } [lsort [array get DATA]]
! 120:
! 121: if {[info exists CONTROL($tn)]} {
! 122: do_test $tn.9 { set CONTROL($tn) } [lsort [array get DATA]]
! 123: } else {
! 124: set CONTROL($tn) [lsort [array get DATA]]
! 125: }
! 126: }
! 127: }
! 128: unset -nocomplain CONTROL
! 129:
! 130: set testprefix fts3sort
! 131:
! 132: #-------------------------------------------------------------------------
! 133: # Tests for parsing the "order=asc" and "order=desc" directives.
! 134: #
! 135: foreach {tn param res} {
! 136: 1 "order=asc" {0 {}}
! 137: 2 "order=desc" {0 {}}
! 138: 3 "order=dec" {1 {unrecognized order: dec}}
! 139: 4 "order=xxx, order=asc" {1 {unrecognized order: xxx}}
! 140: 5 "order=desc, order=asc" {0 {}}
! 141: 6 "order=xxxx, order=asc" {1 {unrecognized order: xxxx}}
! 142: 7 "order=desk" {1 {unrecognized order: desk}}
! 143: } {
! 144: execsql { DROP TABLE IF EXISTS t1 }
! 145: do_catchsql_test 2.1.$tn "
! 146: CREATE VIRTUAL TABLE t1 USING fts4(a, b, $param)
! 147: " $res
! 148: }
! 149:
! 150: do_execsql_test 2.2 {
! 151: BEGIN;
! 152: CREATE VIRTUAL TABLE t2 USING fts4(order=desc);
! 153: INSERT INTO t2 VALUES('aa bb');
! 154: INSERT INTO t2 VALUES('bb cc');
! 155: INSERT INTO t2 VALUES('cc aa');
! 156: SELECT docid FROM t2 WHERE t2 MATCH 'aa';
! 157: END;
! 158: } {3 1}
! 159: do_execsql_test 2.3 {
! 160: SELECT docid FROM t2 WHERE t2 MATCH 'aa';
! 161: } {3 1}
! 162: do_execsql_test 2.4 {
! 163: SELECT docid FROM t2 WHERE t2 MATCH 'aa' ORDER BY content;
! 164: } {1 3}
! 165:
! 166: #-------------------------------------------------------------------------
! 167: # Test that ticket [56be976859] has been fixed.
! 168: #
! 169: do_execsql_test 3.1 {
! 170: CREATE VIRTUAL TABLE t3 USING fts4(x, order=DESC);
! 171: INSERT INTO t3(docid, x) VALUES(113382409004785664, 'aa');
! 172: INSERT INTO t3(docid, x) VALUES(1, 'ab');
! 173: SELECT rowid FROM t3 WHERE x MATCH 'a*' ORDER BY docid DESC;
! 174: } {113382409004785664 1}
! 175: do_execsql_test 3.2 {
! 176: CREATE VIRTUAL TABLE t4 USING fts4(x);
! 177: INSERT INTO t4(docid, x) VALUES(-113382409004785664, 'aa');
! 178: INSERT INTO t4(docid, x) VALUES(1, 'ab');
! 179: SELECT rowid FROM t4 WHERE x MATCH 'a*';
! 180: } {-113382409004785664 1}
! 181:
! 182:
! 183:
! 184: finish_test
! 185:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>