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