xref: /sqlite-3.40.0/ext/rtree/rtree6.test (revision 8210233c)
1865d4d42Sdanielk1977# 2008 Sep 1
2865d4d42Sdanielk1977#
3865d4d42Sdanielk1977# The author disclaims copyright to this source code.  In place of
4865d4d42Sdanielk1977# a legal notice, here is a blessing:
5865d4d42Sdanielk1977#
6865d4d42Sdanielk1977#    May you do good and not evil.
7865d4d42Sdanielk1977#    May you find forgiveness for yourself and forgive others.
8865d4d42Sdanielk1977#    May you share freely, never taking more than you give.
9865d4d42Sdanielk1977#
10865d4d42Sdanielk1977#***********************************************************************
11865d4d42Sdanielk1977#
12865d4d42Sdanielk1977#
13865d4d42Sdanielk1977
14865d4d42Sdanielk1977if {![info exists testdir]} {
15897230ebSdan  set testdir [file join [file dirname [info script]] .. .. test]
16865d4d42Sdanielk1977}
17865d4d42Sdanielk1977source $testdir/tester.tcl
1858ed3743Sdanset testprefix rtree6
19865d4d42Sdanielk1977
202aad3da6Sdrhifcapable {!rtree || rtree_int_only} {
21865d4d42Sdanielk1977  finish_test
22865d4d42Sdanielk1977  return
23865d4d42Sdanielk1977}
24865d4d42Sdanielk1977
25865d4d42Sdanielk1977#   Operator    Byte Value
26865d4d42Sdanielk1977#   ----------------------
27865d4d42Sdanielk1977#      =        0x41 ('A')
28865d4d42Sdanielk1977#     <=        0x42 ('B')
29865d4d42Sdanielk1977#      <        0x43 ('C')
30865d4d42Sdanielk1977#     >=        0x44 ('D')
31865d4d42Sdanielk1977#      >        0x45 ('E')
32865d4d42Sdanielk1977#   ----------------------
33865d4d42Sdanielk1977
34865d4d42Sdanielk1977proc rtree_strategy {sql} {
35865d4d42Sdanielk1977  set ret [list]
36865d4d42Sdanielk1977  db eval "explain $sql" a {
37865d4d42Sdanielk1977    if {$a(opcode) eq "VFilter"} {
38865d4d42Sdanielk1977      lappend ret $a(p4)
39865d4d42Sdanielk1977    }
40865d4d42Sdanielk1977  }
41865d4d42Sdanielk1977  set ret
42865d4d42Sdanielk1977}
43865d4d42Sdanielk1977
44865d4d42Sdanielk1977proc query_plan {sql} {
45865d4d42Sdanielk1977  set ret [list]
46865d4d42Sdanielk1977  db eval "explain query plan $sql" a {
47865d4d42Sdanielk1977    lappend ret $a(detail)
48865d4d42Sdanielk1977  }
49865d4d42Sdanielk1977  set ret
50865d4d42Sdanielk1977}
51865d4d42Sdanielk1977
52865d4d42Sdanielk1977do_test rtree6-1.1 {
53865d4d42Sdanielk1977  execsql {
54865d4d42Sdanielk1977    CREATE TABLE t2(k INTEGER PRIMARY KEY, v);
55865d4d42Sdanielk1977    CREATE VIRTUAL TABLE t1 USING rtree(ii, x1, x2, y1, y2);
56865d4d42Sdanielk1977  }
57865d4d42Sdanielk1977} {}
58865d4d42Sdanielk1977
59865d4d42Sdanielk1977do_test rtree6-1.2 {
60865d4d42Sdanielk1977  rtree_strategy {SELECT * FROM t1 WHERE x1>10}
6165e6b0ddSdrh} {E0}
621429eca9Sdrhdo_test rtree6-1.2.1 {
631429eca9Sdrh  rtree_strategy {SELECT * FROM t1 WHERE x1>10 AND x2 LIKE '%x%'}
641429eca9Sdrh} {E0}
65865d4d42Sdanielk1977
66865d4d42Sdanielk1977do_test rtree6-1.3 {
67865d4d42Sdanielk1977  rtree_strategy {SELECT * FROM t1 WHERE x1<10}
6865e6b0ddSdrh} {C0}
69865d4d42Sdanielk1977
70865d4d42Sdanielk1977do_test rtree6-1.4 {
71865d4d42Sdanielk1977  rtree_strategy {SELECT * FROM t1,t2 WHERE k=ii AND x1<10}
7265e6b0ddSdrh} {C0}
73865d4d42Sdanielk1977
74865d4d42Sdanielk1977do_test rtree6-1.5 {
75865d4d42Sdanielk1977  rtree_strategy {SELECT * FROM t1,t2 WHERE k=+ii AND x1<10}
7665e6b0ddSdrh} {C0}
77865d4d42Sdanielk1977
783985479bSdando_eqp_test rtree6.2.1 {
793985479bSdan  SELECT * FROM t1,t2 WHERE k=+ii AND x1<10
803985479bSdan} {
81cdf88760Sdrh  QUERY PLAN
82*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:C0
83*8210233cSdrh  `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
843985479bSdan}
85865d4d42Sdanielk1977
863985479bSdando_eqp_test rtree6.2.2 {
873985479bSdan  SELECT * FROM t1,t2 WHERE k=ii AND x1<10
883985479bSdan} {
89cdf88760Sdrh  QUERY PLAN
90*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:C0
91*8210233cSdrh  `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
923985479bSdan}
93865d4d42Sdanielk1977
943985479bSdando_eqp_test rtree6.2.3 {
953985479bSdan  SELECT * FROM t1,t2 WHERE k=ii
963985479bSdan} {
97cdf88760Sdrh  QUERY PLAN
98*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:
99*8210233cSdrh  `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
1003985479bSdan}
101865d4d42Sdanielk1977
1026b7ff748Sdrhdo_eqp_test rtree6.2.4.1 {
1036b7ff748Sdrh  SELECT * FROM t1,t2 WHERE v=+ii and x1<10 and x2>10
1043985479bSdan} {
105cdf88760Sdrh  QUERY PLAN
106*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:C0E1
107*8210233cSdrh  `--SEARCH t2 USING AUTOMATIC COVERING INDEX (v=?)
1083985479bSdan}
1096b7ff748Sdrhdo_eqp_test rtree6.2.4.2 {
1106b7ff748Sdrh  SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10
1116b7ff748Sdrh} {
112cdf88760Sdrh  QUERY PLAN
113*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:C0E1
114*8210233cSdrh  `--SEARCH t2 USING AUTOMATIC PARTIAL COVERING INDEX (v=?)
1156b7ff748Sdrh}
116865d4d42Sdanielk1977
1173985479bSdando_eqp_test rtree6.2.5 {
1183985479bSdan  SELECT * FROM t1,t2 WHERE k=ii AND x1<v
1193985479bSdan} {
120cdf88760Sdrh  QUERY PLAN
121*8210233cSdrh  |--SCAN t1 VIRTUAL TABLE INDEX 2:
122*8210233cSdrh  `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
1233985479bSdan}
124865d4d42Sdanielk1977
1258ad5c949Sdando_execsql_test rtree6-3.1 {
1268ad5c949Sdan  CREATE VIRTUAL TABLE t3 USING rtree(id, x1, x2, y1, y2);
1278ad5c949Sdan  INSERT INTO t3 VALUES(NULL, 1, 1, 2, 2);
1288ad5c949Sdan  SELECT * FROM t3 WHERE
1298ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1308ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1318ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1328ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1338ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1348ad5c949Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5;
1358ad5c949Sdan} {1 1.0 1.0 2.0 2.0}
1368ad5c949Sdan
1378ad5c949Sdando_test rtree6.3.2 {
1388ad5c949Sdan  rtree_strategy {
1398ad5c949Sdan    SELECT * FROM t3 WHERE
1408ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1418ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1428ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1438ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5
1448ad5c949Sdan  }
14565e6b0ddSdrh} {E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0}
146fb1f98a1Sdando_test rtree6.3.3 {
1478ad5c949Sdan  rtree_strategy {
1488ad5c949Sdan    SELECT * FROM t3 WHERE
1498ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1508ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1518ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1528ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1538ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
1548ad5c949Sdan      x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5
1558ad5c949Sdan  }
15665e6b0ddSdrh} {E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0}
1578ad5c949Sdan
158fb1f98a1Sdando_execsql_test rtree6-3.4 {
159fb1f98a1Sdan  SELECT * FROM t3 WHERE x1>0.5 AND x1>0.8 AND x1>1.1
160fb1f98a1Sdan} {}
161fb1f98a1Sdando_execsql_test rtree6-3.5 {
162fb1f98a1Sdan  SELECT * FROM t3 WHERE
163fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
164fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
165fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
166fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
167fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND
168fb1f98a1Sdan    x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>0.5 AND x1>1.1
169fb1f98a1Sdan} {}
170fb1f98a1Sdan
17158ed3743Sdan#-------------------------------------------------------------------------
17258ed3743Sdanreset_db
17358ed3743Sdando_execsql_test 4.0 {
17458ed3743Sdan  CREATE VIRTUAL TABLE t1 USING rtree(id,x0,x1,y0,y1);
17558ed3743Sdan}
17658ed3743Sdando_execsql_test 4.1 {
17758ed3743Sdan  DELETE FROM t1 WHERE x0>1 AND x1<2 OR y0<92;
17858ed3743Sdan}
17958ed3743Sdan
180eab0e103Sdanexpand_all_sql db
181865d4d42Sdanielk1977finish_test
182