1
0

rtree6.test 4.4 KB

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