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

1.1     ! misho       1: # 2008 September 16
        !             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. 
        !            12: #
        !            13: # $Id: selectC.test,v 1.5 2009/05/17 15:26:21 drh Exp $
        !            14: 
        !            15: set testdir [file dirname $argv0]
        !            16: source $testdir/tester.tcl
        !            17: 
        !            18: # Ticket #
        !            19: do_test selectC-1.1 {
        !            20:   execsql {
        !            21:     CREATE TABLE t1(a, b, c);
        !            22:     INSERT INTO t1 VALUES(1,'aaa','bbb');
        !            23:     INSERT INTO t1 SELECT * FROM t1;
        !            24:     INSERT INTO t1 VALUES(2,'ccc','ddd');
        !            25: 
        !            26:     SELECT DISTINCT a AS x, b||c AS y
        !            27:       FROM t1
        !            28:      WHERE y IN ('aaabbb','xxx');
        !            29:   }
        !            30: } {1 aaabbb}
        !            31: do_test selectC-1.2 {
        !            32:   execsql {
        !            33:     SELECT DISTINCT a AS x, b||c AS y
        !            34:       FROM t1
        !            35:      WHERE b||c IN ('aaabbb','xxx');
        !            36:   }
        !            37: } {1 aaabbb}
        !            38: do_test selectC-1.3 {
        !            39:   execsql {
        !            40:     SELECT DISTINCT a AS x, b||c AS y
        !            41:       FROM t1
        !            42:      WHERE y='aaabbb'
        !            43:   }
        !            44: } {1 aaabbb}
        !            45: do_test selectC-1.4 {
        !            46:   execsql {
        !            47:     SELECT DISTINCT a AS x, b||c AS y
        !            48:       FROM t1
        !            49:      WHERE b||c='aaabbb'
        !            50:   }
        !            51: } {1 aaabbb}
        !            52: do_test selectC-1.5 {
        !            53:   execsql {
        !            54:     SELECT DISTINCT a AS x, b||c AS y
        !            55:       FROM t1
        !            56:      WHERE x=2
        !            57:   }
        !            58: } {2 cccddd}
        !            59: do_test selectC-1.6 {
        !            60:   execsql {
        !            61:     SELECT DISTINCT a AS x, b||c AS y
        !            62:       FROM t1
        !            63:      WHERE a=2
        !            64:   }
        !            65: } {2 cccddd}
        !            66: do_test selectC-1.7 {
        !            67:   execsql {
        !            68:     SELECT DISTINCT a AS x, b||c AS y
        !            69:       FROM t1
        !            70:      WHERE +y='aaabbb'
        !            71:   }
        !            72: } {1 aaabbb}
        !            73: do_test selectC-1.8 {
        !            74:   execsql {
        !            75:     SELECT a AS x, b||c AS y
        !            76:       FROM t1
        !            77:      GROUP BY x, y
        !            78:     HAVING y='aaabbb'
        !            79:   }
        !            80: } {1 aaabbb}
        !            81: do_test selectC-1.9 {
        !            82:   execsql {
        !            83:     SELECT a AS x, b||c AS y
        !            84:       FROM t1
        !            85:      GROUP BY x, y
        !            86:     HAVING b||c='aaabbb'
        !            87:   }
        !            88: } {1 aaabbb}
        !            89: do_test selectC-1.10 {
        !            90:   execsql {
        !            91:     SELECT a AS x, b||c AS y
        !            92:       FROM t1
        !            93:      WHERE y='aaabbb'
        !            94:      GROUP BY x, y
        !            95:   }
        !            96: } {1 aaabbb}
        !            97: do_test selectC-1.11 {
        !            98:   execsql {
        !            99:     SELECT a AS x, b||c AS y
        !           100:       FROM t1
        !           101:      WHERE b||c='aaabbb'
        !           102:      GROUP BY x, y
        !           103:   }
        !           104: } {1 aaabbb}
        !           105: proc longname_toupper x {return [string toupper $x]}
        !           106: db function uppercaseconversionfunctionwithaverylongname longname_toupper
        !           107: do_test selectC-1.12.1 {
        !           108:   execsql {
        !           109:     SELECT DISTINCT upper(b) AS x
        !           110:       FROM t1
        !           111:      ORDER BY x
        !           112:   }
        !           113: } {AAA CCC}
        !           114: do_test selectC-1.12.2 {
        !           115:   execsql {
        !           116:     SELECT DISTINCT uppercaseconversionfunctionwithaverylongname(b) AS x
        !           117:       FROM t1
        !           118:      ORDER BY x
        !           119:   }
        !           120: } {AAA CCC}
        !           121: do_test selectC-1.13.1 {
        !           122:   execsql {
        !           123:     SELECT upper(b) AS x
        !           124:       FROM t1
        !           125:      GROUP BY x
        !           126:      ORDER BY x
        !           127:   }
        !           128: } {AAA CCC}
        !           129: do_test selectC-1.13.2 {
        !           130:   execsql {
        !           131:     SELECT uppercaseconversionfunctionwithaverylongname(b) AS x
        !           132:       FROM t1
        !           133:      GROUP BY x
        !           134:      ORDER BY x
        !           135:   }
        !           136: } {AAA CCC}
        !           137: do_test selectC-1.14.1 {
        !           138:   execsql {
        !           139:     SELECT upper(b) AS x
        !           140:       FROM t1
        !           141:      ORDER BY x DESC
        !           142:   }
        !           143: } {CCC AAA AAA}
        !           144: do_test selectC-1.14.2 {
        !           145:   execsql {
        !           146:     SELECT uppercaseconversionfunctionwithaverylongname(b) AS x
        !           147:       FROM t1
        !           148:      ORDER BY x DESC
        !           149:   }
        !           150: } {CCC AAA AAA}
        !           151: 
        !           152: # The following query used to leak memory.  Verify that has been fixed.
        !           153: #
        !           154: ifcapable trigger {
        !           155:   do_test selectC-2.1 {
        !           156:     catchsql {
        !           157:       CREATE TABLE t21a(a,b);
        !           158:       INSERT INTO t21a VALUES(1,2);
        !           159:       CREATE TABLE t21b(n);
        !           160:       CREATE TRIGGER r21 AFTER INSERT ON t21b BEGIN
        !           161:         SELECT a FROM t21a WHERE a>new.x UNION ALL
        !           162:         SELECT b FROM t21a WHERE b>new.x ORDER BY 1 LIMIT 2;
        !           163:       END;
        !           164:       INSERT INTO t21b VALUES(6);
        !           165:     }
        !           166:   } {1 {no such column: new.x}}
        !           167: }
        !           168: 
        !           169: # Check that ticket [883034dcb5] is fixed.
        !           170: #
        !           171: do_test selectC-3.1 {
        !           172:   execsql {
        !           173:     CREATE TABLE person (
        !           174:         org_id          TEXT NOT NULL,
        !           175:         nickname        TEXT NOT NULL,
        !           176:         license         TEXT,
        !           177:         CONSTRAINT person_pk PRIMARY KEY (org_id, nickname),
        !           178:         CONSTRAINT person_license_uk UNIQUE (license)
        !           179:     );
        !           180:     INSERT INTO person VALUES('meyers', 'jack', '2GAT123');
        !           181:     INSERT INTO person VALUES('meyers', 'hill', 'V345FMP');
        !           182:     INSERT INTO person VALUES('meyers', 'jim', '2GAT138');
        !           183:     INSERT INTO person VALUES('smith', 'maggy', '');
        !           184:     INSERT INTO person VALUES('smith', 'jose', 'JJZ109');
        !           185:     INSERT INTO person VALUES('smith', 'jack', 'THX138');
        !           186:     INSERT INTO person VALUES('lakeside', 'dave', '953OKG');
        !           187:     INSERT INTO person VALUES('lakeside', 'amy', NULL);
        !           188:     INSERT INTO person VALUES('lake-apts', 'tom', NULL);
        !           189:     INSERT INTO person VALUES('acorn', 'hideo', 'CQB421');
        !           190:     
        !           191:     SELECT 
        !           192:       org_id, 
        !           193:       count((NOT (org_id IS NULL)) AND (NOT (nickname IS NULL)))
        !           194:     FROM person 
        !           195:     WHERE (CASE WHEN license != '' THEN 1 ELSE 0 END)
        !           196:     GROUP BY 1;
        !           197:   }
        !           198: } {acorn 1 lakeside 1 meyers 3 smith 2}
        !           199: do_test selectC-3.2 {
        !           200:   execsql {
        !           201:     CREATE TABLE t2(a PRIMARY KEY, b);
        !           202:     INSERT INTO t2 VALUES('abc', 'xxx');
        !           203:     INSERT INTO t2 VALUES('def', 'yyy');
        !           204:     SELECT a, max(b || a) FROM t2 WHERE (b||b||b)!='value' GROUP BY a;
        !           205:   }
        !           206: } {abc xxxabc def yyydef}
        !           207: do_test selectC-3.3 {
        !           208:   execsql {
        !           209:     SELECT b, max(a || b) FROM t2 WHERE (b||b||b)!='value' GROUP BY a;
        !           210:   }
        !           211: } {xxx abcxxx yyy defyyy}
        !           212: 
        !           213: 
        !           214: proc udf {} { incr ::udf }
        !           215: set ::udf 0
        !           216: db function udf udf
        !           217: 
        !           218: do_execsql_test selectC-4.1 {
        !           219:   create table t_distinct_bug (a, b, c);
        !           220:   insert into t_distinct_bug values ('1', '1', 'a');
        !           221:   insert into t_distinct_bug values ('1', '2', 'b');
        !           222:   insert into t_distinct_bug values ('1', '3', 'c');
        !           223:   insert into t_distinct_bug values ('1', '1', 'd');
        !           224:   insert into t_distinct_bug values ('1', '2', 'e');
        !           225:   insert into t_distinct_bug values ('1', '3', 'f');
        !           226: } {}
        !           227: 
        !           228: do_execsql_test selectC-4.2 {
        !           229:   select a from (select distinct a, b from t_distinct_bug)
        !           230: } {1 1 1}
        !           231: 
        !           232: do_execsql_test selectC-4.3 {
        !           233:   select a, udf() from (select distinct a, b from t_distinct_bug)
        !           234: } {1 1 1 2 1 3}
        !           235: 
        !           236: finish_test

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