Annotation of embedaddon/sqlite3/test/where6.test, revision 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>