Annotation of embedaddon/sqlite3/test/fts3aux1.test, revision 1.1

1.1     ! misho       1: # 2011 January 27
        !             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: ifcapable !fts3 { finish_test ; return }
        !            18: set ::testprefix fts3aux1
        !            19: 
        !            20: do_execsql_test 1.1 {
        !            21:   CREATE VIRTUAL TABLE t1 USING fts4;
        !            22:   INSERT INTO t1 VALUES('one two three four');
        !            23:   INSERT INTO t1 VALUES('three four five six');
        !            24:   INSERT INTO t1 VALUES('one three five seven');
        !            25: 
        !            26:   CREATE VIRTUAL TABLE terms USING fts4aux(t1);
        !            27:   SELECT term, documents, occurrences FROM terms WHERE col = '*';
        !            28: } {
        !            29:   five  2 2     four  2 2     one   2 2     seven 1 1 
        !            30:   six   1 1     three 3 3     two   1 1
        !            31: }
        !            32: 
        !            33: do_execsql_test 1.2 {
        !            34:   INSERT INTO t1 VALUES('one one one three three three');
        !            35:   SELECT term, documents, occurrences FROM terms WHERE col = '*';
        !            36: } { 
        !            37:   five  2 2     four  2 2     one   3 5     seven 1 1 
        !            38:   six   1 1     three 4 6     two   1 1
        !            39: }
        !            40: 
        !            41: do_execsql_test 1.3.1 { DELETE FROM t1; }
        !            42: do_execsql_test 1.3.2 {
        !            43:   SELECT term, documents, occurrences FROM terms WHERE col = '*';
        !            44: }
        !            45: 
        !            46: do_execsql_test 1.4 {
        !            47:   INSERT INTO t1 VALUES('a b a b a b a');
        !            48:   INSERT INTO t1 SELECT * FROM t1;
        !            49:   INSERT INTO t1 SELECT * FROM t1;
        !            50:   INSERT INTO t1 SELECT * FROM t1;
        !            51:   INSERT INTO t1 SELECT * FROM t1;
        !            52:   INSERT INTO t1 SELECT * FROM t1;
        !            53:   INSERT INTO t1 SELECT * FROM t1;
        !            54:   INSERT INTO t1 SELECT * FROM t1;
        !            55:   INSERT INTO t1 SELECT * FROM t1;
        !            56:   SELECT term, documents, occurrences FROM terms WHERE col = '*';
        !            57: } {a 256 1024    b 256 768}
        !            58: 
        !            59: #-------------------------------------------------------------------------
        !            60: # The following tests verify that the fts4aux module uses the full-text
        !            61: # index to reduce the number of rows scanned in the following circumstances:
        !            62: #
        !            63: #   * when there is equality comparison against the term column using the 
        !            64: #     BINARY collating sequence. 
        !            65: #
        !            66: #   * when there is a range constraint on the term column using the BINARY 
        !            67: #     collating sequence. 
        !            68: #
        !            69: # And also uses the full-text index to optimize ORDER BY clauses of the 
        !            70: # form "ORDER BY term ASC" or equivalent.
        !            71: #
        !            72: # Test organization is:
        !            73: #
        !            74: #   fts3aux1-2.1.*: equality constraints.
        !            75: #   fts3aux1-2.2.*: range constraints.
        !            76: #   fts3aux1-2.3.*: ORDER BY optimization.
        !            77: # 
        !            78: 
        !            79: do_execsql_test 2.0 {
        !            80:   DROP TABLE t1;
        !            81:   DROP TABLE terms;
        !            82: 
        !            83:   CREATE VIRTUAL TABLE x1 USING fts4(x);
        !            84:   INSERT INTO x1(x1) VALUES('nodesize=24');
        !            85:   CREATE VIRTUAL TABLE terms USING fts4aux(x1);
        !            86: 
        !            87:   CREATE VIEW terms_v AS 
        !            88:   SELECT term, documents, occurrences FROM terms WHERE col = '*';
        !            89: 
        !            90:   INSERT INTO x1 VALUES('braes brag bragged bragger bragging');
        !            91:   INSERT INTO x1 VALUES('brags braid braided braiding braids');
        !            92:   INSERT INTO x1 VALUES('brain brainchild brained braining brains');
        !            93:   INSERT INTO x1 VALUES('brainstem brainstems brainstorm brainstorms'); 
        !            94: }
        !            95: 
        !            96: proc rec {varname x} {
        !            97:   global $varname
        !            98:   incr $varname
        !            99:   return 1
        !           100: }
        !           101: db func rec rec
        !           102: 
        !           103: # Use EQP to show that the WHERE expression "term='braid'" uses a different
        !           104: # index number (1) than "+term='braid'" (0).
        !           105: #
        !           106: do_execsql_test 2.1.1.1 {
        !           107:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term='braid'
        !           108: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)} }
        !           109: do_execsql_test 2.1.1.2 {
        !           110:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term='braid'
        !           111: } {0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}}
        !           112: 
        !           113: # Now show that using "term='braid'" means the virtual table returns
        !           114: # only 1 row to SQLite, but "+term='braid'" means all 19 are returned.
        !           115: #
        !           116: do_test 2.1.2.1 {
        !           117:   set cnt 0
        !           118:   execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND term='braid' }
        !           119:   set cnt
        !           120: } {2}
        !           121: do_test 2.1.2.2 {
        !           122:   set cnt 0
        !           123:   execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND +term='braid' }
        !           124:   set cnt
        !           125: } {38}
        !           126: 
        !           127: # Similar to the test immediately above, but using a term ("breakfast") that 
        !           128: # is not featured in the dataset.
        !           129: #
        !           130: do_test 2.1.3.1 {
        !           131:   set cnt 0
        !           132:   execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND term='breakfast' }
        !           133:   set cnt
        !           134: } {0}
        !           135: do_test 2.1.3.2 {
        !           136:   set cnt 0
        !           137:   execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND +term='breakfast' }
        !           138:   set cnt
        !           139: } {38}
        !           140: 
        !           141: do_execsql_test 2.1.4.1 { SELECT * FROM terms_v WHERE term='braid' } {braid 1 1}
        !           142: do_execsql_test 2.1.4.2 { SELECT * FROM terms_v WHERE +term='braid'} {braid 1 1}
        !           143: do_execsql_test 2.1.4.3 { SELECT * FROM terms_v WHERE term='breakfast'  } {}
        !           144: do_execsql_test 2.1.4.4 { SELECT * FROM terms_v WHERE +term='breakfast' } {}
        !           145: 
        !           146: do_execsql_test 2.1.4.5 { SELECT * FROM terms_v WHERE term='cba'  } {}
        !           147: do_execsql_test 2.1.4.6 { SELECT * FROM terms_v WHERE +term='cba' } {}
        !           148: do_execsql_test 2.1.4.7 { SELECT * FROM terms_v WHERE term='abc'  } {}
        !           149: do_execsql_test 2.1.4.8 { SELECT * FROM terms_v WHERE +term='abc' } {}
        !           150: 
        !           151: # Special case: term=NULL
        !           152: #
        !           153: do_execsql_test 2.1.5 { SELECT * FROM terms WHERE term=NULL } {}
        !           154: 
        !           155: do_execsql_test 2.2.1.1 {
        !           156:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term>'brain'
        !           157: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 2: (~0 rows)} }
        !           158: do_execsql_test 2.2.1.2 {
        !           159:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term>'brain'
        !           160: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)} }
        !           161: 
        !           162: do_execsql_test 2.2.1.3 {
        !           163:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term<'brain'
        !           164: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 4: (~0 rows)} }
        !           165: do_execsql_test 2.2.1.4 {
        !           166:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term<'brain'
        !           167: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)} }
        !           168: 
        !           169: do_execsql_test 2.2.1.5 {
        !           170:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term BETWEEN 'brags' AND 'brain'
        !           171: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 6: (~0 rows)} }
        !           172: do_execsql_test 2.2.1.6 {
        !           173:   EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term BETWEEN 'brags' AND 'brain'
        !           174: } { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)} }
        !           175: 
        !           176: do_test 2.2.2.1 {
        !           177:   set cnt 0
        !           178:   execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term>'brain' }
        !           179:   set cnt
        !           180: } {18}
        !           181: do_test 2.2.2.2 {
        !           182:   set cnt 0
        !           183:   execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term>'brain' }
        !           184:   set cnt
        !           185: } {38}
        !           186: do_execsql_test 2.2.2.3 {
        !           187:   SELECT term, documents, occurrences FROM terms_v WHERE term>'brain'
        !           188: } {
        !           189:   brainchild 1 1 brained 1 1 braining 1 1 brains 1 1 
        !           190:   brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           191: }
        !           192: do_execsql_test 2.2.2.4 {
        !           193:   SELECT term, documents, occurrences FROM terms_v WHERE +term>'brain'
        !           194: } {
        !           195:   brainchild 1 1 brained 1 1 braining 1 1 brains 1 1 
        !           196:   brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           197: }
        !           198: do_execsql_test 2.2.2.5 {
        !           199:   SELECT term, documents, occurrences FROM terms_v WHERE term>='brain'
        !           200: } {
        !           201:   brain 1 1
        !           202:   brainchild 1 1 brained 1 1 braining 1 1 brains 1 1 
        !           203:   brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           204: }
        !           205: do_execsql_test 2.2.2.6 {
        !           206:   SELECT term, documents, occurrences FROM terms_v WHERE +term>='brain'
        !           207: } {
        !           208:   brain 1 1
        !           209:   brainchild 1 1 brained 1 1 braining 1 1 brains 1 1 
        !           210:   brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           211: }
        !           212: 
        !           213: do_execsql_test 2.2.2.7 {
        !           214:   SELECT term, documents, occurrences FROM terms_v WHERE term>='abc'
        !           215: } {
        !           216:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 
        !           217:   bragging 1 1 brags 1 1 braid 1 1 braided 1 1 
        !           218:   braiding 1 1 braids 1 1 brain 1 1 brainchild 1 1 
        !           219:   brained 1 1 braining 1 1 brains 1 1 brainstem 1 1 
        !           220:   brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           221: }
        !           222: do_execsql_test 2.2.2.8 {
        !           223:   SELECT term, documents, occurrences FROM terms_v WHERE +term>='abc'
        !           224: } {
        !           225:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 
        !           226:   bragging 1 1 brags 1 1 braid 1 1 braided 1 1 
        !           227:   braiding 1 1 braids 1 1 brain 1 1 brainchild 1 1 
        !           228:   brained 1 1 braining 1 1 brains 1 1 brainstem 1 1 
        !           229:   brainstems 1 1 brainstorm 1 1 brainstorms 1 1
        !           230: }
        !           231: 
        !           232: do_execsql_test 2.2.2.9 {
        !           233:   SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms'
        !           234: } {brainstorms 1 1}
        !           235: do_execsql_test 2.2.2.10 {
        !           236:   SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms'
        !           237: } {brainstorms 1 1}
        !           238: do_execsql_test 2.2.2.11 { SELECT * FROM terms_v WHERE term>'brainstorms' } {}
        !           239: do_execsql_test 2.2.2.12 { SELECT * FROM terms_v WHERE term>'brainstorms' } {}
        !           240: 
        !           241: do_execsql_test 2.2.2.13 { SELECT * FROM terms_v WHERE term>'cba' } {}
        !           242: do_execsql_test 2.2.2.14 { SELECT * FROM terms_v WHERE term>'cba' } {}
        !           243: 
        !           244: do_test 2.2.3.1 {
        !           245:   set cnt 0
        !           246:   execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term<'brain' }
        !           247:   set cnt
        !           248: } {22}
        !           249: do_test 2.2.3.2 {
        !           250:   set cnt 0
        !           251:   execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term<'brain' }
        !           252:   set cnt
        !           253: } {38}
        !           254: do_execsql_test 2.2.3.3 {
        !           255:   SELECT term, documents, occurrences FROM terms_v WHERE term<'brain'
        !           256: } {
        !           257:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1 
        !           258:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           259: }
        !           260: do_execsql_test 2.2.3.4 {
        !           261:   SELECT term, documents, occurrences FROM terms_v WHERE +term<'brain'
        !           262: } {
        !           263:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1 
        !           264:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           265: }
        !           266: do_execsql_test 2.2.3.5 {
        !           267:   SELECT term, documents, occurrences FROM terms_v WHERE term<='brain'
        !           268: } {
        !           269:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1 
        !           270:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           271:   brain 1 1
        !           272: }
        !           273: do_execsql_test 2.2.3.6 {
        !           274:   SELECT term, documents, occurrences FROM terms_v WHERE +term<='brain'
        !           275: } {
        !           276:   braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1 
        !           277:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           278:   brain 1 1
        !           279: }
        !           280: 
        !           281: do_test 2.2.4.1 {
        !           282:   set cnt 0
        !           283:   execsql { 
        !           284:     SELECT term, documents, occurrences FROM terms 
        !           285:     WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain' 
        !           286:   }
        !           287:   set cnt
        !           288: } {12}
        !           289: do_test 2.2.4.2 {
        !           290:   set cnt 0
        !           291:   execsql { 
        !           292:     SELECT term, documents, occurrences FROM terms 
        !           293:     WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain' 
        !           294:   }
        !           295:   set cnt
        !           296: } {38}
        !           297: do_execsql_test 2.2.4.3 {
        !           298:   SELECT term, documents, occurrences FROM terms_v 
        !           299:   WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain' 
        !           300: } {
        !           301:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1 
        !           302: }
        !           303: do_execsql_test 2.2.4.4 {
        !           304:   SELECT term, documents, occurrences FROM terms_v 
        !           305:   WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain' 
        !           306: } {
        !           307:   brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1 
        !           308: }
        !           309: do_execsql_test 2.2.4.5 {
        !           310:   SELECT term, documents, occurrences FROM terms_v 
        !           311:   WHERE rec('cnt', term) AND term > 'brags' AND term < 'brain' 
        !           312: } {
        !           313:   braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           314: }
        !           315: do_execsql_test 2.2.4.6 {
        !           316:   SELECT term, documents, occurrences FROM terms_v 
        !           317:   WHERE rec('cnt', term) AND +term > 'brags' AND +term < 'brain' 
        !           318: } {
        !           319:   braid 1 1 braided 1 1 braiding 1 1 braids 1 1
        !           320: }
        !           321: 
        !           322: # Check that "ORDER BY term ASC" and equivalents are sorted by the
        !           323: # virtual table implementation. Any other ORDER BY clause requires
        !           324: # SQLite to sort results using a temporary b-tree.
        !           325: #
        !           326: foreach {tn sort orderby} {
        !           327:   1    0    "ORDER BY term ASC"
        !           328:   2    0    "ORDER BY term"
        !           329:   3    1    "ORDER BY term DESC"
        !           330:   4    1    "ORDER BY documents ASC"
        !           331:   5    1    "ORDER BY documents"
        !           332:   6    1    "ORDER BY documents DESC"
        !           333:   7    1    "ORDER BY occurrences ASC"
        !           334:   8    1    "ORDER BY occurrences"
        !           335:   9    1    "ORDER BY occurrences DESC"
        !           336: } {
        !           337: 
        !           338:   set res [list 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}]
        !           339:   if {$sort} { lappend res 0 0 0 {USE TEMP B-TREE FOR ORDER BY} }
        !           340: 
        !           341:   set sql "SELECT * FROM terms $orderby"
        !           342:   do_execsql_test 2.3.1.$tn "EXPLAIN QUERY PLAN $sql" $res
        !           343: }
        !           344: 
        !           345: #-------------------------------------------------------------------------
        !           346: # The next set of tests, fts3aux1-3.*, test error conditions in the 
        !           347: # fts4aux module. Except, fault injection testing (OOM, IO error etc.) is 
        !           348: # done in fts3fault2.test
        !           349: #
        !           350: 
        !           351: do_execsql_test 3.1.1 {
        !           352:   CREATE VIRTUAL TABLE t2 USING fts4;
        !           353: }
        !           354: 
        !           355: do_catchsql_test 3.1.2 {
        !           356:   CREATE VIRTUAL TABLE terms2 USING fts4aux;
        !           357: } {1 {wrong number of arguments to fts4aux constructor}}
        !           358: do_catchsql_test 3.1.3 {
        !           359:   CREATE VIRTUAL TABLE terms2 USING fts4aux(t2, t2);
        !           360: } {1 {wrong number of arguments to fts4aux constructor}}
        !           361: 
        !           362: do_execsql_test 3.2.1 {
        !           363:   CREATE VIRTUAL TABLE terms3 USING fts4aux(does_not_exist)
        !           364: }
        !           365: do_catchsql_test 3.2.2 {
        !           366:   SELECT * FROM terms3
        !           367: } {1 {SQL logic error or missing database}}
        !           368: do_catchsql_test 3.2.3 {
        !           369:   SELECT * FROM terms3 WHERE term = 'abc'
        !           370: } {1 {SQL logic error or missing database}}
        !           371: 
        !           372: do_catchsql_test 3.3.1 {
        !           373:   INSERT INTO terms VALUES(1,2,3);
        !           374: } {1 {table terms may not be modified}}
        !           375: do_catchsql_test 3.3.2 {
        !           376:   DELETE FROM terms
        !           377: } {1 {table terms may not be modified}}
        !           378: do_catchsql_test 3.3.3 {
        !           379:   UPDATE terms set documents = documents+1;
        !           380: } {1 {table terms may not be modified}}
        !           381: 
        !           382: 
        !           383: #-------------------------------------------------------------------------
        !           384: # The following tests - fts4aux-4.* - test that joins work with fts4aux
        !           385: # tables. And that fts4aux provides reasonably sane cost information via
        !           386: # xBestIndex to the query planner.
        !           387: #
        !           388: db close
        !           389: forcedelete test.db
        !           390: sqlite3 db test.db
        !           391: do_execsql_test 4.1 {
        !           392:   CREATE VIRTUAL TABLE x1 USING fts4(x);
        !           393:   CREATE VIRTUAL TABLE terms USING fts4aux(x1);
        !           394:   CREATE TABLE x2(y);
        !           395:   CREATE TABLE x3(y);
        !           396:   CREATE INDEX i1 ON x3(y);
        !           397: 
        !           398:   INSERT INTO x1 VALUES('a b c d e');
        !           399:   INSERT INTO x1 VALUES('f g h i j');
        !           400:   INSERT INTO x1 VALUES('k k l l a');
        !           401: 
        !           402:   INSERT INTO x2 SELECT term FROM terms WHERE col = '*';
        !           403:   INSERT INTO x3 SELECT term FROM terms WHERE col = '*';
        !           404: }
        !           405: 
        !           406: proc do_plansql_test {tn sql r} {
        !           407:   uplevel do_execsql_test $tn [list "EXPLAIN QUERY PLAN $sql ; $sql"] [list $r]
        !           408: }
        !           409: 
        !           410: do_plansql_test 4.2 {
        !           411:   SELECT y FROM x2, terms WHERE y = term AND col = '*'
        !           412: } {
        !           413:   0 0 0 {SCAN TABLE x2 (~1000000 rows)} 
        !           414:   0 1 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)} 
        !           415:   a b c d e f g h i j k l
        !           416: }
        !           417: 
        !           418: do_plansql_test 4.3 {
        !           419:   SELECT y FROM terms, x2 WHERE y = term AND col = '*'
        !           420: } {
        !           421:   0 0 1 {SCAN TABLE x2 (~1000000 rows)} 
        !           422:   0 1 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)} 
        !           423:   a b c d e f g h i j k l
        !           424: }
        !           425: 
        !           426: do_plansql_test 4.4 {
        !           427:   SELECT y FROM x3, terms WHERE y = term AND col = '*'
        !           428: } {
        !           429:   0 0 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)} 
        !           430:   0 1 0 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
        !           431:   a b c d e f g h i j k l
        !           432: }
        !           433: 
        !           434: do_plansql_test 4.5 {
        !           435:   SELECT y FROM terms, x3 WHERE y = term AND occurrences>1 AND col = '*'
        !           436: } {
        !           437:   0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)} 
        !           438:   0 1 1 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
        !           439:   a k l
        !           440: }
        !           441: 
        !           442: #-------------------------------------------------------------------------
        !           443: # The following tests check that fts4aux can handle an fts table with an
        !           444: # odd name (one that requires quoting for use in SQL statements). And that
        !           445: # the argument to the fts4aux constructor is properly dequoted before use.
        !           446: #
        !           447: #
        !           448: do_execsql_test 5.1 {
        !           449:   CREATE VIRTUAL TABLE "abc '!' def" USING fts4(x, y);
        !           450:   INSERT INTO "abc '!' def" VALUES('XX', 'YY');
        !           451: 
        !           452:   CREATE VIRTUAL TABLE terms3 USING fts4aux("abc '!' def");
        !           453:   SELECT * FROM terms3;
        !           454: } {xx * 1 1 xx 0 1 1 yy * 1 1 yy 1 1 1}
        !           455: 
        !           456: do_execsql_test 5.2 {
        !           457:   CREATE VIRTUAL TABLE "%%^^%%" USING fts4aux('abc ''!'' def');
        !           458:   SELECT * FROM "%%^^%%";
        !           459: } {xx * 1 1 xx 0 1 1 yy * 1 1 yy 1 1 1}
        !           460: 
        !           461: 
        !           462: finish_test

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