Annotation of embedaddon/sqlite3/ext/rtree/rtree6.test, revision 1.1
1.1 ! misho 1: # 2008 Sep 1
! 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: #
! 13:
! 14: if {![info exists testdir]} {
! 15: set testdir [file join [file dirname [info script]] .. .. test]
! 16: }
! 17: source $testdir/tester.tcl
! 18:
! 19: ifcapable !rtree {
! 20: finish_test
! 21: return
! 22: }
! 23:
! 24: # Operator Byte Value
! 25: # ----------------------
! 26: # = 0x41 ('A')
! 27: # <= 0x42 ('B')
! 28: # < 0x43 ('C')
! 29: # >= 0x44 ('D')
! 30: # > 0x45 ('E')
! 31: # ----------------------
! 32:
! 33: proc rtree_strategy {sql} {
! 34: set ret [list]
! 35: db eval "explain $sql" a {
! 36: if {$a(opcode) eq "VFilter"} {
! 37: lappend ret $a(p4)
! 38: }
! 39: }
! 40: set ret
! 41: }
! 42:
! 43: proc query_plan {sql} {
! 44: set ret [list]
! 45: db eval "explain query plan $sql" a {
! 46: lappend ret $a(detail)
! 47: }
! 48: set ret
! 49: }
! 50:
! 51: do_test rtree6-1.1 {
! 52: execsql {
! 53: CREATE TABLE t2(k INTEGER PRIMARY KEY, v);
! 54: CREATE VIRTUAL TABLE t1 USING rtree(ii, x1, x2, y1, y2);
! 55: }
! 56: } {}
! 57:
! 58: do_test rtree6-1.2 {
! 59: rtree_strategy {SELECT * FROM t1 WHERE x1>10}
! 60: } {Ea}
! 61:
! 62: do_test rtree6-1.3 {
! 63: rtree_strategy {SELECT * FROM t1 WHERE x1<10}
! 64: } {Ca}
! 65:
! 66: do_test rtree6-1.4 {
! 67: rtree_strategy {SELECT * FROM t1,t2 WHERE k=ii AND x1<10}
! 68: } {Ca}
! 69:
! 70: do_test rtree6-1.5 {
! 71: rtree_strategy {SELECT * FROM t1,t2 WHERE k=+ii AND x1<10}
! 72: } {Ca}
! 73:
! 74: do_eqp_test rtree6.2.1 {
! 75: SELECT * FROM t1,t2 WHERE k=+ii AND x1<10
! 76: } {
! 77: 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:Ca (~0 rows)}
! 78: 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
! 79: }
! 80:
! 81: do_eqp_test rtree6.2.2 {
! 82: SELECT * FROM t1,t2 WHERE k=ii AND x1<10
! 83: } {
! 84: 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:Ca (~0 rows)}
! 85: 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
! 86: }
! 87:
! 88: do_eqp_test rtree6.2.3 {
! 89: SELECT * FROM t1,t2 WHERE k=ii
! 90: } {
! 91: 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2: (~0 rows)}
! 92: 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
! 93: }
! 94:
! 95: do_eqp_test rtree6.2.4 {
! 96: SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10
! 97: } {
! 98: 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:CaEb (~0 rows)}
! 99: 0 1 1 {SCAN TABLE t2 (~100000 rows)}
! 100: }
! 101:
! 102: do_eqp_test rtree6.2.5 {
! 103: SELECT * FROM t1,t2 WHERE k=ii AND x1<v
! 104: } {
! 105: 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2: (~0 rows)}
! 106: 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
! 107: }
! 108:
! 109: do_execsql_test rtree6-3.1 {
! 110: CREATE VIRTUAL TABLE t3 USING rtree(id, x1, x2, y1, y2);
! 111: INSERT INTO t3 VALUES(NULL, 1, 1, 2, 2);
! 112: SELECT * FROM t3 WHERE
! 113: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 114: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 115: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 116: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 117: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 118: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5;
! 119: } {1 1.0 1.0 2.0 2.0}
! 120:
! 121: do_test rtree6.3.2 {
! 122: rtree_strategy {
! 123: SELECT * FROM t3 WHERE
! 124: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 125: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 126: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 127: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5
! 128: }
! 129: } {EaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEa}
! 130: do_test rtree6.3.3 {
! 131: rtree_strategy {
! 132: SELECT * FROM t3 WHERE
! 133: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 134: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 135: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 136: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 137: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 138: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5
! 139: }
! 140: } {EaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEa}
! 141:
! 142: do_execsql_test rtree6-3.4 {
! 143: SELECT * FROM t3 WHERE x1>0.5 AND x1>0.8 AND x1>1.1
! 144: } {}
! 145: do_execsql_test rtree6-3.5 {
! 146: SELECT * FROM t3 WHERE
! 147: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 148: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 149: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 150: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 151: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
! 152: x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>1.1
! 153: } {}
! 154:
! 155:
! 156: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>