Annotation of embedaddon/sqlite3/test/tkt2640.test, revision 1.1
1.1 ! misho 1: # 2007 Sep 12
! 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: # This file is to test that ticket #2640 has been fixed.
! 13: #
! 14: # $Id: tkt2640.test,v 1.3 2008/08/04 03:51:24 danielk1977 Exp $
! 15: #
! 16:
! 17: # The problem in ticket #2640 was that the query optimizer was
! 18: # not recognizing all uses of tables within subqueries in the
! 19: # WHERE clause. If the subquery contained a compound SELECT,
! 20: # then tables that were used by terms of the compound other than
! 21: # the last term would not be recognized as dependencies.
! 22: # So if one of the SELECT statements within a compound made
! 23: # use of a table that occurs later in a join, the query
! 24: # optimizer would not recognize this and would try to evaluate
! 25: # the subquery too early, before that tables value had been
! 26: # established.
! 27:
! 28: set testdir [file dirname $argv0]
! 29: source $testdir/tester.tcl
! 30:
! 31: ifcapable !subquery||!compound {
! 32: finish_test
! 33: return
! 34: }
! 35:
! 36: do_test tkt2640-1.1 {
! 37: execsql {
! 38: CREATE TABLE persons(person_id, name);
! 39: INSERT INTO persons VALUES(1,'fred');
! 40: INSERT INTO persons VALUES(2,'barney');
! 41: INSERT INTO persons VALUES(3,'wilma');
! 42: INSERT INTO persons VALUES(4,'pebbles');
! 43: INSERT INTO persons VALUES(5,'bambam');
! 44: CREATE TABLE directors(person_id);
! 45: INSERT INTO directors VALUES(5);
! 46: INSERT INTO directors VALUES(3);
! 47: CREATE TABLE writers(person_id);
! 48: INSERT INTO writers VALUES(2);
! 49: INSERT INTO writers VALUES(3);
! 50: INSERT INTO writers VALUES(4);
! 51: SELECT DISTINCT p.name
! 52: FROM persons p, directors d
! 53: WHERE d.person_id=p.person_id
! 54: AND NOT EXISTS (
! 55: SELECT person_id FROM directors d1 WHERE d1.person_id=p.person_id
! 56: EXCEPT
! 57: SELECT person_id FROM writers w
! 58: );
! 59: }
! 60: } {wilma}
! 61: do_test tkt2640-1.2 {
! 62: execsql {
! 63: SELECT DISTINCT p.name
! 64: FROM persons p CROSS JOIN directors d
! 65: WHERE d.person_id=p.person_id
! 66: AND NOT EXISTS (
! 67: SELECT person_id FROM directors d1 WHERE d1.person_id=p.person_id
! 68: EXCEPT
! 69: SELECT person_id FROM writers w
! 70: );
! 71: }
! 72: } {wilma}
! 73: do_test tkt2640-1.3 {
! 74: execsql {
! 75: SELECT DISTINCT p.name
! 76: FROM directors d CROSS JOIN persons p
! 77: WHERE d.person_id=p.person_id
! 78: AND NOT EXISTS (
! 79: SELECT person_id FROM directors d1 WHERE d1.person_id=p.person_id
! 80: EXCEPT
! 81: SELECT person_id FROM writers w
! 82: );
! 83: }
! 84: } {wilma}
! 85: do_test tkt2640-1.4 {
! 86: execsql {
! 87: SELECT DISTINCT p.name
! 88: FROM persons p, directors d
! 89: WHERE d.person_id=p.person_id
! 90: AND NOT EXISTS (
! 91: SELECT person_id FROM directors d1 WHERE d1.person_id=d.person_id
! 92: EXCEPT
! 93: SELECT person_id FROM writers w
! 94: );
! 95: }
! 96: } {wilma}
! 97: do_test tkt2640-1.5 {
! 98: execsql {
! 99: SELECT DISTINCT p.name
! 100: FROM persons p CROSS JOIN directors d
! 101: WHERE d.person_id=p.person_id
! 102: AND NOT EXISTS (
! 103: SELECT person_id FROM directors d1 WHERE d1.person_id=d.person_id
! 104: EXCEPT
! 105: SELECT person_id FROM writers w
! 106: );
! 107: }
! 108: } {wilma}
! 109: do_test tkt2640-1.6 {
! 110: execsql {
! 111: SELECT DISTINCT p.name
! 112: FROM directors d CROSS JOIN persons p
! 113: WHERE d.person_id=p.person_id
! 114: AND NOT EXISTS (
! 115: SELECT person_id FROM directors d1 WHERE d1.person_id=d.person_id
! 116: EXCEPT
! 117: SELECT person_id FROM writers w
! 118: );
! 119: }
! 120: } {wilma}
! 121:
! 122:
! 123:
! 124: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>