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

1.1     ! misho       1: # 2004 Jun 27
        !             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: # This file implements tests for miscellanous features that were
        !            14: # left out of other test files.
        !            15: #
        !            16: # $Id: misc4.test,v 1.23 2007/12/08 18:01:31 drh Exp $
        !            17: 
        !            18: set testdir [file dirname $argv0]
        !            19: source $testdir/tester.tcl
        !            20: 
        !            21: # Prepare a statement that will create a temporary table.  Then do
        !            22: # a rollback.  Then try to execute the prepared statement.
        !            23: #
        !            24: do_test misc4-1.1 {
        !            25:   set DB [sqlite3_connection_pointer db]
        !            26:   execsql {
        !            27:     CREATE TABLE t1(x);
        !            28:     INSERT INTO t1 VALUES(1);
        !            29:   }
        !            30: } {}
        !            31: 
        !            32: ifcapable tempdb {
        !            33:   do_test misc4-1.2 {
        !            34:     set sql {CREATE TEMP TABLE t2 AS SELECT * FROM t1}
        !            35:     set stmt [sqlite3_prepare $DB $sql -1 TAIL]
        !            36:     execsql {
        !            37:       BEGIN;
        !            38:       CREATE TABLE t3(a,b,c);
        !            39:       INSERT INTO t1 SELECT * FROM t1;
        !            40:       ROLLBACK;
        !            41:     }
        !            42:   } {}
        !            43: 
        !            44:   # Because the previous transaction included a DDL statement and
        !            45:   # was rolled back, statement $stmt was marked as expired. Executing it
        !            46:   # now returns SQLITE_SCHEMA.
        !            47:   do_test misc4-1.2.1 {
        !            48:     list [sqlite3_step $stmt] [sqlite3_finalize $stmt]
        !            49:   } {SQLITE_ERROR SQLITE_SCHEMA}
        !            50:   do_test misc4-1.2.2 {
        !            51:     set stmt [sqlite3_prepare $DB $sql -1 TAIL]
        !            52:     set TAIL
        !            53:   } {}
        !            54: 
        !            55:   do_test misc4-1.3 {
        !            56:     sqlite3_step $stmt
        !            57:   } SQLITE_DONE
        !            58:   do_test misc4-1.4 {
        !            59:     execsql {
        !            60:       SELECT * FROM temp.t2;
        !            61:     }
        !            62:   } {1}
        !            63:   
        !            64:   # Drop the temporary table, then rerun the prepared  statement to
        !            65:   # recreate it again.  This recreates ticket #807.
        !            66:   #
        !            67:   do_test misc4-1.5 {
        !            68:     execsql {DROP TABLE t2}
        !            69:     sqlite3_reset $stmt
        !            70:     sqlite3_step $stmt
        !            71:   } {SQLITE_ERROR}
        !            72:   do_test misc4-1.6 {
        !            73:     sqlite3_finalize $stmt
        !            74:   } {SQLITE_SCHEMA}
        !            75: }
        !            76: 
        !            77: # Prepare but do not execute various CREATE statements.  Then before
        !            78: # those statements are executed, try to use the tables, indices, views,
        !            79: # are triggers that were created.
        !            80: #
        !            81: do_test misc4-2.1 {
        !            82:   set stmt [sqlite3_prepare $DB {CREATE TABLE t3(x);} -1 TAIL]
        !            83:   catchsql {
        !            84:     INSERT INTO t3 VALUES(1);
        !            85:   }
        !            86: } {1 {no such table: t3}}
        !            87: do_test misc4-2.2 {
        !            88:   sqlite3_step $stmt
        !            89: } SQLITE_DONE
        !            90: do_test misc4-2.3 {
        !            91:   sqlite3_finalize $stmt
        !            92: } SQLITE_OK
        !            93: do_test misc4-2.4 {
        !            94:   catchsql {
        !            95:     INSERT INTO t3 VALUES(1);
        !            96:   }
        !            97: } {0 {}}
        !            98: 
        !            99: # Ticket #966
        !           100: #
        !           101: do_test misc4-3.1 {
        !           102:   execsql { 
        !           103:     CREATE TABLE Table1(ID integer primary key, Value TEXT);
        !           104:     INSERT INTO Table1 VALUES(1, 'x');
        !           105:     CREATE TABLE Table2(ID integer NOT NULL, Value TEXT);
        !           106:     INSERT INTO Table2 VALUES(1, 'z');
        !           107:     INSERT INTO Table2 VALUES (1, 'a');
        !           108:   }
        !           109:   catchsql { 
        !           110:     SELECT ID, max(Value) FROM Table2 GROUP BY 1, 2 ORDER BY 1, 2;
        !           111:   }
        !           112: } {1 {aggregate functions are not allowed in the GROUP BY clause}}
        !           113: ifcapable compound {
        !           114:   do_test misc4-3.2 {
        !           115:     execsql {
        !           116:       SELECT ID, Value FROM Table1
        !           117:          UNION SELECT ID, max(Value) FROM Table2 GROUP BY 1
        !           118:       ORDER BY 1, 2;
        !           119:     }
        !           120:   } {1 x 1 z}
        !           121:   do_test misc4-3.3 {
        !           122:     catchsql { 
        !           123:       SELECT ID, Value FROM Table1
        !           124:          UNION SELECT ID, max(Value) FROM Table2 GROUP BY 1, 2
        !           125:       ORDER BY 1, 2;
        !           126:     }
        !           127:   } {1 {aggregate functions are not allowed in the GROUP BY clause}}
        !           128:   do_test misc4-3.4 {
        !           129:     catchsql { 
        !           130:       SELECT ID, max(Value) FROM Table2 GROUP BY 1, 2
        !           131:          UNION SELECT ID, Value FROM Table1
        !           132:       ORDER BY 1, 2;
        !           133:     }
        !           134:   } {1 {aggregate functions are not allowed in the GROUP BY clause}}
        !           135: } ;# ifcapable compound
        !           136: 
        !           137: # Ticket #1047.  Make sure column types are preserved in subqueries.
        !           138: #
        !           139: ifcapable subquery {
        !           140:   do_test misc4-4.1 {
        !           141:     execsql {
        !           142:       create table a(key varchar, data varchar);
        !           143:       create table b(key varchar, period integer);
        !           144:       insert into a values('01','data01');
        !           145:       insert into a values('+1','data+1');
        !           146:       
        !           147:       insert into b values ('01',1);
        !           148:       insert into b values ('01',2);
        !           149:       insert into b values ('+1',3);
        !           150:       insert into b values ('+1',4);
        !           151:       
        !           152:       select a.*, x.*
        !           153:         from a, (select key,sum(period) from b group by key) as x
        !           154:         where a.key=x.key order by 1 desc;
        !           155:     }
        !           156:   } {01 data01 01 3 +1 data+1 +1 7}
        !           157: 
        !           158:   # This test case tests the same property as misc4-4.1, but it is
        !           159:   # a bit smaller which makes it easier to work with while debugging.
        !           160:   do_test misc4-4.2 {
        !           161:     execsql {
        !           162:       CREATE TABLE ab(a TEXT, b TEXT);
        !           163:       INSERT INTO ab VALUES('01', '1');
        !           164:     }
        !           165:     execsql {
        !           166:       select * from ab, (select b from ab) as x where x.b = ab.a;
        !           167:     }
        !           168:   } {}
        !           169: }
        !           170: 
        !           171: 
        !           172: # Ticket #1036.  When creating tables from a SELECT on a view, use the
        !           173: # short names of columns.
        !           174: #
        !           175: ifcapable view {
        !           176:   do_test misc4-5.1 {
        !           177:     execsql {
        !           178:       create table t4(a,b);
        !           179:       create table t5(a,c);
        !           180:       insert into t4 values (1,2);
        !           181:       insert into t5 values (1,3);
        !           182:       create view myview as select t4.a a from t4 inner join t5 on t4.a=t5.a;
        !           183:       create table problem as select * from myview; 
        !           184:     }
        !           185:     execsql2 {
        !           186:       select * FROM problem;
        !           187:     }
        !           188:   } {a 1}
        !           189:   do_test misc4-5.2 {
        !           190:     execsql2 {
        !           191:       create table t6 as select * from t4, t5;
        !           192:       select * from t6;
        !           193:     }
        !           194:   } {a 1 b 2 a:1 1 c 3}
        !           195: }
        !           196: 
        !           197: # Ticket #1086
        !           198: do_test misc4-6.1 {
        !           199:   execsql {
        !           200:     CREATE TABLE abc(a);
        !           201:     INSERT INTO abc VALUES(1);
        !           202:     CREATE TABLE def(d, e, f, PRIMARY KEY(d, e));
        !           203:   }
        !           204: } {}
        !           205: do_test misc4-6.2 {
        !           206:   execsql {
        !           207:     SELECT a FROM abc LEFT JOIN def ON (abc.a=def.d);
        !           208:   }
        !           209: } {1}
        !           210: 
        !           211: finish_test

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