⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 where2.test

📁 最新的sqlite3.6.2源代码
💻 TEST
📖 第 1 页 / 共 2 页
字号:
  # Permutations of the expression terms.  queryplan {    SELECT * FROM t2249b CROSS JOIN t2249a WHERE b=a OR a='hello';  }} {123 0123 nosort t2249b {} t2249a {}}do_test where2-6.11.3 {  # Permutations of the expression terms.  queryplan {    SELECT * FROM t2249b CROSS JOIN t2249a WHERE 'hello'=a OR b=a;  }} {123 0123 nosort t2249b {} t2249a {}}do_test where2-6.11.4 {  # Permutations of the expression terms.  queryplan {    SELECT * FROM t2249b CROSS JOIN t2249a WHERE a='hello' OR b=a;  }} {123 0123 nosort t2249b {} t2249a {}}ifcapable explain&&subquery {  # These tests are not run if subquery support is not included in the  # build. This is because these tests test the "a = 1 OR a = 2" to  # "a IN (1, 2)" optimisation transformation, which is not enabled if  # subqueries and the IN operator is not available.  #  do_test where2-6.12 {    # In this case, the +b disables the affinity conflict and allows    # the OR optimization to be used again.  The result is now an empty    # set, the same as in where2-6.9.    queryplan {      SELECT * FROM t2249b CROSS JOIN t2249a WHERE a=+b OR a='hello';    }  } {nosort t2249b {} {} sqlite_autoindex_t2249a_1}  do_test where2-6.12.2 {    # In this case, the +b disables the affinity conflict and allows    # the OR optimization to be used again.  The result is now an empty    # set, the same as in where2-6.9.    queryplan {      SELECT * FROM t2249b CROSS JOIN t2249a WHERE a='hello' OR +b=a;    }  } {nosort t2249b {} {} sqlite_autoindex_t2249a_1}  do_test where2-6.12.3 {    # In this case, the +b disables the affinity conflict and allows    # the OR optimization to be used again.  The result is now an empty    # set, the same as in where2-6.9.    queryplan {      SELECT * FROM t2249b CROSS JOIN t2249a WHERE +b=a OR a='hello';    }  } {nosort t2249b {} {} sqlite_autoindex_t2249a_1}  do_test where2-6.13 {    # The addition of +a on the second term disabled the OR optimization.    # But we should still get the same empty-set result as in where2-6.9.    queryplan {      SELECT * FROM t2249b CROSS JOIN t2249a WHERE a=+b OR +a='hello';    }  } {nosort t2249b {} t2249a {}}}# Variations on the order of terms in a WHERE clause in order# to make sure the OR optimizer can recognize them all.do_test where2-6.20 {  queryplan {    SELECT * FROM t2249a x CROSS JOIN t2249a y WHERE x.a=y.a  }} {0123 0123 nosort x {} {} sqlite_autoindex_t2249a_1}ifcapable explain&&subquery {  # These tests are not run if subquery support is not included in the  # build. This is because these tests test the "a = 1 OR a = 2" to  # "a IN (1, 2)" optimisation transformation, which is not enabled if  # subqueries and the IN operator is not available.  #  do_test where2-6.21 {    queryplan {      SELECT * FROM t2249a x CROSS JOIN t2249a y WHERE x.a=y.a OR y.a='hello'    }  } {0123 0123 nosort x {} {} sqlite_autoindex_t2249a_1}  do_test where2-6.22 {    queryplan {      SELECT * FROM t2249a x CROSS JOIN t2249a y WHERE y.a=x.a OR y.a='hello'    }  } {0123 0123 nosort x {} {} sqlite_autoindex_t2249a_1}  do_test where2-6.23 {    queryplan {      SELECT * FROM t2249a x CROSS JOIN t2249a y WHERE y.a='hello' OR x.a=y.a    }  } {0123 0123 nosort x {} {} sqlite_autoindex_t2249a_1}}# Unique queries (queries that are guaranteed to return only a single# row of result) do not call the sorter.  But all tables must give# a unique result.  If any one table in the join does not give a unique# result then sorting is necessary.#do_test where2-7.1 {  cksort {    create table t8(a unique, b, c);    insert into t8 values(1,2,3);    insert into t8 values(2,3,4);    create table t9(x,y);    insert into t9 values(2,4);    insert into t9 values(2,3);    select y from t8, t9 where a=1 order by a, y;  }} {3 4 sort}do_test where2-7.2 {  cksort {    select * from t8 where a=1 order by b, c  }} {1 2 3 nosort}do_test where2-7.3 {  cksort {    select * from t8, t9 where a=1 and y=3 order by b, x  }} {1 2 3 2 3 sort}do_test where2-7.4 {  cksort {    create unique index i9y on t9(y);    select * from t8, t9 where a=1 and y=3 order by b, x  }} {1 2 3 2 3 nosort}# Ticket #1807.  Using IN constrains on multiple columns of# a multi-column index.#ifcapable subquery {  do_test where2-8.1 {    execsql {      SELECT * FROM t1 WHERE x IN (20,21) AND y IN (1,2)    }  } {}  do_test where2-8.2 {    execsql {      SELECT * FROM t1 WHERE x IN (1,2) AND y IN (-5,-6)    }  } {}  execsql {CREATE TABLE tx AS SELECT * FROM t1}  do_test where2-8.3 {    execsql {      SELECT w FROM t1       WHERE x IN (SELECT x FROM tx WHERE rowid<0)         AND +y IN (SELECT y FROM tx WHERE rowid=1)    }  } {}  do_test where2-8.4 {    execsql {      SELECT w FROM t1       WHERE x IN (SELECT x FROM tx WHERE rowid=1)         AND y IN (SELECT y FROM tx WHERE rowid<0)    }  } {}  #set sqlite_where_trace 1  do_test where2-8.5 {    execsql {      CREATE INDEX tx_xyz ON tx(x, y, z, w);      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 12 AND 14)    }  } {12 13 14}  do_test where2-8.6 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 12 AND 14)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {12 13 14}  do_test where2-8.7 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 12 AND 14)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {10 11 12 13 14 15}  do_test where2-8.8 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {10 11 12 13 14 15 16 17 18 19 20}  do_test where2-8.9 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 2 AND 4)    }  } {}  do_test where2-8.10 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 2 AND 4)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.11 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 2 AND 4)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.12 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN -4 AND -2)    }  } {}  do_test where2-8.13 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN -4 AND -2)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.14 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN -4 AND -2)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.15 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 200 AND 300)    }  } {}  do_test where2-8.16 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 200 AND 300)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.17 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 200 AND 300)         AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.18 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 200 AND 300)    }  } {}  do_test where2-8.19 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 10 AND 20)         AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 200 AND 300)         AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 10 AND 20)    }  } {}  do_test where2-8.20 {    execsql {      SELECT w FROM tx       WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 200 AND 300)         AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 10 AND 20)         AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 10 AND 20)    }  } {}}  # Make sure WHERE clauses of the form A=1 AND (B=2 OR B=3) are optimized# when we have an index on A and B.#ifcapable or_opt&&tclvar {  do_test where2-9.1 {    execsql {      BEGIN;      CREATE TABLE t10(a,b,c);      INSERT INTO t10 VALUES(1,1,1);      INSERT INTO t10 VALUES(1,2,2);      INSERT INTO t10 VALUES(1,3,3);    }    for {set i 4} {$i<=1000} {incr i} {      execsql {INSERT INTO t10 VALUES(1,$i,$i)}    }    execsql {      CREATE INDEX i10 ON t10(a,b);      COMMIT;      SELECT count(*) FROM t10;    }  } 1000  ifcapable subquery {    do_test where2-9.2 {      count {        SELECT * FROM t10 WHERE a=1 AND (b=2 OR b=3)      }    } {1 2 2 1 3 3 7}  }}finish_test

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -