Annotation of embedaddon/sqlite3/test/fts3defer2.test, revision 1.1.1.1

1.1       misho       1: # 2010 October 23
                      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: #
                     12: 
                     13: set testdir [file dirname $argv0]
                     14: source $testdir/tester.tcl
                     15: source $testdir/malloc_common.tcl
                     16: ifcapable !fts3 { finish_test ; return }
                     17: 
                     18: set testprefix fts3defer2
                     19: 
                     20: proc mit {blob} {
                     21:   set scan(littleEndian) i*
                     22:   set scan(bigEndian) I*
                     23:   binary scan $blob $scan($::tcl_platform(byteOrder)) r
                     24:   return $r
                     25: }
                     26: db func mit mit
                     27: 
                     28: #-----------------------------------------------------------------------------
                     29: # This block of tests - fts3defer2-1.* - test the interaction of deferred NEAR
                     30: # expressions and the snippet, offsets and matchinfo functions.
                     31: # 
                     32: do_execsql_test 1.1.1 {
                     33:   CREATE VIRTUAL TABLE t1 USING fts4;
                     34: }
                     35: do_execsql_test 1.1.2 "INSERT INTO t1 VALUES('[string repeat {a } 20000]')"
                     36: do_execsql_test 1.1.3 "INSERT INTO t1 VALUES('[string repeat {z } 20000]')"
                     37: do_execsql_test 1.1.4 {
                     38:   INSERT INTO t1 VALUES('a b c d e f a x y');
                     39:   INSERT INTO t1 VALUES('');
                     40:   INSERT INTO t1 VALUES('');
                     41:   INSERT INTO t1 VALUES('');
                     42:   INSERT INTO t1 VALUES('');
                     43:   INSERT INTO t1 VALUES('');
                     44:   INSERT INTO t1(t1) VALUES('optimize');
                     45: }
                     46: do_execsql_test 1.1.4 {
                     47:   SELECT count(*) FROM t1_segments WHERE length(block)>10000;
                     48:   UPDATE t1_segments SET block = zeroblob(length(block)) WHERE length(block)>10000;
                     49: } {2}
                     50: 
                     51: do_execsql_test 1.2.0 {
                     52:   SELECT content FROM t1 WHERE t1 MATCH 'f (e a)';
                     53: } {{a b c d e f a x y}}
                     54: 
                     55: do_execsql_test 1.2.1 {
                     56:   SELECT content FROM t1 WHERE t1 MATCH 'f (e NEAR/2 a)';
                     57: } {{a b c d e f a x y}}
                     58: 
                     59: do_execsql_test 1.2.2 {
                     60:   SELECT snippet(t1, '[', ']'), offsets(t1), mit(matchinfo(t1, 'pcxnal'))
                     61:   FROM t1 WHERE t1 MATCH 'f (e NEAR/2 a)';
                     62: } [list                              \
                     63:    {a b c d [e] [f] [a] x y}         \
                     64:    {0 1 8 1 0 0 10 1 0 2 12 1}       \
                     65:    [list 3 1   1 1 1   1 1 1   1 1 1   8 5001 9]
                     66: ]
                     67: 
                     68: do_execsql_test 1.2.3 {
                     69:   SELECT snippet(t1, '[', ']'), offsets(t1), mit(matchinfo(t1, 'pcxnal'))
                     70:   FROM t1 WHERE t1 MATCH 'f (e NEAR/3 a)';
                     71: } [list                                 \
                     72:    {[a] b c d [e] [f] [a] x y}          \
                     73:    {0 2 0 1 0 1 8 1 0 0 10 1 0 2 12 1}  \
                     74:    [list 3 1   1 1 1   1 1 1   2 2 1   8 5001 9]
                     75: ]
                     76: 
                     77: do_execsql_test 1.3.1 { DROP TABLE t1 }
                     78: 
                     79: #-----------------------------------------------------------------------------
                     80: # Test cases fts3defer2-2.* focus specifically on the matchinfo function.
                     81: # 
                     82: do_execsql_test 2.1.1 "CREATE VIRTUAL TABLE t2 USING fts4"
                     83: do_execsql_test 2.1.2 "INSERT INTO t2 VALUES('[string repeat {a } 10000]')"
                     84: do_execsql_test 2.1.3 "INSERT INTO t2 VALUES('b [string repeat {z } 10000]')"
                     85: do_execsql_test 2.1.4 [string repeat "INSERT INTO t2 VALUES('x');" 50]
                     86: do_execsql_test 2.1.5 {
                     87:   INSERT INTO t2 VALUES('a b c d e f g z');
                     88:   INSERT INTO t2 VALUES('a b c d e f g');
                     89: }
                     90: foreach {tn sql} {
                     91:   1 {}
                     92:   2 { INSERT INTO t2(t2) VALUES('optimize') }
                     93:   3 { UPDATE t2_segments SET block = zeroblob(length(block)) 
                     94:       WHERE length(block)>10000;
                     95:   }
                     96: } {
                     97:   execsql $sql
                     98: 
                     99:   do_execsql_test 2.2.$tn.1 {
                    100:     SELECT mit(matchinfo(t2, 'pcxnal')) FROM t2 WHERE t2 MATCH 'a b';
                    101:   } [list                                          \
                    102:     [list 2 1  1 54 54  1 3 3  54 372 8]        \
                    103:     [list 2 1  1 54 54  1 3 3  54 372 7]        \
                    104:   ]
                    105: 
                    106:   do_execsql_test 2.2.$tn.2 {
                    107:     SELECT mit(matchinfo(t2, 'x')) FROM t2 WHERE t2 MATCH 'g z';
                    108:   } [list                                       \
                    109:     [list 1 2 2  1 54 54]                       \
                    110:   ]
                    111: 
                    112:   set sqlite_fts3_enable_parentheses 1
                    113:   do_execsql_test 2.2.$tn.3 {
                    114:     SELECT mit(matchinfo(t2, 'x')) FROM t2 WHERE t2 MATCH 'g OR (g z)';
                    115:   } [list                                       \
                    116:     [list 1 2 2  1 2 2   1 54 54]               \
                    117:     [list 1 2 2  1 2 2   0 54 54]               \
                    118:   ]
                    119:   set sqlite_fts3_enable_parentheses 0
                    120: }
                    121: 
                    122: do_execsql_test 2.3.1 {
                    123:   CREATE VIRTUAL TABLE t3 USING fts4;
                    124:   INSERT INTO t3 VALUES('a b c d e f');
                    125:   INSERT INTO t3 VALUES('x b c d e f');
                    126:   INSERT INTO t3 VALUES('d e f a b c');
                    127:   INSERT INTO t3 VALUES('b c d e f');
                    128:   INSERT INTO t3 VALUES('');
                    129:   INSERT INTO t3 VALUES('');
                    130:   INSERT INTO t3 VALUES('');
                    131:   INSERT INTO t3 VALUES('');
                    132:   INSERT INTO t3 VALUES('');
                    133:   INSERT INTO t3 VALUES('');
                    134: }
                    135: do_execsql_test 2.3.2 "
                    136:   INSERT INTO t3 VALUES('f e d c b [string repeat {a } 10000]')
                    137: "
                    138: foreach {tn sql} {
                    139:   1 {}
                    140:   2 { INSERT INTO t3(t3) VALUES('optimize') }
                    141:   3 { UPDATE t3_segments SET block = zeroblob(length(block)) 
                    142:       WHERE length(block)>10000;
                    143:   }
                    144: } {
                    145:   execsql $sql
                    146:   do_execsql_test 2.4.$tn {
                    147:     SELECT docid, mit(matchinfo(t3, 'pcxnal')) FROM t3 WHERE t3 MATCH '"a b c"';
                    148:   } {1 {1 1 1 4 4 11 912 6} 3 {1 1 1 4 4 11 912 6}}
                    149: }
                    150: 
                    151: 
                    152: finish_test
                    153: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>