| OLD | NEW |
| (Empty) |
| 1 # 2015 April 28 | |
| 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 # This file focuses on testing the planner (xBestIndex function). | |
| 13 # | |
| 14 | |
| 15 source [file join [file dirname [info script]] fts5_common.tcl] | |
| 16 set testprefix fts5restart | |
| 17 | |
| 18 # If SQLITE_ENABLE_FTS5 is defined, omit this file. | |
| 19 ifcapable !fts5 { | |
| 20 finish_test | |
| 21 return | |
| 22 } | |
| 23 | |
| 24 do_execsql_test 1.0 { | |
| 25 CREATE VIRTUAL TABLE f1 USING fts5(ff); | |
| 26 } | |
| 27 | |
| 28 #------------------------------------------------------------------------- | |
| 29 # Run the 'optimize' command. Check that it does not disturb ongoing | |
| 30 # full-text queries. | |
| 31 # | |
| 32 do_test 1.1 { | |
| 33 for {set i 1} {$i < 1000} {incr i} { | |
| 34 execsql { INSERT INTO f1 VALUES('a b c d e') } | |
| 35 lappend lRowid $i | |
| 36 } | |
| 37 } {} | |
| 38 | |
| 39 do_execsql_test 1.2 { | |
| 40 SELECT rowid FROM f1 WHERE f1 MATCH 'c'; | |
| 41 } $lRowid | |
| 42 | |
| 43 do_test 1.3 { | |
| 44 set res [list] | |
| 45 db eval { SELECT rowid FROM f1 WHERE f1 MATCH 'c' } { | |
| 46 if {$rowid == 100} { | |
| 47 execsql { INSERT INTO f1(f1) VALUES('optimize') } | |
| 48 } | |
| 49 lappend res $rowid | |
| 50 } | |
| 51 set res | |
| 52 } $lRowid | |
| 53 | |
| 54 do_test 1.4.1 { | |
| 55 sqlite3 db2 test.db | |
| 56 set res [list] | |
| 57 db2 eval { SELECT rowid FROM f1 WHERE f1 MATCH 'c' } { | |
| 58 if {$rowid == 100} { | |
| 59 set cres [catchsql { INSERT INTO f1(f1) VALUES('optimize') }] | |
| 60 } | |
| 61 lappend res $rowid | |
| 62 } | |
| 63 set res | |
| 64 } $lRowid | |
| 65 | |
| 66 do_test 1.4.2 { | |
| 67 db2 close | |
| 68 set cres | |
| 69 } {1 {database is locked}} | |
| 70 | |
| 71 #------------------------------------------------------------------------- | |
| 72 # Open a couple of cursors. Then close them in the same order. | |
| 73 # | |
| 74 do_test 2.1 { | |
| 75 set ::s1 [sqlite3_prepare db "SELECT rowid FROM f1 WHERE f1 MATCH 'b'" -1 X] | |
| 76 set ::s2 [sqlite3_prepare db "SELECT rowid FROM f1 WHERE f1 MATCH 'c'" -1 X] | |
| 77 | |
| 78 sqlite3_step $::s1 | |
| 79 } {SQLITE_ROW} | |
| 80 do_test 2.2 { | |
| 81 sqlite3_step $::s2 | |
| 82 } {SQLITE_ROW} | |
| 83 | |
| 84 do_test 2.1 { | |
| 85 sqlite3_finalize $::s1 | |
| 86 sqlite3_finalize $::s2 | |
| 87 } {SQLITE_OK} | |
| 88 | |
| 89 #------------------------------------------------------------------------- | |
| 90 # Copy data between two FTS5 tables. | |
| 91 # | |
| 92 do_execsql_test 3.1 { | |
| 93 CREATE VIRTUAL TABLE f2 USING fts5(gg); | |
| 94 INSERT INTO f2 SELECT ff FROM f1 WHERE f1 MATCH 'b+c+d'; | |
| 95 } | |
| 96 do_execsql_test 3.2 { | |
| 97 SELECT rowid FROM f2 WHERE f2 MATCH 'a+b+c+d+e' | |
| 98 } $lRowid | |
| 99 | |
| 100 #------------------------------------------------------------------------- | |
| 101 # Remove the row that an FTS5 cursor is currently pointing to. And | |
| 102 # various other similar things. Check that this does not disturb | |
| 103 # ongoing scans. | |
| 104 # | |
| 105 do_execsql_test 4.0 { | |
| 106 CREATE VIRTUAL TABLE n4 USING fts5(n); | |
| 107 INSERT INTO n4(rowid, n) VALUES(100, '1 2 3 4 5'); | |
| 108 INSERT INTO n4(rowid, n) VALUES(200, '1 2 3 4'); | |
| 109 INSERT INTO n4(rowid, n) VALUES(300, '2 3 4'); | |
| 110 INSERT INTO n4(rowid, n) VALUES(400, '2 3'); | |
| 111 INSERT INTO n4(rowid, n) VALUES(500, '3'); | |
| 112 } | |
| 113 | |
| 114 do_test 4.1 { | |
| 115 set res [list] | |
| 116 db eval { SELECT rowid FROM n4 WHERE n4 MATCH '3' } { | |
| 117 if {$rowid==300} { | |
| 118 execsql { DELETE FROM n4 WHERE rowid=300 } | |
| 119 } | |
| 120 lappend res $rowid | |
| 121 } | |
| 122 set res | |
| 123 } {100 200 300 400 500} | |
| 124 | |
| 125 do_test 4.2 { | |
| 126 execsql { INSERT INTO n4(rowid, n) VALUES(300, '2 3 4') } | |
| 127 set res [list] | |
| 128 db eval { SELECT rowid FROM n4 WHERE n4 MATCH '3' ORDER BY rowid DESC} { | |
| 129 if {$rowid==300} { | |
| 130 execsql { DELETE FROM n4 WHERE rowid=300 } | |
| 131 } | |
| 132 lappend res $rowid | |
| 133 } | |
| 134 set res | |
| 135 } {500 400 300 200 100} | |
| 136 | |
| 137 do_test 4.3 { | |
| 138 execsql { INSERT INTO n4(rowid, n) VALUES(300, '2 3 4') } | |
| 139 set res [list] | |
| 140 db eval { SELECT rowid FROM n4 WHERE n4 MATCH '3' ORDER BY rowid DESC} { | |
| 141 if {$rowid==300} { | |
| 142 execsql { DELETE FROM n4 } | |
| 143 } | |
| 144 lappend res $rowid | |
| 145 } | |
| 146 set res | |
| 147 } {500 400 300} | |
| 148 | |
| 149 | |
| 150 | |
| 151 finish_test | |
| 152 | |
| OLD | NEW |