Annotation of embedaddon/sqlite3/test/where6.test, revision 1.1.1.1

1.1       misho       1: # 2007 June 8
                      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: # This file implements regression tests for SQLite library.  The
                     12: # focus of this file is testing that terms in the ON clause of
                     13: # a LEFT OUTER JOIN are not used with indices.  See ticket #3015.
                     14: #
                     15: # $Id: where6.test,v 1.2 2008/04/17 19:14:02 drh Exp $
                     16: 
                     17: set testdir [file dirname $argv0]
                     18: source $testdir/tester.tcl
                     19: 
                     20: # Build some test data
                     21: #
                     22: do_test where6-1.1 {
                     23:   execsql {
                     24:     CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c);
                     25:     INSERT INTO t1 VALUES(1,3,1);
                     26:     INSERT INTO t1 VALUES(2,4,2);
                     27:     CREATE TABLE t2(x INTEGER PRIMARY KEY);
                     28:     INSERT INTO t2 VALUES(3);
                     29: 
                     30:     SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1;
                     31:   }
                     32: } {1 3 1 3 2 4 2 {}}
                     33: do_test where6-1.2 {
                     34:   execsql {
                     35:     SELECT * FROM t1 LEFT JOIN t2 ON x=b AND c=1;
                     36:   }
                     37: } {1 3 1 3 2 4 2 {}}
                     38: do_test where6-1.3 {
                     39:   execsql {
                     40:     SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c;
                     41:   }
                     42: } {1 3 1 3 2 4 2 {}}
                     43: do_test where6-1.4 {
                     44:   execsql {
                     45:     SELECT * FROM t1 LEFT JOIN t2 ON b=x AND 1=c;
                     46:   }
                     47: } {1 3 1 3 2 4 2 {}}
                     48: 
                     49: ifcapable explain {
                     50:   do_test where6-1.5 {
                     51:      explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c}
                     52:   } [explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1}]
                     53:   do_test where6-1.6 {
                     54:      explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE 1=c}
                     55:   } [explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1}]
                     56: }
                     57: 
                     58: do_test where6-1.11 {
                     59:   execsql {
                     60:     SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1;
                     61:   }
                     62: } {1 3 1 3}
                     63: do_test where6-1.12 {
                     64:   execsql {
                     65:     SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE c=1;
                     66:   }
                     67: } {1 3 1 3}
                     68: do_test where6-1.13 {
                     69:   execsql {
                     70:     SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE 1=c;
                     71:   }
                     72: } {1 3 1 3}
                     73: 
                     74: 
                     75: 
                     76: do_test where6-2.1 {
                     77:   execsql {
                     78:     CREATE INDEX i1 ON t1(c);
                     79: 
                     80:     SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1;
                     81:   }
                     82: } {1 3 1 3 2 4 2 {}}
                     83: do_test where6-2.2 {
                     84:   execsql {
                     85:     SELECT * FROM t1 LEFT JOIN t2 ON x=b AND c=1;
                     86:   }
                     87: } {1 3 1 3 2 4 2 {}}
                     88: do_test where6-2.3 {
                     89:   execsql {
                     90:     SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c;
                     91:   }
                     92: } {1 3 1 3 2 4 2 {}}
                     93: do_test where6-2.4 {
                     94:   execsql {
                     95:     SELECT * FROM t1 LEFT JOIN t2 ON b=x AND 1=c;
                     96:   }
                     97: } {1 3 1 3 2 4 2 {}}
                     98: 
                     99: ifcapable explain {
                    100:   do_test where6-2.5 {
                    101:      explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c}
                    102:   } [explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1}]
                    103:   do_test where6-2.6 {
                    104:      explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE 1=c}
                    105:   } [explain_no_trace {SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1}]
                    106: }
                    107: 
                    108: 
                    109: do_test where6-2.11 {
                    110:   execsql {
                    111:     SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1;
                    112:   }
                    113: } {1 3 1 3}
                    114: do_test where6-2.12 {
                    115:   execsql {
                    116:     SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE c=1;
                    117:   }
                    118: } {1 3 1 3}
                    119: do_test where6-2.13 {
                    120:   execsql {
                    121:     SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE 1=c;
                    122:   }
                    123: } {1 3 1 3}
                    124: do_test where6-2.14 {
                    125:   execsql {
                    126:     SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE 1=c;
                    127:   }
                    128: } {1 3 1 3}
                    129: 
                    130: # Ticket [ebdbadade5b]:
                    131: # If the ON close on a LEFT JOIN is of the form x=y where both x and y
                    132: # are indexed columns on tables to left of the join, then do not use that 
                    133: # term with indices to either table.
                    134: #
                    135: do_test where6-3.1 {
                    136:   db eval {
                    137:     CREATE TABLE t4(x UNIQUE);
                    138:     INSERT INTO t4 VALUES('abc');
                    139:     INSERT INTO t4 VALUES('def');
                    140:     INSERT INTO t4 VALUES('ghi');
                    141:     CREATE TABLE t5(a, b, c, PRIMARY KEY(a,b));
                    142:     INSERT INTO t5 VALUES('abc','def',123);
                    143:     INSERT INTO t5 VALUES('def','ghi',456);
                    144: 
                    145:     SELECT t4a.x, t4b.x, t5.c, t6.v
                    146:       FROM t4 AS t4a
                    147:            INNER JOIN t4 AS t4b
                    148:            LEFT JOIN t5 ON t5.a=t4a.x AND t5.b=t4b.x
                    149:            LEFT JOIN (SELECT 1 AS v) AS t6 ON t4a.x=t4b.x
                    150:      ORDER BY 1, 2, 3;
                    151:   }
                    152: } {abc abc {} 1 abc def 123 {} abc ghi {} {} def abc {} {} def def {} 1 def ghi 456 {} ghi abc {} {} ghi def {} {} ghi ghi {} 1}
                    153: 
                    154: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>