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