]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Modify test scripts to work when SQLITE_OMIT_SUBQUERY (along with other OMIT macros...
authordanielk1977 <danielk1977@noemail.net>
Fri, 21 Jan 2005 03:12:14 +0000 (03:12 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 21 Jan 2005 03:12:14 +0000 (03:12 +0000)
FossilOrigin-Name: bb0254ab14417f0ab40f10f37cb63a60507f070a

33 files changed:
manifest
manifest.uuid
src/parse.y
src/sqliteInt.h
src/test1.c
test/autovacuum.test
test/collate2.test
test/collate4.test
test/expr.test
test/in.test
test/index.test
test/insert.test
test/insert2.test
test/join.test
test/join2.test
test/join4.test
test/limit.test
test/minmax.test
test/misc1.test
test/misc3.test
test/misc4.test
test/null.test
test/rowid.test
test/select1.test
test/select6.test
test/select7.test
test/subselect.test
test/table.test
test/tableapi.test
test/tester.tcl
test/types2.test
test/update.test
test/where.test

index 1f22340cc0bc1adafeecd0e300f5530562d5be4d..585a0958546ca31d531114f83a66b0c824867984 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\snew\stest\sfile\sfor\ssubqueries.\s(CVS\s2250)
-D 2005-01-21T02:34:44
+C Modify\stest\sscripts\sto\swork\swhen\sSQLITE_OMIT_SUBQUERY\s(along\swith\sother\sOMIT\smacros)\sis\sdefined.\s(CVS\s2251)
+D 2005-01-21T03:12:15
 F Makefile.in ffd81f5e926d40b457071b4de8d7c1fa18f39b5a
 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@@ -54,17 +54,17 @@ F src/os_win.c 3c0b0a3bc33318cf555a1cd130232ad1b9a5a711
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
 F src/pager.c 05d23abbcfa3133f716a99589e53883c10551b1f
 F src/pager.h 9eba8c53dd91eae7f3f90743b2ee242da02a9862
-F src/parse.y 301d07db056f5125806e84994b5f41a8355d28ad
+F src/parse.y 5f2c197fcb63c6aed1787da436ec5a35247ab7a4
 F src/pragma.c 8ab313986673aa4c45e8693d8aabb9b95ee7b14a
 F src/printf.c 3d20b21cfecadacecac3fb7274e746cb81d3d357
 F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
 F src/select.c d8f5c8b44922d9e295a32be941d0a416cda94f98
 F src/shell.c 591364a0e9ca4ce53873e21e0294476c0c2b4770
 F src/sqlite.h.in 8249b697d71ef6d7f7f752ba4ca04058e9e8b5ff
-F src/sqliteInt.h 9a582fcb8333b5a30706250282d9697654305dbc
+F src/sqliteInt.h 01ea63415bb96ad8ab6e26bede2aa6a39cefb082
 F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9
 F src/tclsqlite.c fd27457b228118be96524dae285146c76efe032b
-F src/test1.c 59fc0f0c35cb3bccdf166f36a1a5f9ffb0b951e7
+F src/test1.c c4f2a1d6ad8f14a1168a4c933ce5c5cb2d243d86
 F src/test2.c bbc2ecc58ceeab12d1e40970f831b1017524e40d
 F src/test3.c 5c2ec5c8eb689ac93fb0546f84b310659ad287c6
 F src/test4.c 7c6b9fc33dd1f3f93c7f1ee6e5e6d016afa6c1df
@@ -90,7 +90,7 @@ F test/attach2.test eeb987770f4dbe68bd29afdbc2e8cff0142e6eb5
 F test/attach3.test c05c70b933afbde0901dab9da3e66ee842c09f38
 F test/auth.test 559e0816b8100740624ebb0ab7aab05f5c92831c
 F test/autoinc.test c071e51ff167b8e889212273588d9cca71845b70
-F test/autovacuum.test a15021f685f2b3be5ad120f35b5a9f413a950702
+F test/autovacuum.test a87871f29761093dc171e97c9d0dd5ae7d43b0d1
 F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31
 F test/autovacuum_ioerr.test 9cf27275ca47b72e188a47c53b61b6d583a01d24
 F test/autovacuum_ioerr2.test c4c8943eebf5051f773ec9739461318f057e5c15
@@ -108,9 +108,9 @@ F test/capi2.test b0e12aa66684424869f899b421ff71df69411998
 F test/capi3.test ffb8bd785d5fe26e5d63f24c189c45f21297d44f
 F test/capi3b.test 5b6a66f9f295f79f443b5d3f33187fa5ef6cf336
 F test/collate1.test f79736d2ebf5492167ee4d1f4ab4c09dda776b03
-F test/collate2.test 12fd658d8f5106a8a5c8a77d66919d8c89394036
+F test/collate2.test 224a632ba04907c049804b08162efd234aa7871f
 F test/collate3.test a5ff693872a915fc6267956673d20915485c1829
-F test/collate4.test 2d6e38e6b871073313f6d4eebfe1435c7173ebfa
+F test/collate4.test b8668612691c4dcf90f67a8df1eeb1544e7fdaf8
 F test/collate5.test 7999fb3122386bae38acd8ccd61e0b7c5a30e289
 F test/collate6.test 6c9470d1606ee3e564675b229653e320c49ec638
 F test/conflict.test c5b849b01cfbe0a4f63a90cba6f68e2fe3a75f87
@@ -126,26 +126,26 @@ F test/diskfull.test e2f6cfd868713ead06dc82b84a4938e868128fc0
 F test/enc.test 7a03417a1051fe8bc6c7641cf4c8c3f7e0066d52
 F test/enc2.test 6d1a2650e9da43eab499d18ca694a0cb6ec69dee
 F test/enc3.test f6a5f0b7b7f3a88f030d3143729b87cd5c86d837
-F test/expr.test 7baf931302bc81352d20cfc0cd7b2a26bf54e73e
+F test/expr.test b2ce68f4b3298dd06867468b770ca2604068014e
 F test/fkey1.test 81bb13caaa78f58d7d191d7f535529f7c91d821a
 F test/func.test 47443316dfc7f78f173b207e35d63caeab42b7fe
 F test/hook.test f8605cde4c77b2c6a4a73723bf6c507796a64dda
-F test/in.test b92a2df9162e1cbd33c6449a29a05e6955b1741a
-F test/index.test 1294997b4743007af57f8148c63ba14f07ad31ab
+F test/in.test ed134f8d477a6280297ced1646de83cccf8f196d
+F test/index.test 51e01a0928b4b61228917ddd8c6c0e2466547f6f
 F test/index2.test 9ad98243fd7fe833795a9cc662f371f0eed4ff4f
-F test/insert.test b18db896ff0b030224c586807390c9a6565ef5d4
-F test/insert2.test 0bb50ff999e35a21549d8ee5dc44db8ac24d31a7
+F test/insert.test f39cb2306199c6f9d8959b843c9199d799217055
+F test/insert2.test 420cb5c23912732219aad87420abdd7b994b1cad
 F test/insert3.test fa7cb5b01709a1bca3e28c82c80c1d44386b3676
 F test/interrupt.test 5b4d8389e6cf2d01b94f87cfd02d9df1073bfb2d
 F test/intpkey.test b57cf5236fde1bd8cbc1388fa0c91908f6fd9194
 F test/ioerr.test fb507c2596bb07aeaff257cb48fcc93340159f0c
-F test/join.test 59e5abff5965016e3c75996f1019e2e91664647f
-F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8
+F test/join.test a61c9328ef0b2b573e1ea803882cb947b870d131
+F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
-F test/join4.test 8dec387d06b3a4685e1104048065cf5236b99b93
+F test/join4.test cc6cafe85e11aacacd0abcd247a46bed251308f8
 F test/lastinsert.test b6a1db3e1ce2d3f0d6afe99d445084f543b6feaa
 F test/laststmtchanges.test 07cbdabc52407c29e40abc25050f2434f044a6b1
-F test/limit.test 56101a4533905e1a2692bba1b23882c3e0dbb8f1
+F test/limit.test 9913f3cc797841098209e09f9fb259e5198ad2da
 F test/lock.test a19aab9a963273fe61c1058e3d1b648d6a0a2425
 F test/lock2.test 59c3dd7d9b24d1bf7ec91b2d1541c37e97939d5f
 F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
@@ -153,14 +153,14 @@ F test/main.test a60a1d234b5f5784097973bd395514ca56003ef1
 F test/malloc.test 180f7f7e19aca748ec923ab4ada6a2976b781722
 F test/memdb.test 532aac7128a3da494cddc4461d76c6e3988f771b
 F test/memleak.test c0af09191af44a7501ec2494fdd079ac538a256c
-F test/minmax.test e7048476940df0af11d0f2cf687572f557cd0b29
-F test/misc1.test 744f60d1025fa978708b96cb222a07a1feb1524a
+F test/minmax.test b723a302c8c9bfa9fa417ba6f2f43c663bd8479e
+F test/misc1.test e4d9edd525d859932ac70d3fad60fa1303c6f6e5
 F test/misc2.test 51f45f56af2d7d38238dc3d38eeb6342a2f4bb09
-F test/misc3.test 928a2f1e1189924ed14e1ae074e34f40688bdf94
-F test/misc4.test e32ca4d6915ef4ad910f41bae3a8927fdf61373c
+F test/misc3.test 7bd937e2c62bcc6be71939faf068d506467b1e03
+F test/misc4.test 145e301fdf10bd47059132db932523814201dc2a
 F test/misuse.test 600738a8e611989bc5f544303f5e311c5f228084
 F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0
-F test/null.test 5a945790ef21b24fd602fe2c7a23847b903f8687
+F test/null.test 69c62daf1630bf54c87bbc7ef2e22012e58d6da8
 F test/pager.test f78a03ab8f9f64db47101e4957ac16a3a5563317
 F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e
 F test/pager3.test 647f696a9cf7409df00a1e0047c2eb55585a1b85
@@ -172,23 +172,23 @@ F test/quick.test 91e5b8ae6663dc9e3e754b271f0384f0cae706e6
 F test/quote.test 6d75cf635d93ba2484dc9cb378d88cbae9dc2c62
 F test/reindex.test 3552c6b944a3fab28cfd3049c04c65cb79419757
 F test/rollback.test 94cd981ee3a627d9f6466f69dcf1f7dbfe695d7a
-F test/rowid.test 1ce3f1520d2082b0363e7d9bdef904cb72b9efe8
+F test/rowid.test 040a3bef06f970c45f5fcd14b2355f7f4d62f0cf
 F test/safety.test 907b64fee719554a3622853812af3886fddbbb4f
-F test/select1.test 6d4a42c2fb7fca7196435d6bc90aac5b180e8d94
+F test/select1.test bb62bfcd4f3cbba385185d0c0929c3408c43b00a
 F test/select2.test 91a2225926039b0d1687840735c284dbbf89f0bc
 F test/select3.test 9de435aa84fc406708cd8dc1b1d60e7f27cea685
 F test/select4.test 1ae6f2bd6177d4428df8644eb95d09f4568fb149
 F test/select5.test 94db800bbeff2e426c0175e07f7a71d4617853b5
-F test/select6.test c00d300d90f0ae3fa4e4f4336c71b2345bfa819c
-F test/select7.test f567a61c3a8a91bdbb376c4525caec3fa0ea8cea
+F test/select6.test ba1b4dd18a85bf9070c6df8d933ac4cfcacea6a6
+F test/select7.test 63fb77d50f4dfdac4d4115842f083d2eb33a198c
 F test/sort.test 87882e6c72a75d45e98a1c802c1ded0eac557d85
 F test/subquery.test 34ee5ea73751f880e4d9af9149bd9e14156347ae
-F test/subselect.test ff3850d0aab1443dafa4ecbdab1d01e58e7b366d
-F test/table.test b8b0bee2ac2f3d36a674bc68344c1bdd80e99a18
-F test/tableapi.test b21ab097e87a5484bb61029e69e1a4e5c5e65ede
+F test/subselect.test 3f3f7a940dc3195c3139f4d530385cb54665d614
+F test/table.test a6b6b897731b4971f06db165d65bd608a9f2d461
+F test/tableapi.test 6a66d58b37d46dc0f2b3c7d4bd2617d209399bd1
 F test/tclsqlite.test f467d9062e17c1ace54467e6fba5ce3ca176c0fe
 F test/temptable.test 63a16e3ad19adf073cfbcdf7624c92ac5236522c
-F test/tester.tcl 48bf84ac713c57177685d2ba1ad5b823b80b0f49
+F test/tester.tcl 0e9e3697983873ebd58aeefa61a87de2bc2c56ae
 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
 F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
 F test/threadtest2.c 97a830d53c24c42290501fdfba4a6e5bdd34748b
@@ -201,14 +201,14 @@ F test/trigger4.test e7c0812b14750754602468f15495260e8c6625e0
 F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83
 F test/trigger6.test 88b4c0c9f67e4244af39627538526bbaf97132f5
 F test/types.test f0a98d10c5ecc9865d19dc94486f9873afc6bb6b
-F test/types2.test f23c147a2ab3e51d5dbcfa9987200db5acba7aa7
+F test/types2.test 81dd1897be8ef4b5b73d0006e6076abe40610de3
 F test/unique.test 0e38d4cc7affeef2527720d1dafd1f6870f02f2b
-F test/update.test 5d9b7451c991f24f64e0955595be4bc449c1017d
+F test/update.test 7669ca789d62c258b678e8aa7a22a57eac10f2cf
 F test/utf16.test 459c2f5ab80c60092c603630a348c32d6e59c558
 F test/vacuum.test f18eccdee5b538d46298c64d6a060cfbf97bbc23
 F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
 F test/view.test 3f96df86f1c61ee850b945204683773bbbb8643e
-F test/where.test 0d7c9dad0aabb30aa8babdee659cc558db85a274
+F test/where.test ffb790dfda75d977bae7a1f5830351623f76861b
 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
 F tool/lemon.c eb3b2bbefc0d442fa459f4f1924e598e804eca9c
 F tool/lempar.c 1e61d2b6cb9d8affa264a13336bc0c088498caa4
@@ -271,7 +271,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl 3e522a06ad41992023c80ca29a048ae2331ca5bd
-P 06887afb323fa1fb6988a136f96a456467cf7b2f
-R db55597e35dc9a9288564c0678d66f41
-U drh
-Z 9ca18e5fa8587d49ad6cdd58c232af3c
+P de8ee3a29e1aafcfa05841cb44da0a05f0579596
+R 617b6e607d17d790bf84f6e775c7d625
+U danielk1977
+Z 3efedbe6a0ea0314bb3302f4acfcc917
index 79e34fb2caee83a64ae5c3f0dffb6f7cfff5c02e..a7ac2070b7f3485f737ad9a477abb7acead24882 100644 (file)
@@ -1 +1 @@
-de8ee3a29e1aafcfa05841cb44da0a05f0579596
\ No newline at end of file
+bb0254ab14417f0ab40f10f37cb63a60507f070a
\ No newline at end of file
index f5acf880e9214d518eb3fd7cb39fce14ce4c6bd0..d8482fb694d5465d4e0c398bbbc768e4aa1ce585 100644 (file)
@@ -14,7 +14,7 @@
 ** the parser.  Lemon will also generate a header file containing
 ** numeric codes for all of the tokens.
 **
-** @(#) $Id: parse.y,v 1.161 2005/01/20 13:36:20 drh Exp $
+** @(#) $Id: parse.y,v 1.162 2005/01/21 03:12:15 danielk1977 Exp $
 */
 %token_prefix TK_
 %token_type {Token}
@@ -705,16 +705,16 @@ expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
   if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);
   sqlite3ExprSpan(A,&W->span,&Y->span);
 }
-%type in_op {int}
-in_op(A) ::= IN.      {A = 0;}
-in_op(A) ::= NOT IN.  {A = 1;}
-expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {
-  A = sqlite3Expr(TK_IN, X, 0, 0);
-  if( A ) A->pList = Y;
-  if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);
-  sqlite3ExprSpan(A,&X->span,&E);
-}
 %ifndef SQLITE_OMIT_SUBQUERY
+  %type in_op {int}
+  in_op(A) ::= IN.      {A = 0;}
+  in_op(A) ::= NOT IN.  {A = 1;}
+  expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {
+    A = sqlite3Expr(TK_IN, X, 0, 0);
+    if( A ) A->pList = Y;
+    if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);
+    sqlite3ExprSpan(A,&X->span,&E);
+  }
   expr(A) ::= LP(B) select(X) RP(E). {
     A = sqlite3Expr(TK_SELECT, 0, 0, 0);
     if( A ) A->pSelect = X;
index 745dd48737aadd88a857f1835d3fca9d42461ef5..282b6de36cb125ba75a24f791218de6389e118c3 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** Internal interface definitions for SQLite.
 **
-** @(#) $Id: sqliteInt.h,v 1.359 2005/01/20 13:36:20 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.360 2005/01/21 03:12:15 danielk1977 Exp $
 */
 #ifndef _SQLITEINT_H_
 #define _SQLITEINT_H_
 ** a minimum.
 */
 /* #define SQLITE_OMIT_AUTHORIZATION  1 */
-/* #define SQLITE_OMIT_INMEMORYDB     1 */
+/* #define SQLITE_OMIT_MEMORYDB     1 */
 /* #define SQLITE_OMIT_VACUUM         1 */
 /* #define SQLITE_OMIT_DATETIME_FUNCS 1 */
 /* #define SQLITE_OMIT_PROGRESS_CALLBACK 1 */
index 4a1318c0303aa7747ed79d443eafa64432eea3bb..3e917d0ca8d5e4dab0f19ef4df66abbff8443723 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test1.c,v 1.124 2005/01/20 01:14:23 danielk1977 Exp $
+** $Id: test1.c,v 1.125 2005/01/21 03:12:16 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -2734,6 +2734,12 @@ static void set_options(Tcl_Interp *interp){
   Tcl_SetVar2(interp, "sqlite_options", "schema_version", "1", TCL_GLOBAL_ONLY);
 #endif
 
+#ifdef SQLITE_OMIT_SUBQUERY
+  Tcl_SetVar2(interp, "sqlite_options", "subquery", "0", TCL_GLOBAL_ONLY);
+#else
+  Tcl_SetVar2(interp, "sqlite_options", "subquery", "1", TCL_GLOBAL_ONLY);
+#endif
+
 #ifdef SQLITE_OMIT_TCL_VARIABLE
   Tcl_SetVar2(interp, "sqlite_options", "tclvar", "0", TCL_GLOBAL_ONLY);
 #else
index ffa2e4edbfcbfcdb77b7b27240b19cb6978b36b2..0b353064db116a3f11adf9a3f981693fe70fb29a 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the SELECT statement.
 #
-# $Id: autovacuum.test,v 1.14 2005/01/15 12:45:51 danielk1977 Exp $
+# $Id: autovacuum.test,v 1.15 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -95,7 +95,7 @@ foreach delete_order $delete_orders {
     # Delete one set of rows from the table.
     do_test autovacuum-1.$tn.($delete).1 {
       execsql "
-        DELETE FROM av1 WHERE oid IN ([join $delete ,])
+        DELETE FROM av1 WHERE oid = [join $delete "OR oid = "]
       "
     } {}
 
index 896f5af5f2b9b54207ca2124d20884950e5ff391..7c4093b9a8083e7de1622388c54affd72831c899 100644 (file)
@@ -12,7 +12,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script is page cache subsystem.
 #
-# $Id: collate2.test,v 1.3 2004/09/19 02:15:26 drh Exp $
+# $Id: collate2.test,v 1.4 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -204,39 +204,42 @@ do_test collate2-1.21 {
         ORDER BY 1, oid;
   }
 } {aa}
-do_test collate2-1.22 {
-  execsql {
-    SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid;
-  }
-} {aa bb}
-do_test collate2-1.23 {
-  execsql {
-    SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid;
-  }
-} {aa aA Aa AA bb bB Bb BB}
-do_test collate2-1.24 {
-  execsql {
-    SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid;
-  }
-} {aa bb}
-do_test collate2-1.25 {
-  execsql {
-    SELECT a FROM collate2t1 
-      WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {aa bb}
-do_test collate2-1.26 {
-  execsql {
-    SELECT b FROM collate2t1 
-      WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {aa bb aA bB Aa Bb AA BB}
-do_test collate2-1.27 {
-  execsql {
-    SELECT c FROM collate2t1 
-      WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {aa bb}
+
+ifcapable subquery {
+  do_test collate2-1.22 {
+    execsql {
+      SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid;
+    }
+  } {aa bb}
+  do_test collate2-1.23 {
+    execsql {
+      SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid;
+    }
+  } {aa aA Aa AA bb bB Bb BB}
+  do_test collate2-1.24 {
+    execsql {
+      SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid;
+    }
+  } {aa bb}
+  do_test collate2-1.25 {
+    execsql {
+      SELECT a FROM collate2t1 
+        WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {aa bb}
+  do_test collate2-1.26 {
+    execsql {
+      SELECT b FROM collate2t1 
+        WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {aa bb aA bB Aa Bb AA BB}
+  do_test collate2-1.27 {
+    execsql {
+      SELECT c FROM collate2t1 
+        WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {aa bb}
+} ;# ifcapable subquery
 
 do_test collate2-2.1 {
   execsql {
@@ -343,39 +346,42 @@ do_test collate2-2.21 {
     SELECT c FROM collate2t1 WHERE NOT CASE c WHEN 'aa' THEN 1 ELSE 0 END;
   }
 } {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
-do_test collate2-2.22 {
-  execsql {
-    SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb');
-  }
-} {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
-do_test collate2-2.23 {
-  execsql {
-    SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb');
-  }
-} {ab ba aB bA Ab Ba AB BA}
-do_test collate2-2.24 {
-  execsql {
-    SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb');
-  }
-} {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
-do_test collate2-2.25 {
-  execsql {
-    SELECT a FROM collate2t1 
-      WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
-do_test collate2-2.26 {
-  execsql {
-    SELECT b FROM collate2t1 
-      WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {ab ba aB bA Ab Ba AB BA}
-do_test collate2-2.27 {
-  execsql {
-    SELECT c FROM collate2t1 
-      WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
-  }
-} {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
+
+ifcapable subquery {
+  do_test collate2-2.22 {
+    execsql {
+      SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb');
+    }
+  } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
+  do_test collate2-2.23 {
+    execsql {
+      SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb');
+    }
+  } {ab ba aB bA Ab Ba AB BA}
+  do_test collate2-2.24 {
+    execsql {
+      SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb');
+    }
+  } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
+  do_test collate2-2.25 {
+    execsql {
+      SELECT a FROM collate2t1 
+        WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
+  do_test collate2-2.26 {
+    execsql {
+      SELECT b FROM collate2t1 
+        WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {ab ba aB bA Ab Ba AB BA}
+  do_test collate2-2.27 {
+    execsql {
+      SELECT c FROM collate2t1 
+        WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
+    }
+  } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
+}
 
 do_test collate2-3.1 {
   execsql {
@@ -482,39 +488,42 @@ do_test collate2-3.21 {
     SELECT CASE c WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1;
   }
 } {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
-do_test collate2-3.22 {
-  execsql {
-    SELECT a IN ('aa', 'bb') FROM collate2t1;
-  }
-} {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
-do_test collate2-3.23 {
-  execsql {
-    SELECT b IN ('aa', 'bb') FROM collate2t1;
-  }
-} {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
-do_test collate2-3.24 {
-  execsql {
-    SELECT c IN ('aa', 'bb') FROM collate2t1;
-  }
-} {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
-do_test collate2-3.25 {
-  execsql {
-    SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
-      FROM collate2t1;
-  }
-} {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
-do_test collate2-3.26 {
-  execsql {
-    SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
-      FROM collate2t1;
-  }
-} {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
-do_test collate2-3.27 {
-  execsql {
-    SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
-      FROM collate2t1;
-  }
-} {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
+
+ifcapable subquery {
+  do_test collate2-3.22 {
+    execsql {
+      SELECT a IN ('aa', 'bb') FROM collate2t1;
+    }
+  } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
+  do_test collate2-3.23 {
+    execsql {
+      SELECT b IN ('aa', 'bb') FROM collate2t1;
+    }
+  } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
+  do_test collate2-3.24 {
+    execsql {
+      SELECT c IN ('aa', 'bb') FROM collate2t1;
+    }
+  } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
+  do_test collate2-3.25 {
+    execsql {
+      SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
+        FROM collate2t1;
+    }
+  } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
+  do_test collate2-3.26 {
+    execsql {
+      SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
+        FROM collate2t1;
+    }
+  } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
+  do_test collate2-3.27 {
+    execsql {
+      SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 
+        FROM collate2t1;
+    }
+  } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
+}
 
 do_test collate2-4.0 {
   execsql {
index f99f3a0efd8d4b20461a41e49cfc291cec9313c2..3fc3cf8d80232e81dbd3200ef745b7dedaa96b42 100644 (file)
@@ -12,7 +12,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script is page cache subsystem.
 #
-# $Id: collate4.test,v 1.6 2004/12/19 00:11:36 drh Exp $
+# $Id: collate4.test,v 1.7 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -371,34 +371,36 @@ do_test collate4-2.1.5 {
     SELECT * FROM collate4t2, collate4t1 WHERE b = a;
   }
 } {A A 4}
-do_test collate4-2.1.6 {
-  count {
-    SELECT a FROM collate4t1 WHERE a IN (SELECT * FROM collate4t2);
-  }
-} {a A 10}
-do_test collate4-2.1.7 {
-  execsql {
-    DROP INDEX collate4i1;
-    CREATE INDEX collate4i1 ON collate4t1(a);
-  }
-  count {
-    SELECT a FROM collate4t1 WHERE a IN (SELECT * FROM collate4t2);
-  }
-} {a A 6}
-do_test collate4-2.1.8 {
-  count {
-    SELECT a FROM collate4t1 WHERE a IN ('z', 'a');
-  }
-} {a A 5}
-do_test collate4-2.1.9 {
-  execsql {
-    DROP INDEX collate4i1;
-    CREATE INDEX collate4i1 ON collate4t1(a COLLATE TEXT);
-  }
-  count {
-    SELECT a FROM collate4t1 WHERE a IN ('z', 'a');
-  }
-} {a A 9}
+ifcapable subquery {
+  do_test collate4-2.1.6 {
+    count {
+      SELECT a FROM collate4t1 WHERE a IN (SELECT * FROM collate4t2);
+    }
+  } {a A 10}
+  do_test collate4-2.1.7 {
+    execsql {
+      DROP INDEX collate4i1;
+      CREATE INDEX collate4i1 ON collate4t1(a);
+    }
+    count {
+      SELECT a FROM collate4t1 WHERE a IN (SELECT * FROM collate4t2);
+    }
+  } {a A 6}
+  do_test collate4-2.1.8 {
+    count {
+      SELECT a FROM collate4t1 WHERE a IN ('z', 'a');
+    }
+  } {a A 5}
+  do_test collate4-2.1.9 {
+    execsql {
+      DROP INDEX collate4i1;
+      CREATE INDEX collate4i1 ON collate4t1(a COLLATE TEXT);
+    }
+    count {
+      SELECT a FROM collate4t1 WHERE a IN ('z', 'a');
+    }
+  } {a A 9}
+}
 do_test collate4-2.1.10 {
   execsql {
     DROP TABLE collate4t1;
index 94edb2c556eaf09b038d273cb45f471ced970f4c..39f1d38fec3b9ead8ad5029db81c67c19751076e 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing expressions.
 #
-# $Id: expr.test,v 1.41 2005/01/11 17:46:42 drh Exp $
+# $Id: expr.test,v 1.42 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -500,12 +500,18 @@ test_expr2 expr-7.46 {((123||'xabcdefghijklmnopqrstuvwyxz01234567890'||a) BETWEE
 
 test_expr2 expr-7.50 {((a between 1 and 2 OR 0) AND 1) OR 0} {1 2}
 test_expr2 expr-7.51 {((a not between 3 and 100 OR 0) AND 1) OR 0} {1 2}
-test_expr2 expr-7.52 {((a in (1,2) OR 0) AND 1) OR 0} {1 2}
-test_expr2 expr-7.53 {((a not in (3,4,5,6,7,8,9,10) OR 0) AND a<11) OR 0} {1 2}
+
+ifcapable subquery {
+  test_expr2 expr-7.52 {((a in (1,2) OR 0) AND 1) OR 0} {1 2}
+  test_expr2 expr-7.53 \
+      {((a not in (3,4,5,6,7,8,9,10) OR 0) AND a<11) OR 0} {1 2}
+}
 test_expr2 expr-7.54 {((a>0 OR 0) AND a<3) OR 0} {1 2}
-test_expr2 expr-7.55 {((a in (1,2) OR 0) IS NULL AND 1) OR 0} {{}}
-test_expr2 expr-7.56 {((a not in (3,4,5,6,7,8,9,10) IS NULL OR 0) AND 1) OR 0} \
-   {{}}
+ifcapable subquery {
+  test_expr2 expr-7.55 {((a in (1,2) OR 0) IS NULL AND 1) OR 0} {{}}
+  test_expr2 expr-7.56 \
+      {((a not in (3,4,5,6,7,8,9,10) IS NULL OR 0) AND 1) OR 0} {{}}
+}
 test_expr2 expr-7.57 {((a>0 IS NULL OR 0) AND 1) OR 0} {{}}
 
 test_expr2 expr-7.58  {(a||'')<='1'}                  {1}
index c717a90b4e852923b48d7c0747118a767d17ecf0..db6c7add7aa822d8279e7b56483f06679d612cf6 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the IN and BETWEEN operator.
 #
-# $Id: in.test,v 1.12 2004/05/27 17:22:56 drh Exp $
+# $Id: in.test,v 1.13 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -53,6 +53,14 @@ do_test in-1.7 {
   execsql {SELECT a+ 100*(a BETWEEN 1 and 3) FROM t1 ORDER BY b}
 } {101 102 103 4 5 6 7 8 9 10}
 
+# The rest of this file concentrates on testing the IN operator.
+# Skip this if the library is compiled with SQLITE_OMIT_SUBQUERY 
+# (because the IN operator is unavailable).
+#
+ifcapable !subquery {
+  finish_test
+  return
+}
 
 # Testing of the IN operator using static lists on the right-hand side.
 #
index a987f650a2d3d3806f48d34286b92c91166699b6..ce0fe2e25a1f227269d784303029ee2ce3caf480 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the CREATE INDEX statement.
 #
-# $Id: index.test,v 1.36 2004/11/22 08:43:32 danielk1977 Exp $
+# $Id: index.test,v 1.37 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -304,8 +304,12 @@ do_test index-10.4 {
   }
 } {1 2 3 4 5 6 7 8 9}
 do_test index-10.5 {
+  ifcapable subquery {
+    execsql { DELETE FROM t1 WHERE b IN (2, 4, 6, 8); }
+  } else {
+    execsql { DELETE FROM t1 WHERE b = 2 OR b = 4 OR b = 6 OR b = 8; }
+  }
   execsql {
-    DELETE FROM t1 WHERE b IN (2, 4, 6, 8);
     SELECT b FROM t1 WHERE a=1 ORDER BY b;
   }
 } {1 3 5 7 9}
index e75ca49ea0741021872c8a5bda6cf0360068fe6e..9fc9b238b96028408e07e33df8785f6989670065 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the INSERT statement.
 #
-# $Id: insert.test,v 1.22 2005/01/17 08:57:09 danielk1977 Exp $
+# $Id: insert.test,v 1.23 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -177,20 +177,33 @@ do_test insert-4.1 {
   }
 } {6 4 5}
 do_test insert-4.2 {
+  ifcapable subquery {
+    execsql {INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1,5,6);}
+  } else {
+    set maxa [execsql {SELECT max(a) FROM t3}]
+    execsql "INSERT INTO t3 VALUES($maxa+1,5,6);"
+  }
   execsql {
-    INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1,5,6);
     SELECT * FROM t3 ORDER BY a;
   }
 } {6 4 5 7 5 6}
-do_test insert-4.3 {
-  catchsql {
-    INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1,t3.a,6);
-    SELECT * FROM t3 ORDER BY a;
-  }
-} {1 {no such column: t3.a}}
+ifcapable subquery {
+  do_test insert-4.3 {
+    catchsql {
+      INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1,t3.a,6);
+      SELECT * FROM t3 ORDER BY a;
+    }
+  } {1 {no such column: t3.a}}
+}
 do_test insert-4.4 {
+  ifcapable subquery {
+    execsql {INSERT INTO t3 VALUES((SELECT b FROM t3 WHERE a=0),6,7);}
+  } else {
+    set b [execsql {SELECT b FROM t3 WHERE a = 0}]
+    if {$b==""} {set b NULL}
+    execsql "INSERT INTO t3 VALUES($b,6,7);"
+  }
   execsql {
-    INSERT INTO t3 VALUES((SELECT b FROM t3 WHERE a=0),6,7);
     SELECT * FROM t3 ORDER BY a;
   }
 } {{} 6 7 6 4 5 7 5 6}
index cadefb57b046d070a48c0ed6f9d411f58fe968a1..95eb9b29431709aca0f1fb7b4148d461cf256665 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this file is testing the INSERT statement that takes is
 # result from a SELECT.
 #
-# $Id: insert2.test,v 1.13 2004/11/22 13:35:42 danielk1977 Exp $
+# $Id: insert2.test,v 1.14 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -151,14 +151,27 @@ do_test insert2-3.2.1 {
   }
 } {10}
 do_test insert2-3.3 {
-  execsql {
-    BEGIN;
-    INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
-    INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
-    INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
-    INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
-    COMMIT;
-    SELECT count(*) FROM t4;
+  ifcapable subquery {
+    execsql {
+      BEGIN;
+      INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
+      INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
+      INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
+      INSERT INTO t4 SELECT x+(SELECT max(x) FROM t4),y FROM t4;
+      COMMIT;
+      SELECT count(*) FROM t4;
+    }
+  } else {
+    db function max_x_t4 {execsql {SELECT max(x) FROM t4}}
+    execsql {
+      BEGIN;
+      INSERT INTO t4 SELECT x+max_x_t4() ,y FROM t4;
+      INSERT INTO t4 SELECT x+max_x_t4() ,y FROM t4;
+      INSERT INTO t4 SELECT x+max_x_t4() ,y FROM t4;
+      INSERT INTO t4 SELECT x+max_x_t4() ,y FROM t4;
+      COMMIT;
+      SELECT count(*) FROM t4;
+    }
   }
 } {160}
 do_test insert2-3.4 {
@@ -171,11 +184,20 @@ do_test insert2-3.4 {
   }
 } {160}
 do_test insert2-3.5 {
-  execsql {
-    BEGIN;
-    INSERT INTO t4 SELECT x+(SELECT max(x)+1 FROM t4),y FROM t4;
-    SELECT count(*) from t4;
-    ROLLBACK;
+  ifcapable subquery {
+    execsql {
+      BEGIN;
+      INSERT INTO t4 SELECT x+(SELECT max(x)+1 FROM t4),y FROM t4;
+      SELECT count(*) from t4;
+      ROLLBACK;
+    }
+  } else {
+    execsql {
+      BEGIN;
+      INSERT INTO t4 SELECT x+max_x_t4()+1,y FROM t4;
+      SELECT count(*) from t4;
+      ROLLBACK;
+    }
   }
 } {320}
 do_test insert2-3.6 {
index 12d9c91225ebae55785f29ab73713354df88835f..6cf536d2f96303d37a70bdb9a7992f1fd8d413fc 100644 (file)
@@ -12,7 +12,7 @@
 #
 # This file implements tests for joins, including outer joins.
 #
-# $Id: join.test,v 1.15 2005/01/18 17:40:04 drh Exp $
+# $Id: join.test,v 1.16 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -117,18 +117,21 @@ do_test join-1.12 {
     SELECT * FROM t1 natural inner join t2;
   }
 } {1 2 3 4 2 3 4 5}
-do_test join-1.13 {
-  execsql2 {
-    SELECT * FROM t1 NATURAL JOIN 
-      (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as t3
-  }
-} {a 1 b 2 c 3 d 4 e 5}
-do_test join-1.14 {
-  execsql2 {
-    SELECT * FROM (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as 'tx'
-        NATURAL JOIN t1
-  }
-} {c 3 d 4 e 5 a 1 b 2}
+
+ifcapable subquery {
+  do_test join-1.13 {
+    execsql2 {
+      SELECT * FROM t1 NATURAL JOIN 
+        (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as t3
+    }
+  } {a 1 b 2 c 3 d 4 e 5}
+  do_test join-1.14 {
+    execsql2 {
+      SELECT * FROM (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as 'tx'
+          NATURAL JOIN t1
+    }
+  } {c 3 d 4 e 5 a 1 b 2}
+}
 
 do_test join-1.15 {
   execsql {
index 8829be38f1da229d675ecfa43a50e63fbf6a6610..0f558c5a3df6dc027c3c0c54a06d6927cd98528f 100644 (file)
@@ -12,7 +12,7 @@
 #
 # This file implements tests for joins, including outer joins.
 #
-# $Id: join2.test,v 1.1 2004/01/24 20:18:13 drh Exp $
+# $Id: join2.test,v 1.2 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -63,11 +63,13 @@ do_test join2-1.6 {
       t1 NATURAL LEFT OUTER JOIN t2 NATURAL JOIN t3
   }
 } {1 11 111 1111}
-do_test join2-1.6 {
-  execsql {
-    SELECT * FROM
-      t1 NATURAL LEFT OUTER JOIN (t2 NATURAL JOIN t3)
-  }
-} {1 11 111 1111 2 22 {} {} 3 33 {} {}}
+ifcapable subquery {
+  do_test join2-1.7 {
+    execsql {
+      SELECT * FROM
+        t1 NATURAL LEFT OUTER JOIN (t2 NATURAL JOIN t3)
+    }
+  } {1 11 111 1111 2 22 {} {} 3 33 {} {}}
+}
 
 finish_test
index 05d551e02efe13d9152bc61a0f48cd74760a5d16..fba4425398661b90e13e88920e4898794a56b0d4 100644 (file)
@@ -13,7 +13,7 @@
 # This file implements tests for left outer joins containing WHERE
 # clauses that restrict the scope of the left term of the join.
 #
-# $Id: join4.test,v 1.2 2004/07/19 19:28:44 drh Exp $
+# $Id: join4.test,v 1.3 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -62,16 +62,18 @@ do_test join4-1.4 {
     select * from t1 left outer join t2 on t1.a=t2.x and t2.z>='ok'
   }
 } {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}}
-do_test join4-1.6 {
-  execsql {
-    select * from t1 left outer join t2 on t1.a=t2.x where t2.z IN ('ok')
-  }
-} {2 two 2 niban ok}
-do_test join4-1.7 {
-  execsql {
-    select * from t1 left outer join t2 on t1.a=t2.x and t2.z IN ('ok')
-  }
-} {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}}
+ifcapable subquery {
+  do_test join4-1.6 {
+    execsql {
+      select * from t1 left outer join t2 on t1.a=t2.x where t2.z IN ('ok')
+    }
+  } {2 two 2 niban ok}
+  do_test join4-1.7 {
+    execsql {
+      select * from t1 left outer join t2 on t1.a=t2.x and t2.z IN ('ok')
+    }
+  } {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}}
+}
 
 
 finish_test
index 118cc542b8483cdf3ce28e8ce3e7dbbc2592d3ff..733ea6f1967f91b1e3b7d0a6c7fdc3199351f620 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this file is testing the LIMIT ... OFFSET ... clause
 #  of SELECT statements.
 #
-# $Id: limit.test,v 1.21 2005/01/20 02:17:02 danielk1977 Exp $
+# $Id: limit.test,v 1.22 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -79,36 +79,56 @@ do_test limit-2.2 {
     SELECT count(*) FROM t2;
   }
 } 2
-do_test limit-2.3 {
-  execsql {
-    SELECT count(*) FROM t1 WHERE rowid IN (SELECT rowid FROM t1 LIMIT 2);
-  }
-} 2
+ifcapable subquery {
+  do_test limit-2.3 {
+    execsql {
+      SELECT count(*) FROM t1 WHERE rowid IN (SELECT rowid FROM t1 LIMIT 2);
+    }
+  } 2
+}
 
-do_test limit-3.1 {
-  execsql {
-    SELECT z FROM (SELECT y*10+x AS z FROM t1 ORDER BY x LIMIT 10)
-    ORDER BY z LIMIT 5;
-  }
-} {50 51 52 53 54}
+ifcapable subquery {
+  do_test limit-3.1 {
+    execsql {
+      SELECT z FROM (SELECT y*10+x AS z FROM t1 ORDER BY x LIMIT 10)
+      ORDER BY z LIMIT 5;
+    }
+  } {50 51 52 53 54}
+}
 
 do_test limit-4.1 {
-  execsql {
-    BEGIN;
-    CREATE TABLE t3(x);
-    INSERT INTO t3 SELECT x FROM t1 ORDER BY x LIMIT 10 OFFSET 1;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
-    END;
-    SELECT count(*) FROM t3;
+  ifcapable subquery { 
+    execsql {
+      BEGIN;
+      CREATE TABLE t3(x);
+      INSERT INTO t3 SELECT x FROM t1 ORDER BY x LIMIT 10 OFFSET 1;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      INSERT INTO t3 SELECT x+(SELECT max(x) FROM t3) FROM t3;
+      END;
+      SELECT count(*) FROM t3;
+    }
+  } else {
+    execsql {
+      BEGIN;
+      CREATE TABLE t3(x);
+      INSERT INTO t3 SELECT x FROM t1 ORDER BY x LIMIT 10 OFFSET 1;
+    }
+    for {set i 0} {$i<10} {incr i} {
+      set max_x_t3 [execsql {SELECT max(x) FROM t3}]
+      execsql "INSERT INTO t3 SELECT x+$max_x_t3 FROM t3;"
+    }
+    execsql {
+      END;
+      SELECT count(*) FROM t3;
+    }
   }
 } {10240}
 do_test limit-4.2 {
@@ -320,35 +340,45 @@ do_test limit-8.3 {
 # Make sure limits on multiple subqueries work correctly.
 # Ticket #1035
 #
-do_test limit-9.1 {
-  execsql {
-    SELECT * FROM (SELECT * FROM t6 LIMIT 3);
-  }
-} {1 2 3}
-do_test limit-9.2 {
+ifcapable subquery {
+  do_test limit-9.1 {
+    execsql {
+      SELECT * FROM (SELECT * FROM t6 LIMIT 3);
+    }
+  } {1 2 3}
+}
+do_test limit-9.2.1 {
   execsql {
     CREATE TABLE t7 AS SELECT * FROM t6;
-    SELECT * FROM (SELECT * FROM t7 LIMIT 3);
   }
-} {1 2 3}
-ifcapable compound {
-  do_test limit-9.3 {
+} {}
+ifcapable subquery {
+  do_test limit-9.2.2 {
     execsql {
-      SELECT * FROM (SELECT * FROM t6 LIMIT 3)
-      UNION
-      SELECT * FROM (SELECT * FROM t7 LIMIT 3)
-      ORDER BY 1
+      SELECT * FROM (SELECT * FROM t7 LIMIT 3);
     }
   } {1 2 3}
-  do_test limit-9.4 {
-    execsql {
-      SELECT * FROM (SELECT * FROM t6 LIMIT 3)
-      UNION
-      SELECT * FROM (SELECT * FROM t7 LIMIT 3)
-      ORDER BY 1
-      LIMIT 2
-    }
-  } {1 2}
+}
+ifcapable compound {
+  ifcapable subquery {
+    do_test limit-9.3 {
+      execsql {
+        SELECT * FROM (SELECT * FROM t6 LIMIT 3)
+        UNION
+        SELECT * FROM (SELECT * FROM t7 LIMIT 3)
+        ORDER BY 1
+      }
+    } {1 2 3}
+    do_test limit-9.4 {
+      execsql {
+        SELECT * FROM (SELECT * FROM t6 LIMIT 3)
+        UNION
+        SELECT * FROM (SELECT * FROM t7 LIMIT 3)
+        ORDER BY 1
+        LIMIT 2
+      }
+    } {1 2}
+  }
   do_test limit-9.5 {
     catchsql {
       SELECT * FROM t6 LIMIT 3
index 64a1a6fe966c0deaf512a819ada56c9aef17e90a..7e53a0ae9cd77abebdc56ca643446af3161ba53e 100644 (file)
@@ -13,7 +13,7 @@
 # aggregate min() and max() functions and which are handled as
 # as a special case.
 #
-# $Id: minmax.test,v 1.14 2004/11/22 13:35:42 danielk1977 Exp $
+# $Id: minmax.test,v 1.15 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -104,7 +104,12 @@ do_test minmax-2.3 {
 } {0}
 
 do_test minmax-3.0 {
-  execsql {INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)}
+  ifcapable subquery {
+    execsql {INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)}
+  } else {
+    db function max_a_t2 {execsql {SELECT max(a) FROM t2}}
+    execsql {INSERT INTO t2 VALUES(max_a_t2()+1,999)}
+  }
   set sqlite_search_count 0
   execsql {SELECT max(a) FROM t2}
 } {21}
@@ -112,10 +117,17 @@ do_test minmax-3.1 {
   set sqlite_search_count
 } {0}
 do_test minmax-3.2 {
-  execsql {INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)}
+  ifcapable subquery {
+    execsql {INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)}
+  } else {
+    db function max_a_t2 {execsql {SELECT max(a) FROM t2}}
+    execsql {INSERT INTO t2 VALUES(max_a_t2()+1,999)}
+  }
   set sqlite_search_count 0
-  execsql {
-    SELECT b FROM t2 WHERE a=(SELECT max(a) FROM t2)
+  ifcapable subquery {
+    execsql { SELECT b FROM t2 WHERE a=(SELECT max(a) FROM t2) }
+  } else {
+    execsql { SELECT b FROM t2 WHERE a=max_a_t2() }
   }
 } {999}
 do_test minmax-3.3 {
@@ -222,21 +234,25 @@ do_test minmax-7.1 {
     SELECT max(x) FROM t1;
   }
 } 20
-do_test minmax-7.2 {
-  execsql {
-    SELECT * FROM (SELECT max(x) FROM t1);
-  }
-} 20
+ifcapable subquery {
+  do_test minmax-7.2 {
+    execsql {
+      SELECT * FROM (SELECT max(x) FROM t1);
+    }
+  } 20
+}
 do_test minmax-7.3 {
   execsql {
     SELECT min(x) FROM t1;
   }
 } 1
-do_test minmax-7.4 {
-  execsql {
-    SELECT * FROM (SELECT min(x) FROM t1);
-  }
-} 1
+ifcapable subquery {
+  do_test minmax-7.4 {
+    execsql {
+      SELECT * FROM (SELECT min(x) FROM t1);
+    }
+  } 1
+}
 
 # Make sure min(x) and max(x) work correctly when the datatype is
 # TEXT instead of NUMERIC.  Ticket #623.
@@ -319,11 +335,13 @@ do_test minmax-10.6 {
     SELECT count(x) FROM t6;
   }
 } 0
-do_test minmax-10.7 {
-  execsql {
-    SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6);
-  }
-} {{} {}}
+ifcapable subquery {
+  do_test minmax-10.7 {
+    execsql {
+      SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6);
+    }
+  } {{} {}}
+}
 do_test minmax-10.8 {
   execsql {
     SELECT min(x), max(x) FROM t6;
@@ -349,11 +367,13 @@ do_test minmax-10.10 {
     SELECT count(x) FROM t6;
   }
 } 0
-do_test minmax-10.11 {
-  execsql {
-    SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6);
-  }
-} {{} {}}
+ifcapable subquery {
+  do_test minmax-10.11 {
+    execsql {
+      SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6);
+    }
+  } {{} {}}
+}
 do_test minmax-10.12 {
   execsql {
     SELECT min(x), max(x) FROM t6;
index a6f1bf44da97431f7b8f60a7b28d2bf5d9a1005d..be3ab7ca360d2dd2459faa0099c4a013f36e6337 100644 (file)
@@ -13,7 +13,7 @@
 # This file implements tests for miscellanous features that were
 # left out of other test files.
 #
-# $Id: misc1.test,v 1.31 2004/11/04 04:42:28 drh Exp $
+# $Id: misc1.test,v 1.32 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -431,38 +431,40 @@ do_test misc1-12.13 {
 # the old copy of the buffer were not being moved over to the new copy.
 # The following code tests for the problem.
 #
-do_test misc1-13.1 {
-   execsql {
-     CREATE TABLE t9(x,y);
-     INSERT INTO t9 VALUES('one',1);
-     INSERT INTO t9 VALUES('two',2);
-     INSERT INTO t9 VALUES('three',3);
-     INSERT INTO t9 VALUES('four',4);
-     INSERT INTO t9 VALUES('five',5);
-     INSERT INTO t9 VALUES('six',6);
-     INSERT INTO t9 VALUES('seven',7);
-     INSERT INTO t9 VALUES('eight',8);
-     INSERT INTO t9 VALUES('nine',9);
-     INSERT INTO t9 VALUES('ten',10);
-     INSERT INTO t9 VALUES('eleven',11);
-     SELECT y FROM t9
-     WHERE x=(SELECT x FROM t9 WHERE y=1)
-        OR x=(SELECT x FROM t9 WHERE y=2)
-        OR x=(SELECT x FROM t9 WHERE y=3)
-        OR x=(SELECT x FROM t9 WHERE y=4)
-        OR x=(SELECT x FROM t9 WHERE y=5)
-        OR x=(SELECT x FROM t9 WHERE y=6)
-        OR x=(SELECT x FROM t9 WHERE y=7)
-        OR x=(SELECT x FROM t9 WHERE y=8)
-        OR x=(SELECT x FROM t9 WHERE y=9)
-        OR x=(SELECT x FROM t9 WHERE y=10)
-        OR x=(SELECT x FROM t9 WHERE y=11)
-        OR x=(SELECT x FROM t9 WHERE y=12)
-        OR x=(SELECT x FROM t9 WHERE y=13)
-        OR x=(SELECT x FROM t9 WHERE y=14)
-     ;
-   }
-} {1 2 3 4 5 6 7 8 9 10 11}
+ifcapable subquery {
+  do_test misc1-13.1 {
+     execsql {
+       CREATE TABLE t9(x,y);
+       INSERT INTO t9 VALUES('one',1);
+       INSERT INTO t9 VALUES('two',2);
+       INSERT INTO t9 VALUES('three',3);
+       INSERT INTO t9 VALUES('four',4);
+       INSERT INTO t9 VALUES('five',5);
+       INSERT INTO t9 VALUES('six',6);
+       INSERT INTO t9 VALUES('seven',7);
+       INSERT INTO t9 VALUES('eight',8);
+       INSERT INTO t9 VALUES('nine',9);
+       INSERT INTO t9 VALUES('ten',10);
+       INSERT INTO t9 VALUES('eleven',11);
+       SELECT y FROM t9
+       WHERE x=(SELECT x FROM t9 WHERE y=1)
+          OR x=(SELECT x FROM t9 WHERE y=2)
+          OR x=(SELECT x FROM t9 WHERE y=3)
+          OR x=(SELECT x FROM t9 WHERE y=4)
+          OR x=(SELECT x FROM t9 WHERE y=5)
+          OR x=(SELECT x FROM t9 WHERE y=6)
+          OR x=(SELECT x FROM t9 WHERE y=7)
+          OR x=(SELECT x FROM t9 WHERE y=8)
+          OR x=(SELECT x FROM t9 WHERE y=9)
+          OR x=(SELECT x FROM t9 WHERE y=10)
+          OR x=(SELECT x FROM t9 WHERE y=11)
+          OR x=(SELECT x FROM t9 WHERE y=12)
+          OR x=(SELECT x FROM t9 WHERE y=13)
+          OR x=(SELECT x FROM t9 WHERE y=14)
+       ;
+     }
+  } {1 2 3 4 5 6 7 8 9 10 11}
+}
 
 # Make sure a database connection still works after changing the
 # working directory.
index 41851880c480c0b0c6c91992bcdbe043564f3e06..cd76335a5b584e7ec48128b7450561a04993f25d 100644 (file)
@@ -13,7 +13,7 @@
 # This file implements tests for miscellanous features that were
 # left out of other test files.
 #
-# $Id: misc3.test,v 1.15 2004/11/04 14:47:13 drh Exp $
+# $Id: misc3.test,v 1.16 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -199,45 +199,49 @@ do_test misc3-4.1 {
     SELECT count(a), count(b) FROM t3;
   }
 } {128 64}
+ifcapable subquery {
 do_test misc3-4.2 {
-  execsql {
-    SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3);
-  }
-} {64}
-do_test misc3-4.3 {
-  execsql {
-    SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3 ORDER BY a+1);
-  }
-} {64}
+    execsql {
+      SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3);
+    }
+  } {64}
+  do_test misc3-4.3 {
+    execsql {
+      SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3 ORDER BY a+1);
+    }
+  } {64}
+}
 
 # Ticket #601:  Putting a left join inside "SELECT * FROM (<join-here>)"
 # gives different results that if the outer "SELECT * FROM ..." is omitted.
 #
-do_test misc3-5.1 {
-  execsql {
-    CREATE TABLE x1 (b, c);
-    INSERT INTO x1 VALUES('dog',3);
-    INSERT INTO x1 VALUES('cat',1);
-    INSERT INTO x1 VALUES('dog',4);
-    CREATE TABLE x2 (c, e);
-    INSERT INTO x2 VALUES(1,'one');
-    INSERT INTO x2 VALUES(2,'two');
-    INSERT INTO x2 VALUES(3,'three');
-    INSERT INTO x2 VALUES(4,'four');
-    SELECT x2.c AS c, e, b FROM x2 LEFT JOIN
-       (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b)
-       USING(c);
-  }
-} {1 one cat 2 two {} 3 three {} 4 four dog}
-do_test misc4-5.2 {
-  execsql {
-    SELECT * FROM (
+ifcapable subquery {
+  do_test misc3-5.1 {
+    execsql {
+      CREATE TABLE x1 (b, c);
+      INSERT INTO x1 VALUES('dog',3);
+      INSERT INTO x1 VALUES('cat',1);
+      INSERT INTO x1 VALUES('dog',4);
+      CREATE TABLE x2 (c, e);
+      INSERT INTO x2 VALUES(1,'one');
+      INSERT INTO x2 VALUES(2,'two');
+      INSERT INTO x2 VALUES(3,'three');
+      INSERT INTO x2 VALUES(4,'four');
       SELECT x2.c AS c, e, b FROM x2 LEFT JOIN
          (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b)
-         USING(c)
-    );
-  }
-} {1 one cat 2 two {} 3 three {} 4 four dog}
+         USING(c);
+    }
+  } {1 one cat 2 two {} 3 three {} 4 four dog}
+  do_test misc3-5.2 {
+    execsql {
+      SELECT * FROM (
+        SELECT x2.c AS c, e, b FROM x2 LEFT JOIN
+           (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b)
+           USING(c)
+      );
+    }
+  } {1 one cat 2 two {} 3 three {} 4 four dog}
+}
 
 ifcapable {explain} {
   # Ticket #626:  make sure EXPLAIN prevents BEGIN and COMMIT from working.
@@ -297,15 +301,17 @@ do_test misc3-7.3 {
 # of an IN expression is NULL and the result is used as an integer, not
 # as a jump.
 #
-do_test misc-8.1 {
-  execsql {
-    SELECT count(CASE WHEN b IN ('abc','xyz') THEN 'x' END) FROM t3
-  }
-} {2}
-do_test misc-8.2 {
-  execsql {
-    SELECT count(*) FROM t3 WHERE 1+(b IN ('abc','xyz'))==2
-  }
-} {2}
+ifcapable subquery {
+  do_test misc-8.1 {
+    execsql {
+      SELECT count(CASE WHEN b IN ('abc','xyz') THEN 'x' END) FROM t3
+    }
+  } {2}
+  do_test misc-8.2 {
+    execsql {
+      SELECT count(*) FROM t3 WHERE 1+(b IN ('abc','xyz'))==2
+    }
+  } {2}
+}
 
 finish_test
index ed3d65a1b3a6293a6a7693adb7c9c461513796a9..0ce75a598f843bc27c0a11d24b3fd3fb50901756 100644 (file)
@@ -13,7 +13,7 @@
 # This file implements tests for miscellanous features that were
 # left out of other test files.
 #
-# $Id: misc4.test,v 1.12 2005/01/20 02:17:02 danielk1977 Exp $
+# $Id: misc4.test,v 1.13 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -101,23 +101,25 @@ do_test misc4-3.1 {
 
 # Ticket #1047.  Make sure column types are preserved in subqueries.
 #
-do_test misc4-4.1 {
-  execsql {
-    create table a(key varchar, data varchar);
-    create table b(key varchar, period integer);
-    insert into a values('01','data01');
-    insert into a values('+1','data+1');
-    
-    insert into b values ('01',1);
-    insert into b values ('01',2);
-    insert into b values ('+1',3);
-    insert into b values ('+1',4);
-    
-    select a.*, x.*
-      from a, (select key,sum(period) from b group by key) as x
-      where a.key=x.key;
-  }
-} {01 data01 01 3.0 +1 data+1 +1 7.0}
+ifcapable subquery {
+  do_test misc4-4.1 {
+    execsql {
+      create table a(key varchar, data varchar);
+      create table b(key varchar, period integer);
+      insert into a values('01','data01');
+      insert into a values('+1','data+1');
+      
+      insert into b values ('01',1);
+      insert into b values ('01',2);
+      insert into b values ('+1',3);
+      insert into b values ('+1',4);
+      
+      select a.*, x.*
+        from a, (select key,sum(period) from b group by key) as x
+        where a.key=x.key;
+    }
+  } {01 data01 01 3.0 +1 data+1 +1 7.0}
+}
 
 # Ticket #1036.  When creating tables from a SELECT on a view, use the
 # short names of columns.
index 89d3eb2f107dc24deb0424b9af0567bc9239bd72..0693f29ef76474b892cdcb62d95c48e3186441fd 100644 (file)
@@ -186,11 +186,13 @@ do_test null-8.1 {
     SELECT x FROM t4 WHERE y=NULL;
   }
 } {}
-do_test null-8.2 {
-  execsql {
-    SELECT x FROM t4 WHERE y IN (33,NULL);
-  }
-} {}
+ifcapable subquery {
+  do_test null-8.2 {
+    execsql {
+      SELECT x FROM t4 WHERE y IN (33,NULL);
+    }
+  } {}
+}
 do_test null-8.3 {
   execsql {
     SELECT x FROM t4 WHERE y<33 ORDER BY x;
@@ -212,11 +214,13 @@ do_test null-8.11 {
     SELECT x FROM t4 WHERE y=NULL;
   }
 } {}
-do_test null-8.12 {
-  execsql {
-    SELECT x FROM t4 WHERE y IN (33,NULL);
-  }
-} {}
+ifcapable subquery {
+  do_test null-8.12 {
+    execsql {
+      SELECT x FROM t4 WHERE y IN (33,NULL);
+    }
+  } {}
+}
 do_test null-8.13 {
   execsql {
     SELECT x FROM t4 WHERE y<33 ORDER BY x;
index 5a0b361387b54aab6b19be6eb679ab2075b1525d..96091a5b6ba456da4dbecdb19551dd76cbdff3e3 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this file is testing the magic ROWID column that is
 # found on all tables.
 #
-# $Id: rowid.test,v 1.17 2004/11/04 04:42:28 drh Exp $
+# $Id: rowid.test,v 1.18 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -273,8 +273,16 @@ do_test rowid-4.6 {
   }
 } {4}
 
-do_test rowid-5.1 {
-  execsql {DELETE FROM t1 WHERE _rowid_ IN (SELECT oid FROM t1 WHERE x>8)}
+do_test rowid-5.1.1 {
+  ifcapable subquery {
+    execsql {DELETE FROM t1 WHERE _rowid_ IN (SELECT oid FROM t1 WHERE x>8)}
+  } else {
+    set oids [execsql {SELECT oid FROM t1 WHERE x>8}]
+    set where "_rowid_ = [join $oids { OR _rowid_ = }]"
+    execsql "DELETE FROM t1 WHERE $where"
+  }
+} {}
+do_test rowid-5.1.2 {
   execsql {SELECT max(x) FROM t1}
 } {8}
 
@@ -346,20 +354,23 @@ do_test rowid-7.5 {
     SELECT b FROM t2 ORDER BY b;
   }
 } {11 55 66 77 88 99}
-do_test rowid-7.6 {
-  execsql {
-    SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647);
-  }
-} {11}
-do_test rowid-7.7 {
-  execsql {
-    INSERT INTO t2(b) VALUES(22);
-    INSERT INTO t2(b) VALUES(33);
-    INSERT INTO t2(b) VALUES(44);
-    INSERT INTO t2(b) VALUES(55);
-    SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647) ORDER BY b;
-  }
-} {11 22 33 44 55}
+ifcapable subquery {
+  do_test rowid-7.6 {
+    execsql {
+      SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647);
+    }
+  } {11}
+  do_test rowid-7.7 {
+    execsql {
+      INSERT INTO t2(b) VALUES(22);
+      INSERT INTO t2(b) VALUES(33);
+      INSERT INTO t2(b) VALUES(44);
+      INSERT INTO t2(b) VALUES(55);
+      SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647) 
+          ORDER BY b;
+    }
+  } {11 22 33 44 55}
+}
 do_test rowid-7.8 {
   execsql {
     DELETE FROM t2 WHERE a!=2;
index dd00484c569017191fdb98d0c36e03d5914c105f..13ccf0301d5469be0b3d20c9eba1752d672edef3 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the SELECT statement.
 #
-# $Id: select1.test,v 1.40 2005/01/18 17:20:10 drh Exp $
+# $Id: select1.test,v 1.41 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -585,11 +585,13 @@ do_test select1-9.2 {
   db eval {SELECT * FROM test1 WHERE f1<0} r {}
   set r(*)
 } {f1 f2}
-do_test select1-9.3 {
-  set r(*) {}
-  db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
-  set r(*)
-} {f1 f2}
+ifcapable subquery {
+  do_test select1-9.3 {
+    set r(*) {}
+    db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
+    set r(*)
+  } {f1 f2}
+}
 do_test select1-9.4 {
   set r(*) {}
   db eval {SELECT * FROM test1 ORDER BY f1} r {}
@@ -701,26 +703,28 @@ do_test select1-11.11 {
     SELECT t3.* FROM t3 AS x, t4;
   }
 } {1 {no such table: t3}}
-do_test select1-11.12 {
-  execsql2 {
-    SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
-  }
-} {a 1 b 2}
-do_test select1-11.13 {
-  execsql2 {
-    SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
-  }
-} {a 1 b 2}
-do_test select1-11.14 {
-  execsql2 {
-    SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
-  }
-} {a 1 b 2 max(a) 3 max(b) 4}
-do_test select1-11.15 {
-  execsql2 {
-    SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
-  }
-} {max(a) 3 max(b) 4 a 1 b 2}
+ifcapable subquery {
+  do_test select1-11.12 {
+    execsql2 {
+      SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
+    }
+  } {a 1 b 2}
+  do_test select1-11.13 {
+    execsql2 {
+      SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
+    }
+  } {a 1 b 2}
+  do_test select1-11.14 {
+    execsql2 {
+      SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
+    }
+  } {a 1 b 2 max(a) 3 max(b) 4}
+  do_test select1-11.15 {
+    execsql2 {
+      SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
+    }
+  } {max(a) 3 max(b) 4 a 1 b 2}
+}
 do_test select1-11.16 {
   execsql2 {
     SELECT y.* FROM t3 as y, t4 as z
@@ -765,16 +769,18 @@ do_test select1-12.6 {
 } {1 2 3 4}
 } ;# ifcapable compound
 
-do_test select1-12.7 {
-  execsql {
-    SELECT * FROM t3 WHERE a=(SELECT 1);
-  }
-} {1 2}
-do_test select1-12.8 {
-  execsql {
-    SELECT * FROM t3 WHERE a=(SELECT 2);
-  }
-} {}
+ifcapable subquery {
+  do_test select1-12.7 {
+    execsql {
+      SELECT * FROM t3 WHERE a=(SELECT 1);
+    }
+  } {1 2}
+  do_test select1-12.8 {
+    execsql {
+      SELECT * FROM t3 WHERE a=(SELECT 2);
+    }
+  } {}
+}
 
 ifcapable compound {
 do_test select1-12.9 {
index 0a422c9de48bdd833a268631264b911024a6649a..14e280ae5c5493e03df06c85724ac40019fc454c 100644 (file)
 # focus of this file is testing SELECT statements that contain
 # subqueries in their FROM clause.
 #
-# $Id: select6.test,v 1.15 2004/11/22 15:05:59 danielk1977 Exp $
+# $Id: select6.test,v 1.16 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 
+# Omit this whole file if the library is build without subquery support.
+ifcapable !subquery {
+  finish_test
+  return
+}
+
 do_test select6-1.0 {
   execsql {
     BEGIN;
index dba0c5405580b232191789b53d1e12eb9f259ccf..532525be04e696122350de2bc7c582540f66617b 100644 (file)
@@ -10,7 +10,7 @@
 # focus of this file is testing compute SELECT statements and nested
 # views.
 #
-# $Id: select7.test,v 1.4 2005/01/03 02:26:55 drh Exp $
+# $Id: select7.test,v 1.5 2005/01/21 03:12:16 danielk1977 Exp $
 
 
 set testdir [file dirname $argv0]
@@ -54,9 +54,11 @@ do_test select7-2.1 {
 
 # Do not allow GROUP BY without an aggregate. Ticket #1039.
 #
-do_test select7-3.1 {
-  catchsql {
-    SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name
-  }
-} {1 {GROUP BY may only be used on aggregate queries}}
+ifcapable subquery {
+  do_test select7-3.1 {
+    catchsql {
+      SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name
+    }
+  } {1 {GROUP BY may only be used on aggregate queries}}
+}
 finish_test
index a11f6bc448f3304c1b01b19694d90f491ecddb02..58f68b11605c0234af9671c5c4e9d3d839930999 100644 (file)
 # focus of this file is testing SELECT statements that are part of
 # expressions.
 #
-# $Id: subselect.test,v 1.11 2004/11/22 13:35:42 danielk1977 Exp $
+# $Id: subselect.test,v 1.12 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 
+# Omit this whole file if the library is build without subquery support.
+ifcapable !subquery {
+  finish_test
+  return
+}
+
 # Basic sanity checking.  Try a simple subselect.
 #
 do_test subselect-1.1 {
index 128495e77fe0e7d5616bf54f000b52b37fba5843..cd80582c46dd6795cbebfd960756d8ccea6cf0f9 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the CREATE TABLE statement.
 #
-# $Id: table.test,v 1.35 2004/11/23 22:16:40 drh Exp $
+# $Id: table.test,v 1.36 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -514,8 +514,14 @@ do_test table-11.2 {
 # Test that when creating a table using CREATE TABLE AS, column types are
 # assigned correctly for (SELECT ...) and 'x AS y' expressions.
 do_test table-12.1 {
-  execsql {
-    CREATE TABLE t8 AS SELECT b, h, a as i, (SELECT f FROM t7) as j FROM t7;
+  ifcapable subquery {
+    execsql {
+      CREATE TABLE t8 AS SELECT b, h, a as i, (SELECT f FROM t7) as j FROM t7;
+    }
+  } else {
+    execsql {
+      CREATE TABLE t8 AS SELECT b, h, a as i, f as j FROM t7;
+    }
   }
 } {}
 do_test table-12.2 {
index 02f09476b21c5a3038c1c0bf93686435411607ed..2355bf6eb7ebad49d3f61867e1f21ad04b0b2093 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this file is testing the sqlite_exec_printf() and
 # sqlite_get_table_printf() APIs.
 #
-# $Id: tableapi.test,v 1.9 2004/06/19 03:33:57 danielk1977 Exp $
+# $Id: tableapi.test,v 1.10 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -83,9 +83,15 @@ do_test tableapi-2.6 {
   sqlite3_get_table_printf $::dbx {
     INSERT INTO xyz VALUES(52,NULL)
   } {}
-  sqlite3_get_table_printf $::dbx {
-    SELECT * FROM xyz WHERE a IN (42,50,52) ORDER BY a DESC
-  } {}
+  ifcapable subquery {
+    sqlite3_get_table_printf $::dbx {
+      SELECT * FROM xyz WHERE a IN (42,50,52) ORDER BY a DESC
+    } {}
+  } else {
+    sqlite3_get_table_printf $::dbx {
+      SELECT * FROM xyz WHERE a=42 OR a=50 OR a=52 ORDER BY a DESC
+    } {}
+  }
 } {0 3 2 a b 52 NULL 50 (50) 42 (42)}
 do_test tableapi-2.7 {
   sqlite3_get_table_printf $::dbx {
@@ -140,9 +146,15 @@ do_test tableapi-3.6 {
   sqlite3_get_table_printf $::dbx {
     INSERT INTO xyz VALUES(52,NULL)
   } {}
-  sqlite3_get_table_printf $::dbx {
-    SELECT * FROM xyz WHERE a IN (42,50,52) ORDER BY a DESC
-  } {}
+  ifcapable subquery {
+    sqlite3_get_table_printf $::dbx {
+      SELECT * FROM xyz WHERE a IN (42,50,52) ORDER BY a DESC
+    } {}
+  } else {
+    sqlite3_get_table_printf $::dbx {
+      SELECT * FROM xyz WHERE a=42 OR a=50 OR a=52 ORDER BY a DESC
+    } {}
+  }
 } {0 3 2 a b 52 NULL 50 (50) 42 (42)}
 do_test tableapi-3.7 {
   sqlite3_get_table_printf $::dbx {
index e41aeb6de56a1eafead05fec29be12ec7944274d..dacf3243fe7176f55923c68d94c6c058e0633718 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements some common TCL routines used for regression
 # testing the SQLite library
 #
-# $Id: tester.tcl,v 1.44 2005/01/13 11:07:54 danielk1977 Exp $
+# $Id: tester.tcl,v 1.45 2005/01/21 03:12:16 danielk1977 Exp $
 
 # Make sure tclsqlite3 was compiled correctly.  Abort now with an
 # error message if not.
@@ -240,10 +240,14 @@ proc integrity_check {name} {
 # Evaluate a boolean expression of capabilities.  If true, execute the
 # code.  Omit the code if false.
 #
-proc ifcapable {expr code} {
+proc ifcapable {expr code {else ""} {elsecode ""}} {
   regsub -all {[a-z_0-9]+} $expr {$::sqlite_options(&)} e2
-  if !($e2) return
-  return -code [catch {uplevel 1 $code}]
+  if ($e2) {
+    set c [catch {uplevel 1 $code} r]
+  } else {
+    set c [catch {uplevel 1 $elsecode} r]
+  }
+  return -code $c $r
 }
 
 # This proc execs a seperate process that crashes midway through executing
index 729f96d65902f5ebf849d896c684f77af1e61dda..36dd4896776ec1a0e8a95135a0808cde34cb169d 100644 (file)
@@ -12,7 +12,7 @@
 # of this file is testing the interaction of manifest types, type affinity
 # and comparison expressions.
 #
-# $Id: types2.test,v 1.4 2004/07/19 00:39:46 drh Exp $
+# $Id: types2.test,v 1.5 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -196,38 +196,40 @@ test_bool types2-4.26 {o1='500'} {'500' > o1} 0
 test_bool types2-4.27 {o1='500'} {500.0 > o1} 0
 test_bool types2-4.28 {o1='500'} {'500.0' > o1} 1
 
-# types2-5.* - The 'IN (x, y....)' operator with no index.
-# 
-# Compare literals against literals (always a numeric comparison).
-test_bool types2-5.1 {} {(NULL IN ('10.0', 20)) ISNULL} 1
-test_bool types2-5.2 {} {10 IN ('10.0', 20)} 1
-test_bool types2-5.3 {} {'10' IN ('10.0', 20)} 1
-test_bool types2-5.4 {} {10 IN (10.0, 20)} 1
-test_bool types2-5.5 {} {'10.0' IN (10, 20)} 1
-
-# Compare literals against a column with TEXT affinity
-test_bool types2-5.6 {t1='10.0'} {t1 IN (10.0, 20)} 1
-test_bool types2-5.7 {t1='10.0'} {t1 IN (10, 20)} 0
-test_bool types2-5.8 {t1='10'} {t1 IN (10.0, 20)} 0
-test_bool types2-5.9 {t1='10'} {t1 IN (20, '10.0')} 0
-test_bool types2-5.10 {t1=10} {t1 IN (20, '10')} 1
-
-# Compare literals against a column with NUMERIC affinity
-test_bool types2-5.11 {n1='10.0'} {n1 IN (10.0, 20)} 1
-test_bool types2-5.12 {n1='10.0'} {n1 IN (10, 20)} 1
-test_bool types2-5.13 {n1='10'} {n1 IN (10.0, 20)} 1
-test_bool types2-5.14 {n1='10'} {n1 IN (20, '10.0')} 1
-test_bool types2-5.15 {n1=10} {n1 IN (20, '10')} 1
-
-# Compare literals against a column with affinity NONE
-test_bool types2-5.16 {o1='10.0'} {o1 IN (10.0, 20)} 0
-test_bool types2-5.17 {o1='10.0'} {o1 IN (10, 20)} 0
-test_bool types2-5.18 {o1='10'} {o1 IN (10.0, 20)} 0
-test_bool types2-5.19 {o1='10'} {o1 IN (20, '10.0')} 0
-test_bool types2-5.20 {o1=10} {o1 IN (20, '10')} 0
-test_bool types2-5.21 {o1='10.0'} {o1 IN (10, 20, '10.0')} 1
-test_bool types2-5.22 {o1='10'} {o1 IN (10.0, 20, '10')} 1
-test_bool types2-5.23 {o1=10} {n1 IN (20, '10', 10)} 1
+ifcapable subquery {
+  # types2-5.* - The 'IN (x, y....)' operator with no index.
+  # 
+  # Compare literals against literals (always a numeric comparison).
+  test_bool types2-5.1 {} {(NULL IN ('10.0', 20)) ISNULL} 1
+  test_bool types2-5.2 {} {10 IN ('10.0', 20)} 1
+  test_bool types2-5.3 {} {'10' IN ('10.0', 20)} 1
+  test_bool types2-5.4 {} {10 IN (10.0, 20)} 1
+  test_bool types2-5.5 {} {'10.0' IN (10, 20)} 1
+  
+  # Compare literals against a column with TEXT affinity
+  test_bool types2-5.6 {t1='10.0'} {t1 IN (10.0, 20)} 1
+  test_bool types2-5.7 {t1='10.0'} {t1 IN (10, 20)} 0
+  test_bool types2-5.8 {t1='10'} {t1 IN (10.0, 20)} 0
+  test_bool types2-5.9 {t1='10'} {t1 IN (20, '10.0')} 0
+  test_bool types2-5.10 {t1=10} {t1 IN (20, '10')} 1
+  
+  # Compare literals against a column with NUMERIC affinity
+  test_bool types2-5.11 {n1='10.0'} {n1 IN (10.0, 20)} 1
+  test_bool types2-5.12 {n1='10.0'} {n1 IN (10, 20)} 1
+  test_bool types2-5.13 {n1='10'} {n1 IN (10.0, 20)} 1
+  test_bool types2-5.14 {n1='10'} {n1 IN (20, '10.0')} 1
+  test_bool types2-5.15 {n1=10} {n1 IN (20, '10')} 1
+  
+  # Compare literals against a column with affinity NONE
+  test_bool types2-5.16 {o1='10.0'} {o1 IN (10.0, 20)} 0
+  test_bool types2-5.17 {o1='10.0'} {o1 IN (10, 20)} 0
+  test_bool types2-5.18 {o1='10'} {o1 IN (10.0, 20)} 0
+  test_bool types2-5.19 {o1='10'} {o1 IN (20, '10.0')} 0
+  test_bool types2-5.20 {o1=10} {o1 IN (20, '10')} 0
+  test_bool types2-5.21 {o1='10.0'} {o1 IN (10, 20, '10.0')} 1
+  test_bool types2-5.22 {o1='10'} {o1 IN (10.0, 20, '10')} 1
+  test_bool types2-5.23 {o1=10} {n1 IN (20, '10', 10)} 1
+}
 
 # Tests named types2-6.* use the same infrastructure as the types2-2.*
 # tests. The contents of the vals array is repeated here for easy 
@@ -236,17 +238,19 @@ test_bool types2-5.23 {o1=10} {n1 IN (20, '10', 10)} 1
 # set vals [list 10 10.0 '10' '10.0' 20 20.0 '20' '20.0' 30 30.0 '30' '30.0']
 #                1  2    3    4      5  6    7    8      9  10   11   12
 
-test_boolset types2-6.1 {o IN ('10', 30)} {3 9 10}
-test_boolset types2-6.2 {o IN (20.0, 30.0)} {5 6 9 10}
-test_boolset types2-6.3 {t IN ('10', 30)} {1 3 9 11}
-test_boolset types2-6.4 {t IN (20.0, 30.0)} {6 8 10 12}
-test_boolset types2-6.5 {n IN ('10', 30)} {1 2 3 4 9 10 11 12}
-test_boolset types2-6.6 {n IN (20.0, 30.0)} {5 6 7 8 9 10 11 12}
-test_boolset types2-6.7 {i IN ('10', 30)} {1 2 3 4 9 10 11 12}
-test_boolset types2-6.8 {i IN (20.0, 30.0)} {5 6 7 8 9 10 11 12}
-
-# Also test than IN(x, y, z) works on a rowid:
-test_boolset types2-6.9 {rowid IN (1, 6, 10)} {1 6 10}
+ifcapable subquery {
+  test_boolset types2-6.1 {o IN ('10', 30)} {3 9 10}
+  test_boolset types2-6.2 {o IN (20.0, 30.0)} {5 6 9 10}
+  test_boolset types2-6.3 {t IN ('10', 30)} {1 3 9 11}
+  test_boolset types2-6.4 {t IN (20.0, 30.0)} {6 8 10 12}
+  test_boolset types2-6.5 {n IN ('10', 30)} {1 2 3 4 9 10 11 12}
+  test_boolset types2-6.6 {n IN (20.0, 30.0)} {5 6 7 8 9 10 11 12}
+  test_boolset types2-6.7 {i IN ('10', 30)} {1 2 3 4 9 10 11 12}
+  test_boolset types2-6.8 {i IN (20.0, 30.0)} {5 6 7 8 9 10 11 12}
+
+  # Also test than IN(x, y, z) works on a rowid:
+  test_boolset types2-6.9 {rowid IN (1, 6, 10)} {1 6 10}
+}
 
 # Tests types2-7.* concentrate on expressions of the form 
 # "x IN (SELECT...)" with no index.
@@ -259,29 +263,31 @@ execsql {
   INSERT INTO t3 VALUES('1.0', '1.0', '1.0', '1.0');
 }
 
-test_bool types2-7.1 {i1=1} {i1 IN (SELECT i FROM t3)} 1
-test_bool types2-7.2 {i1='2.0'} {i1 IN (SELECT i FROM t3)} 1
-test_bool types2-7.3 {i1='2.0'} {i1 IN (SELECT n FROM t3)} 1
-test_bool types2-7.4 {i1='2.0'} {i1 IN (SELECT t FROM t3)} 1
-test_bool types2-7.5 {i1='2.0'} {i1 IN (SELECT o FROM t3)} 1
-
-test_bool types2-7.6 {n1=1} {n1 IN (SELECT n FROM t3)} 1
-test_bool types2-7.7 {n1='2.0'} {n1 IN (SELECT i FROM t3)} 1
-test_bool types2-7.8 {n1='2.0'} {n1 IN (SELECT n FROM t3)} 1
-test_bool types2-7.9 {n1='2.0'} {n1 IN (SELECT t FROM t3)} 1
-test_bool types2-7.10 {n1='2.0'} {n1 IN (SELECT o FROM t3)} 1
-
-test_bool types2-7.6 {t1=1} {t1 IN (SELECT t FROM t3)} 1
-test_bool types2-7.7 {t1='2.0'} {t1 IN (SELECT t FROM t3)} 0
-test_bool types2-7.8 {t1='2.0'} {t1 IN (SELECT n FROM t3)} 1
-test_bool types2-7.9 {t1='2.0'} {t1 IN (SELECT i FROM t3)} 1
-test_bool types2-7.10 {t1='2.0'} {t1 IN (SELECT o FROM t3)} 0
-test_bool types2-7.11 {t1='1.0'} {t1 IN (SELECT t FROM t3)} 1
-test_bool types2-7.12 {t1='1.0'} {t1 IN (SELECT o FROM t3)} 1
-
-test_bool types2-7.13 {o1=2} {o1 IN (SELECT o FROM t3)} 1
-test_bool types2-7.14 {o1='2'} {o1 IN (SELECT o FROM t3)} 0
-test_bool types2-7.15 {o1='2'} {o1 IN (SELECT o||'' FROM t3)} 1
+ifcapable subquery {
+  test_bool types2-7.1 {i1=1} {i1 IN (SELECT i FROM t3)} 1
+  test_bool types2-7.2 {i1='2.0'} {i1 IN (SELECT i FROM t3)} 1
+  test_bool types2-7.3 {i1='2.0'} {i1 IN (SELECT n FROM t3)} 1
+  test_bool types2-7.4 {i1='2.0'} {i1 IN (SELECT t FROM t3)} 1
+  test_bool types2-7.5 {i1='2.0'} {i1 IN (SELECT o FROM t3)} 1
+  
+  test_bool types2-7.6 {n1=1} {n1 IN (SELECT n FROM t3)} 1
+  test_bool types2-7.7 {n1='2.0'} {n1 IN (SELECT i FROM t3)} 1
+  test_bool types2-7.8 {n1='2.0'} {n1 IN (SELECT n FROM t3)} 1
+  test_bool types2-7.9 {n1='2.0'} {n1 IN (SELECT t FROM t3)} 1
+  test_bool types2-7.10 {n1='2.0'} {n1 IN (SELECT o FROM t3)} 1
+  
+  test_bool types2-7.6 {t1=1} {t1 IN (SELECT t FROM t3)} 1
+  test_bool types2-7.7 {t1='2.0'} {t1 IN (SELECT t FROM t3)} 0
+  test_bool types2-7.8 {t1='2.0'} {t1 IN (SELECT n FROM t3)} 1
+  test_bool types2-7.9 {t1='2.0'} {t1 IN (SELECT i FROM t3)} 1
+  test_bool types2-7.10 {t1='2.0'} {t1 IN (SELECT o FROM t3)} 0
+  test_bool types2-7.11 {t1='1.0'} {t1 IN (SELECT t FROM t3)} 1
+  test_bool types2-7.12 {t1='1.0'} {t1 IN (SELECT o FROM t3)} 1
+  
+  test_bool types2-7.13 {o1=2} {o1 IN (SELECT o FROM t3)} 1
+  test_bool types2-7.14 {o1='2'} {o1 IN (SELECT o FROM t3)} 0
+  test_bool types2-7.15 {o1='2'} {o1 IN (SELECT o||'' FROM t3)} 1
+}
 
 # set vals [list 10 10.0 '10' '10.0' 20 20.0 '20' '20.0' 30 30.0 '30' '30.0']
 #                1  2    3    4      5  6    7    8      9  10   11   12
@@ -289,17 +295,19 @@ execsql {
   CREATE TABLE t4(i INTEGER, n NUMERIC, t VARCHAR(20), o LARGE BLOB);
   INSERT INTO t4 VALUES(10, 20, 20, 30);
 }
-test_boolset types2-8.1 {i IN (SELECT i FROM t4)} {1 2 3 4}
-test_boolset types2-8.2 {n IN (SELECT i FROM t4)} {1 2 3 4}
-test_boolset types2-8.3 {t IN (SELECT i FROM t4)} {1 2 3 4}
-test_boolset types2-8.4 {o IN (SELECT i FROM t4)} {1 2 3 4}
-test_boolset types2-8.5 {i IN (SELECT t FROM t4)} {5 6 7 8}
-test_boolset types2-8.6 {n IN (SELECT t FROM t4)} {5 6 7 8}
-test_boolset types2-8.7 {t IN (SELECT t FROM t4)} {5 7}
-test_boolset types2-8.8 {o IN (SELECT t FROM t4)} {7}
-test_boolset types2-8.9 {i IN (SELECT o FROM t4)} {9 10 11 12}
-test_boolset types2-8.6 {n IN (SELECT o FROM t4)} {9 10 11 12}
-test_boolset types2-8.7 {t IN (SELECT o FROM t4)} {9 11}
-test_boolset types2-8.8 {o IN (SELECT o FROM t4)} {9 10}
+ifcapable subquery {
+  test_boolset types2-8.1 {i IN (SELECT i FROM t4)} {1 2 3 4}
+  test_boolset types2-8.2 {n IN (SELECT i FROM t4)} {1 2 3 4}
+  test_boolset types2-8.3 {t IN (SELECT i FROM t4)} {1 2 3 4}
+  test_boolset types2-8.4 {o IN (SELECT i FROM t4)} {1 2 3 4}
+  test_boolset types2-8.5 {i IN (SELECT t FROM t4)} {5 6 7 8}
+  test_boolset types2-8.6 {n IN (SELECT t FROM t4)} {5 6 7 8}
+  test_boolset types2-8.7 {t IN (SELECT t FROM t4)} {5 7}
+  test_boolset types2-8.8 {o IN (SELECT t FROM t4)} {7}
+  test_boolset types2-8.9 {i IN (SELECT o FROM t4)} {9 10 11 12}
+  test_boolset types2-8.6 {n IN (SELECT o FROM t4)} {9 10 11 12}
+  test_boolset types2-8.7 {t IN (SELECT o FROM t4)} {9 11}
+  test_boolset types2-8.8 {o IN (SELECT o FROM t4)} {9 10}
+}
 
 finish_test
index 26b8eb987f1c58dead7fe8e7f2490e5918331f16..d56c342a91b680fa2da2ab49b7a690e6158a52f2 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the UPDATE statement.
 #
-# $Id: update.test,v 1.16 2005/01/15 00:40:43 drh Exp $
+# $Id: update.test,v 1.17 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -483,18 +483,20 @@ do_test update-10.10 {
 
 # Make sure we can handle a subquery in the where clause.
 #
-do_test update-11.1 {
-  execsql {
-    UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);
-    SELECT b,e FROM t1;
-  }
-} {2 14 3 7}
-do_test update-11.2 {
-  execsql {
-    UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1);
-    SELECT a,e FROM t1;
-  }
-} {1 15 2 8}
+ifcapable subquery {
+  do_test update-11.1 {
+    execsql {
+      UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);
+      SELECT b,e FROM t1;
+    }
+  } {2 14 3 7}
+  do_test update-11.2 {
+    execsql {
+      UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1);
+      SELECT a,e FROM t1;
+    }
+  } {1 15 2 8}
+}
 
 integrity_check update-12.1
 
index 79c422f16f69397d20586eda169b0d3fbb01ebce..a5dc3e07799f5318f92bfd640f42fcb98ae32b37 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the use of indices in WHERE clases.
 #
-# $Id: where.test,v 1.27 2005/01/11 18:13:57 drh Exp $
+# $Id: where.test,v 1.28 2005/01/21 03:12:16 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -29,8 +29,19 @@ do_test where-1.0 {
     set y [expr {$i*$i + 2*$i + 1}]
     execsql "INSERT INTO t1 VALUES($w,$x,$y)"
   }
+
+  ifcapable subquery {
+    execsql {
+      INSERT INTO t2 SELECT 101-w, x, (SELECT max(y) FROM t1)+1-y, y FROM t1;
+    }
+  } else {
+    set maxy [execsql {select max(y) from t1}]
+    execsql "
+      INSERT INTO t2 SELECT 101-w, x, $maxy+1-y, y FROM t1;
+    "
+  }
+
   execsql {
-    INSERT INTO t2 SELECT 101-w, x, (SELECT max(y) FROM t1)+1-y, y FROM t1;
     CREATE INDEX i1w ON t1(w);
     CREATE INDEX i1xy ON t1(x,y);
     CREATE INDEX i2p ON t2(p);
@@ -291,85 +302,88 @@ do_test where-4.4 {
 } {99}
 
 # Verify that IN operators in a WHERE clause are handled correctly.
+# Omit these tests if the build is not capable of sub-queries.
 #
-do_test where-5.1 {
-  count {
-    SELECT * FROM t1 WHERE rowid IN (1,2,3,1234) order by 1;
-  }
-} {1 0 4 2 1 9 3 1 16 3}
-do_test where-5.2 {
-  count {
-    SELECT * FROM t1 WHERE rowid+0 IN (1,2,3,1234) order by 1;
-  }
-} {1 0 4 2 1 9 3 1 16 199}
-do_test where-5.3 {
-  count {
-    SELECT * FROM t1 WHERE w IN (-1,1,2,3) order by 1;
-  }
-} {1 0 4 2 1 9 3 1 16 13}
-do_test where-5.4 {
-  count {
-    SELECT * FROM t1 WHERE w+0 IN (-1,1,2,3) order by 1;
-  }
-} {1 0 4 2 1 9 3 1 16 199}
-do_test where-5.5 {
-  count {
-    SELECT * FROM t1 WHERE rowid IN 
-       (select rowid from t1 where rowid IN (-1,2,4))
-    ORDER BY 1;
-  }
-} {2 1 9 4 2 25 3}
-do_test where-5.6 {
-  count {
-    SELECT * FROM t1 WHERE rowid+0 IN 
-       (select rowid from t1 where rowid IN (-1,2,4))
-    ORDER BY 1;
-  }
-} {2 1 9 4 2 25 201}
-do_test where-5.7 {
-  count {
-    SELECT * FROM t1 WHERE w IN 
-       (select rowid from t1 where rowid IN (-1,2,4))
-    ORDER BY 1;
-  }
-} {2 1 9 4 2 25 9}
-do_test where-5.8 {
-  count {
-    SELECT * FROM t1 WHERE w+0 IN 
-       (select rowid from t1 where rowid IN (-1,2,4))
-    ORDER BY 1;
-  }
-} {2 1 9 4 2 25 201}
-do_test where-5.9 {
-  count {
-    SELECT * FROM t1 WHERE x IN (1,7) ORDER BY 1;
-  }
-} {2 1 9 3 1 16 7}
-do_test where-5.10 {
-  count {
-    SELECT * FROM t1 WHERE x+0 IN (1,7) ORDER BY 1;
-  }
-} {2 1 9 3 1 16 199}
-do_test where-5.11 {
-  count {
-    SELECT * FROM t1 WHERE y IN (6400,8100) ORDER BY 1;
-  }
-} {79 6 6400 89 6 8100 199}
-do_test where-5.12 {
-  count {
-    SELECT * FROM t1 WHERE x=6 AND y IN (6400,8100) ORDER BY 1;
-  }
-} {79 6 6400 89 6 8100 74}
-do_test where-5.13 {
-  count {
-    SELECT * FROM t1 WHERE x IN (1,7) AND y NOT IN (6400,8100) ORDER BY 1;
-  }
-} {2 1 9 3 1 16 7}
-do_test where-5.14 {
-  count {
-    SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1;
-  }
-} {2 1 9 7}
+ifcapable subquery {
+  do_test where-5.1 {
+    count {
+      SELECT * FROM t1 WHERE rowid IN (1,2,3,1234) order by 1;
+    }
+  } {1 0 4 2 1 9 3 1 16 3}
+  do_test where-5.2 {
+    count {
+      SELECT * FROM t1 WHERE rowid+0 IN (1,2,3,1234) order by 1;
+    }
+  } {1 0 4 2 1 9 3 1 16 199}
+  do_test where-5.3 {
+    count {
+      SELECT * FROM t1 WHERE w IN (-1,1,2,3) order by 1;
+    }
+  } {1 0 4 2 1 9 3 1 16 13}
+  do_test where-5.4 {
+    count {
+      SELECT * FROM t1 WHERE w+0 IN (-1,1,2,3) order by 1;
+    }
+  } {1 0 4 2 1 9 3 1 16 199}
+  do_test where-5.5 {
+    count {
+      SELECT * FROM t1 WHERE rowid IN 
+         (select rowid from t1 where rowid IN (-1,2,4))
+      ORDER BY 1;
+    }
+  } {2 1 9 4 2 25 3}
+  do_test where-5.6 {
+    count {
+      SELECT * FROM t1 WHERE rowid+0 IN 
+         (select rowid from t1 where rowid IN (-1,2,4))
+      ORDER BY 1;
+    }
+  } {2 1 9 4 2 25 201}
+  do_test where-5.7 {
+    count {
+      SELECT * FROM t1 WHERE w IN 
+         (select rowid from t1 where rowid IN (-1,2,4))
+      ORDER BY 1;
+    }
+  } {2 1 9 4 2 25 9}
+  do_test where-5.8 {
+    count {
+      SELECT * FROM t1 WHERE w+0 IN 
+         (select rowid from t1 where rowid IN (-1,2,4))
+      ORDER BY 1;
+    }
+  } {2 1 9 4 2 25 201}
+  do_test where-5.9 {
+    count {
+      SELECT * FROM t1 WHERE x IN (1,7) ORDER BY 1;
+    }
+  } {2 1 9 3 1 16 7}
+  do_test where-5.10 {
+    count {
+      SELECT * FROM t1 WHERE x+0 IN (1,7) ORDER BY 1;
+    }
+  } {2 1 9 3 1 16 199}
+  do_test where-5.11 {
+    count {
+      SELECT * FROM t1 WHERE y IN (6400,8100) ORDER BY 1;
+    }
+  } {79 6 6400 89 6 8100 199}
+  do_test where-5.12 {
+    count {
+      SELECT * FROM t1 WHERE x=6 AND y IN (6400,8100) ORDER BY 1;
+    }
+  } {79 6 6400 89 6 8100 74}
+  do_test where-5.13 {
+    count {
+      SELECT * FROM t1 WHERE x IN (1,7) AND y NOT IN (6400,8100) ORDER BY 1;
+    }
+  } {2 1 9 3 1 16 7}
+  do_test where-5.14 {
+    count {
+      SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1;
+    }
+  } {2 1 9 7}
+}
 
 # This procedure executes the SQL.  Then it checks to see if the OP_Sort
 # opcode was executed.  If an OP_Sort did occur, then "sort" is appended
@@ -428,11 +442,13 @@ do_test where-6.7 {
     SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 3
   }
 } {1 100 4 2 99 9 3 98 16 sort}
-do_test where-6.8 {
-  cksort {
-    SELECT * FROM t3 WHERE a IN (3,5,7,1,9,4,2) ORDER BY a LIMIT 3
-  }
-} {1 100 4 2 99 9 3 98 16 sort}
+ifcapable subquery {
+  do_test where-6.8 {
+    cksort {
+      SELECT * FROM t3 WHERE a IN (3,5,7,1,9,4,2) ORDER BY a LIMIT 3
+    }
+  } {1 100 4 2 99 9 3 98 16 sort}
+}
 do_test where-6.9.1 {
   cksort {
     SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a LIMIT 3