Annotation of embedaddon/sqlite3/test/select7.test, revision 1.1

1.1     ! misho       1: # The author disclaims copyright to this source code.  In place of
        !             2: # a legal notice, here is a blessing:
        !             3: #
        !             4: #    May you do good and not evil.
        !             5: #    May you find forgiveness for yourself and forgive others.
        !             6: #    May you share freely, never taking more than you give.
        !             7: #
        !             8: #***********************************************************************
        !             9: # This file implements regression tests for SQLite library.  The
        !            10: # focus of this file is testing compute SELECT statements and nested
        !            11: # views.
        !            12: #
        !            13: # $Id: select7.test,v 1.11 2007/09/12 17:01:45 danielk1977 Exp $
        !            14: 
        !            15: 
        !            16: set testdir [file dirname $argv0]
        !            17: source $testdir/tester.tcl
        !            18: 
        !            19: ifcapable compound {
        !            20: 
        !            21: # A 3-way INTERSECT.  Ticket #875
        !            22: ifcapable tempdb {
        !            23:   do_test select7-1.1 {
        !            24:     execsql {
        !            25:       create temp table t1(x);
        !            26:       insert into t1 values('amx');
        !            27:       insert into t1 values('anx');
        !            28:       insert into t1 values('amy');
        !            29:       insert into t1 values('bmy');
        !            30:       select * from t1 where x like 'a__'
        !            31:         intersect select * from t1 where x like '_m_'
        !            32:         intersect select * from t1 where x like '__x';
        !            33:     }
        !            34:   } {amx}
        !            35: }
        !            36: 
        !            37: 
        !            38: # Nested views do not handle * properly.  Ticket #826.
        !            39: #
        !            40: ifcapable view {
        !            41: do_test select7-2.1 {
        !            42:   execsql {
        !            43:     CREATE TABLE x(id integer primary key, a TEXT NULL);
        !            44:     INSERT INTO x (a) VALUES ('first');
        !            45:     CREATE TABLE tempx(id integer primary key, a TEXT NULL);
        !            46:     INSERT INTO tempx (a) VALUES ('t-first');
        !            47:     CREATE VIEW tv1 AS SELECT x.id, tx.id FROM x JOIN tempx tx ON tx.id=x.id;
        !            48:     CREATE VIEW tv1b AS SELECT x.id, tx.id FROM x JOIN tempx tx on tx.id=x.id;
        !            49:     CREATE VIEW tv2 AS SELECT * FROM tv1 UNION SELECT * FROM tv1b;
        !            50:     SELECT * FROM tv2;
        !            51:   }
        !            52: } {1 1}
        !            53: } ;# ifcapable view
        !            54: 
        !            55: } ;# ifcapable compound
        !            56: 
        !            57: # Do not allow GROUP BY without an aggregate. Ticket #1039.
        !            58: #
        !            59: # Change: force any query with a GROUP BY clause to be processed as
        !            60: # an aggregate query, whether it contains aggregates or not.
        !            61: #
        !            62: ifcapable subquery {
        !            63:   # do_test select7-3.1 {
        !            64:   #   catchsql {
        !            65:   #     SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name
        !            66:   #   }
        !            67:   # } {1 {GROUP BY may only be used on aggregate queries}}
        !            68:   do_test select7-3.1 {
        !            69:     catchsql {
        !            70:       SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name
        !            71:     }
        !            72:   } [list 0 [execsql {SELECT * FROM sqlite_master ORDER BY name}]]
        !            73: }
        !            74: 
        !            75: # Ticket #2018 - Make sure names are resolved correctly on all
        !            76: # SELECT statements of a compound subquery.
        !            77: #
        !            78: ifcapable {subquery && compound} {
        !            79:   do_test select7-4.1 {
        !            80:     execsql {
        !            81:       CREATE TABLE IF NOT EXISTS photo(pk integer primary key, x);
        !            82:       CREATE TABLE IF NOT EXISTS tag(pk integer primary key, fk int, name);
        !            83:     
        !            84:       SELECT P.pk from PHOTO P WHERE NOT EXISTS ( 
        !            85:            SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk 
        !            86:            EXCEPT 
        !            87:            SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%'
        !            88:       );
        !            89:     }
        !            90:   } {}
        !            91:   do_test select7-4.2 {
        !            92:     execsql {
        !            93:       INSERT INTO photo VALUES(1,1);
        !            94:       INSERT INTO photo VALUES(2,2);
        !            95:       INSERT INTO photo VALUES(3,3);
        !            96:       INSERT INTO tag VALUES(11,1,'one');
        !            97:       INSERT INTO tag VALUES(12,1,'two');
        !            98:       INSERT INTO tag VALUES(21,1,'one-b');
        !            99:       SELECT P.pk from PHOTO P WHERE NOT EXISTS ( 
        !           100:            SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk 
        !           101:            EXCEPT 
        !           102:            SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%'
        !           103:       );
        !           104:     }
        !           105:   } {2 3}
        !           106: }
        !           107: 
        !           108: # ticket #2347
        !           109: #
        !           110: ifcapable {subquery && compound} {
        !           111:   do_test select7-5.1 {
        !           112:     catchsql {
        !           113:       CREATE TABLE t2(a,b);
        !           114:       SELECT 5 IN (SELECT a,b FROM t2);
        !           115:     }
        !           116:   } [list 1 \
        !           117:      {only a single result allowed for a SELECT that is part of an expression}]
        !           118:   do_test select7-5.2 {
        !           119:     catchsql {
        !           120:       SELECT 5 IN (SELECT * FROM t2);
        !           121:     }
        !           122:   } [list 1 \
        !           123:      {only a single result allowed for a SELECT that is part of an expression}]
        !           124:   do_test select7-5.3 {
        !           125:     catchsql {
        !           126:       SELECT 5 IN (SELECT a,b FROM t2 UNION SELECT b,a FROM t2);
        !           127:     }
        !           128:   } [list 1 \
        !           129:      {only a single result allowed for a SELECT that is part of an expression}]
        !           130:   do_test select7-5.4 {
        !           131:     catchsql {
        !           132:       SELECT 5 IN (SELECT * FROM t2 UNION SELECT * FROM t2);
        !           133:     }
        !           134:   } [list 1 \
        !           135:      {only a single result allowed for a SELECT that is part of an expression}]
        !           136: }
        !           137: 
        !           138: # Verify that an error occurs if you have too many terms on a
        !           139: # compound select statement.
        !           140: #
        !           141: ifcapable compound {
        !           142:   if {$SQLITE_MAX_COMPOUND_SELECT>0} {
        !           143:     set sql {SELECT 0}
        !           144:     set result 0
        !           145:     for {set i 1} {$i<$SQLITE_MAX_COMPOUND_SELECT} {incr i} {
        !           146:       append sql " UNION ALL SELECT $i"
        !           147:       lappend result $i
        !           148:     }
        !           149:     do_test select7-6.1 {
        !           150:       catchsql $sql
        !           151:     } [list 0 $result]
        !           152:     append sql { UNION ALL SELECT 99999999}
        !           153:     do_test select7-6.2 {
        !           154:       catchsql $sql
        !           155:     } {1 {too many terms in compound SELECT}}
        !           156:   }
        !           157: }
        !           158: 
        !           159: # This block of tests verifies that bug aa92c76cd4 is fixed.
        !           160: #
        !           161: do_test select7-7.1 {
        !           162:   execsql {
        !           163:     CREATE TABLE t3(a REAL);
        !           164:     INSERT INTO t3 VALUES(44.0);
        !           165:     INSERT INTO t3 VALUES(56.0);
        !           166:   }
        !           167: } {}
        !           168: do_test select7-7.2 {
        !           169:   execsql {
        !           170:     pragma vdbe_trace = 0;
        !           171:     SELECT (CASE WHEN a=0 THEN 0 ELSE (a + 25) / 50 END) AS categ, count(*)
        !           172:     FROM t3 GROUP BY categ
        !           173:   }
        !           174: } {1.38 1 1.62 1}
        !           175: do_test select7-7.3 {
        !           176:   execsql {
        !           177:     CREATE TABLE t4(a REAL);
        !           178:     INSERT INTO t4 VALUES( 2.0 );
        !           179:     INSERT INTO t4 VALUES( 3.0 );
        !           180:   }
        !           181: } {}
        !           182: do_test select7-7.4 {
        !           183:   execsql {
        !           184:     SELECT (CASE WHEN a=0 THEN 'zero' ELSE a/2 END) AS t FROM t4 GROUP BY t;
        !           185:   }
        !           186: } {1.0 1.5}
        !           187: do_test select7-7.5 {
        !           188:   execsql { SELECT a=0, typeof(a) FROM t4 }
        !           189: } {0 real 0 real}
        !           190: do_test select7-7.6 {
        !           191:   execsql { SELECT a=0, typeof(a) FROM t4 GROUP BY a }
        !           192: } {0 real 0 real}
        !           193: 
        !           194: do_test select7-7.7 {
        !           195:   execsql {
        !           196:     CREATE TABLE t5(a TEXT, b INT);
        !           197:     INSERT INTO t5 VALUES(123, 456);
        !           198:     SELECT typeof(a), a FROM t5 GROUP BY a HAVING a<b;
        !           199:   }
        !           200: } {text 123}
        !           201: 
        !           202: finish_test

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