| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | if {![info exists testdir]} { |
| | set testdir [file join [file dirname [info script]] .. .. test] |
| | } |
| | source [file join [file dirname [info script]] rtree_util.tcl] |
| | source $testdir/tester.tcl |
| | ifcapable !rtree { finish_test ; return } |
| |
|
| | |
| | |
| | |
| | |
| | proc populate_t1 {n} { |
| | execsql { DELETE FROM t1 } |
| | for {set i 1} {$i <= $n} {incr i} { |
| | execsql { INSERT INTO t1 VALUES($i, $i, $i+2) } |
| | } |
| | } |
| |
|
| | |
| | |
| | do_test rtree8-1.1.1 { |
| | execsql { PRAGMA page_size = 512 } |
| | execsql { CREATE VIRTUAL TABLE t1 USING rtree_i32(id, x1, x2) } |
| | populate_t1 5 |
| | } {} |
| | do_test rtree8-1.1.2 { |
| | set res [list] |
| | set rc [catch { |
| | db eval { SELECT * FROM t1 } { |
| | lappend res $x1 $x2 |
| | if {$id==3} { db eval { DELETE FROM t1 WHERE id>3 } } |
| | } |
| | } msg]; |
| | lappend rc $msg |
| | set rc |
| | } {1 {database table is locked}} |
| | do_test rtree8-1.1.2b { |
| | db eval { SELECT * FROM t1 ORDER BY +id } { |
| | if {$id==3} { db eval { DELETE FROM t1 WHERE id>3 } } |
| | } |
| | db eval {SELECT x1, x2 FROM t1} |
| | } {1 3 2 4 3 5} |
| | do_test rtree8-1.1.3 { |
| | execsql { SELECT * FROM t1 } |
| | } {1 1 3 2 2 4 3 3 5} |
| |
|
| | |
| | |
| | proc nested_select {n} { |
| | set ::max $n |
| | db eval { SELECT * FROM t1 } { |
| | if {$id == $n} { nested_select [expr $n+1] } |
| | } |
| | return $::max |
| | } |
| | do_test rtree8-1.2.1 { populate_t1 50 } {} |
| | do_test rtree8-1.2.2 { nested_select 1 } {51} |
| |
|
| | |
| | |
| | |
| | |
| | populate_t1 1500 |
| | do_rtree_integrity_test rtree8-1.3.0 t1 |
| | do_execsql_test rtree8-1.3.1 { SELECT max(nodeno) FROM t1_node } {183} |
| | do_test rtree8-1.3.2 { |
| | set rowids [execsql {SELECT min(rowid) FROM t1_rowid GROUP BY nodeno}] |
| | set stmt_list [list] |
| | foreach row $rowids { |
| | set stmt [sqlite3_prepare db "SELECT * FROM t1 WHERE id = $row" -1 tail] |
| | sqlite3_step $stmt |
| | lappend res_list [sqlite3_column_int $stmt 0] |
| | lappend stmt_list $stmt |
| | } |
| | } {} |
| | do_test rtree8-1.3.3 { set res_list } $rowids |
| | do_execsql_test rtree8-1.3.4 { SELECT count(*) FROM t1 } {1500} |
| | do_test rtree8-1.3.5 { |
| | foreach stmt $stmt_list { sqlite3_finalize $stmt } |
| | } {} |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | populate_t1 50 |
| | do_execsql_test rtree8-2.1.1 { SELECT max(nodeno) FROM t1_node } {5} |
| | sqlite3_db_config db DEFENSIVE 0 |
| | do_execsql_test rtree8-2.1.2 { DELETE FROM t1_node } {} |
| | for {set i 1} {$i <= 50} {incr i} { |
| | do_catchsql_test rtree8-2.1.3.$i { |
| | SELECT * FROM t1 WHERE id = $i |
| | } {1 {database disk image is malformed}} |
| | } |
| | do_catchsql_test rtree8-2.1.4 { |
| | SELECT * FROM t1 |
| | } {1 {database disk image is malformed}} |
| | do_catchsql_test rtree8-2.1.5 { |
| | DELETE FROM t1 |
| | } {1 {database disk image is malformed}} |
| |
|
| | do_execsql_test rtree8-2.1.6 { |
| | DROP TABLE t1; |
| | CREATE VIRTUAL TABLE t1 USING rtree_i32(id, x1, x2); |
| | } {} |
| |
|
| |
|
| | populate_t1 50 |
| | sqlite3_db_config db DEFENSIVE 0 |
| | do_execsql_test rtree8-2.2.1 { |
| | DELETE FROM t1_parent |
| | } {} |
| | do_catchsql_test rtree8-2.2.2 { |
| | DELETE FROM t1 WHERE id=25 |
| | } {1 {database disk image is malformed}} |
| | do_execsql_test rtree8-2.2.3 { |
| | DROP TABLE t1; |
| | CREATE VIRTUAL TABLE t1 USING rtree_i32(id, x1, x2); |
| | } {} |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | populate_t1 10 |
| | do_catchsql_test rtree8-3.1 { |
| | SELECT * FROM t1 WHERE x1 MATCH '1234' |
| | } {1 {SQL logic error}} |
| |
|
| | |
| | |
| | |
| | do_catchsql_test rtree8-4.1 { |
| | SELECT rtreedepth('hello world') |
| | } {1 {Invalid argument to rtreedepth()}} |
| | do_catchsql_test rtree8-4.2 { |
| | SELECT rtreedepth(X'00') |
| | } {1 {Invalid argument to rtreedepth()}} |
| |
|
| |
|
| | |
| | |
| | |
| | do_execsql_test rtree8-5.1 { |
| | CREATE VIRTUAL TABLE t2 USING rtree_i32(id, x1, x2) |
| | } {} |
| | do_test rtree8-5.2 { |
| | execsql BEGIN |
| | for {set i 0} {$i < 100} {incr i} { |
| | execsql { INSERT INTO t2 VALUES($i, 100, 101) } |
| | } |
| | for {set i 100} {$i < 200} {incr i} { |
| | execsql { INSERT INTO t2 VALUES($i, 1000, 1001) } |
| | } |
| | execsql COMMIT |
| | } {} |
| | do_rtree_integrity_test rtree8-5.3 t2 |
| | do_test rtree8-5.4 { |
| | execsql BEGIN |
| | for {set i 0} {$i < 200} {incr i} { |
| | execsql { DELETE FROM t2 WHERE id = $i } |
| | } |
| | execsql COMMIT |
| | } {} |
| | do_rtree_integrity_test rtree8-5.5 t2 |
| |
|
| | |
| | |
| | |
| | |
| | |
| | do_test rtree8-6.1 { |
| | db close |
| | sqlite3 db :memory: |
| | db eval { |
| | PRAGMA page_size=512; |
| | CREATE VIRTUAL TABLE t1 USING rtree(id,x1,x2,y1,y2); |
| | WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49) |
| | INSERT INTO t1 SELECT x, x, x+1, x, x+1 FROM c; |
| | } |
| | set rc [catch { |
| | db eval {SELECT id FROM t1} x { |
| | db eval {DELETE FROM t1 WHERE id=$x(id)} |
| | } |
| | } msg] |
| | lappend rc $msg |
| | } {1 {database table is locked}} |
| |
|
| |
|
| |
|
| |
|
| | finish_test |
| |
|