Improvements to test coverage in the lemon-generated parser and in the
sqlite3_get_table() interface. (CVS 4745)
FossilOrigin-Name: 9f95d79daeb5e7f6fd62f3c896dae4d332121d1c
diff --git a/manifest b/manifest
index 3c34ec2..b904ecd 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Make\ssqlite3SafetyOn()\sand\ssqlite3SafetyOff()\smacros\swhich\sdisappear\swhen\ncompiling\swithout\s-DSQLITE_DEBUG=1.\s(CVS\s4744)
-D 2008-01-23T03:03:05
+C Improvements\sto\stest\scoverage\sin\sthe\slemon-generated\sparser\sand\sin\sthe\nsqlite3_get_table()\sinterface.\s(CVS\s4745)
+D 2008-01-23T12:52:41
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in bc2b5df3e3d0d4b801b824b7ef6dec43812b049b
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -82,7 +82,7 @@
F src/analyze.c 13d64eeba3f49c3096abba96e38b898018afd504
F src/attach.c 2a0b199467c6c0212fae26a6b51bef132680f881
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
-F src/btmutex.c 5d39da37c9d1282f3c6f9967afae6a34ee36b7ff
+F src/btmutex.c 483ced3c52205b04b97df69161fadbf87f4f1ea2
F src/btree.c a3125bd53a4112f2f259af858ef2eff63e397c9b
F src/btree.h 19dcf5ad23c17b98855da548e9a8e3eb4429d5eb
F src/btreeInt.h 1c5a9da165718ef7de81e35ce9ab5d9ba9283f76
@@ -102,7 +102,7 @@
F src/legacy.c 4ac53191fad2e3c4d59bde1228879b2dc5a96d66
F src/limits.h 71ab25f17e35e0a9f3f6f234b8ed49cc56731d35
F src/loadext.c d17a0f760d6866aacf5262f97d8efaaad379cdd7
-F src/main.c a85079f79c2b47e704ea644773c610f9fd5cdf7d
+F src/main.c 2d4b0de4bcc2a976b638a0b72947ad363b763ca2
F src/malloc.c 60e392a4c12c839517f9b0db7b995f825444fb35
F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217
F src/mem1.c 6d1a11864963d249c67e72ad5f6533b040333880
@@ -139,7 +139,7 @@
F src/sqlite3ext.h a93f59cdee3638dc0c9c086f80df743a4e68c3cb
F src/sqliteInt.h 9d87dc3aa23d78567e8f83c99dd991ea88e303fe
F src/sqliteLimit.h ee4430f88f69bf63527967bb35ca52af7b0ccb1e
-F src/table.c 1aeb9eab57b4235db86fe15a35dec76fb445a9c4
+F src/table.c e97099ce0e442930ed9dbfd95072eccd70ab499a
F src/tclsqlite.c 9923abeffc9b3d7dad58e92b319661521f60debf
F src/test1.c 0040e28115047a50dde02383658f6b25ecbbcb42
F src/test2.c 77b34303883b9d722c65a6879bb0163a400e3789
@@ -149,11 +149,11 @@
F src/test6.c f8b34a6ff04937092327798ddf0ab46863535bc5
F src/test7.c acec2256c7c2d279db5a8b5fa1a2a68fcc942c67
F src/test8.c cab3f576353dfef4877c7cc3b0d0e48acc65c37c
-F src/test9.c b46c8fe02ac7cca1a7316436d8d38d50c66f4b2f
+F src/test9.c 4615ef08750245a2d96aaa7cbe2fb4aff2b57acc
F src/test_async.c 5f21392d66869a4c87dc9153e40d0dc0e085261f
F src/test_autoext.c 855157d97aa28cf84233847548bfacda21807436
F src/test_btree.c c1308ba0b88ab577fa56c9e493a09829dfcded9c
-F src/test_config.c a3ac9faf2e3c032bb0bdb9e3f2fd36a1e17a6cce
+F src/test_config.c e7db7a46833d0df98ae6c9a11f70dada1bcca249
F src/test_devsym.c fd8884c2269fb7e0db2c52d21ec59d31a33790ba
F src/test_hexio.c 1a1cd8324d57585ea86b922f609fa1fbaaf9662d
F src/test_loadext.c 22065d601a18878e5542191001f0eaa5d77c0ed8
@@ -179,7 +179,7 @@
F src/vdbefifo.c 334c838c8f42d61a94813d136019ee566b5dc2f6
F src/vdbemem.c 79ec9d0d15167baafde2259dddde2a67bd21bcd7
F src/vtab.c dc8947c9c79780b19ee6d6bae4ea624a2a303353
-F src/where.c b6c296c5f4a584d837ee1117b31a7e63253aa295
+F src/where.c 7ff0ca021cc77086e367ed3b6308fbc6bc9e1a31
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/all.test d12210212bada2bde6d5aeb90969b86c1aa977d2
@@ -236,7 +236,7 @@
F test/collate8.test 7ed2461305ac959886a064dc1e3cf15e155a183f
F test/collate9.test 0867eabc1222ab0bc308fc09a7fb30770334c3cd
F test/collateA.test 84ff3239d530c1a2c784159594b2ae05238e3ff7
-F test/colmeta.test 6505c73ab58796afcb7c89ba9f429d573fbc6e53
+F test/colmeta.test 087c42997754b8c648819832241daf724f813322
F test/conflict.test bb29b052c60a1f7eb6382be77902061d1f305318
F test/corrupt.test 18c7a995b1af76a8c8600b996257f2c7b7bff083
F test/corrupt2.test 572f8df0303d0ce63ddad5c5c9101a83a345ae46
@@ -358,7 +358,7 @@
F test/journal1.test 36f2d1bb9bf03f790f43fbdb439e44c0657fab19
F test/lastinsert.test 474d519c68cb79d07ecae56a763aa7f322c72f51
F test/laststmtchanges.test 18ead86c8a87ade949a1d5658f6dc4bb111d1b02
-F test/like.test 2a2cd2d67ea43526b97c001304a6311717331a6a
+F test/like.test d2d5efc471db314f662a6f0cfa52c6ec2d4fed8b
F test/limit.test ca61a9fc520f54470edb3a771167fe4b68abc247
F test/loadext.test 1911e7365a6d31d77ba00dd3a8a31b7f2111a670
F test/loadext2.test 95ca7e2cb03fd3e068de97c3a2fe58dbdfd769e1
@@ -383,7 +383,7 @@
F test/mallocD.test 24c1d07a00e605831d0d627b036bd690b2952416
F test/mallocE.test e15333c394d7c330c8372a7cdf7b0f7c16573082
F test/mallocF.test 6f25bc474f2b29954e5fac274d0e6ed9d86efea5
-F test/mallocG.test ac896f96098a30ed0dcc001b6f9243770a463081
+F test/mallocG.test 5d88decca0444424d7c8d8e156ed1cdf2dfc67d0
F test/malloc_common.tcl 5c5f7ee985c9ef3480f441efb6329aeefbf9380c
F test/manydb.test 8de36b8d33aab5ef295b11d9e95310aeded31af8
F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893
@@ -395,9 +395,9 @@
F test/misc2.test 1ee89298de9c16b61454658b24999c403e86afe4
F test/misc3.test aea079f4c3d93e9962186f45c0ff0954310e6b11
F test/misc4.test 91e8ed25c092c2bb4e0bb01864631e2930f8d7de
-F test/misc5.test b0b4b7e0dd5d40335c8e849e5738d11a40bddc7c
+F test/misc5.test c1bc7b8cbc6694dccfc4c0b03c00c8f2dc55c46b
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
-F test/misc7.test b7f829bc371981503de5229683c078e793c39c96
+F test/misc7.test 3ec53989ddfa30f0ef68757dd04726c9896376c0
F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33
F test/notnull.test 44d600f916b770def8b095a9962dbe3be5a70d82
F test/null.test a8b09b8ed87852742343b33441a9240022108993
@@ -450,7 +450,7 @@
F test/substr.test 4be572ac017143e59b4058dc75c91a0d0dc6d4e0
F test/sync.test ded6b39d8d8ca3c0c5518516c6371b3316d3e3a3
F test/table.test 13b1c2e2fb4727b35ee1fb7641fc469214fd2455
-F test/tableapi.test 92651a95c23cf955e92407928e640536402fa3cc
+F test/tableapi.test f6d07b9d63c3b0a5d09166d9bbd741e52d4ef309
F test/tclsqlite.test 3fac87cb1059c46b8fa8a60b553f4f1adb0fb6d9
F test/temptable.test 19b851b9e3e64d91e9867619b2a3f5fffee6e125
F test/tester.tcl 6a6600646341b910f2fbfd02db1ef0274479366c
@@ -538,7 +538,7 @@
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
F tool/lemon.c 5d1731de7eb31238e42ff424c0c78efb4a7be635
-F tool/lempar.c 2dafd3da7fba7ccecc3af58fb512f0cbfb8058a4
+F tool/lempar.c ac41fdc42337c0831fa4c7c848801dccb3fbdd4d
F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133
F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8
F tool/memleak3.tcl 7707006ee908cffff210c98158788d85bb3fcdbf
@@ -614,7 +614,7 @@
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P c82033faf8bdb83ce43f0dd1611408e7796d53de
-R a7bab11a5203e06d1125cf46686f1cb9
+P 5375ad6b4b652f388469b0ce4e8e78b3f49169bd
+R cb7fa5e7c3a95c6765c29d29026204b1
U drh
-Z 6af45d96f0c2b29ef6c64bd43b03c5c9
+Z cad27d1b994b4367a16598d68d423c30
diff --git a/manifest.uuid b/manifest.uuid
index 804cd6b..5d8371c 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-5375ad6b4b652f388469b0ce4e8e78b3f49169bd
\ No newline at end of file
+9f95d79daeb5e7f6fd62f3c896dae4d332121d1c
\ No newline at end of file
diff --git a/src/btmutex.c b/src/btmutex.c
index 36c22e8..58a1b56 100644
--- a/src/btmutex.c
+++ b/src/btmutex.c
@@ -10,7 +10,7 @@
**
*************************************************************************
**
-** $Id: btmutex.c,v 1.8 2007/12/07 18:55:28 drh Exp $
+** $Id: btmutex.c,v 1.9 2008/01/23 12:52:41 drh Exp $
**
** This file contains code used to implement mutexes on Btree objects.
** This code really belongs in btree.c. But btree.c is getting too
@@ -61,6 +61,7 @@
p->wantToLock++;
if( p->locked ) return;
+#ifndef SQLITE_MUTEX_NOOP
/* In most cases, we should be able to acquire the lock we
** want without having to go throught the ascending lock
** procedure that follows. Just be sure not to block.
@@ -92,6 +93,7 @@
pLater->locked = 1;
}
}
+#endif /* SQLITE_MUTEX_NOOP */
}
/*
diff --git a/src/main.c b/src/main.c
index 2d9d2ca..bc79451 100644
--- a/src/main.c
+++ b/src/main.c
@@ -14,7 +14,7 @@
** other files are for internal use by SQLite and should not be
** accessed by users of the library.
**
-** $Id: main.c,v 1.413 2008/01/23 03:03:05 drh Exp $
+** $Id: main.c,v 1.414 2008/01/23 12:52:41 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@@ -374,9 +374,6 @@
int (*xBusy)(void*,int),
void *pArg
){
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
sqlite3_mutex_enter(db->mutex);
db->busyHandler.xFunc = xBusy;
db->busyHandler.pArg = pArg;
@@ -419,9 +416,6 @@
** specified number of milliseconds before returning 0.
*/
int sqlite3_busy_timeout(sqlite3 *db, int ms){
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
if( ms>0 ){
db->busyTimeout = ms;
sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
@@ -461,9 +455,6 @@
int nName;
assert( sqlite3_mutex_held(db->mutex) );
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
if( zFunctionName==0 ||
(xFunc && (xFinal || xStep)) ||
(!xFunc && (xFinal && !xStep)) ||
@@ -849,12 +840,12 @@
** passed to this function, we assume a malloc() failed during sqlite3_open().
*/
int sqlite3_errcode(sqlite3 *db){
- if( !db || db->mallocFailed ){
- return SQLITE_NOMEM;
- }
if( !sqlite3SafetyCheckSickOrOk(db) ){
return SQLITE_MISUSE;
}
+ if( !db || db->mallocFailed ){
+ return SQLITE_NOMEM;
+ }
return db->errCode & db->errMask;
}
@@ -873,9 +864,6 @@
CollSeq *pColl;
int enc2;
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
assert( sqlite3_mutex_held(db->mutex) );
/* If SQLITE_UTF16 is specified as the encoding type, transform this
@@ -1217,7 +1205,7 @@
int(*xCompare)(void*,int,const void*,int,const void*)
){
int rc = SQLITE_OK;
- char *zName8;
+ char *zName8;
sqlite3_mutex_enter(db->mutex);
assert( !db->mallocFailed );
zName8 = sqlite3Utf16to8(db, zName, -1);
@@ -1240,9 +1228,6 @@
void *pCollNeededArg,
void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
){
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
sqlite3_mutex_enter(db->mutex);
db->xCollNeeded = xCollNeeded;
db->xCollNeeded16 = 0;
@@ -1261,9 +1246,6 @@
void *pCollNeededArg,
void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
){
- if( !sqlite3SafetyCheckOk(db) ){
- return SQLITE_MISUSE;
- }
sqlite3_mutex_enter(db->mutex);
db->xCollNeeded = 0;
db->xCollNeeded16 = xCollNeeded16;
@@ -1345,9 +1327,7 @@
int autoinc = 0;
/* Ensure the database schema has been loaded */
- if( !sqlite3SafetyCheckOk(db) || sqlite3SafetyOn(db) ){
- return SQLITE_MISUSE;
- }
+ (void)sqlite3SafetyOn(db);
sqlite3_mutex_enter(db->mutex);
rc = sqlite3Init(db, &zErrMsg);
if( SQLITE_OK!=rc ){
@@ -1405,9 +1385,7 @@
}
error_out:
- if( sqlite3SafetyOff(db) ){
- rc = SQLITE_MISUSE;
- }
+ (void)sqlite3SafetyOff(db);
/* Whether the function call succeeded or failed, set the output parameters
** to whatever their local counterparts contain. If an error did occur,
diff --git a/src/table.c b/src/table.c
index a79a6ac..48782e8 100644
--- a/src/table.c
+++ b/src/table.c
@@ -75,12 +75,14 @@
}else{
z = sqlite3_mprintf("%s", colv[i]);
}
+ if( z==0 ) goto malloc_failed;
p->azResult[p->nData++] = z;
}
}else if( p->nColumn!=nCol ){
- sqlite3SetString(&p->zErrMsg,
- "sqlite3_get_table() called with two or more incompatible queries",
- (char*)0);
+ sqlite3_free(p->zErrMsg);
+ p->zErrMsg = sqlite3_mprintf(
+ "sqlite3_get_table() called with two or more incompatible queries"
+ );
p->rc = SQLITE_ERROR;
return 1;
}
@@ -139,15 +141,13 @@
res.nData = 1;
res.nAlloc = 20;
res.rc = SQLITE_OK;
- res.azResult = sqlite3_malloc( sizeof(char*)*res.nAlloc );
- if( res.azResult==0 ) return SQLITE_NOMEM;
+ res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc );
+ if( res.azResult==0 ){
+ db->errCode = SQLITE_NOMEM;
+ return SQLITE_NOMEM;
+ }
res.azResult[0] = 0;
rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg);
-#ifndef NDEBUG
- sqlite3_mutex_enter(db->mutex);
- assert((rc&db->errMask)==rc && (res.rc&db->errMask)==res.rc);
- sqlite3_mutex_leave(db->mutex);
-#endif
if( res.azResult ){
assert( sizeof(res.azResult[0])>= sizeof(res.nData) );
res.azResult[0] = (char*)res.nData;
@@ -161,9 +161,7 @@
}
sqlite3_free(res.zErrMsg);
}
- sqlite3_mutex_enter(db->mutex);
- db->errCode = res.rc;
- sqlite3_mutex_leave(db->mutex);
+ db->errCode = res.rc; /* Assume 32-bit assignment is atomic */
return res.rc;
}
sqlite3_free(res.zErrMsg);
@@ -176,6 +174,7 @@
azNew = sqlite3_realloc( res.azResult, sizeof(char*)*(res.nData+1) );
if( azNew==0 ){
sqlite3_free_table(&res.azResult[1]);
+ db->errCode = SQLITE_NOMEM;
return SQLITE_NOMEM;
}
res.nAlloc = res.nData+1;
diff --git a/src/test9.c b/src/test9.c
index 1e92245..a1fb49b 100644
--- a/src/test9.c
+++ b/src/test9.c
@@ -14,7 +14,7 @@
** for completeness. Test code is written in C for these cases
** as there is not much point in binding to Tcl.
**
-** $Id: test9.c,v 1.4 2007/08/21 10:44:16 drh Exp $
+** $Id: test9.c,v 1.5 2008/01/23 12:52:41 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
@@ -131,41 +131,22 @@
}
sqlite3_close(db);
-#ifndef SQLITE_OMIT_UTF16
- rc = sqlite3_collation_needed16(db, 0, 0);
- if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_collation_needed16";
- goto error_out;
- }
-#endif
-
- rc = sqlite3_collation_needed(db, 0, 0);
- if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_collation_needed";
- goto error_out;
- }
-
- rc = sqlite3_create_collation(db, 0, 0, 0, 0);
- if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_create_collation";
- goto error_out;
- }
-
- rc = sqlite3_create_function(db, 0, 0, 0, 0, 0, 0, 0);
- if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_create_function";
- goto error_out;
- }
-
- rc = sqlite3_busy_handler(db, 0, 0);
- if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_busy_handler";
- goto error_out;
- }
rc = sqlite3_errcode(db);
if( rc!=SQLITE_MISUSE ){
- zErrFunction = "sqlite3_busy_handler";
+ zErrFunction = "sqlite3_errcode";
+ goto error_out;
+ }
+
+ rc = sqlite3_prepare(db, 0, 0, 0, 0);
+ if( rc!=SQLITE_MISUSE ){
+ zErrFunction = "sqlite3_prepare";
+ goto error_out;
+ }
+
+ rc = sqlite3_prepare_v2(db, 0, 0, 0, 0);
+ if( rc!=SQLITE_MISUSE ){
+ zErrFunction = "sqlite3_prepare_v2";
goto error_out;
}
@@ -175,6 +156,11 @@
zErrFunction = "sqlite3_prepare16";
goto error_out;
}
+ rc = sqlite3_prepare16_v2(db, 0, 0, 0, 0);
+ if( rc!=SQLITE_MISUSE ){
+ zErrFunction = "sqlite3_prepare16_v2";
+ goto error_out;
+ }
#endif
return TCL_OK;
diff --git a/src/test_config.c b/src/test_config.c
index dcbd8ed..b47ca89 100644
--- a/src/test_config.c
+++ b/src/test_config.c
@@ -16,7 +16,7 @@
** The focus of this file is providing the TCL testing layer
** access to compile-time constants.
**
-** $Id: test_config.c,v 1.18 2008/01/22 23:37:10 drh Exp $
+** $Id: test_config.c,v 1.19 2008/01/23 12:52:41 drh Exp $
*/
#include "sqliteLimit.h"
@@ -44,6 +44,8 @@
** procedures use this to determine when tests should be omitted.
*/
static void set_options(Tcl_Interp *interp){
+ int rc = 0;
+
#ifdef SQLITE_32BIT_ROWID
Tcl_SetVar2(interp, "sqlite_options", "rowid32", "1", TCL_GLOBAL_ONLY);
#else
@@ -366,12 +368,13 @@
Tcl_SetVar2(interp, "sqlite_options", "tclvar", "1", TCL_GLOBAL_ONLY);
#endif
+ rc = sqlite3_threadsafe();
#if SQLITE_THREADSAFE
Tcl_SetVar2(interp, "sqlite_options", "threadsafe", "1", TCL_GLOBAL_ONLY);
- assert( sqlite3_threadsafe() );
+ assert( rc );
#else
Tcl_SetVar2(interp, "sqlite_options", "threadsafe", "0", TCL_GLOBAL_ONLY);
- assert( !sqlite3_threadsafe() );
+ assert( !rc );
#endif
#ifdef SQLITE_OMIT_TRACE
diff --git a/src/where.c b/src/where.c
index ae8fb4b..50bcea2 100644
--- a/src/where.c
+++ b/src/where.c
@@ -16,7 +16,7 @@
** so is applicable. Because this module is responsible for selecting
** indices, you might also think of this module as the "query optimizer".
**
-** $Id: where.c,v 1.285 2008/01/23 03:03:05 drh Exp $
+** $Id: where.c,v 1.286 2008/01/23 12:52:41 drh Exp $
*/
#include "sqliteInt.h"
@@ -540,11 +540,9 @@
return 0;
}
pColl = pLeft->pColl;
+ assert( pColl!=0 || pLeft->iColumn==-1 );
if( pColl==0 ){
- /* TODO: Coverage testing doesn't get this case. Is it actually possible
- ** for an expression of type TK_COLUMN to not have an assigned collation
- ** sequence at this point?
- */
+ /* No collation is defined for the ROWID. Use the default. */
pColl = db->pDfltColl;
}
if( (pColl->type!=SQLITE_COLL_BINARY || noCase) &&
@@ -1859,13 +1857,7 @@
for(i=0; i<pWInfo->nLevel; i++){
sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
if( pInfo ){
- if( pInfo->needToFreeIdxStr ){
- /* Coverage: Don't think this can be reached. By the time this
- ** function is called, the index-strings have been passed
- ** to the vdbe layer for deletion.
- */
- sqlite3_free(pInfo->idxStr);
- }
+ assert( pInfo->needToFreeIdxStr==0 );
sqlite3_free(pInfo);
}
}
diff --git a/test/colmeta.test b/test/colmeta.test
index c2513e6..3939f82 100644
--- a/test/colmeta.test
+++ b/test/colmeta.test
@@ -12,7 +12,7 @@
# This file implements regression tests for SQLite library. The
# focus of this script is the sqlite3_table_column_metadata() API.
#
-# $Id: colmeta.test,v 1.3 2006/02/10 13:33:31 danielk1977 Exp $
+# $Id: colmeta.test,v 1.4 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -91,13 +91,4 @@
} $results
}
-do_test colmeta-misuse.1 {
- db close
- set rc [catch {
- sqlite3_table_column_metadata $::DB a b c
- } msg]
- list $rc $msg
-} {1 {library routine called out of sequence}}
-
finish_test
-
diff --git a/test/like.test b/test/like.test
index e154ca2..2365298 100644
--- a/test/like.test
+++ b/test/like.test
@@ -13,7 +13,7 @@
# in particular the optimizations that occur to help those operators
# run faster.
#
-# $Id: like.test,v 1.7 2007/09/12 17:01:45 danielk1977 Exp $
+# $Id: like.test,v 1.8 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -397,4 +397,10 @@
}
} {'abc 'ax}
+do_test like-7.1 {
+ execsql {
+ SELECT * FROM t1 WHERE rowid GLOB '1*';
+ }
+} {a}
+
finish_test
diff --git a/test/mallocG.test b/test/mallocG.test
index a55cbce..57534fe 100644
--- a/test/mallocG.test
+++ b/test/mallocG.test
@@ -11,7 +11,7 @@
#
# This test script checks malloc failures in various obscure operations.
#
-# $Id: mallocG.test,v 1.1 2008/01/22 01:48:09 drh Exp $
+# $Id: mallocG.test,v 1.2 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -39,4 +39,18 @@
SELECT y FROM t1 WHERE x IN t2;
}
+do_malloc_test mallocG-3 -sqlprep {
+ CREATE TABLE t1(x UNIQUE);
+ INSERT INTO t1 VALUES ('hello');
+ INSERT INTO t1 VALUES ('out there');
+} -sqlbody {
+ SELECT * FROM t1
+ WHERE x BETWEEN 'a' AND 'z'
+ AND x BETWEEN 'c' AND 'w'
+ AND x BETWEEN 'e' AND 'u'
+ AND x BETWEEN 'g' AND 'r'
+ AND x BETWEEN 'i' AND 'q'
+ AND x BETWEEN 'i' AND 'm'
+}
+
finish_test
diff --git a/test/misc5.test b/test/misc5.test
index ebccf4c..f6d7c91 100644
--- a/test/misc5.test
+++ b/test/misc5.test
@@ -13,7 +13,7 @@
# This file implements tests for miscellanous features that were
# left out of other test files.
#
-# $Id: misc5.test,v 1.19 2007/12/13 07:58:51 danielk1977 Exp $
+# $Id: misc5.test,v 1.20 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -581,15 +581,6 @@
catchsql $sql
} {1 {parser stack overflow}}
-# Check the MISUSE return from sqlitee3_busy_timeout
-#
-do_test misc5-8.1-misuse {
- set DB [sqlite3_connection_pointer db]
- db close
- sqlite3_busy_timeout $DB 1000
-} SQLITE_MISUSE
-sqlite3 db test.db
-
# Ticket #1911
#
ifcapable compound {
diff --git a/test/misc7.test b/test/misc7.test
index a7964a1..c683116 100644
--- a/test/misc7.test
+++ b/test/misc7.test
@@ -10,14 +10,14 @@
#***********************************************************************
# This file implements regression tests for SQLite library.
#
-# $Id: misc7.test,v 1.17 2007/12/13 21:54:11 drh Exp $
+# $Id: misc7.test,v 1.18 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
-#do_test misc7-1 {
-# c_misuse_test
-#} {}
+do_test misc7-1-misuse {
+ c_misuse_test
+} {}
do_test misc7-2 {
c_realloc_test
diff --git a/test/tableapi.test b/test/tableapi.test
index 1738291..327e9e3 100644
--- a/test/tableapi.test
+++ b/test/tableapi.test
@@ -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.13 2007/09/12 17:01:45 danielk1977 Exp $
+# $Id: tableapi.test,v 1.14 2008/01/23 12:52:41 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -61,6 +61,11 @@
SELECT * FROM xyz WHERE a>47 ORDER BY a
} {}
} {0 3 2 a b 48 (48) 49 (49) 50 (50)}
+do_test tableapi-2.3.3 {
+ sqlite3_get_table_printf $::dbx {
+ SELECT * FROM xyz WHERE a>47 ORDER BY a; invalid
+ } {}
+} {1 {near "invalid": syntax error}}
do_test tableapi-2.4 {
set manyquote ''''''''
append manyquote $manyquote
@@ -212,6 +217,20 @@
} {0 1 1 user_version 0}
}
+ifcapable memdebug {
+ source $testdir/malloc_common.tcl
+ do_malloc_test tableapi-7 -sqlprep {
+ CREATE TABLE t1(a,b);
+ INSERT INTO t1 VALUES(1,2);
+ INSERT INTO t1 VALUES(3,4);
+ INSERT INTO t1 SELECT a+4, b+4 FROM t1;
+ INSERT INTO t1 SELECT a+8, b+8 FROM t1;
+ } -tclbody {
+ set r [sqlite3_get_table_printf db {SELECT rowid, a, b FROM t1} {}]
+ if {[llength $r]<26} {error "out of memory"}
+ }
+}
+
do_test tableapi-99.0 {
sqlite3_close $::dbx
} {SQLITE_OK}
diff --git a/tool/lempar.c b/tool/lempar.c
index 68a998a..cca91ad 100644
--- a/tool/lempar.c
+++ b/tool/lempar.c
@@ -349,9 +349,7 @@
if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
return yy_default[stateno];
}
- if( iLookAhead==YYNOCODE ){
- return YY_NO_ACTION;
- }
+ assert( iLookAhead!=YYNOCODE );
i += iLookAhead;
if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
if( iLookAhead>0 ){
@@ -402,21 +400,14 @@
YYCODETYPE iLookAhead /* The look-ahead token */
){
int i;
- /* int stateno = pParser->yystack[pParser->yyidx].stateno; */
-
- if( stateno>YY_REDUCE_MAX ||
- (i = yy_reduce_ofst[stateno])==YY_REDUCE_USE_DFLT ){
- return yy_default[stateno];
- }
- if( iLookAhead==YYNOCODE ){
- return YY_NO_ACTION;
- }
+ assert( stateno<=YY_REDUCE_MAX );
+ i = yy_reduce_ofst[stateno];
+ assert( i!=YY_REDUCE_USE_DFLT );
+ assert( iLookAhead!=YYNOCODE );
i += iLookAhead;
- if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
- return yy_default[stateno];
- }else{
- return yy_action[i];
- }
+ assert( i>=0 && i<YY_SZ_ACTTAB );
+ assert( yy_lookahead[i]==iLookAhead );
+ return yy_action[i];
}
/*