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>