diff --git a/manifest b/manifest index 557334a2c2..3ecd3fe9fc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C More\schanges\sto\sdo\swith\sthe\snew\ssqlite3_step()\sAPI.\s(CVS\s1458) -D 2004-05-26T00:07:25 +C Use\sthe\snew\sAPI\scalls\smore\sconsistently.\s(CVS\s1459) +D 2004-05-26T02:04:57 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -36,8 +36,8 @@ F src/func.c e67a36ae28ee3495d02261f74989a7bb192658fd F src/hash.c 440c2f8cb373ee1b4e13a0988489c7cd95d55b6f F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb F src/insert.c 48bb15bff280767684a0f9ee4ae5973c9504f880 -F src/legacy.c 706484c32e86b95d65aeb31f661c0e4a3649b862 -F src/main.c 843361d68f275bc9dd3494897a105b34ad80e019 +F src/legacy.c a856d2d5317ed2ac93c2c6cbba7d4faa564a5b20 +F src/main.c c9044ad6896e41aa9bab1957cfd4e9725e5efb01 F src/md5.c 32ec4d879e9b34d6a597ae8bda684d8e395003f4 F src/os.h ab42f4a7c4c716f26b988e759b6e12085a3bfc67 F src/os_common.h 744286a27de55c52f1b18921e8d17abbf7fafc0f @@ -55,14 +55,14 @@ F src/printf.c ef750e8e2398ca7e8b58be991075f08c6a7f0e53 F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3 F src/select.c 867cab23c0577d4ac0510c925a85b8e032cfe139 F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f -F src/sqlite.h.in 532e8b3b4a266ab5d7245a8ca3173fdd10f4a89f +F src/sqlite.h.in a9d71fd4f781cc61e586b8eabed4d271d88e31c2 F src/sqliteInt.h 6559811caeae0d1855e0b973e363a8c5141e566b F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2 -F src/tclsqlite.c 0b62e8df6da5abdddf49f3d9274a8103ee61fb63 -F src/test1.c 616c288a49b48facb54b9a925aeede1ba4093d8c +F src/tclsqlite.c a125a8b99d427e132cb6e728cf9310f6554b410b +F src/test1.c a9f40903f6a14150ca1201da492d4f5a652a1c0c F src/test2.c 6195a1ca2c8d0d2d93644e86da3289b403486872 F src/test3.c 5e4a6d596f982f6f47a5f9f75ede9b4a3b739968 -F src/test4.c b9947c319a5c023c10c1e953e6610abd571c2283 +F src/test4.c 014478492bddb3f9b4a3151b05f9ac708fe279fb F src/test5.c 9a1f15133f6955f067c5246e564723b5f23ff221 F src/tokenize.c e7536dd31205d5afb76c1bdc832dea009c7a3847 F src/trigger.c 11afe9abfba13a2ba142944c797c952e162d117f @@ -70,10 +70,10 @@ F src/update.c 2b5ec85fa19020686ed2fc4a3fc43cbcefbfdfa7 F src/utf.c 1d38da85bffb928fb0d9f301e7db913a6df486ce F src/util.c 4c0adcbc9ce6678dd046931253e45d623c6d279f F src/vacuum.c 8734f89742f246abd91dbd3e087fc153bddbfbad -F src/vdbe.c 7f41e2f73dcca885618b9baec0ffea9f8b0714aa +F src/vdbe.c 0c10b0036444f99eb625c6a003d007e3043187ef F src/vdbe.h ebd59ee7a988d39c58b27149593f09a432ad1410 -F src/vdbeInt.h e500998a0ab3b10850c771c60d6b132037ff56e7 -F src/vdbeaux.c b2527b7ce884c2c1dc102d48a07c6327f8eac3c2 +F src/vdbeInt.h c8706615ad49c7a5292daa31425dd1b0b24b3b9b +F src/vdbeaux.c a792ac602eb81c15ebdea64931bd3fad85b025f2 F src/where.c efe5d25fe18cd7381722457898cd863e84097a0c F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242 F test/attach.test cb9b884344e6cfa5e165965d5b1adea679a24c83 @@ -203,7 +203,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 143c502a59e727975f61c8d13b6c5a90dad038f3 -R aab0f00d021548c4204f1bc870566ab7 +P e83138250ce0a8caacbd1822eec2e06796d2f5f2 +R 2d9cfc7b0183db7d18c182936822729e U danielk1977 -Z 3b5c9e0de208be70045790485a870245 +Z a8211c11f21dbceb0c77c5b2788c41e4 diff --git a/manifest.uuid b/manifest.uuid index b428914ded..1201a7037f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e83138250ce0a8caacbd1822eec2e06796d2f5f2 \ No newline at end of file +17e7db488dac6b30d174f2272edf1046c2bb9990 \ No newline at end of file diff --git a/src/legacy.c b/src/legacy.c index 58ab6e8cd6..655f2bb7bd 100644 --- a/src/legacy.c +++ b/src/legacy.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: legacy.c,v 1.1 2004/05/26 00:01:35 danielk1977 Exp $ +** $Id: legacy.c,v 1.2 2004/05/26 02:04:57 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -55,7 +55,7 @@ int sqlite3_exec( pStmt = 0; rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover); if( rc!=SQLITE_OK ){ - if( pStmt ) sqlite3_finalize_new(pStmt); + if( pStmt ) sqlite3_finalize(pStmt); continue; } if( !pStmt ){ @@ -100,7 +100,7 @@ int sqlite3_exec( } if( rc!=SQLITE_ROW ){ - rc = sqlite3_finalize_new(pStmt); + rc = sqlite3_finalize(pStmt); pStmt = 0; if( db->pVdbe==0 ){ nChange = db->nChange; @@ -119,7 +119,7 @@ int sqlite3_exec( } exec_out: - if( pStmt ) sqlite3_finalize_new(pStmt); + if( pStmt ) sqlite3_finalize(pStmt); if( azCols ) sqliteFree(azCols); if( rc!=SQLITE_OK && rc==sqlite3_errcode(db) && pzErrMsg ){ diff --git a/src/main.c b/src/main.c index d23c0982d0..79525bb87a 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.189 2004/05/25 23:35:18 danielk1977 Exp $ +** $Id: main.c,v 1.190 2004/05/26 02:04:57 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -482,135 +482,6 @@ void sqlite3RollbackAll(sqlite *db){ /* sqlite3RollbackInternalChanges(db); */ } -/* -** Compile a single statement of SQL into a virtual machine. Return one -** of the SQLITE_ success/failure codes. Also write an error message into -** memory obtained from malloc() and make *pzErrMsg point to that message. -*/ -int sqlite3_compile( - sqlite *db, /* The database on which the SQL executes */ - const char *zSql, /* The SQL to be executed */ - const char **pzTail, /* OUT: Next statement after the first */ - sqlite_vm **ppVm, /* OUT: The virtual machine */ - char **pzErrMsg /* OUT: Write error messages here */ -){ - Parse sParse; - - if( pzErrMsg ) *pzErrMsg = 0; - if( sqlite3SafetyOn(db) ) goto exec_misuse; - if( !db->init.busy ){ - if( (db->flags & SQLITE_Initialized)==0 ){ - int rc, cnt = 1; - while( (rc = sqlite3Init(db, pzErrMsg))==SQLITE_BUSY - && db->xBusyCallback - && db->xBusyCallback(db->pBusyArg, "", cnt++)!=0 ){} - if( rc!=SQLITE_OK ){ - sqlite3StrRealloc(pzErrMsg); - sqlite3SafetyOff(db); - return rc; - } - if( pzErrMsg ){ - sqliteFree(*pzErrMsg); - *pzErrMsg = 0; - } - } - } - assert( (db->flags & SQLITE_Initialized)!=0 || db->init.busy ); - if( db->pVdbe==0 ){ db->nChange = 0; } - memset(&sParse, 0, sizeof(sParse)); - sParse.db = db; - sqlite3RunParser(&sParse, zSql, pzErrMsg); - if( db->xTrace && !db->init.busy ){ - /* Trace only the statment that was compiled. - ** Make a copy of that part of the SQL string since zSQL is const - ** and we must pass a zero terminated string to the trace function - ** The copy is unnecessary if the tail pointer is pointing at the - ** beginnig or end of the SQL string. - */ - if( sParse.zTail && sParse.zTail!=zSql && *sParse.zTail ){ - char *tmpSql = sqliteStrNDup(zSql, sParse.zTail - zSql); - if( tmpSql ){ - db->xTrace(db->pTraceArg, tmpSql); - free(tmpSql); - }else{ - /* If a memory error occurred during the copy, - ** trace entire SQL string and fall through to the - ** sqlite3_malloc_failed test to report the error. - */ - db->xTrace(db->pTraceArg, zSql); - } - }else{ - db->xTrace(db->pTraceArg, zSql); - } - } - if( sqlite3_malloc_failed ){ - sqlite3SetString(pzErrMsg, "out of memory", (char*)0); - sParse.rc = SQLITE_NOMEM; - sqlite3RollbackAll(db); - sqlite3ResetInternalSchema(db, 0); - db->flags &= ~SQLITE_InTrans; - } - if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK; - if( sParse.rc!=SQLITE_OK && pzErrMsg && *pzErrMsg==0 ){ - sqlite3SetString(pzErrMsg, sqlite3_error_string(sParse.rc), (char*)0); - } - sqlite3StrRealloc(pzErrMsg); - if( sParse.rc==SQLITE_SCHEMA ){ - sqlite3ResetInternalSchema(db, 0); - } - assert( ppVm ); - *ppVm = (sqlite_vm*)sParse.pVdbe; - if( pzTail ) *pzTail = sParse.zTail; - if( sqlite3SafetyOff(db) ) goto exec_misuse; - return sParse.rc; - -exec_misuse: - if( pzErrMsg ){ - *pzErrMsg = 0; - sqlite3SetString(pzErrMsg, sqlite3_error_string(SQLITE_MISUSE), (char*)0); - sqlite3StrRealloc(pzErrMsg); - } - return SQLITE_MISUSE; -} - - -/* -** The following routine destroys a virtual machine that is created by -** the sqlite3_compile() routine. -** -** The integer returned is an SQLITE_ success/failure code that describes -** the result of executing the virtual machine. An error message is -** written into memory obtained from malloc and *pzErrMsg is made to -** point to that error if pzErrMsg is not NULL. The calling routine -** should use sqlite3_freemem() to delete the message when it has finished -** with it. -*/ -int sqlite3_finalize( - sqlite_vm *pVm, /* The virtual machine to be destroyed */ - char **pzErrMsg /* OUT: Write error messages here */ -){ - int rc = sqlite3VdbeFinalize((Vdbe*)pVm, pzErrMsg); - sqlite3StrRealloc(pzErrMsg); - return rc; -} - -/* -** Terminate the current execution of a virtual machine then -** reset the virtual machine back to its starting state so that it -** can be reused. Any error message resulting from the prior execution -** is written into *pzErrMsg. A success code from the prior execution -** is returned. -*/ -int sqlite3_reset( - sqlite_vm *pVm, /* The virtual machine to be destroyed */ - char **pzErrMsg /* OUT: Write error messages here */ -){ - int rc = sqlite3VdbeReset((Vdbe*)pVm, pzErrMsg); - sqlite3VdbeMakeReady((Vdbe*)pVm, -1, 0); - sqlite3StrRealloc(pzErrMsg); - return rc; -} - /* ** Return a static string that describes the kind of error specified in the ** argument. @@ -1252,7 +1123,7 @@ int sqlite3_open16( ** This routine sets the error code and string returned by ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). */ -int sqlite3_finalize_new(sqlite3_stmt *pStmt){ +int sqlite3_finalize(sqlite3_stmt *pStmt){ return sqlite3VdbeFinalize((Vdbe*)pStmt, 0); } @@ -1264,7 +1135,7 @@ int sqlite3_finalize_new(sqlite3_stmt *pStmt){ ** This routine sets the error code and string returned by ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). */ -int sqlite3_reset_new(sqlite3_stmt *pStmt){ +int sqlite3_reset(sqlite3_stmt *pStmt){ int rc = sqlite3VdbeReset((Vdbe*)pStmt, 0); sqlite3VdbeMakeReady((Vdbe*)pStmt, -1, 0); return rc; diff --git a/src/sqlite.h.in b/src/sqlite.h.in index fa1c0869c0..3d8ee52387 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -12,7 +12,7 @@ ** This header file defines the interface that the SQLite library ** presents to client programs. ** -** @(#) $Id: sqlite.h.in,v 1.78 2004/05/26 00:07:25 danielk1977 Exp $ +** @(#) $Id: sqlite.h.in,v 1.79 2004/05/26 02:04:57 danielk1977 Exp $ */ #ifndef _SQLITE_H_ #define _SQLITE_H_ @@ -542,112 +542,6 @@ int sqlite3_set_authorizer( */ void *sqlite3_trace(sqlite*, void(*xTrace)(void*,const char*), void*); -/*** The Callback-Free API -** -** The following routines implement a new way to access SQLite that does not -** involve the use of callbacks. -** -** An sqlite_vm is an opaque object that represents a single SQL statement -** that is ready to be executed. -*/ -typedef struct sqlite_vm sqlite_vm; - -/* -** To execute an SQLite query without the use of callbacks, you first have -** to compile the SQL using this routine. The 1st parameter "db" is a pointer -** to an sqlite object obtained from sqlite3_open(). The 2nd parameter -** "zSql" is the text of the SQL to be compiled. The remaining parameters -** are all outputs. -** -** *pzTail is made to point to the first character past the end of the first -** SQL statement in zSql. This routine only compiles the first statement -** in zSql, so *pzTail is left pointing to what remains uncompiled. -** -** *ppVm is left pointing to a "virtual machine" that can be used to execute -** the compiled statement. Or if there is an error, *ppVm may be set to NULL. -** If the input text contained no SQL (if the input is and empty string or -** a comment) then *ppVm is set to NULL. -** -** If any errors are detected during compilation, an error message is written -** into space obtained from malloc() and *pzErrMsg is made to point to that -** error message. The calling routine is responsible for freeing the text -** of this message when it has finished with it. Use sqlite3_freemem() to -** free the message. pzErrMsg may be NULL in which case no error message -** will be generated. -** -** On success, SQLITE_OK is returned. Otherwise and error code is returned. -*/ -int sqlite3_compile( - sqlite *db, /* The open database */ - const char *zSql, /* SQL statement to be compiled */ - const char **pzTail, /* OUT: uncompiled tail of zSql */ - sqlite_vm **ppVm, /* OUT: the virtual machine to execute zSql */ - char **pzErrmsg /* OUT: Error message. */ -); - -/* -** This routine is called to delete a virtual machine after it has finished -** executing. The return value is the result code. SQLITE_OK is returned -** if the statement executed successfully and some other value is returned if -** there was any kind of error. If an error occurred and pzErrMsg is not -** NULL, then an error message is written into memory obtained from malloc() -** and *pzErrMsg is made to point to that error message. The calling routine -** should use sqlite3_freemem() to delete this message when it has finished -** with it. -** -** This routine can be called at any point during the execution of the -** virtual machine. If the virtual machine has not completed execution -** when this routine is called, that is like encountering an error or -** an interrupt. (See sqlite3_interrupt().) Incomplete updates may be -** rolled back and transactions cancelled, depending on the circumstances, -** and the result code returned will be SQLITE_ABORT. -*/ -int sqlite3_finalize(sqlite_vm*, char **pzErrMsg); - -/* -** This routine deletes the virtual machine, writes any error message to -** *pzErrMsg and returns an SQLite return code in the same way as the -** sqlite3_finalize() function. -** -** Additionally, if ppVm is not NULL, *ppVm is left pointing to a new virtual -** machine loaded with the compiled version of the original query ready for -** execution. -** -** If sqlite3_reset() returns SQLITE_SCHEMA, then *ppVm is set to NULL. -** -******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ****** -*/ -int sqlite3_reset(sqlite_vm*, char **pzErrMsg); - -/* -** If the SQL that was handed to sqlite3_prepare contains variables that -** are represeted in the SQL text by a question mark ('?'). This routine -** is used to assign values to those variables. -** -** The first parameter is a virtual machine obtained from sqlite3_prepare(). -** The 2nd "idx" parameter determines which variable in the SQL statement -** to bind the value to. The left most '?' is 1. The 3rd parameter is -** the value to assign to that variable. The 4th parameter is the number -** of bytes in the value, including the terminating \000 for strings. -** Finally, the 5th "copy" parameter is TRUE if SQLite should make its -** own private copy of this value, or false if the space that the 3rd -** parameter points to will be unchanging and can be used directly by -** SQLite. -** -** Unbound variables are treated as having a value of NULL. To explicitly -** set a variable to NULL, call this routine with the 3rd parameter as a -** NULL pointer. -** -** If the 4th "len" parameter is -1, then strlen() is used to find the -** length. -** -** This routine can only be called immediately after sqlite3_prepare() -** or sqlite3_reset() and before any calls to sqlite3_step(). -** -******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ****** -*/ -int sqlite3_bind(sqlite_vm*, int idx, const char *value, int len, int copy); - /* ** This routine configures a callback function - the progress callback - that ** is invoked periodically during long running calls to sqlite3_exec(), @@ -664,7 +558,6 @@ int sqlite3_bind(sqlite_vm*, int idx, const char *value, int len, int copy); ** in less than N opcodes being executed, then the progress callback is not ** invoked. ** -** Calling this routine overwrites any previously installed progress callback. ** To remove the progress callback altogether, pass NULL as the third ** argument to this function. ** @@ -755,10 +648,10 @@ int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out); int sqlite_decode_binary(const unsigned char *in, unsigned char *out); -/* FIX ME */ -typedef sqlite_vm sqlite3_stmt; typedef sqlite sqlite3; +typedef struct sqlite3_stmt sqlite3_stmt; + /* ** This routine is used to bind a 32-bit integer value to a variable ** in an SQL statement compiled by sqlite3_prepare(). See comments for @@ -1084,8 +977,15 @@ int sqlite3_step(sqlite3_stmt*); ** or sqlite3_prepare16(). If the statement was executed successfully, or ** not executed at all, then SQLITE_OK is returned. If execution of the ** statement failed then an error code is returned. +** +** This routine can be called at any point during the execution of the +** virtual machine. If the virtual machine has not completed execution +** when this routine is called, that is like encountering an error or +** an interrupt. (See sqlite3_interrupt().) Incomplete updates may be +** rolled back and transactions cancelled, depending on the circumstances, +** and the result code returned will be SQLITE_ABORT. */ -int sqlite3_finalize_new(sqlite3_stmt *pStmt); +int sqlite3_finalize(sqlite3_stmt *pStmt); /* ** The sqlite3_reset() function is called to reset a compiled SQL @@ -1094,7 +994,7 @@ int sqlite3_finalize_new(sqlite3_stmt *pStmt); ** Any SQL statement variables that had values bound to them using ** the sqlite3_bind_*() API retain their values. */ -int sqlite3_reset_new(sqlite3_stmt *pStmt); +int sqlite3_reset(sqlite3_stmt *pStmt); /* ** Open the sqlite database file "filename", where "filename" is UTF-8 diff --git a/src/tclsqlite.c b/src/tclsqlite.c index 7cb5bf8dae..0b9437ddaa 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -11,7 +11,7 @@ ************************************************************************* ** A TCL Interface to SQLite ** -** $Id: tclsqlite.c,v 1.69 2004/05/25 12:05:57 danielk1977 Exp $ +** $Id: tclsqlite.c,v 1.70 2004/05/26 02:04:57 danielk1977 Exp $ */ #ifndef NO_TCL /* Omit this whole file if TCL is unavailable */ @@ -1218,7 +1218,7 @@ int TCLSH_MAIN(int argc, char **argv){ Sqlitetest1_Init(interp); Sqlitetest2_Init(interp); Sqlitetest3_Init(interp); -/* Sqlitetest4_Init(interp); */ + Sqlitetest4_Init(interp); Sqlitetest5_Init(interp); Md5_Init(interp); } diff --git a/src/test1.c b/src/test1.c index 9ced503a3c..aa2a8209f3 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.53 2004/05/26 00:07:26 danielk1977 Exp $ +** $Id: test1.c,v 1.54 2004/05/26 02:04:57 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -76,17 +76,6 @@ static int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite **ppDb){ return TCL_OK; } -/* -** Decode a pointer to an sqlite_vm object. -*/ -static int getVmPointer(Tcl_Interp *interp, const char *zArg, sqlite_vm **ppVm){ - if( sscanf(zArg, PTR_FMT, (void**)ppVm)!=1 ){ - Tcl_AppendResult(interp, "\"", zArg, "\" is not a valid pointer value", 0); - return TCL_ERROR; - } - return TCL_OK; -} - /* ** Decode a pointer to an sqlite3_stmt object. */ @@ -780,7 +769,7 @@ static int test_finalize( if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR; - rc = sqlite3_finalize_new(pStmt); + rc = sqlite3_finalize(pStmt); if( rc ){ return TCL_ERROR; } @@ -809,7 +798,7 @@ static int test_reset( if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR; - rc = sqlite3_reset_new(pStmt); + rc = sqlite3_reset(pStmt); if( rc ){ return TCL_ERROR; } @@ -844,7 +833,7 @@ static int test_bind( int argc, /* Number of arguments */ char **argv /* Text of each argument */ ){ - sqlite_vm *vm; + sqlite3_stmt *pStmt; int rc; int idx; if( argc!=5 ){ @@ -852,14 +841,14 @@ static int test_bind( " VM IDX VALUE (null|static|normal)\"", 0); return TCL_ERROR; } - if( getVmPointer(interp, argv[1], &vm) ) return TCL_ERROR; + if( getStmtPointer(interp, argv[1], &pStmt) ) return TCL_ERROR; if( Tcl_GetInt(interp, argv[2], &idx) ) return TCL_ERROR; if( strcmp(argv[4],"null")==0 ){ - rc = sqlite3_bind(vm, idx, 0, 0, 0); + rc = sqlite3_bind_null(pStmt, idx); }else if( strcmp(argv[4],"static")==0 ){ - rc = sqlite3_bind(vm, idx, sqlite_static_bind_value, -1, 0); + rc = sqlite3_bind_text(pStmt, idx, sqlite_static_bind_value, -1, 0); }else if( strcmp(argv[4],"normal")==0 ){ - rc = sqlite3_bind(vm, idx, argv[3], -1, 1); + rc = sqlite3_bind_text(pStmt, idx, argv[3], -1, 1); }else{ Tcl_AppendResult(interp, "4th argument should be " "\"null\" or \"static\" or \"normal\"", 0); diff --git a/src/test4.c b/src/test4.c index 3e4886be13..054e578af8 100644 --- a/src/test4.c +++ b/src/test4.c @@ -11,10 +11,11 @@ ************************************************************************* ** Code for testing the the SQLite library in a multithreaded environment. ** -** $Id: test4.c,v 1.6 2004/05/22 09:21:21 danielk1977 Exp $ +** $Id: test4.c,v 1.7 2004/05/26 02:04:57 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" +#include "os.h" #if defined(OS_UNIX) && OS_UNIX==1 && defined(THREADSAFE) && THREADSAFE==1 #include #include @@ -40,13 +41,13 @@ struct Thread { ** master. */ int completed; /* Number of operations completed */ sqlite *db; /* Open database */ - sqlite_vm *vm; /* Pending operation */ + sqlite3_stmt *pStmt; /* Pending operation */ char *zErr; /* operation error */ char *zStaticErr; /* Static error message */ int rc; /* operation return code */ int argc; /* number of columns in result */ - const char **argv; /* result columns */ - const char **colv; /* result column names */ + const char *argv[100]; /* result columns */ + const char *colv[100]; /* result column names */ }; /* @@ -71,7 +72,7 @@ static void *thread_main(void *pArg){ sqlite3_close(p->db); p->db = 0; } - p->vm = 0; + p->pStmt = 0; p->completed = 1; while( p->opnum<=p->completed ) sched_yield(); while( p->xOp ){ @@ -83,9 +84,9 @@ static void *thread_main(void *pArg){ p->completed++; while( p->opnum<=p->completed ) sched_yield(); } - if( p->vm ){ - sqlite3_finalize(p->vm, 0); - p->vm = 0; + if( p->pStmt ){ + sqlite3_finalize(p->pStmt); + p->pStmt = 0; } if( p->db ){ sqlite3_close(p->db); @@ -445,11 +446,11 @@ static void do_compile(Thread *p){ p->rc = SQLITE_ERROR; return; } - if( p->vm ){ - sqlite3_finalize(p->vm, 0); - p->vm = 0; + if( p->pStmt ){ + sqlite3_finalize(p->pStmt); + p->pStmt = 0; } - p->rc = sqlite3_compile(p->db, p->zArg, 0, &p->vm, &p->zErr); + p->rc = sqlite3_prepare(p->db, p->zArg, -1, &p->pStmt, 0); } /* @@ -487,12 +488,22 @@ static int tcl_thread_compile( ** This procedure runs in the thread to step the virtual machine. */ static void do_step(Thread *p){ - if( p->vm==0 ){ + int i; + if( p->pStmt==0 ){ p->zErr = p->zStaticErr = "no virtual machine available"; p->rc = SQLITE_ERROR; return; } - p->rc = sqlite3_step(p->vm, &p->argc, &p->argv, &p->colv); + p->rc = sqlite3_step(p->pStmt); + if( p->rc==SQLITE_ROW ){ + p->argc = sqlite3_column_count(p->pStmt); + for(i=0; ipStmt); i++){ + p->argv[i] = sqlite3_column_data(p->pStmt, i); + } + for(i=0; iargc; i++){ + p->colv[i] = sqlite3_column_name(p->pStmt, i); + } + } } /* @@ -528,13 +539,13 @@ static int tcl_thread_step( ** This procedure runs in the thread to finalize a virtual machine. */ static void do_finalize(Thread *p){ - if( p->vm==0 ){ + if( p->pStmt==0 ){ p->zErr = p->zStaticErr = "no virtual machine available"; p->rc = SQLITE_ERROR; return; } - p->rc = sqlite3_finalize(p->vm, &p->zErr); - p->vm = 0; + p->rc = sqlite3_finalize(p->pStmt); + p->pStmt = 0; } /* diff --git a/src/vdbe.c b/src/vdbe.c index 21c945bebf..2d9a0b0c38 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -15,7 +15,7 @@ ** VDBE instances. This file is solely interested in executing ** the VDBE program. ** -** In the external interface, an "sqlite_vm*" is an opaque pointer +** In the external interface, an "sqlite3_stmt*" is an opaque pointer ** to a VDBE. ** ** The SQL parser generates a program which is then executed by @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.330 2004/05/26 00:07:26 danielk1977 Exp $ +** $Id: vdbe.c,v 1.331 2004/05/26 02:04:58 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 0cd57ace59..77f5f7c184 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -311,7 +311,7 @@ struct Context { ** An instance of the virtual machine. This structure contains the complete ** state of the virtual machine. ** -** The "sqlite_vm" structure pointer that is returned by sqlite3_compile() +** The "sqlite3_stmt" structure pointer that is returned by sqlite3_compile() ** is really a pointer to an instance of this structure. */ struct Vdbe { diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 402820c84d..4167eb78ca 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -10,7 +10,7 @@ ** ************************************************************************* ** This file contains code used for creating, destroying, and populating -** a VDBE (or an "sqlite_vm" as it is known to the outside world.) Prior +** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior ** to version 2.8.7, all this code was combined into the vdbe.c source file. ** But that file was getting too big so this subroutines were split out. */ @@ -997,18 +997,6 @@ int sqlite3VdbeFinalize(Vdbe *p, char **pzErrMsg){ return rc; } -/* -** Set the values of all variables. Variable $1 in the original SQL will -** be the string azValue[0]. $2 will have the value azValue[1]. And -** so forth. If a value is out of range (for example $3 when nValue==2) -** then its value will be NULL. -** -** This routine overrides any prior call. -*/ -int sqlite3_bind(sqlite_vm *pVm, int i, const char *zVal, int len, int copy){ - return sqlite3_bind_text(pVm, i, zVal, len, copy); -} - /* ** Delete an entire VDBE. */