Annotation of embedaddon/sqlite3/test/fts4content.test, revision 1.1
1.1 ! misho 1: # 2011 October 03
! 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 content=xxx FTS4 option.
! 13: #
! 14:
! 15: set testdir [file dirname $argv0]
! 16: source $testdir/tester.tcl
! 17: set ::testprefix fts4content
! 18:
! 19: # If SQLITE_ENABLE_FTS3 is defined, omit this file.
! 20: ifcapable !fts3 {
! 21: finish_test
! 22: return
! 23: }
! 24:
! 25: #-------------------------------------------------------------------------
! 26: # Test organization:
! 27: #
! 28: # 1.* - Warm-body tests.
! 29: #
! 30: # 2.* - Querying a content=xxx FTS table.
! 31: #
! 32: # 3.* - Writing to a content=xxx FTS table.
! 33: #
! 34: # 4.* - The "INSERT INTO fts(fts) VALUES('rebuild')" command.
! 35: #
! 36: # 5.* - Check that CREATE TABLE, DROP TABLE and ALTER TABLE correctly
! 37: # ignore any %_content table when used with the content=xxx option.
! 38: #
! 39: # 6.* - Test the effects of messing with the schema of table xxx after
! 40: # creating a content=xxx FTS index.
! 41: #
! 42: # 7.* - Test that if content=xxx is specified and table xxx does not
! 43: # exist, the FTS table can still be used for INSERT and some
! 44: # SELECT statements.
! 45: #
! 46:
! 47: do_execsql_test 1.1.1 {
! 48: CREATE TABLE t1(a, b, c);
! 49: INSERT INTO t1 VALUES('w x', 'x y', 'y z');
! 50: CREATE VIRTUAL TABLE ft1 USING fts4(content=t1);
! 51: }
! 52:
! 53: do_execsql_test 1.1.2 {
! 54: PRAGMA table_info(ft1);
! 55: } {
! 56: 0 a {} 0 {} 0
! 57: 1 b {} 0 {} 0
! 58: 2 c {} 0 {} 0
! 59: }
! 60:
! 61: do_execsql_test 1.1.3 { SELECT *, rowid FROM ft1 } {{w x} {x y} {y z} 1}
! 62: do_execsql_test 1.1.4 { SELECT a, c FROM ft1 WHERE rowid=1 } {{w x} {y z}}
! 63:
! 64: do_execsql_test 1.1.5 { INSERT INTO ft1(ft1) VALUES('rebuild') } {}
! 65: do_execsql_test 1.1.6 { SELECT rowid FROM ft1 WHERE ft1 MATCH 'x' } {1}
! 66: do_execsql_test 1.1.7 { SELECT rowid FROM ft1 WHERE ft1 MATCH 'a' } {}
! 67:
! 68: do_execsql_test 1.2.1 {
! 69: DROP TABLE ft1;
! 70: CREATE VIRTUAL TABLE ft1 USING fts4(content=t1, b);
! 71: PRAGMA table_info(ft1);
! 72: } {
! 73: 0 b {} 0 {} 0
! 74: }
! 75: do_execsql_test 1.2.2 {
! 76: SELECT *, rowid FROM ft1
! 77: } {{x y} 1}
! 78:
! 79: #-------------------------------------------------------------------------
! 80: # The following block of tests - 2.* - test that a content=xxx FTS table
! 81: # can be queried. Also tested are cases where rows identified in the FTS
! 82: # are missing from the content table, and cases where the index is
! 83: # inconsistent with the content table.
! 84: #
! 85: do_execsql_test 2.0 {
! 86: CREATE TABLE t2(x);
! 87: INSERT INTO t2 VALUES('O S W W F U C R Q I C N P Z Y Y E Y Y E'); -- 1
! 88: INSERT INTO t2 VALUES('Y X U V L B E H Y J C Y A I A P V F V K'); -- 2
! 89: INSERT INTO t2 VALUES('P W I N J H I I N I F B K D U Q B Z S F'); -- 3
! 90: INSERT INTO t2 VALUES('N R O R H J R H G M D I U U B O M P A U'); -- 4
! 91: INSERT INTO t2 VALUES('Y O V O G T P N G T N F I V B U M J M G'); -- 5
! 92: INSERT INTO t2 VALUES('J O B N K N E C H Z R K J O U G M K L S'); -- 6
! 93: INSERT INTO t2 VALUES('S Z S R I Q U A P W R X H K C Z U L S P'); -- 7
! 94: INSERT INTO t2 VALUES('J C H N R C K R V N M O F Z M Z A I H W'); -- 8
! 95: INSERT INTO t2 VALUES('O Y G I S J U U W O D Z F J K N R P R L'); -- 9
! 96: INSERT INTO t2 VALUES('B G L K U R U P V X Z I H V R W C Q A S'); -- 10
! 97: INSERT INTO t2 VALUES('T F T J F F Y V F W N X K Q A Y L X W G'); -- 11
! 98: INSERT INTO t2 VALUES('C J U H B Q X L C M M Y E G V F W V Z C'); -- 12
! 99: INSERT INTO t2 VALUES('B W L T F S G X D P H N G M R I O A X I'); -- 13
! 100: INSERT INTO t2 VALUES('N G Y O K Q K Z N M H U J E D H U W R K'); -- 14
! 101: INSERT INTO t2 VALUES('U D T R U Y F J D S J X E H Q G V A S Z'); -- 15
! 102: INSERT INTO t2 VALUES('M I W P J S H R J D Q I C G P C T P H R'); -- 16
! 103: INSERT INTO t2 VALUES('J M N I S L X Q C A B F C B Y D H V R J'); -- 17
! 104: INSERT INTO t2 VALUES('F V Z W J Q L P X Y E W B U Q N H X K T'); -- 18
! 105: INSERT INTO t2 VALUES('R F S R Y O F Q E I E G H C B H R X Y N'); -- 19
! 106: INSERT INTO t2 VALUES('U Q Q Q T E P D M F X P J G H X C Q D L'); -- 20
! 107: }
! 108:
! 109: do_execsql_test 2.1 {
! 110: CREATE VIRTUAL TABLE ft2 USING fts4(content=t2);
! 111: INSERT INTO ft2(ft2) VALUES('rebuild');
! 112:
! 113: -- Modify the backing table a bit: Row 17 is missing and the contents
! 114: -- of row 20 do not match the FTS index contents.
! 115: DELETE FROM t2 WHERE rowid = 17;
! 116: UPDATE t2 SET x = 'a b c d e f g h i j' WHERE rowid = 20;
! 117: }
! 118:
! 119: foreach {tn match rowidlist} {
! 120: 1 {S} {1 3 6 7 9 10 13 15 16 17 19}
! 121: 2 {"S R"} {7 19}
! 122: 3 {"N K N"} {6}
! 123: 4 {"Q Q"} {20}
! 124: 5 {"B Y D"} {17}
! 125: } {
! 126: do_execsql_test 2.2.1.$tn {
! 127: SELECT rowid FROM ft2 WHERE ft2 MATCH $match
! 128: } $rowidlist
! 129:
! 130: do_execsql_test 2.2.2.$tn {
! 131: SELECT docid FROM ft2 WHERE ft2 MATCH $match
! 132: } $rowidlist
! 133: }
! 134:
! 135: foreach {tn match result} {
! 136: 1 {"N K N"} {{J O B N K N E C H Z R K J O U G M K L S}}
! 137: 2 {"Q Q"} {{a b c d e f g h i j}}
! 138: 3 {"B Y D"} {{}}
! 139: } {
! 140: do_execsql_test 2.3.$tn {
! 141: SELECT * FROM ft2 WHERE ft2 MATCH $match
! 142: } $result
! 143: }
! 144:
! 145: foreach {tn match result} {
! 146: 1 {"N K N"} {{..O B [N] [K] [N] E..}}
! 147: 2 {"B Y D"} {{}}
! 148: 3 {"Q Q"} {{a [b] [c] [d] e f..}}
! 149: } {
! 150: do_execsql_test 2.4.$tn {
! 151: SELECT snippet(ft2, '[', ']', '..', -1, 6) FROM ft2 WHERE ft2 MATCH $match
! 152: } $result
! 153: }
! 154:
! 155: foreach {tn match result} {
! 156: 1 {"N K N"} {{0 0 6 1 0 1 8 1 0 2 10 1}}
! 157: 2 {"B Y D"} {{}}
! 158: 3 {"Q Q"} {{0 0 2 1 0 0 4 1 0 1 4 1 0 1 6 1}}
! 159: 4 {"Q D L"} {{}}
! 160: } {
! 161: do_execsql_test 2.5.$tn {
! 162: SELECT offsets(ft2) FROM ft2 WHERE ft2 MATCH $match
! 163: } $result
! 164: }
! 165:
! 166: #-------------------------------------------------------------------------
! 167: # The following block of tests - 3.* - test that the FTS index can be
! 168: # modified by writing to the table. But that this has no effect on the
! 169: # content table.
! 170: #
! 171:
! 172: do_execsql_test 3.1 {
! 173: CREATE TABLE t3(x, y);
! 174: CREATE VIRTUAL TABLE ft3 USING fts4(content=t3);
! 175: }
! 176:
! 177: do_catchsql_test 3.1.1 {
! 178: INSERT INTO ft3 VALUES('a b c', 'd e f');
! 179: } {1 {constraint failed}}
! 180: do_execsql_test 3.1.2 {
! 181: INSERT INTO ft3(docid, x, y) VALUES(21, 'a b c', 'd e f');
! 182: SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"';
! 183: } {21}
! 184: do_execsql_test 3.1.3 { SELECT * FROM t3 } {}
! 185:
! 186: # This DELETE does not work, since there is no row in [t3] to base the
! 187: # DELETE on. So the SELECT on [ft3] still returns rowid 21.
! 188: do_execsql_test 3.1.4 {
! 189: DELETE FROM ft3;
! 190: SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"';
! 191: } {21}
! 192:
! 193: # If the row is added to [t3] before the DELETE on [ft3], it works.
! 194: do_execsql_test 3.1.5 {
! 195: INSERT INTO t3(rowid, x, y) VALUES(21, 'a b c', 'd e f');
! 196: DELETE FROM ft3;
! 197: SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"';
! 198: } {}
! 199: do_execsql_test 3.1.6 { SELECT rowid FROM t3 } {21}
! 200:
! 201: do_execsql_test 3.2.1 {
! 202: INSERT INTO ft3(rowid, x, y) VALUES(0, 'R T M S M', 'A F O K H');
! 203: INSERT INTO ft3(rowid, x, y) VALUES(1, 'C Z J O X', 'U S Q D K');
! 204: INSERT INTO ft3(rowid, x, y) VALUES(2, 'N G H P O', 'N O P O C');
! 205: INSERT INTO ft3(rowid, x, y) VALUES(3, 'V H S D R', 'K N G E C');
! 206: INSERT INTO ft3(rowid, x, y) VALUES(4, 'J T R V U', 'U X S L C');
! 207: INSERT INTO ft3(rowid, x, y) VALUES(5, 'N A Y N G', 'X D G P Y');
! 208: INSERT INTO ft3(rowid, x, y) VALUES(6, 'I Q I S P', 'D R O Q B');
! 209: INSERT INTO ft3(rowid, x, y) VALUES(7, 'T K T Z J', 'B W D G O');
! 210: INSERT INTO ft3(rowid, x, y) VALUES(8, 'Y K F X T', 'D F G V G');
! 211: INSERT INTO ft3(rowid, x, y) VALUES(9, 'E L E T L', 'P W N F Z');
! 212: INSERT INTO ft3(rowid, x, y) VALUES(10, 'O G J G X', 'G J F E P');
! 213: INSERT INTO ft3(rowid, x, y) VALUES(11, 'O L N N Z', 'K E Z F D');
! 214: INSERT INTO ft3(rowid, x, y) VALUES(12, 'R Z M R J', 'X G I M Z');
! 215: INSERT INTO ft3(rowid, x, y) VALUES(13, 'L X N N X', 'R R N S T');
! 216: INSERT INTO ft3(rowid, x, y) VALUES(14, 'F L B J H', 'K W F L C');
! 217: INSERT INTO ft3(rowid, x, y) VALUES(15, 'P E B M V', 'E A A B U');
! 218: INSERT INTO ft3(rowid, x, y) VALUES(16, 'V E C F P', 'L U T V K');
! 219: INSERT INTO ft3(rowid, x, y) VALUES(17, 'T N O Z N', 'T P Q X N');
! 220: INSERT INTO ft3(rowid, x, y) VALUES(18, 'V W U W R', 'H O A A V');
! 221: INSERT INTO ft3(rowid, x, y) VALUES(19, 'A H N L F', 'I G H B O');
! 222: }
! 223:
! 224: foreach {tn match rowidlist} {
! 225: 1 "N A" {5 19}
! 226: 2 "x:O" {1 2 10 11 17}
! 227: 3 "y:O" {0 2 6 7 18 19}
! 228: } {
! 229: set res [list]
! 230: foreach rowid $rowidlist { lappend res $rowid {} {} }
! 231:
! 232: do_execsql_test 3.2.2.$tn {
! 233: SELECT rowid, * FROM ft3 WHERE ft3 MATCH $match
! 234: } $res
! 235: do_execsql_test 3.2.3.$tn {
! 236: SELECT docid, * FROM ft3 WHERE ft3 MATCH $match
! 237: } $res
! 238: }
! 239:
! 240: do_execsql_test 3.3.1 {
! 241: INSERT INTO t3(rowid, x, y) VALUES(0, 'R T M S M', 'A F O K H');
! 242: INSERT INTO t3(rowid, x, y) VALUES(1, 'C Z J O X', 'U S Q D K');
! 243: INSERT INTO t3(rowid, x, y) VALUES(2, 'N G H P O', 'N O P O C');
! 244: INSERT INTO t3(rowid, x, y) VALUES(3, 'V H S D R', 'K N G E C');
! 245: INSERT INTO t3(rowid, x, y) VALUES(4, 'J T R V U', 'U X S L C');
! 246: INSERT INTO t3(rowid, x, y) VALUES(5, 'N A Y N G', 'X D G P Y');
! 247: UPDATE ft3 SET x = y, y = x;
! 248: DELETE FROM t3;
! 249: }
! 250:
! 251: foreach {tn match rowidlist} {
! 252: 1 "N A" {5 19}
! 253: 2 "x:O" {0 2 10 11 17}
! 254: 3 "y:O" {1 2 6 7 18 19}
! 255: } {
! 256: set res [list]
! 257: foreach rowid $rowidlist { lappend res $rowid {} {} }
! 258:
! 259: do_execsql_test 3.3.2.$tn {
! 260: SELECT rowid, * FROM ft3 WHERE ft3 MATCH $match
! 261: } $res
! 262: do_execsql_test 3.3.3.$tn {
! 263: SELECT docid, * FROM ft3 WHERE ft3 MATCH $match
! 264: } $res
! 265: }
! 266:
! 267: do_execsql_test 3.3.1 {
! 268: INSERT INTO t3(rowid, x, y) VALUES(15, 'P E B M V', 'E A A B U');
! 269: INSERT INTO t3(rowid, x, y) VALUES(16, 'V E C F P', 'L U T V K');
! 270: INSERT INTO t3(rowid, x, y) VALUES(17, 'T N O Z N', 'T P Q X N');
! 271: INSERT INTO t3(rowid, x, y) VALUES(18, 'V W U W R', 'H O A A V');
! 272: INSERT INTO t3(rowid, x, y) VALUES(19, 'A H N L F', 'I G H B O');
! 273: DELETE FROM ft3;
! 274: }
! 275:
! 276: foreach {tn match rowidlist} {
! 277: 1 "N A" {5}
! 278: 2 "x:O" {0 2 10 11}
! 279: 3 "y:O" {1 2 6 7}
! 280: } {
! 281: set res [list]
! 282: foreach rowid $rowidlist { lappend res $rowid {} {} }
! 283:
! 284: do_execsql_test 3.3.2.$tn {
! 285: SELECT rowid, * FROM ft3 WHERE ft3 MATCH $match
! 286: } $res
! 287: do_execsql_test 3.3.3.$tn {
! 288: SELECT docid, * FROM ft3 WHERE ft3 MATCH $match
! 289: } $res
! 290: }
! 291:
! 292:
! 293: #-------------------------------------------------------------------------
! 294: # Test cases 4.* test the 'rebuild' command. On content=xxx and regular
! 295: # FTS tables.
! 296: #
! 297: do_execsql_test 4.0 {
! 298: CREATE TABLE t4(x);
! 299: CREATE VIRTUAL TABLE ft4 USING fts4(content=t4);
! 300: CREATE VIRTUAL TABLE ft4x USING fts4(x);
! 301: }
! 302:
! 303: do_execsql_test 4.1.1 {
! 304: INSERT INTO ft4x(ft4x) VALUES('rebuild');
! 305: INSERT INTO ft4(ft4) VALUES('rebuild');
! 306: } {}
! 307: do_execsql_test 4.1.2 {
! 308: SELECT id, quote(value) FROM ft4_stat
! 309: } {0 X'000000'}
! 310: do_execsql_test 4.1.3 {
! 311: SELECT id, quote(value) FROM ft4x_stat
! 312: } {0 X'000000'}
! 313:
! 314: do_execsql_test 4.2.1 {
! 315: INSERT INTO ft4x VALUES('M G M F T');
! 316: INSERT INTO ft4x VALUES('Z Q C A U');
! 317: INSERT INTO ft4x VALUES('N L L V');
! 318: INSERT INTO ft4x VALUES('T F D X D');
! 319: INSERT INTO ft4x VALUES('Z H I S D');
! 320:
! 321: SELECT id, quote(value) FROM ft4x_stat
! 322: } {0 X'05182B'}
! 323:
! 324: do_execsql_test 4.2.2 {
! 325: INSERT INTO ft4(rowid, x) SELECT rowid, * FROM ft4x;
! 326: SELECT id, quote(value) FROM ft4_stat
! 327: } {0 X'05182B'}
! 328:
! 329: do_execsql_test 4.2.3 {
! 330: SELECT docid, quote(size) FROM ft4_docsize
! 331: } {1 X'05' 2 X'05' 3 X'04' 4 X'05' 5 X'05'}
! 332:
! 333: do_execsql_test 4.2.4 {
! 334: INSERT INTO ft4x(ft4x) VALUES('rebuild');
! 335: SELECT id, quote(value) FROM ft4x_stat;
! 336: SELECT docid, quote(size) FROM ft4x_docsize
! 337: } {0 X'05182B' 1 X'05' 2 X'05' 3 X'04' 4 X'05' 5 X'05'}
! 338:
! 339: do_execsql_test 4.2.5 {
! 340: INSERT INTO ft4(ft4) VALUES('rebuild');
! 341: SELECT id, quote(value) FROM ft4_stat;
! 342: SELECT docid, quote(size) FROM ft4_docsize
! 343: } {0 X'000000'}
! 344:
! 345: do_execsql_test 4.2.6 {
! 346: INSERT INTO t4(rowid, x) SELECT rowid, x FROM ft4x;
! 347: INSERT INTO ft4(ft4) VALUES('rebuild');
! 348: SELECT id, quote(value) FROM ft4_stat;
! 349: SELECT docid, quote(size) FROM ft4_docsize
! 350: } {0 X'05182B' 1 X'05' 2 X'05' 3 X'04' 4 X'05' 5 X'05'}
! 351:
! 352:
! 353: #-------------------------------------------------------------------------
! 354: # Test cases 5.* test that the following commands do not create/move or
! 355: # delete a %_content table when used with a content=xxx FTS table.
! 356: #
! 357: do_execsql_test 5.1.1 {
! 358: CREATE TABLE t5(a, b, c, d);
! 359: CREATE VIRTUAL TABLE ft5 USING fts4(content=t5);
! 360: SELECT name FROM sqlite_master WHERE name LIKE '%t5%';
! 361: } {
! 362: t5 ft5 ft5_segments ft5_segdir
! 363: sqlite_autoindex_ft5_segdir_1 ft5_docsize ft5_stat
! 364: }
! 365: do_execsql_test 5.1.2 {
! 366: ALTER TABLE ft5 RENAME TO ft6;
! 367: SELECT name FROM sqlite_master WHERE name LIKE '%t5%';
! 368: } {
! 369: t5
! 370: }
! 371: do_execsql_test 5.1.3 {
! 372: SELECT name FROM sqlite_master WHERE name LIKE '%t6%';
! 373: } {
! 374: ft6 ft6_segments ft6_segdir
! 375: sqlite_autoindex_ft6_segdir_1 ft6_docsize ft6_stat
! 376: }
! 377: do_execsql_test 5.1.4 {
! 378: INSERT INTO t5 VALUES('a', 'b', 'c', 'd');
! 379: INSERT INTO ft6(ft6) VALUES('rebuild');
! 380: SELECT rowid FROM ft6 WHERE ft6 MATCH 'b';
! 381: } {1}
! 382: do_execsql_test 5.1.5 {
! 383: DROP TABLE ft6;
! 384: SELECT * FROM t5;
! 385: } {a b c d}
! 386: do_execsql_test 5.1.6 {
! 387: SELECT name FROM sqlite_master WHERE name LIKE '%t6%';
! 388: } {
! 389: }
! 390: do_execsql_test 5.1.7 {
! 391: CREATE VIRTUAL TABLE ft5 USING fts4(content=t5);
! 392: CREATE TABLE t5_content(a, b);
! 393: DROP TABLE ft5;
! 394: SELECT name FROM sqlite_master WHERE name LIKE '%t5%';
! 395: } {
! 396: t5 t5_content
! 397: }
! 398:
! 399: #-------------------------------------------------------------------------
! 400: # Test cases 6.* test
! 401: #
! 402: do_catchsql_test 6.1.1 {
! 403: CREATE VIRTUAL TABLE ft7 USING fts4(content=t7);
! 404: } {1 {vtable constructor failed: ft7}}
! 405:
! 406: do_execsql_test 6.2.1 {
! 407: CREATE TABLE t7(one, two);
! 408: CREATE VIRTUAL TABLE ft7 USING fts4(content=t7);
! 409: INSERT INTO t7 VALUES('A B', 'B A');
! 410: INSERT INTO t7 VALUES('C D', 'A A');
! 411: SELECT * FROM ft7;
! 412: } {
! 413: {A B} {B A} {C D} {A A}
! 414: }
! 415:
! 416: do_catchsql_test 6.2.2 {
! 417: DROP TABLE t7;
! 418: SELECT * FROM ft7;
! 419: } {1 {SQL logic error or missing database}}
! 420:
! 421: db close
! 422: sqlite3 db test.db
! 423: do_execsql_test 6.2.3 {
! 424: SELECT name FROM sqlite_master WHERE name LIKE '%t7%'
! 425: } {
! 426: ft7 ft7_segments ft7_segdir sqlite_autoindex_ft7_segdir_1
! 427: ft7_docsize ft7_stat
! 428: }
! 429: do_catchsql_test 6.2.4 {
! 430: SELECT * FROM ft7;
! 431: } {1 {vtable constructor failed: ft7}}
! 432: do_execsql_test 6.2.5 {
! 433: CREATE TABLE t7(x, y);
! 434: INSERT INTO t7 VALUES('A B', 'B A');
! 435: INSERT INTO t7 VALUES('C D', 'A A');
! 436: SELECT * FROM ft7;
! 437: } {
! 438: {A B} {B A} {C D} {A A}
! 439: }
! 440:
! 441: do_execsql_test 6.2.6 {
! 442: INSERT INTO ft7(ft7) VALUES('rebuild');
! 443: SELECT rowid FROM ft7 WHERE ft7 MATCH '"A A"';
! 444: } {2}
! 445:
! 446: do_execsql_test 6.2.7 {
! 447: DROP TABLE t7;
! 448: CREATE TABLE t7(x);
! 449: }
! 450: do_catchsql_test 6.2.8 {
! 451: SELECT * FROM ft7 WHERE ft7 MATCH '"A A"';
! 452: } {1 {SQL logic error or missing database}}
! 453: do_catchsql_test 6.2.9 {
! 454: SELECT * FROM ft7 WHERE ft7 MATCH '"A A"';
! 455: } {1 {SQL logic error or missing database}}
! 456:
! 457: db close
! 458: sqlite3 db test.db
! 459: do_catchsql_test 6.2.10 {
! 460: SELECT rowid FROM ft7 WHERE ft7 MATCH '"A A"';
! 461: } {0 2}
! 462: do_catchsql_test 6.2.11 {
! 463: SELECT rowid, * FROM ft7 WHERE ft7 MATCH '"A A"';
! 464: } {0 {2 {}}}
! 465:
! 466: #-------------------------------------------------------------------------
! 467: # Test cases 7.*
! 468: #
! 469: do_execsql_test 7.1.1 {
! 470: CREATE VIRTUAL TABLE ft8 USING fts4(content=nosuchtable, x);
! 471: INSERT INTO ft8(docid, x) VALUES(13, 'U O N X G');
! 472: INSERT INTO ft8(docid, x) VALUES(14, 'C J J U B');
! 473: INSERT INTO ft8(docid, x) VALUES(15, 'N J Y G X');
! 474: INSERT INTO ft8(docid, x) VALUES(16, 'R Y D O R');
! 475: INSERT INTO ft8(docid, x) VALUES(17, 'I Y T Q O');
! 476: }
! 477:
! 478: do_execsql_test 7.1.2 {
! 479: SELECT docid FROM ft8 WHERE ft8 MATCH 'N';
! 480: } {13 15}
! 481:
! 482: do_execsql_test 7.2.1 {
! 483: CREATE VIRTUAL TABLE ft9 USING fts4(content=, x);
! 484: INSERT INTO ft9(docid, x) VALUES(13, 'U O N X G');
! 485: INSERT INTO ft9(docid, x) VALUES(14, 'C J J U B');
! 486: INSERT INTO ft9(docid, x) VALUES(15, 'N J Y G X');
! 487: INSERT INTO ft9(docid, x) VALUES(16, 'R Y D O R');
! 488: INSERT INTO ft9(docid, x) VALUES(17, 'I Y T Q O');
! 489: }
! 490: do_execsql_test 7.2.2 {
! 491: SELECT docid FROM ft9 WHERE ft9 MATCH 'N';
! 492: } {13 15}
! 493: do_execsql_test 7.2.3 {
! 494: SELECT name FROM sqlite_master WHERE name LIKE 'ft9_%';
! 495: } {ft9_segments ft9_segdir ft9_docsize ft9_stat}
! 496:
! 497: do_catchsql_test 7.2.4 {
! 498: SELECT * FROM ft9 WHERE ft9 MATCH 'N';
! 499: } {1 {SQL logic error or missing database}}
! 500:
! 501: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>