| OLD | NEW |
| 1 # 2010 July 09 | 1 # 2010 July 09 |
| 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 implements regression tests for SQLite library. The | 11 # This file implements regression tests for SQLite library. The |
| 12 # focus of this file is testing the SELECT statement. | 12 # focus of this file is testing the SELECT statement. |
| 13 # | 13 # |
| 14 | 14 |
| 15 set testdir [file dirname $argv0] | 15 set testdir [file dirname $argv0] |
| 16 source $testdir/tester.tcl | 16 source $testdir/tester.tcl |
| 17 set testprefix stat |
| 17 | 18 |
| 18 ifcapable !vtab||!compound { | 19 ifcapable !vtab||!compound { |
| 19 finish_test | 20 finish_test |
| 20 return | 21 return |
| 21 } | 22 } |
| 22 | 23 |
| 24 # This module uses hard-coded results that depend on exact measurements of |
| 25 # pages sizes at the byte level, and hence will not work if the reserved_bytes |
| 26 # value is nonzero. |
| 27 if {[nonzero_reserved_bytes]} {finish_test; return;} |
| 23 | 28 |
| 24 set ::asc 1 | 29 set ::asc 1 |
| 25 proc a_string {n} { string range [string repeat [incr ::asc]. $n] 1 $n } | 30 proc a_string {n} { string range [string repeat [incr ::asc]. $n] 1 $n } |
| 26 db func a_string a_string | 31 db func a_string a_string |
| 27 | 32 |
| 28 register_dbstat_vtab db | 33 register_dbstat_vtab db |
| 29 do_execsql_test stat-0.0 { | 34 do_execsql_test stat-0.0 { |
| 35 PRAGMA table_info(dbstat); |
| 36 } {/0 name TEXT .* 1 path TEXT .* 9 pgsize INTEGER/} |
| 37 |
| 38 # Attempts to drop an eponymous virtual table are a no-op. |
| 39 do_execsql_test stat-0.1 { |
| 40 DROP TABLE dbstat; |
| 41 PRAGMA table_info=dbstat; |
| 42 } {/0 name TEXT .* 1 path TEXT .* 9 pgsize INTEGER/} |
| 43 |
| 44 db close |
| 45 forcedelete test.db |
| 46 sqlite3 db test.db |
| 47 db func a_string a_string |
| 48 register_dbstat_vtab db |
| 49 do_execsql_test stat-0.2 { |
| 30 PRAGMA auto_vacuum = OFF; | 50 PRAGMA auto_vacuum = OFF; |
| 31 CREATE VIRTUAL TABLE temp.stat USING dbstat; | 51 CREATE VIRTUAL TABLE temp.stat USING dbstat; |
| 32 SELECT * FROM stat; | 52 SELECT * FROM stat; |
| 33 } {} | 53 } {} |
| 34 | 54 |
| 35 ifcapable wal { | 55 |
| 56 if {[wal_is_capable]} { |
| 36 do_execsql_test stat-0.1 { | 57 do_execsql_test stat-0.1 { |
| 37 PRAGMA journal_mode = WAL; | 58 PRAGMA journal_mode = WAL; |
| 38 PRAGMA journal_mode = delete; | 59 PRAGMA journal_mode = delete; |
| 39 SELECT name, path, pageno, pagetype, ncell, payload, unused, mx_payload | 60 SELECT name, path, pageno, pagetype, ncell, payload, unused, mx_payload |
| 40 FROM stat; | 61 FROM stat; |
| 41 } {wal delete sqlite_master / 1 leaf 0 0 916 0} | 62 } {wal delete sqlite_master / 1 leaf 0 0 916 0} |
| 42 } | 63 } |
| 43 | 64 |
| 44 do_test stat-1.0 { | 65 do_test stat-1.0 { |
| 45 execsql { | 66 execsql { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 } [list \ | 198 } [list \ |
| 178 t1 / 2 leaf 2 993 5 1517 \ | 199 t1 / 2 leaf 2 993 5 1517 \ |
| 179 t1 /000+000000 3 overflow 0 1020 0 0 \ | 200 t1 /000+000000 3 overflow 0 1020 0 0 \ |
| 180 t1 /001+000000 4 overflow 0 1020 0 0 \ | 201 t1 /001+000000 4 overflow 0 1020 0 0 \ |
| 181 ] | 202 ] |
| 182 | 203 |
| 183 do_catchsql_test stat-6.1 { | 204 do_catchsql_test stat-6.1 { |
| 184 CREATE VIRTUAL TABLE temp.s2 USING dbstat(mainx); | 205 CREATE VIRTUAL TABLE temp.s2 USING dbstat(mainx); |
| 185 } {1 {no such database: mainx}} | 206 } {1 {no such database: mainx}} |
| 186 | 207 |
| 208 #------------------------------------------------------------------------- |
| 209 # Test that the argument passed to the dbstat constructor is dequoted |
| 210 # before it is matched against the names of attached databases. |
| 211 # |
| 212 forcedelete test.db2 |
| 213 do_execsql_test 7.1 { |
| 214 ATTACH 'test.db2' AS '123'; |
| 215 PRAGMA "123".auto_vacuum = OFF; |
| 216 CREATE TABLE "123".x1(a, b); |
| 217 INSERT INTO x1 VALUES(1, 2); |
| 218 } |
| 219 |
| 220 do_execsql_test 7.1.1 { |
| 221 SELECT * FROM dbstat('123'); |
| 222 } { |
| 223 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 224 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 225 } |
| 226 do_execsql_test 7.1.2 { |
| 227 SELECT * FROM dbstat(123); |
| 228 } { |
| 229 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 230 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 231 } |
| 232 do_execsql_test 7.1.3 { |
| 233 CREATE VIRTUAL TABLE x2 USING dbstat('123'); |
| 234 SELECT * FROM x2; |
| 235 } { |
| 236 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 237 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 238 } |
| 239 do_execsql_test 7.1.4 { |
| 240 CREATE VIRTUAL TABLE x3 USING dbstat(123); |
| 241 SELECT * FROM x3; |
| 242 } { |
| 243 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 244 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 245 } |
| 246 |
| 247 do_execsql_test 7.2 { |
| 248 DETACH 123; |
| 249 DROP TABLE x2; |
| 250 DROP TABLE x3; |
| 251 ATTACH 'test.db2' AS '123corp'; |
| 252 } |
| 253 do_execsql_test 7.2.1 { |
| 254 SELECT * FROM dbstat('123corp'); |
| 255 } { |
| 256 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 257 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 258 } |
| 259 do_catchsql_test 7.2.2 { |
| 260 SELECT * FROM dbstat(123corp); |
| 261 } {1 {unrecognized token: "123corp"}} |
| 262 do_execsql_test 7.2.3 { |
| 263 CREATE VIRTUAL TABLE x2 USING dbstat('123corp'); |
| 264 SELECT * FROM x2; |
| 265 } { |
| 266 sqlite_master / 1 leaf 1 37 875 37 0 1024 |
| 267 x1 / 2 leaf 1 4 1008 4 1024 1024 |
| 268 } |
| 269 do_catchsql_test 7.2.4 { |
| 270 CREATE VIRTUAL TABLE x3 USING dbstat(123corp); |
| 271 SELECT * FROM x3; |
| 272 } {1 {unrecognized token: "123corp"}} |
| 273 |
| 187 finish_test | 274 finish_test |
| OLD | NEW |