Annotation of embedaddon/sqlite3/ext/rtree/rtree6.test, revision 1.1.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>