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>