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>