File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / ext / rtree / rtree6.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (13 years, 1 month ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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>