| OLD | NEW |
| 1 # 2007 April 16 | 1 # 2007 April 16 |
| 2 # | 2 # |
| 3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
| 4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
| 5 # | 5 # |
| 6 # May you do good and not evil. | 6 # May you do good and not evil. |
| 7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
| 8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
| 9 # | 9 # |
| 10 #*********************************************************************** | 10 #*********************************************************************** |
| 11 # This file tests interactions between the virtual table and | 11 # This file tests interactions between the virtual table and |
| 12 # shared-schema functionality. | 12 # shared-schema functionality. |
| 13 # | 13 # |
| 14 # $Id: vtab_shared.test,v 1.3 2009/07/24 17:58:53 danielk1977 Exp $ | 14 # $Id: vtab_shared.test,v 1.3 2009/07/24 17:58:53 danielk1977 Exp $ |
| 15 | 15 |
| 16 set testdir [file dirname $argv0] | 16 set testdir [file dirname $argv0] |
| 17 source $testdir/tester.tcl | 17 source $testdir/tester.tcl |
| 18 set testprefix vtab_shared |
| 18 | 19 |
| 19 ifcapable !vtab||!shared_cache { | 20 ifcapable !vtab||!shared_cache { |
| 20 finish_test | 21 finish_test |
| 21 return | 22 return |
| 22 } | 23 } |
| 23 | 24 |
| 24 db close | 25 db close |
| 25 sqlite3_enable_shared_cache 1 | 26 sqlite3_enable_shared_cache 1 |
| 26 sqlite3 db test.db | 27 sqlite3 db test.db |
| 27 sqlite3 db2 test.db | 28 sqlite3 db2 test.db |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 # | 110 # |
| 110 do_test vtab_shared-1.10 { | 111 do_test vtab_shared-1.10 { |
| 111 db eval { SELECT * FROM t1 } { | 112 db eval { SELECT * FROM t1 } { |
| 112 set error [catchsql { DROP TABLE t1 } db2] | 113 set error [catchsql { DROP TABLE t1 } db2] |
| 113 break | 114 break |
| 114 } | 115 } |
| 115 set error | 116 set error |
| 116 } {1 {database table is locked: sqlite_master}} | 117 } {1 {database table is locked: sqlite_master}} |
| 117 | 118 |
| 118 do_test vtab_shared-1.11 { | 119 do_test vtab_shared-1.11 { |
| 119 breakpoint | |
| 120 execsql { | 120 execsql { |
| 121 CREATE VIRTUAL TABLE t2 USING echo(t0); | 121 CREATE VIRTUAL TABLE t2 USING echo(t0); |
| 122 CREATE VIRTUAL TABLE t3 USING echo(t0); | 122 CREATE VIRTUAL TABLE t3 USING echo(t0); |
| 123 } | 123 } |
| 124 execsql { SELECT * FROM t3 } db2 | 124 execsql { SELECT * FROM t3 } db2 |
| 125 } {1 2 3 4 5 6} | 125 } {1 2 3 4 5 6} |
| 126 | 126 |
| 127 do_test vtab_shared-1.12.1 { | 127 ifcapable compound { |
| 128 db close | 128 do_test vtab_shared-1.12.1 { |
| 129 execsql { | 129 db close |
| 130 SELECT * FROM t1 UNION ALL | 130 execsql { |
| 131 SELECT * FROM t2 UNION ALL | 131 SELECT * FROM t1 UNION ALL |
| 132 SELECT * FROM t3 | 132 SELECT * FROM t2 UNION ALL |
| 133 } db2 | 133 SELECT * FROM t3 |
| 134 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6} | 134 } db2 |
| 135 do_test vtab_shared-1.12.2 { | 135 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6} |
| 136 sqlite3 db test.db | 136 do_test vtab_shared-1.12.2 { |
| 137 register_echo_module [sqlite3_connection_pointer db] | 137 sqlite3 db test.db |
| 138 execsql { | 138 register_echo_module [sqlite3_connection_pointer db] |
| 139 SELECT * FROM t1 UNION ALL | 139 execsql { |
| 140 SELECT * FROM t2 UNION ALL | 140 SELECT * FROM t1 UNION ALL |
| 141 SELECT * FROM t3 | 141 SELECT * FROM t2 UNION ALL |
| 142 } db | 142 SELECT * FROM t3 |
| 143 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6} | 143 } db |
| 144 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6} |
| 145 } |
| 144 | 146 |
| 145 # Try a rename or two. | 147 # Try a rename or two. |
| 146 # | 148 # |
| 147 ifcapable altertable { | 149 ifcapable altertable { |
| 148 do_test vtab_shared-1.13.1 { | 150 do_test vtab_shared-1.13.1 { |
| 149 execsql { ALTER TABLE t1 RENAME TO t4 } | 151 execsql { ALTER TABLE t1 RENAME TO t4 } |
| 150 execsql { SELECT * FROM t4 } db | 152 execsql { SELECT * FROM t4 } db |
| 151 } {1 2 3 4 5 6} | 153 } {1 2 3 4 5 6} |
| 152 do_test vtab_shared-1.13.2 { | 154 do_test vtab_shared-1.13.2 { |
| 153 execsql { SELECT * FROM t4 } db2 | 155 execsql { SELECT * FROM t4 } db2 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 sqlite3 db2 test.db | 222 sqlite3 db2 test.db |
| 221 register_echo_module [sqlite3_connection_pointer db2] | 223 register_echo_module [sqlite3_connection_pointer db2] |
| 222 execsql { | 224 execsql { |
| 223 INSERT INTO t3 VALUES(4, 5, 6); | 225 INSERT INTO t3 VALUES(4, 5, 6); |
| 224 SELECT * FROM t3; | 226 SELECT * FROM t3; |
| 225 } | 227 } |
| 226 } {1 2 3 4 5 6} | 228 } {1 2 3 4 5 6} |
| 227 | 229 |
| 228 db close | 230 db close |
| 229 db2 close | 231 db2 close |
| 232 |
| 233 #--------------------------------------------------------------- |
| 234 # Test calling sqlite3_close() with vtabs on the disconnect list. |
| 235 # |
| 236 ifcapable rtree { |
| 237 reset_db |
| 238 do_test 2.1.1 { |
| 239 sqlite3 db test.db |
| 240 sqlite3 db2 test.db |
| 241 |
| 242 # Create a virtual table using [db]. |
| 243 execsql { |
| 244 CREATE VIRTUAL TABLE rt USING rtree(id, x1, x2); |
| 245 INSERT INTO rt VALUES(1, 2 ,3); |
| 246 SELECT * FROM rt; |
| 247 } |
| 248 |
| 249 # Drop the virtual table using [db2]. The sqlite3_vtab object belonging |
| 250 # to [db] is moved to the sqlite3.pDisconnect list. |
| 251 execsql { DROP TABLE rt } db2 |
| 252 |
| 253 # Immediately close [db]. At one point this would fail due to the |
| 254 # unfinalized statements held by the un-xDisconnect()ed sqlite3_vtab. |
| 255 db close |
| 256 } {} |
| 257 db2 close |
| 258 } |
| 259 |
| 260 ifcapable fts3 { |
| 261 # Same test as above, except using fts3 instead of rtree. |
| 262 reset_db |
| 263 do_test 2.2.1 { |
| 264 sqlite3 db test.db |
| 265 sqlite3 db2 test.db |
| 266 execsql { |
| 267 CREATE VIRTUAL TABLE ft USING fts3; |
| 268 INSERT INTO ft VALUES('hello world'); |
| 269 SELECT * FROM ft; |
| 270 } |
| 271 execsql { DROP TABLE ft } db2 |
| 272 db close |
| 273 } {} |
| 274 db2 close |
| 275 } |
| 276 |
| 230 sqlite3_enable_shared_cache 0 | 277 sqlite3_enable_shared_cache 0 |
| 231 finish_test | 278 finish_test |
| 279 |
| OLD | NEW |