From 5436dc2d9747bb7977b571916270373510fb110a Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 14 Nov 2004 04:04:17 +0000 Subject: [PATCH] Changes toward reducing code size when SQLITE_OMIT_UTF16 is enabled. (CVS 2099) FossilOrigin-Name: 59a0a8b7cebc011731654bd0545cf8d19612ca8e --- manifest | 22 ++++----- manifest.uuid | 2 +- src/test1.c | 26 +++++++++- test/autovacuum.test | 28 ++++++----- test/capi3.test | 110 +++++++++++++++++++++++++------------------ test/enc2.test | 9 +++- test/interrupt.test | 4 +- test/tester.tcl | 5 +- 8 files changed, 127 insertions(+), 79 deletions(-) diff --git a/manifest b/manifest index b2a737ba5f..22389313d9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C More\scompile-time\soptions\sfor\sremoving\scomponents.\s(CVS\s2098) -D 2004-11-13T15:59:15 +C Changes\stoward\sreducing\scode\ssize\swhen\sSQLITE_OMIT_UTF16\sis\senabled.\s(CVS\s2099) +D 2004-11-14T04:04:17 F Makefile.in c4d2416860f472a1e3393714d0372074197565df F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 @@ -64,7 +64,7 @@ F src/sqlite.h.in a44eac0716bf4751447160d5c8ed049ece66d45a F src/sqliteInt.h 8569ce94e891a854de71d7bd628da1d25ee6dfe4 F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9 F src/tclsqlite.c 7f1a1a678140e6901c8954590ca2aabe50b48f71 -F src/test1.c 4d671e27cc8f27869786110824d23408622b2aa9 +F src/test1.c af2cc6864464b18675c9bdbb02142d765f2f0c6d F src/test2.c b11fa244fff02190707dd0879987c37c75e61fc8 F src/test3.c 6f1ec93e13632a004b527049535079eda84c459d F src/test4.c 7c6b9fc33dd1f3f93c7f1ee6e5e6d016afa6c1df @@ -89,7 +89,7 @@ F test/attach2.test 399128a7b3b209a339a8dbf53ca2ed42eb982d1a F test/attach3.test 8a0309e284cf9aa1d7d6cc444989031881f7a21c F test/auth.test cf13e449cb253f75d6584b376202c94bbdd53ec9 F test/autoinc.test 11330758197e0301d3600a071230d45b2f6a65b7 -F test/autovacuum.test e52b8fab3b82f6b51b7fde5b7140827ce8e86b1c +F test/autovacuum.test d0517eb9fa7bb12c9e7f3b5d6fd4275d22e57c15 F test/autovacuum_crash.test 2dca85cbcc497098e45e8847c86407eb3554f3d4 F test/bigfile.test d3744a8821ce9abb8697f2826a3e3d22b719e89f F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747 @@ -103,7 +103,7 @@ F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027 F test/btree7.test a6d3b842db22af97dd14b989e90a2fd96066b72f F test/btree8.test eee59cfd3a0151adbc7d85e5373f31ae6d4c3061 F test/capi2.test 1ec97bf8896185aec2366c7d07b01edef6ae4b7e -F test/capi3.test 9258ca75fc98d89477015dcd70aa3d2757b142b8 +F test/capi3.test 1e15509a61fa93ef637ec9c2a3fc93bc1d971a3b F test/capi3b.test 5b6a66f9f295f79f443b5d3f33187fa5ef6cf336 F test/collate1.test f79736d2ebf5492167ee4d1f4ab4c09dda776b03 F test/collate2.test 12fd658d8f5106a8a5c8a77d66919d8c89394036 @@ -120,7 +120,7 @@ F test/delete.test fc29491f6a7ac899ce29f4549a104809e245d9a6 F test/delete2.test 1d3f99f52f50eb6ed10c803f80540a6857307a7d F test/diskfull.test e2f6cfd868713ead06dc82b84a4938e868128fc0 F test/enc.test 2f5463af488d50aef60c6110bec6b21b5efba961 -F test/enc2.test ca80d1f07484d66b5e407eb833da1e7fb74e2e8d +F test/enc2.test 6d1a2650e9da43eab499d18ca694a0cb6ec69dee F test/enc3.test a96f4a7c44bac4d63bdc4ff422b8049912083998 F test/expr.test 20ddaf66c7ab673c1d0c953889e3466139256f9a F test/fkey1.test 81bb13caaa78f58d7d191d7f535529f7c91d821a @@ -130,7 +130,7 @@ F test/in.test b92a2df9162e1cbd33c6449a29a05e6955b1741a F test/index.test 5776a3ebcbe0bdc69e7eeaeb5e95dfba6b17389e F test/insert.test 56f9c20c9adc8d707490c4ffa5d4daa94826ea03 F test/insert2.test 614a29d3ed7dd0d8644a059c6d8ce742c63a734a -F test/interrupt.test 3b78c7c1a466fc3989eb376d5ea56099810a835d +F test/interrupt.test 0aa230f8aedec0ad7caaf5edaced337e4cfb3820 F test/intpkey.test b57cf5236fde1bd8cbc1388fa0c91908f6fd9194 F test/ioerr.test 3ce897ee998ee874073f3b23b0396d9ff804759c F test/join.test 9ef6aabaac9de51d5fc41e68d1f4355da05a84cd @@ -180,7 +180,7 @@ F test/table.test 87a6219c784722249a2f604b6495ce171ca2588a F test/tableapi.test b21ab097e87a5484bb61029e69e1a4e5c5e65ede F test/tclsqlite.test 5e262df81a638a058536fb6d6666f316843ac7b2 F test/temptable.test 63a16e3ad19adf073cfbcdf7624c92ac5236522c -F test/tester.tcl 9bd005b223871bceb4733d453f90df66ff39be5b +F test/tester.tcl e7ebedf60c8ebbb0a9af4950981babfbb80cc9a7 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35 F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b F test/threadtest2.c 97a830d53c24c42290501fdfba4a6e5bdd34748b @@ -258,7 +258,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl fdacb0ba2d39831e8a6240d05a490026ad4c4e4c -P 5eaa18d43f2996a9d354bb4fb9c81e267e98be29 -R 7bedbeea778ef4d3e2b1635c460d0010 +P dcbc0c22cf269e2f67002aa3f1bc0c66aaeff5f1 +R b20243043da42c552406a47e684bc877 U drh -Z cd7be5fd7726d4f38a75365a78354a97 +Z 6d564933ddae0997ba41ac32b88f3e8b diff --git a/manifest.uuid b/manifest.uuid index 01e5485979..05d69da911 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dcbc0c22cf269e2f67002aa3f1bc0c66aaeff5f1 \ No newline at end of file +59a0a8b7cebc011731654bd0545cf8d19612ca8e \ No newline at end of file diff --git a/src/test1.c b/src/test1.c index 7966c76f82..091dae2035 100644 --- a/src/test1.c +++ b/src/test1.c @@ -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.112 2004/11/13 15:59:15 drh Exp $ +** $Id: test1.c,v 1.113 2004/11/14 04:04:17 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -490,6 +490,7 @@ static int test_create_function( rc = sqlite3_create_function(db, "x_coalesce", -1, SQLITE_ANY, 0, ifnullFunc, 0, 0); +#ifndef SQLITE_OMIT_UTF16 /* Use the sqlite3_create_function16() API here. Mainly for fun, but also ** because it is not tested anywhere else. */ if( rc==SQLITE_OK ){ @@ -500,6 +501,8 @@ static int test_create_function( 1, SQLITE_UTF16, db, sqlite3ExecFunc, 0, 0); sqlite3ValueFree(pVal); } +#endif + if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR; return TCL_OK; } @@ -1005,7 +1008,7 @@ static int test_bind( return TCL_OK; } - +#ifndef SQLITE_OMIT_UTF16 /* ** Usage: add_test_collate ** @@ -1148,6 +1151,7 @@ bad_args: Tcl_WrongNumArgs(interp, 1, objv, "DB"); return TCL_ERROR; } +#endif /* SQLITE_OMIT_UTF16 */ /* ** Usage: add_test_function @@ -1174,6 +1178,7 @@ bad_args: ** for a UTF-16LE test_function(), and UTF-16LE for an implementation that ** prefers UTF-16BE. */ +#ifndef SQLITE_OMIT_UTF16 static void test_function_utf8( sqlite3_context *pCtx, int nArg, @@ -1243,12 +1248,14 @@ static void test_function_utf16be( -1, SQLITE_TRANSIENT); sqlite3ValueFree(pVal); } +#endif /* SQLITE_OMIT_UTF16 */ static int test_function( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 sqlite3 *db; int val; @@ -1275,6 +1282,7 @@ static int test_function( bad_args: Tcl_AppendResult(interp, "wrong # args: should be \"", Tcl_GetStringFromObj(objv[0], 0), " ", 0); +#endif /* SQLITE_OMIT_UTF16 */ return TCL_ERROR; } @@ -1553,6 +1561,7 @@ static int test_bind_text16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 sqlite3_stmt *pStmt; int idx; int bytes; @@ -1576,6 +1585,7 @@ static int test_bind_text16( return TCL_ERROR; } +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -1760,6 +1770,7 @@ static int test_errmsg16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 sqlite3 *db; const void *zErr; int bytes; @@ -1774,6 +1785,7 @@ static int test_errmsg16( zErr = sqlite3_errmsg16(db); bytes = sqlite3utf16ByteLen(zErr, -1); Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(zErr, bytes)); +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -1844,6 +1856,7 @@ static int test_prepare16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 sqlite3 *db; const void *zSql; const void *zTail = 0; @@ -1883,6 +1896,7 @@ static int test_prepare16( if( makePointerStr(interp, zBuf, pStmt) ) return TCL_ERROR; } Tcl_AppendResult(interp, zBuf, 0); +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -1923,6 +1937,7 @@ static int test_open16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 const void *zFilename; sqlite3 *db; int rc; @@ -1939,6 +1954,7 @@ static int test_open16( if( makePointerStr(interp, zBuf, db) ) return TCL_ERROR; Tcl_AppendResult(interp, zBuf, 0); +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -1954,6 +1970,7 @@ static int test_complete16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 char *zBuf; if( objc!=2 ){ @@ -1963,6 +1980,7 @@ static int test_complete16( zBuf = Tcl_GetByteArrayFromObj(objv[1], 0); Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_complete16(zBuf))); +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -2227,6 +2245,7 @@ static int test_stmt_utf16( int objc, Tcl_Obj *CONST objv[] ){ +#ifndef SQLITE_OMIT_UTF16 sqlite3_stmt *pStmt; int col; Tcl_Obj *pRet; @@ -2247,6 +2266,7 @@ static int test_stmt_utf16( pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2); Tcl_SetObjResult(interp, pRet); } +#endif /* SQLITE_OMIT_UTF16 */ return TCL_OK; } @@ -2721,9 +2741,11 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ /* Custom test interfaces */ { "sqlite3OsUnlock", test_sqlite3OsUnlock, 0 }, +#ifndef SQLITE_OMIT_UTF16 { "add_test_collate", test_collate, 0 }, { "add_test_collate_needed", test_collate_needed, 0 }, { "add_test_function", test_function, 0 }, +#endif { "sqlite3_crashparams", sqlite3_crashparams, 0 }, { "sqlite3_test_errstr", test_errstr, 0 }, { "tcl_variable_type", tcl_variable_type, 0 }, diff --git a/test/autovacuum.test b/test/autovacuum.test index 2a27d0856d..1a49615e82 100644 --- a/test/autovacuum.test +++ b/test/autovacuum.test @@ -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.11 2004/11/10 15:27:38 danielk1977 Exp $ +# $Id: autovacuum.test,v 1.12 2004/11/14 04:04:18 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -82,11 +82,13 @@ foreach delete_order $delete_orders { } # Make sure the integrity check passes with the initial data. - do_test autovacuum-1.$tn.1 { - execsql { - pragma integrity_check - } - } {ok} + ifcapable {integrityck} { + do_test autovacuum-1.$tn.1 { + execsql { + pragma integrity_check + } + } {ok} + } # set btree_trace 1 foreach delete $delete_order { @@ -98,12 +100,13 @@ foreach delete_order $delete_orders { } {} # Do the integrity check. - do_test autovacuum-1.$tn.($delete).2 { - execsql { - pragma integrity_check - } - } {ok} - + ifcapable {integrityck} { + do_test autovacuum-1.$tn.($delete).2 { + execsql { + pragma integrity_check + } + } {ok} + } # Ensure the data remaining in the table is what was expected. foreach d $delete { set idx [lsearch $::tbl_data [make_str $d $ENTRY_LEN]] @@ -486,4 +489,3 @@ do_test autovacuum-3.7 { } [expr $AUTOVACUUM?1:2] finish_test - diff --git a/test/capi3.test b/test/capi3.test index b2c2f7ee48..6f30caa6bf 100644 --- a/test/capi3.test +++ b/test/capi3.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script testing the callback-free C/C++ API. # -# $Id: capi3.test,v 1.21 2004/09/02 14:57:09 drh Exp $ +# $Id: capi3.test,v 1.22 2004/11/14 04:04:18 drh Exp $ # set testdir [file dirname $argv0] @@ -84,6 +84,7 @@ do_test capi3-1.7 { sqlite3_errmsg $DB } {no such column: namex} +ifcapable {utf16} { do_test capi3-2.1 { set sql16 [utf16 {SELECT name FROM sqlite_master}] set STMT [sqlite3_prepare16 $DB $sql16 -1 ::TAIL] @@ -108,6 +109,7 @@ do_test capi3-2.4 { do_test capi3-2.5 { sqlite3_errmsg $DB } {no such column: namex} +} ;# endif utf16 # rename sqlite3_open sqlite3_open_old # proc sqlite3_open {fname options} {sqlite3_open_new $fname $options} @@ -132,19 +134,22 @@ do_test capi3-3.4 { do_test capi3-3.5 { sqlite3_close $db2 } {SQLITE_OK} -do_test capi3-3.6 { +do_test capi3-3.6.1 { sqlite3_close $db2 } {SQLITE_MISUSE} -do_test capi3-3.6 { +do_test capi3-3.6.2 { sqlite3_errmsg $db2 } {library routine called out of sequence} -do_test capi3-3.6 { - utf8 [sqlite3_errmsg16 $db2] -} {library routine called out of sequence} +ifcapable {utf16} { + do_test capi3-3.6.3 { + utf8 [sqlite3_errmsg16 $db2] + } {library routine called out of sequence} +} # rename sqlite3_open "" # rename sqlite3_open_old sqlite3_open +ifcapable {utf16} { do_test capi3-4.1 { set db2 [sqlite3_open16 [utf16 test.db] {}] sqlite3_errcode $db2 @@ -165,6 +170,7 @@ do_test capi3-4.4 { do_test capi3-4.5 { sqlite3_close $db2 } {SQLITE_OK} +} ;# utf16 # This proc is used to test the following API calls: # @@ -201,13 +207,15 @@ proc check_header {STMT test names decltypes} { } $names # Column names in UTF-16 - do_test $test.2 { - set cnamelist [list] - foreach i $idxlist { - lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]] - } - set cnamelist - } $names + ifcapable {utf16} { + do_test $test.2 { + set cnamelist [list] + foreach i $idxlist { + lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]] + } + set cnamelist + } $names + } # Column names in UTF-8 do_test $test.3 { @@ -217,13 +225,15 @@ proc check_header {STMT test names decltypes} { } $names # Column names in UTF-16 - do_test $test.4 { - set cnamelist [list] - foreach i $idxlist { - lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]] - } - set cnamelist - } $names + ifcapable {utf16} { + do_test $test.4 { + set cnamelist [list] + foreach i $idxlist { + lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]] + } + set cnamelist + } $names + } # Column names in UTF-8 do_test $test.5 { @@ -233,27 +243,31 @@ proc check_header {STMT test names decltypes} { } $decltypes # Column declaration types in UTF-16 - do_test $test.6 { - set cnamelist [list] - foreach i $idxlist { - lappend cnamelist [utf8 [sqlite3_column_decltype16 $STMT $i]] - } - set cnamelist - } $decltypes + ifcapable {utf16} { + do_test $test.6 { + set cnamelist [list] + foreach i $idxlist { + lappend cnamelist [utf8 [sqlite3_column_decltype16 $STMT $i]] + } + set cnamelist + } $decltypes + } # Test some out of range conditions: - do_test $test.7 { - list \ - [sqlite3_column_name $STMT -1] \ - [sqlite3_column_name16 $STMT -1] \ - [sqlite3_column_decltype $STMT -1] \ - [sqlite3_column_decltype16 $STMT -1] \ - [sqlite3_column_name $STMT $numcols] \ - [sqlite3_column_name16 $STMT $numcols] \ - [sqlite3_column_decltype $STMT $numcols] \ - [sqlite3_column_decltype16 $STMT $numcols] - } {{} {} {} {} {} {} {} {}} + ifcapable {utf16} { + do_test $test.7 { + list \ + [sqlite3_column_name $STMT -1] \ + [sqlite3_column_name16 $STMT -1] \ + [sqlite3_column_decltype $STMT -1] \ + [sqlite3_column_decltype16 $STMT -1] \ + [sqlite3_column_name $STMT $numcols] \ + [sqlite3_column_name16 $STMT $numcols] \ + [sqlite3_column_decltype $STMT $numcols] \ + [sqlite3_column_decltype16 $STMT $numcols] + } {{} {} {} {} {} {} {} {}} + } } @@ -352,11 +366,13 @@ do_test $test.7 { } $doubles # UTF-16 -do_test $test.8 { - set utf8 [list] - foreach i $idxlist {lappend utf8 [utf8 [sqlite3_column_text16 $STMT $i]]} - set utf8 -} $strings +ifcapable {utf16} { + do_test $test.8 { + set utf8 [list] + foreach i $idxlist {lappend utf8 [utf8 [sqlite3_column_text16 $STMT $i]]} + set utf8 + } $strings +} # Integers do_test $test.9 { @@ -601,9 +617,11 @@ do_test capi3-10-1 { do_test capi3-10-2 { sqlite3_errmsg $::DB } {out of memory} -do_test capi3-10-3 { - utf8 [sqlite3_errmsg16 $::DB] -} {out of memory} +ifcapable {utf16} { + do_test capi3-10-3 { + utf8 [sqlite3_errmsg16 $::DB] + } {out of memory} +} db close sqlite_malloc_fail 0 } diff --git a/test/enc2.test b/test/enc2.test index d39704a7ac..4931783d85 100644 --- a/test/enc2.test +++ b/test/enc2.test @@ -13,11 +13,18 @@ # various suported unicode encodings (UTF-8, UTF-16, UTF-16le and # UTF-16be). # -# $Id: enc2.test,v 1.18 2004/11/10 15:27:38 danielk1977 Exp $ +# $Id: enc2.test,v 1.19 2004/11/14 04:04:18 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl +# If UTF16 support is disabled, ignore the tests in this file +# +ifcapable {!utf16} { + finish_test + return +} + # The rough organisation of tests in this file is: # # enc2.1.*: Simple tests with a UTF-8 db. diff --git a/test/interrupt.test b/test/interrupt.test index 339e406e24..1d7f0da7af 100644 --- a/test/interrupt.test +++ b/test/interrupt.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is the sqlite_interrupt() API. # -# $Id: interrupt.test,v 1.7 2004/11/10 15:27:38 danielk1977 Exp $ +# $Id: interrupt.test,v 1.8 2004/11/14 04:04:18 drh Exp $ set testdir [file dirname $argv0] @@ -102,7 +102,7 @@ do_test interrupt-2.3 { SELECT md5sum(a || b) FROM t1; } } $cksum -ifcapable vacuum&&!$AUTOVACUUM { +ifcapable {vacuum && !default_autovacuum} { do_test interrupt-2.4 { expr {$::origsize>[file size test.db]} } 1 diff --git a/test/tester.tcl b/test/tester.tcl index 6657c91674..43599e3306 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -11,7 +11,7 @@ # This file implements some common TCL routines used for regression # testing the SQLite library # -# $Id: tester.tcl,v 1.41 2004/11/10 15:27:38 danielk1977 Exp $ +# $Id: tester.tcl,v 1.42 2004/11/14 04:04:18 drh Exp $ # Make sure tclsqlite3 was compiled correctly. Abort now with an # error message if not. @@ -241,7 +241,7 @@ proc integrity_check {name} { # code. Omit the code if false. # proc ifcapable {expr code} { - regsub -all {[a-z_]+} $expr {$::sqlite_options(&)} e2 + regsub -all {[a-z_0-9]+} $expr {$::sqlite_options(&)} e2 if !($e2) return return -code [catch {uplevel 1 $code}] } @@ -249,4 +249,3 @@ proc ifcapable {expr code} { # If the library is compiled with the SQLITE_DEFAULT_AUTOVACUUM macro set # to non-zero, then set the global variable $AUTOVACUUM to 1. set AUTOVACUUM $sqlite_options(default_autovacuum) -