summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsqlite/test/view.test
diff options
context:
space:
mode:
authornw141292 <none@none>2007-06-21 19:11:00 -0700
committernw141292 <none@none>2007-06-21 19:11:00 -0700
commitc5c4113dfcabb1eed3d4bdf7609de5170027a794 (patch)
treed87e7a19ec9855ef7d3de2c2f068311f4959ab06 /usr/src/lib/libsqlite/test/view.test
parentf576acbeef9b260200ba8a9a75fa1408625825bd (diff)
downloadillumos-joyent-c5c4113dfcabb1eed3d4bdf7609de5170027a794.tar.gz
6424438 Winchester: ID mapping for AD Interoperability
--HG-- rename : usr/src/cmd/svc/configd/sqlite/src/shell.c => usr/src/cmd/sqlite/shell.c rename : usr/src/cmd/svc/configd/sqlite/Makefile => usr/src/lib/libsqlite/Makefile.com rename : usr/src/cmd/svc/configd/sqlite/inc.flg => usr/src/lib/libsqlite/inc.flg rename : usr/src/cmd/svc/configd/sqlite/llib-lsqlite => usr/src/lib/libsqlite/llib-lsqlite rename : usr/src/cmd/svc/configd/sqlite/main.mk => usr/src/lib/libsqlite/main.mk rename : usr/src/cmd/svc/configd/sqlite/mapfile-sqlite => usr/src/lib/libsqlite/mapfile-sqlite rename : usr/src/cmd/svc/configd/sqlite/sqlite-misc.h => usr/src/lib/libsqlite/sqlite-misc.h rename : usr/src/cmd/svc/configd/sqlite/src/attach.c => usr/src/lib/libsqlite/src/attach.c rename : usr/src/cmd/svc/configd/sqlite/src/auth.c => usr/src/lib/libsqlite/src/auth.c rename : usr/src/cmd/svc/configd/sqlite/src/btree.c => usr/src/lib/libsqlite/src/btree.c rename : usr/src/cmd/svc/configd/sqlite/src/btree.h => usr/src/lib/libsqlite/src/btree.h rename : usr/src/cmd/svc/configd/sqlite/src/btree_rb.c => usr/src/lib/libsqlite/src/btree_rb.c rename : usr/src/cmd/svc/configd/sqlite/src/build.c => usr/src/lib/libsqlite/src/build.c rename : usr/src/cmd/svc/configd/sqlite/src/config.h => usr/src/lib/libsqlite/src/config.h rename : usr/src/cmd/svc/configd/sqlite/src/copy.c => usr/src/lib/libsqlite/src/copy.c rename : usr/src/cmd/svc/configd/sqlite/src/date.c => usr/src/lib/libsqlite/src/date.c rename : usr/src/cmd/svc/configd/sqlite/src/delete.c => usr/src/lib/libsqlite/src/delete.c rename : usr/src/cmd/svc/configd/sqlite/src/encode.c => usr/src/lib/libsqlite/src/encode.c rename : usr/src/cmd/svc/configd/sqlite/src/expr.c => usr/src/lib/libsqlite/src/expr.c rename : usr/src/cmd/svc/configd/sqlite/src/func.c => usr/src/lib/libsqlite/src/func.c rename : usr/src/cmd/svc/configd/sqlite/src/hash.c => usr/src/lib/libsqlite/src/hash.c rename : usr/src/cmd/svc/configd/sqlite/src/hash.h => usr/src/lib/libsqlite/src/hash.h rename : usr/src/cmd/svc/configd/sqlite/src/insert.c => usr/src/lib/libsqlite/src/insert.c rename : usr/src/cmd/svc/configd/sqlite/src/main.c => usr/src/lib/libsqlite/src/main.c rename : usr/src/cmd/svc/configd/sqlite/src/md5.c => usr/src/lib/libsqlite/src/md5.c rename : usr/src/cmd/svc/configd/sqlite/src/os.c => usr/src/lib/libsqlite/src/os.c rename : usr/src/cmd/svc/configd/sqlite/src/os.h => usr/src/lib/libsqlite/src/os.h rename : usr/src/cmd/svc/configd/sqlite/src/pager.c => usr/src/lib/libsqlite/src/pager.c rename : usr/src/cmd/svc/configd/sqlite/src/pager.h => usr/src/lib/libsqlite/src/pager.h rename : usr/src/cmd/svc/configd/sqlite/src/parse.y => usr/src/lib/libsqlite/src/parse.y rename : usr/src/cmd/svc/configd/sqlite/src/pragma.c => usr/src/lib/libsqlite/src/pragma.c rename : usr/src/cmd/svc/configd/sqlite/src/printf.c => usr/src/lib/libsqlite/src/printf.c rename : usr/src/cmd/svc/configd/sqlite/src/random.c => usr/src/lib/libsqlite/src/random.c rename : usr/src/cmd/svc/configd/sqlite/src/select.c => usr/src/lib/libsqlite/src/select.c rename : usr/src/cmd/svc/configd/sqlite/src/sqlite.h.in => usr/src/lib/libsqlite/src/sqlite.h.in rename : usr/src/cmd/svc/configd/sqlite/src/sqliteInt.h => usr/src/lib/libsqlite/src/sqliteInt.h rename : usr/src/cmd/svc/configd/sqlite/src/table.c => usr/src/lib/libsqlite/src/table.c rename : usr/src/cmd/svc/configd/sqlite/src/tclsqlite.c => usr/src/lib/libsqlite/src/tclsqlite.c rename : usr/src/cmd/svc/configd/sqlite/src/test1.c => usr/src/lib/libsqlite/src/test1.c rename : usr/src/cmd/svc/configd/sqlite/src/test2.c => usr/src/lib/libsqlite/src/test2.c rename : usr/src/cmd/svc/configd/sqlite/src/test3.c => usr/src/lib/libsqlite/src/test3.c rename : usr/src/cmd/svc/configd/sqlite/src/test4.c => usr/src/lib/libsqlite/src/test4.c rename : usr/src/cmd/svc/configd/sqlite/src/tokenize.c => usr/src/lib/libsqlite/src/tokenize.c rename : usr/src/cmd/svc/configd/sqlite/src/trigger.c => usr/src/lib/libsqlite/src/trigger.c rename : usr/src/cmd/svc/configd/sqlite/src/update.c => usr/src/lib/libsqlite/src/update.c rename : usr/src/cmd/svc/configd/sqlite/src/util.c => usr/src/lib/libsqlite/src/util.c rename : usr/src/cmd/svc/configd/sqlite/src/vacuum.c => usr/src/lib/libsqlite/src/vacuum.c rename : usr/src/cmd/svc/configd/sqlite/src/vdbe.c => usr/src/lib/libsqlite/src/vdbe.c rename : usr/src/cmd/svc/configd/sqlite/src/vdbe.h => usr/src/lib/libsqlite/src/vdbe.h rename : usr/src/cmd/svc/configd/sqlite/src/vdbeInt.h => usr/src/lib/libsqlite/src/vdbeInt.h rename : usr/src/cmd/svc/configd/sqlite/src/vdbeaux.c => usr/src/lib/libsqlite/src/vdbeaux.c rename : usr/src/cmd/svc/configd/sqlite/src/where.c => usr/src/lib/libsqlite/src/where.c rename : usr/src/cmd/svc/configd/sqlite/test/all.test => usr/src/lib/libsqlite/test/all.test rename : usr/src/cmd/svc/configd/sqlite/test/attach.test => usr/src/lib/libsqlite/test/attach.test rename : usr/src/cmd/svc/configd/sqlite/test/attach2.test => usr/src/lib/libsqlite/test/attach2.test rename : usr/src/cmd/svc/configd/sqlite/test/auth.test => usr/src/lib/libsqlite/test/auth.test rename : usr/src/cmd/svc/configd/sqlite/test/bigfile.test => usr/src/lib/libsqlite/test/bigfile.test rename : usr/src/cmd/svc/configd/sqlite/test/bigrow.test => usr/src/lib/libsqlite/test/bigrow.test rename : usr/src/cmd/svc/configd/sqlite/test/bind.test => usr/src/lib/libsqlite/test/bind.test rename : usr/src/cmd/svc/configd/sqlite/test/btree.test => usr/src/lib/libsqlite/test/btree.test rename : usr/src/cmd/svc/configd/sqlite/test/btree2.test => usr/src/lib/libsqlite/test/btree2.test rename : usr/src/cmd/svc/configd/sqlite/test/btree3.test => usr/src/lib/libsqlite/test/btree3.test rename : usr/src/cmd/svc/configd/sqlite/test/btree3rb.test => usr/src/lib/libsqlite/test/btree3rb.test rename : usr/src/cmd/svc/configd/sqlite/test/btree4.test => usr/src/lib/libsqlite/test/btree4.test rename : usr/src/cmd/svc/configd/sqlite/test/btree4rb.test => usr/src/lib/libsqlite/test/btree4rb.test rename : usr/src/cmd/svc/configd/sqlite/test/capi2.test => usr/src/lib/libsqlite/test/capi2.test rename : usr/src/cmd/svc/configd/sqlite/test/conflict.test => usr/src/lib/libsqlite/test/conflict.test rename : usr/src/cmd/svc/configd/sqlite/test/copy.test => usr/src/lib/libsqlite/test/copy.test rename : usr/src/cmd/svc/configd/sqlite/test/crashme2.off => usr/src/lib/libsqlite/test/crashme2.off rename : usr/src/cmd/svc/configd/sqlite/test/crashtest1.c => usr/src/lib/libsqlite/test/crashtest1.c rename : usr/src/cmd/svc/configd/sqlite/test/date.test => usr/src/lib/libsqlite/test/date.test rename : usr/src/cmd/svc/configd/sqlite/test/delete.test => usr/src/lib/libsqlite/test/delete.test rename : usr/src/cmd/svc/configd/sqlite/test/expr.test => usr/src/lib/libsqlite/test/expr.test rename : usr/src/cmd/svc/configd/sqlite/test/fkey1.test => usr/src/lib/libsqlite/test/fkey1.test rename : usr/src/cmd/svc/configd/sqlite/test/format3.test => usr/src/lib/libsqlite/test/format3.test rename : usr/src/cmd/svc/configd/sqlite/test/func.test => usr/src/lib/libsqlite/test/func.test rename : usr/src/cmd/svc/configd/sqlite/test/hook.test => usr/src/lib/libsqlite/test/hook.test rename : usr/src/cmd/svc/configd/sqlite/test/in.test => usr/src/lib/libsqlite/test/in.test rename : usr/src/cmd/svc/configd/sqlite/test/index.test => usr/src/lib/libsqlite/test/index.test rename : usr/src/cmd/svc/configd/sqlite/test/insert.test => usr/src/lib/libsqlite/test/insert.test rename : usr/src/cmd/svc/configd/sqlite/test/insert2.test => usr/src/lib/libsqlite/test/insert2.test rename : usr/src/cmd/svc/configd/sqlite/test/interrupt.test => usr/src/lib/libsqlite/test/interrupt.test rename : usr/src/cmd/svc/configd/sqlite/test/intpkey.test => usr/src/lib/libsqlite/test/intpkey.test rename : usr/src/cmd/svc/configd/sqlite/test/ioerr.test => usr/src/lib/libsqlite/test/ioerr.test rename : usr/src/cmd/svc/configd/sqlite/test/join.test => usr/src/lib/libsqlite/test/join.test rename : usr/src/cmd/svc/configd/sqlite/test/join2.test => usr/src/lib/libsqlite/test/join2.test rename : usr/src/cmd/svc/configd/sqlite/test/join3_28.test => usr/src/lib/libsqlite/test/join3_28.test rename : usr/src/cmd/svc/configd/sqlite/test/join4_28.test => usr/src/lib/libsqlite/test/join4_28.test rename : usr/src/cmd/svc/configd/sqlite/test/lastinsert.test => usr/src/lib/libsqlite/test/lastinsert.test rename : usr/src/cmd/svc/configd/sqlite/test/laststmtchanges.test => usr/src/lib/libsqlite/test/laststmtchanges.test rename : usr/src/cmd/svc/configd/sqlite/test/limit.test => usr/src/lib/libsqlite/test/limit.test rename : usr/src/cmd/svc/configd/sqlite/test/lock.test => usr/src/lib/libsqlite/test/lock.test rename : usr/src/cmd/svc/configd/sqlite/test/main.test => usr/src/lib/libsqlite/test/main.test rename : usr/src/cmd/svc/configd/sqlite/test/malloc.test => usr/src/lib/libsqlite/test/malloc.test rename : usr/src/cmd/svc/configd/sqlite/test/memdb.test => usr/src/lib/libsqlite/test/memdb.test rename : usr/src/cmd/svc/configd/sqlite/test/memleak.test => usr/src/lib/libsqlite/test/memleak.test rename : usr/src/cmd/svc/configd/sqlite/test/minmax.test => usr/src/lib/libsqlite/test/minmax.test rename : usr/src/cmd/svc/configd/sqlite/test/misc1.test => usr/src/lib/libsqlite/test/misc1.test rename : usr/src/cmd/svc/configd/sqlite/test/misc2.test => usr/src/lib/libsqlite/test/misc2.test rename : usr/src/cmd/svc/configd/sqlite/test/misc3.test => usr/src/lib/libsqlite/test/misc3.test rename : usr/src/cmd/svc/configd/sqlite/test/misuse.test => usr/src/lib/libsqlite/test/misuse.test rename : usr/src/cmd/svc/configd/sqlite/test/notnull.test => usr/src/lib/libsqlite/test/notnull.test rename : usr/src/cmd/svc/configd/sqlite/test/null.test => usr/src/lib/libsqlite/test/null.test rename : usr/src/cmd/svc/configd/sqlite/test/pager.test => usr/src/lib/libsqlite/test/pager.test rename : usr/src/cmd/svc/configd/sqlite/test/pragma.test => usr/src/lib/libsqlite/test/pragma.test rename : usr/src/cmd/svc/configd/sqlite/test/printf.test => usr/src/lib/libsqlite/test/printf.test rename : usr/src/cmd/svc/configd/sqlite/test/progress.test => usr/src/lib/libsqlite/test/progress.test rename : usr/src/cmd/svc/configd/sqlite/test/quick.test => usr/src/lib/libsqlite/test/quick.test rename : usr/src/cmd/svc/configd/sqlite/test/quote.test => usr/src/lib/libsqlite/test/quote.test rename : usr/src/cmd/svc/configd/sqlite/test/rowid.test => usr/src/lib/libsqlite/test/rowid.test rename : usr/src/cmd/svc/configd/sqlite/test/select1.test => usr/src/lib/libsqlite/test/select1.test rename : usr/src/cmd/svc/configd/sqlite/test/select2.test => usr/src/lib/libsqlite/test/select2.test rename : usr/src/cmd/svc/configd/sqlite/test/select3.test => usr/src/lib/libsqlite/test/select3.test rename : usr/src/cmd/svc/configd/sqlite/test/select4.test => usr/src/lib/libsqlite/test/select4.test rename : usr/src/cmd/svc/configd/sqlite/test/select5.test => usr/src/lib/libsqlite/test/select5.test rename : usr/src/cmd/svc/configd/sqlite/test/select6.test => usr/src/lib/libsqlite/test/select6.test rename : usr/src/cmd/svc/configd/sqlite/test/sort.test => usr/src/lib/libsqlite/test/sort.test rename : usr/src/cmd/svc/configd/sqlite/test/subselect.test => usr/src/lib/libsqlite/test/subselect.test rename : usr/src/cmd/svc/configd/sqlite/test/table.test => usr/src/lib/libsqlite/test/table.test rename : usr/src/cmd/svc/configd/sqlite/test/tableapi.test => usr/src/lib/libsqlite/test/tableapi.test rename : usr/src/cmd/svc/configd/sqlite/test/tclsqlite.test => usr/src/lib/libsqlite/test/tclsqlite.test rename : usr/src/cmd/svc/configd/sqlite/test/temptable.test => usr/src/lib/libsqlite/test/temptable.test rename : usr/src/cmd/svc/configd/sqlite/test/tester.tcl => usr/src/lib/libsqlite/test/tester.tcl rename : usr/src/cmd/svc/configd/sqlite/test/thread1.test => usr/src/lib/libsqlite/test/thread1.test rename : usr/src/cmd/svc/configd/sqlite/test/threadtest1.c => usr/src/lib/libsqlite/test/threadtest1.c rename : usr/src/cmd/svc/configd/sqlite/test/threadtest2.c => usr/src/lib/libsqlite/test/threadtest2.c rename : usr/src/cmd/svc/configd/sqlite/test/trans.test => usr/src/lib/libsqlite/test/trans.test rename : usr/src/cmd/svc/configd/sqlite/test/trigger1.test => usr/src/lib/libsqlite/test/trigger1.test rename : usr/src/cmd/svc/configd/sqlite/test/trigger2.test => usr/src/lib/libsqlite/test/trigger2.test rename : usr/src/cmd/svc/configd/sqlite/test/trigger3.test => usr/src/lib/libsqlite/test/trigger3.test rename : usr/src/cmd/svc/configd/sqlite/test/trigger4.test => usr/src/lib/libsqlite/test/trigger4.test rename : usr/src/cmd/svc/configd/sqlite/test/unique.test => usr/src/lib/libsqlite/test/unique.test rename : usr/src/cmd/svc/configd/sqlite/test/update.test => usr/src/lib/libsqlite/test/update.test rename : usr/src/cmd/svc/configd/sqlite/test/vacuum.test => usr/src/lib/libsqlite/test/vacuum.test rename : usr/src/cmd/svc/configd/sqlite/test/version.test => usr/src/lib/libsqlite/test/version.test rename : usr/src/cmd/svc/configd/sqlite/test/view.test => usr/src/lib/libsqlite/test/view.test rename : usr/src/cmd/svc/configd/sqlite/test/where.test => usr/src/lib/libsqlite/test/where.test rename : usr/src/cmd/svc/configd/sqlite/tool/diffdb.c => usr/src/lib/libsqlite/tool/diffdb.c rename : usr/src/cmd/svc/configd/sqlite/tool/lemon.c => usr/src/lib/libsqlite/tool/lemon.c rename : usr/src/cmd/svc/configd/sqlite/tool/lempar.c => usr/src/lib/libsqlite/tool/lempar.c rename : usr/src/cmd/svc/configd/sqlite/tool/memleak.awk => usr/src/lib/libsqlite/tool/memleak.awk rename : usr/src/cmd/svc/configd/sqlite/tool/memleak2.awk => usr/src/lib/libsqlite/tool/memleak2.awk rename : usr/src/cmd/svc/configd/sqlite/tool/mkopts.tcl => usr/src/lib/libsqlite/tool/mkopts.tcl rename : usr/src/cmd/svc/configd/sqlite/tool/opcodeDoc.awk => usr/src/lib/libsqlite/tool/opcodeDoc.awk rename : usr/src/cmd/svc/configd/sqlite/tool/report1.txt => usr/src/lib/libsqlite/tool/report1.txt rename : usr/src/cmd/svc/configd/sqlite/tool/showdb.c => usr/src/lib/libsqlite/tool/showdb.c rename : usr/src/cmd/svc/configd/sqlite/tool/showjournal.c => usr/src/lib/libsqlite/tool/showjournal.c rename : usr/src/cmd/svc/configd/sqlite/tool/space_used.tcl => usr/src/lib/libsqlite/tool/space_used.tcl rename : usr/src/cmd/svc/configd/sqlite/tool/spaceanal.tcl => usr/src/lib/libsqlite/tool/spaceanal.tcl rename : usr/src/cmd/svc/configd/sqlite/tool/speedtest.tcl => usr/src/lib/libsqlite/tool/speedtest.tcl rename : usr/src/cmd/svc/configd/sqlite/tool/speedtest2.tcl => usr/src/lib/libsqlite/tool/speedtest2.tcl
Diffstat (limited to 'usr/src/lib/libsqlite/test/view.test')
-rw-r--r--usr/src/lib/libsqlite/test/view.test410
1 files changed, 410 insertions, 0 deletions
diff --git a/usr/src/lib/libsqlite/test/view.test b/usr/src/lib/libsqlite/test/view.test
new file mode 100644
index 0000000000..2da7e8deb6
--- /dev/null
+++ b/usr/src/lib/libsqlite/test/view.test
@@ -0,0 +1,410 @@
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+# 2002 February 26
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this file is testing VIEW statements.
+#
+# $Id: view.test,v 1.16.2.1 2004/07/20 00:20:47 drh Exp $
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_test view-1.0 {
+ execsql {
+ CREATE TABLE t1(a,b,c);
+ INSERT INTO t1 VALUES(1,2,3);
+ INSERT INTO t1 VALUES(4,5,6);
+ INSERT INTO t1 VALUES(7,8,9);
+ SELECT * FROM t1;
+ }
+} {1 2 3 4 5 6 7 8 9}
+
+do_test view-1.1 {
+ execsql {
+ BEGIN;
+ CREATE VIEW v1 AS SELECT a,b FROM t1;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 2 4 5 7 8}
+do_test view-1.2 {
+ catchsql {
+ ROLLBACK;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 {no such table: v1}}
+do_test view-1.3 {
+ execsql {
+ CREATE VIEW v1 AS SELECT a,b FROM t1;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 2 4 5 7 8}
+do_test view-1.3.1 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 2 4 5 7 8}
+do_test view-1.4 {
+ catchsql {
+ DROP VIEW v1;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 {no such table: v1}}
+do_test view-1.5 {
+ execsql {
+ CREATE VIEW v1 AS SELECT a,b FROM t1;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 2 4 5 7 8}
+do_test view-1.6 {
+ catchsql {
+ DROP TABLE t1;
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {1 {no such table: main.t1}}
+do_test view-1.7 {
+ execsql {
+ CREATE TABLE t1(x,a,b,c);
+ INSERT INTO t1 VALUES(1,2,3,4);
+ INSERT INTO t1 VALUES(4,5,6,7);
+ INSERT INTO t1 VALUES(7,8,9,10);
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {2 3 5 6 8 9}
+do_test view-1.8 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM v1 ORDER BY a;
+ }
+} {2 3 5 6 8 9}
+
+do_test view-2.1 {
+ execsql {
+ CREATE VIEW v2 AS SELECT * FROM t1 WHERE a>5
+ }; # No semicolon
+ execsql2 {
+ SELECT * FROM v2;
+ }
+} {x 7 a 8 b 9 c 10}
+do_test view-2.2 {
+ catchsql {
+ INSERT INTO v2 VALUES(1,2,3,4);
+ }
+} {1 {cannot modify v2 because it is a view}}
+do_test view-2.3 {
+ catchsql {
+ UPDATE v2 SET a=10 WHERE a=5;
+ }
+} {1 {cannot modify v2 because it is a view}}
+do_test view-2.4 {
+ catchsql {
+ DELETE FROM v2;
+ }
+} {1 {cannot modify v2 because it is a view}}
+do_test view-2.5 {
+ execsql {
+ INSERT INTO t1 VALUES(11,12,13,14);
+ SELECT * FROM v2 ORDER BY x;
+ }
+} {7 8 9 10 11 12 13 14}
+do_test view-2.6 {
+ execsql {
+ SELECT x FROM v2 WHERE a>10
+ }
+} {11}
+
+# Test that column name of views are generated correctly.
+#
+do_test view-3.1 {
+ execsql2 {
+ SELECT * FROM v1 LIMIT 1
+ }
+} {a 2 b 3}
+do_test view-3.2 {
+ execsql2 {
+ SELECT * FROM v2 LIMIT 1
+ }
+} {x 7 a 8 b 9 c 10}
+do_test view-3.3 {
+ execsql2 {
+ DROP VIEW v1;
+ CREATE VIEW v1 AS SELECT a AS 'xyz', b+c AS 'pqr', c-b FROM t1;
+ SELECT * FROM v1 LIMIT 1
+ }
+} {xyz 2 pqr 7 c-b 1}
+do_test view-3.4 {
+ execsql2 {
+ CREATE VIEW v3 AS SELECT a FROM t1 UNION SELECT b FROM t1 ORDER BY b;
+ SELECT * FROM v3 LIMIT 4;
+ }
+} {b 2 b 3 b 5 b 6}
+do_test view-3.5 {
+ execsql2 {
+ CREATE VIEW v4 AS
+ SELECT a, b FROM t1
+ UNION
+ SELECT b AS 'x', a AS 'y' FROM t1
+ ORDER BY x, y;
+ SELECT y FROM v4 ORDER BY y LIMIT 4;
+ }
+} {y 2 y 3 y 5 y 6}
+
+
+do_test view-4.1 {
+ catchsql {
+ DROP VIEW t1;
+ }
+} {1 {use DROP TABLE to delete table t1}}
+do_test view-4.2 {
+ execsql {
+ SELECT 1 FROM t1 LIMIT 1;
+ }
+} 1
+do_test view-4.3 {
+ catchsql {
+ DROP TABLE v1;
+ }
+} {1 {use DROP VIEW to delete view v1}}
+do_test view-4.4 {
+ execsql {
+ SELECT 1 FROM v1 LIMIT 1;
+ }
+} {1}
+do_test view-4.5 {
+ catchsql {
+ CREATE INDEX i1v1 ON v1(xyz);
+ }
+} {1 {views may not be indexed}}
+
+do_test view-5.1 {
+ execsql {
+ CREATE TABLE t2(y,a);
+ INSERT INTO t2 VALUES(22,2);
+ INSERT INTO t2 VALUES(33,3);
+ INSERT INTO t2 VALUES(44,4);
+ INSERT INTO t2 VALUES(55,5);
+ SELECT * FROM t2;
+ }
+} {22 2 33 3 44 4 55 5}
+do_test view-5.2 {
+ execsql {
+ CREATE VIEW v5 AS
+ SELECT t1.x AS v, t2.y AS w FROM t1 JOIN t2 USING(a);
+ SELECT * FROM v5;
+ }
+} {1 22 4 55}
+
+# Verify that the view v5 gets flattened. see sqliteFlattenSubquery().
+# Ticket #272
+do_test view-5.3 {
+ lsearch [execsql {
+ EXPLAIN SELECT * FROM v5;
+ }] OpenTemp
+} {-1}
+do_test view-5.4 {
+ execsql {
+ SELECT * FROM v5 AS a, t2 AS b WHERE a.w=b.y;
+ }
+} {1 22 22 2 4 55 55 5}
+do_test view-5.5 {
+ lsearch [execsql {
+ EXPLAIN SELECT * FROM v5 AS a, t2 AS b WHERE a.w=b.y;
+ }] OpenTemp
+} {-1}
+do_test view-5.6 {
+ execsql {
+ SELECT * FROM t2 AS b, v5 AS a WHERE a.w=b.y;
+ }
+} {22 2 1 22 55 5 4 55}
+do_test view-5.7 {
+ lsearch [execsql {
+ EXPLAIN SELECT * FROM t2 AS b, v5 AS a WHERE a.w=b.y;
+ }] OpenTemp
+} {-1}
+do_test view-5.8 {
+ execsql {
+ SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y;
+ }
+} {1 2 3 4 1 22 22 2 4 5 6 7 4 55 55 5}
+do_test view-5.9 {
+ lsearch [execsql {
+ EXPLAIN SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y;
+ }] OpenTemp
+} {-1}
+
+do_test view-6.1 {
+ execsql {
+ SELECT min(x), min(a), min(b), min(c), min(a+b+c) FROM v2;
+ }
+} {7 8 9 10 27}
+do_test view-6.2 {
+ execsql {
+ SELECT max(x), max(a), max(b), max(c), max(a+b+c) FROM v2;
+ }
+} {11 12 13 14 39}
+
+do_test view-7.1 {
+ execsql {
+ CREATE TABLE test1(id integer primary key, a);
+ CREATE TABLE test2(id integer, b);
+ INSERT INTO test1 VALUES(1,2);
+ INSERT INTO test2 VALUES(1,3);
+ CREATE VIEW test AS
+ SELECT test1.id, a, b
+ FROM test1 JOIN test2 ON test2.id=test1.id;
+ SELECT * FROM test;
+ }
+} {1 2 3}
+do_test view-7.2 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM test;
+ }
+} {1 2 3}
+do_test view-7.3 {
+ execsql {
+ DROP VIEW test;
+ CREATE VIEW test AS
+ SELECT test1.id, a, b
+ FROM test1 JOIN test2 USING(id);
+ SELECT * FROM test;
+ }
+} {1 2 3}
+do_test view-7.4 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM test;
+ }
+} {1 2 3}
+do_test view-7.5 {
+ execsql {
+ DROP VIEW test;
+ CREATE VIEW test AS
+ SELECT test1.id, a, b
+ FROM test1 NATURAL JOIN test2;
+ SELECT * FROM test;
+ }
+} {1 2 3}
+do_test view-7.6 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM test;
+ }
+} {1 2 3}
+
+do_test view-8.1 {
+ execsql {
+ CREATE VIEW v6 AS SELECT pqr, xyz FROM v1;
+ SELECT * FROM v6 ORDER BY xyz;
+ }
+} {7 2 13 5 19 8 27 12}
+do_test view-8.2 {
+ db close
+ sqlite db test.db
+ execsql {
+ SELECT * FROM v6 ORDER BY xyz;
+ }
+} {7 2 13 5 19 8 27 12}
+do_test view-8.3 {
+ execsql {
+ CREATE VIEW v7 AS SELECT pqr+xyz AS a FROM v6;
+ SELECT * FROM v7 ORDER BY a;
+ }
+} {9 18 27 39}
+do_test view-8.4 {
+ execsql {
+ CREATE VIEW v8 AS SELECT max(cnt) AS mx FROM
+ (SELECT a%2 AS eo, count(*) AS cnt FROM t1 GROUP BY eo);
+ SELECT * FROM v8;
+ }
+} 3
+do_test view-8.5 {
+ execsql {
+ SELECT mx+10, mx*2 FROM v8;
+ }
+} {13 6}
+do_test view-8.6 {
+ execsql {
+ SELECT mx+10, pqr FROM v6, v8 WHERE xyz=2;
+ }
+} {13 7}
+do_test view-8.7 {
+ execsql {
+ SELECT mx+10, pqr FROM v6, v8 WHERE xyz>2;
+ }
+} {13 13 13 19 13 27}
+
+# Tests for a bug found by Michiel de Wit involving ORDER BY in a VIEW.
+#
+do_test view-9.1 {
+ execsql {
+ INSERT INTO t2 SELECT * FROM t2 WHERE a<5;
+ INSERT INTO t2 SELECT * FROM t2 WHERE a<4;
+ INSERT INTO t2 SELECT * FROM t2 WHERE a<3;
+ SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1;
+ }
+} {1 2 4 8}
+do_test view-9.2 {
+ execsql {
+ SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1 LIMIT 3;
+ }
+} {1 2 4}
+do_test view-9.3 {
+ execsql {
+ CREATE VIEW v9 AS
+ SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1 LIMIT 3;
+ SELECT * FROM v9;
+ }
+} {1 2 4}
+do_test view-9.4 {
+ execsql {
+ SELECT * FROM v9 ORDER BY 1 DESC;
+ }
+} {4 2 1}
+do_test view-9.5 {
+ execsql {
+ CREATE VIEW v10 AS
+ SELECT DISTINCT a, count(*) FROM t2 GROUP BY a ORDER BY 2 LIMIT 3;
+ SELECT * FROM v10;
+ }
+} {5 1 4 2 3 4}
+do_test view-9.6 {
+ execsql {
+ SELECT * FROM v10 ORDER BY 1;
+ }
+} {3 4 4 2 5 1}
+
+# Tables with columns having peculiar quoted names used in views
+# Ticket #756.
+#
+do_test view-10.1 {
+ execsql {
+ CREATE TABLE t3("9" integer, [4] text);
+ INSERT INTO t3 VALUES(1,2);
+ CREATE VIEW v_t3_a AS SELECT a.[9] FROM t3 AS a;
+ CREATE VIEW v_t3_b AS SELECT "4" FROM t3;
+ SELECT * FROM v_t3_a;
+ }
+} {1}
+do_test view-10.2 {
+ execsql {
+ SELECT * FROM v_t3_b;
+ }
+} {2}
+
+
+finish_test