Commit 60ce8cb3 by AJ ONeal

updated to sqlite v3.7.13

parent ea611062
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
# #
AC_PREREQ(2.61) AC_PREREQ(2.61)
AC_INIT(sqlite, 3.7.8, http://www.sqlite.org) AC_INIT(sqlite, 3.7.13, http://www.sqlite.org)
AC_CONFIG_SRCDIR([sqlite3.c]) AC_CONFIG_SRCDIR([sqlite3.c])
# Use automake. # Use automake.
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -49,8 +49,10 @@ struct sqlite3_api_routines { ...@@ -49,8 +49,10 @@ struct sqlite3_api_routines {
int (*busy_timeout)(sqlite3*,int ms); int (*busy_timeout)(sqlite3*,int ms);
int (*changes)(sqlite3*); int (*changes)(sqlite3*);
int (*close)(sqlite3*); int (*close)(sqlite3*);
int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*)); int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*)); int eTextRep,const char*));
int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
int eTextRep,const void*));
const void * (*column_blob)(sqlite3_stmt*,int iCol); const void * (*column_blob)(sqlite3_stmt*,int iCol);
int (*column_bytes)(sqlite3_stmt*,int iCol); int (*column_bytes)(sqlite3_stmt*,int iCol);
int (*column_bytes16)(sqlite3_stmt*,int iCol); int (*column_bytes16)(sqlite3_stmt*,int iCol);
...@@ -75,10 +77,18 @@ struct sqlite3_api_routines { ...@@ -75,10 +77,18 @@ struct sqlite3_api_routines {
void * (*commit_hook)(sqlite3*,int(*)(void*),void*); void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
int (*complete)(const char*sql); int (*complete)(const char*sql);
int (*complete16)(const void*sql); int (*complete16)(const void*sql);
int (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*)); int (*create_collation)(sqlite3*,const char*,int,void*,
int (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*)); int(*)(void*,int,const void*,int,const void*));
int (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); int (*create_collation16)(sqlite3*,const void*,int,void*,
int (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); int(*)(void*,int,const void*,int,const void*));
int (*create_function)(sqlite3*,const char*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*));
int (*create_function16)(sqlite3*,const void*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*));
int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
int (*data_count)(sqlite3_stmt*pStmt); int (*data_count)(sqlite3_stmt*pStmt);
sqlite3 * (*db_handle)(sqlite3_stmt*); sqlite3 * (*db_handle)(sqlite3_stmt*);
...@@ -123,16 +133,19 @@ struct sqlite3_api_routines { ...@@ -123,16 +133,19 @@ struct sqlite3_api_routines {
void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
void (*result_value)(sqlite3_context*,sqlite3_value*); void (*result_value)(sqlite3_context*,sqlite3_value*);
void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*); int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
const char*,const char*),void*);
void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
char * (*snprintf)(int,char*,const char*,...); char * (*snprintf)(int,char*,const char*,...);
int (*step)(sqlite3_stmt*); int (*step)(sqlite3_stmt*);
int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*); int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
char const**,char const**,int*,int*,int*);
void (*thread_cleanup)(void); void (*thread_cleanup)(void);
int (*total_changes)(sqlite3*); int (*total_changes)(sqlite3*);
void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*); void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
sqlite_int64),void*);
void * (*user_data)(sqlite3_context*); void * (*user_data)(sqlite3_context*);
const void * (*value_blob)(sqlite3_value*); const void * (*value_blob)(sqlite3_value*);
int (*value_bytes)(sqlite3_value*); int (*value_bytes)(sqlite3_value*);
...@@ -154,15 +167,19 @@ struct sqlite3_api_routines { ...@@ -154,15 +167,19 @@ struct sqlite3_api_routines {
int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
int (*clear_bindings)(sqlite3_stmt*); int (*clear_bindings)(sqlite3_stmt*);
/* Added by 3.4.1 */ /* Added by 3.4.1 */
int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *)); int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
void (*xDestroy)(void *));
/* Added by 3.5.0 */ /* Added by 3.5.0 */
int (*bind_zeroblob)(sqlite3_stmt*,int,int); int (*bind_zeroblob)(sqlite3_stmt*,int,int);
int (*blob_bytes)(sqlite3_blob*); int (*blob_bytes)(sqlite3_blob*);
int (*blob_close)(sqlite3_blob*); int (*blob_close)(sqlite3_blob*);
int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**); int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
int,sqlite3_blob**);
int (*blob_read)(sqlite3_blob*,void*,int,int); int (*blob_read)(sqlite3_blob*,void*,int,int);
int (*blob_write)(sqlite3_blob*,const void*,int,int); int (*blob_write)(sqlite3_blob*,const void*,int,int);
int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*)); int (*create_collation_v2)(sqlite3*,const char*,int,void*,
int(*)(void*,int,const void*,int,const void*),
void(*)(void*));
int (*file_control)(sqlite3*,const char*,int,void*); int (*file_control)(sqlite3*,const char*,int,void*);
sqlite3_int64 (*memory_highwater)(int); sqlite3_int64 (*memory_highwater)(int);
sqlite3_int64 (*memory_used)(void); sqlite3_int64 (*memory_used)(void);
...@@ -198,7 +215,11 @@ struct sqlite3_api_routines { ...@@ -198,7 +215,11 @@ struct sqlite3_api_routines {
int (*backup_step)(sqlite3_backup*,int); int (*backup_step)(sqlite3_backup*,int);
const char *(*compileoption_get)(int); const char *(*compileoption_get)(int);
int (*compileoption_used)(const char*); int (*compileoption_used)(const char*);
int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*)); int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*),
void(*xDestroy)(void*));
int (*db_config)(sqlite3*,int,...); int (*db_config)(sqlite3*,int,...);
sqlite3_mutex *(*db_mutex)(sqlite3*); sqlite3_mutex *(*db_mutex)(sqlite3*);
int (*db_status)(sqlite3*,int,int*,int*,int); int (*db_status)(sqlite3*,int,int*,int*,int);
......
...@@ -19,7 +19,7 @@ dnl to configure the system for the local environment. ...@@ -19,7 +19,7 @@ dnl to configure the system for the local environment.
# so you can encode the package version directly into the source files. # so you can encode the package version directly into the source files.
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
AC_INIT([sqlite], [3.7.8]) AC_INIT([sqlite], [3.7.13])
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Call TEA_INIT as the first TEA_ macro to set up initial vars. # Call TEA_INIT as the first TEA_ macro to set up initial vars.
......
...@@ -924,7 +924,7 @@ static int auth_callback( ...@@ -924,7 +924,7 @@ static int auth_callback(
Tcl_DStringAppendElement(&str, zArg4 ? zArg4 : ""); Tcl_DStringAppendElement(&str, zArg4 ? zArg4 : "");
rc = Tcl_GlobalEval(pDb->interp, Tcl_DStringValue(&str)); rc = Tcl_GlobalEval(pDb->interp, Tcl_DStringValue(&str));
Tcl_DStringFree(&str); Tcl_DStringFree(&str);
zReply = Tcl_GetStringResult(pDb->interp); zReply = rc==TCL_OK ? Tcl_GetStringResult(pDb->interp) : "SQLITE_DENY";
if( strcmp(zReply,"SQLITE_OK")==0 ){ if( strcmp(zReply,"SQLITE_OK")==0 ){
rc = SQLITE_OK; rc = SQLITE_OK;
}else if( strcmp(zReply,"SQLITE_DENY")==0 ){ }else if( strcmp(zReply,"SQLITE_DENY")==0 ){
...@@ -973,14 +973,12 @@ static char *local_getline(char *zPrompt, FILE *in){ ...@@ -973,14 +973,12 @@ static char *local_getline(char *zPrompt, FILE *in){
char *zLine; char *zLine;
int nLine; int nLine;
int n; int n;
int eol;
nLine = 100; nLine = 100;
zLine = malloc( nLine ); zLine = malloc( nLine );
if( zLine==0 ) return 0; if( zLine==0 ) return 0;
n = 0; n = 0;
eol = 0; while( 1 ){
while( !eol ){
if( n+100>nLine ){ if( n+100>nLine ){
nLine = nLine*2 + 100; nLine = nLine*2 + 100;
zLine = realloc(zLine, nLine); zLine = realloc(zLine, nLine);
...@@ -992,14 +990,13 @@ static char *local_getline(char *zPrompt, FILE *in){ ...@@ -992,14 +990,13 @@ static char *local_getline(char *zPrompt, FILE *in){
return 0; return 0;
} }
zLine[n] = 0; zLine[n] = 0;
eol = 1;
break; break;
} }
while( zLine[n] ){ n++; } while( zLine[n] ){ n++; }
if( n>0 && zLine[n-1]=='\n' ){ if( n>0 && zLine[n-1]=='\n' ){
n--; n--;
zLine[n] = 0; zLine[n] = 0;
eol = 1; break;
} }
} }
zLine = realloc( zLine, n+1 ); zLine = realloc( zLine, n+1 );
...@@ -1171,7 +1168,7 @@ static int dbPrepareAndBind( ...@@ -1171,7 +1168,7 @@ static int dbPrepareAndBind(
memset(pPreStmt, 0, nByte); memset(pPreStmt, 0, nByte);
pPreStmt->pStmt = pStmt; pPreStmt->pStmt = pStmt;
pPreStmt->nSql = (*pzOut - zSql); pPreStmt->nSql = (int)(*pzOut - zSql);
pPreStmt->zSql = sqlite3_sql(pStmt); pPreStmt->zSql = sqlite3_sql(pStmt);
pPreStmt->apParm = (Tcl_Obj **)&pPreStmt[1]; pPreStmt->apParm = (Tcl_Obj **)&pPreStmt[1];
#ifdef SQLITE_TEST #ifdef SQLITE_TEST
...@@ -2126,7 +2123,6 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -2126,7 +2123,6 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
zCommit = "COMMIT"; zCommit = "COMMIT";
while( (zLine = local_getline(0, in))!=0 ){ while( (zLine = local_getline(0, in))!=0 ){
char *z; char *z;
i = 0;
lineno++; lineno++;
azCol[0] = zLine; azCol[0] = zLine;
for(i=0, z=zLine; *z; z++){ for(i=0, z=zLine; *z; z++){
...@@ -2555,14 +2551,16 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -2555,14 +2551,16 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
** Change the encryption key on the currently open database. ** Change the encryption key on the currently open database.
*/ */
case DB_REKEY: { case DB_REKEY: {
#ifdef SQLITE_HAS_CODEC
int nKey; int nKey;
void *pKey; void *pKey;
#endif
if( objc!=3 ){ if( objc!=3 ){
Tcl_WrongNumArgs(interp, 2, objv, "KEY"); Tcl_WrongNumArgs(interp, 2, objv, "KEY");
return TCL_ERROR; return TCL_ERROR;
} }
pKey = Tcl_GetByteArrayFromObj(objv[2], &nKey);
#ifdef SQLITE_HAS_CODEC #ifdef SQLITE_HAS_CODEC
pKey = Tcl_GetByteArrayFromObj(objv[2], &nKey);
rc = sqlite3_rekey(pDb->db, pKey, nKey); rc = sqlite3_rekey(pDb->db, pKey, nKey);
if( rc ){ if( rc ){
Tcl_AppendResult(interp, sqlite3ErrStr(rc), 0); Tcl_AppendResult(interp, sqlite3ErrStr(rc), 0);
...@@ -2925,8 +2923,6 @@ static int DbObjCmdAdaptor( ...@@ -2925,8 +2923,6 @@ static int DbObjCmdAdaptor(
*/ */
static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
SqliteDb *p; SqliteDb *p;
void *pKey = 0;
int nKey = 0;
const char *zArg; const char *zArg;
char *zErrMsg; char *zErrMsg;
int i; int i;
...@@ -2934,6 +2930,10 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -2934,6 +2930,10 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
const char *zVfs = 0; const char *zVfs = 0;
int flags; int flags;
Tcl_DString translatedFilename; Tcl_DString translatedFilename;
#ifdef SQLITE_HAS_CODEC
void *pKey = 0;
int nKey = 0;
#endif
/* In normal use, each TCL interpreter runs in a single thread. So /* In normal use, each TCL interpreter runs in a single thread. So
** by default, we can turn of mutexing on SQLite database connections. ** by default, we can turn of mutexing on SQLite database connections.
...@@ -2965,7 +2965,9 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -2965,7 +2965,9 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
for(i=3; i+1<objc; i+=2){ for(i=3; i+1<objc; i+=2){
zArg = Tcl_GetString(objv[i]); zArg = Tcl_GetString(objv[i]);
if( strcmp(zArg,"-key")==0 ){ if( strcmp(zArg,"-key")==0 ){
#ifdef SQLITE_HAS_CODEC
pKey = Tcl_GetByteArrayFromObj(objv[i+1], &nKey); pKey = Tcl_GetByteArrayFromObj(objv[i+1], &nKey);
#endif
}else if( strcmp(zArg, "-vfs")==0 ){ }else if( strcmp(zArg, "-vfs")==0 ){
zVfs = Tcl_GetString(objv[i+1]); zVfs = Tcl_GetString(objv[i+1]);
}else if( strcmp(zArg, "-readonly")==0 ){ }else if( strcmp(zArg, "-readonly")==0 ){
...@@ -3004,6 +3006,14 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -3004,6 +3006,14 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
}else{ }else{
flags &= ~SQLITE_OPEN_FULLMUTEX; flags &= ~SQLITE_OPEN_FULLMUTEX;
} }
}else if( strcmp(zArg, "-uri")==0 ){
int b;
if( Tcl_GetBooleanFromObj(interp, objv[i+1], &b) ) return TCL_ERROR;
if( b ){
flags |= SQLITE_OPEN_URI;
}else{
flags &= ~SQLITE_OPEN_URI;
}
}else{ }else{
Tcl_AppendResult(interp, "unknown option: ", zArg, (char*)0); Tcl_AppendResult(interp, "unknown option: ", zArg, (char*)0);
return TCL_ERROR; return TCL_ERROR;
...@@ -3012,7 +3022,7 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){ ...@@ -3012,7 +3022,7 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
if( objc<3 || (objc&1)!=1 ){ if( objc<3 || (objc&1)!=1 ){
Tcl_WrongNumArgs(interp, 1, objv, Tcl_WrongNumArgs(interp, 1, objv,
"HANDLE FILENAME ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?" "HANDLE FILENAME ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?"
" ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN?" " ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?"
#ifdef SQLITE_HAS_CODEC #ifdef SQLITE_HAS_CODEC
" ?-key CODECKEY?" " ?-key CODECKEY?"
#endif #endif
...@@ -3103,23 +3113,19 @@ EXTERN int Sqlite3_Init(Tcl_Interp *interp){ ...@@ -3103,23 +3113,19 @@ EXTERN int Sqlite3_Init(Tcl_Interp *interp){
return TCL_OK; return TCL_OK;
} }
EXTERN int Tclsqlite3_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } EXTERN int Tclsqlite3_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); }
EXTERN int Sqlite3_SafeInit(Tcl_Interp *interp){ return TCL_OK; }
EXTERN int Tclsqlite3_SafeInit(Tcl_Interp *interp){ return TCL_OK; }
EXTERN int Sqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Sqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
EXTERN int Tclsqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Tclsqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
EXTERN int Sqlite3_SafeUnload(Tcl_Interp *interp, int flags){ return TCL_OK; }
EXTERN int Tclsqlite3_SafeUnload(Tcl_Interp *interp, int flags){ return TCL_OK;}
/* Because it accesses the file-system and uses persistent state, SQLite
** is not considered appropriate for safe interpreters. Hence, we deliberately
** omit the _SafeInit() interfaces.
*/
#ifndef SQLITE_3_SUFFIX_ONLY #ifndef SQLITE_3_SUFFIX_ONLY
int Sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } int Sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); }
int Tclsqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } int Tclsqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); }
int Sqlite_SafeInit(Tcl_Interp *interp){ return TCL_OK; }
int Tclsqlite_SafeInit(Tcl_Interp *interp){ return TCL_OK; }
int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
int Sqlite_SafeUnload(Tcl_Interp *interp, int flags){ return TCL_OK; }
int Tclsqlite_SafeUnload(Tcl_Interp *interp, int flags){ return TCL_OK;}
#endif #endif
#ifdef TCLSH #ifdef TCLSH
...@@ -3469,7 +3475,7 @@ static int md5file_cmd(void*cd, Tcl_Interp*interp, int argc, const char **argv){ ...@@ -3469,7 +3475,7 @@ static int md5file_cmd(void*cd, Tcl_Interp*interp, int argc, const char **argv){
MD5Init(&ctx); MD5Init(&ctx);
for(;;){ for(;;){
int n; int n;
n = fread(zBuf, 1, sizeof(zBuf), in); n = (int)fread(zBuf, 1, sizeof(zBuf), in);
if( n<=0 ) break; if( n<=0 ) break;
MD5Update(&ctx, (unsigned char*)zBuf, (unsigned)n); MD5Update(&ctx, (unsigned char*)zBuf, (unsigned)n);
} }
...@@ -3515,7 +3521,7 @@ static void md5step(sqlite3_context *context, int argc, sqlite3_value **argv){ ...@@ -3515,7 +3521,7 @@ static void md5step(sqlite3_context *context, int argc, sqlite3_value **argv){
for(i=0; i<argc; i++){ for(i=0; i<argc; i++){
const char *zData = (char*)sqlite3_value_text(argv[i]); const char *zData = (char*)sqlite3_value_text(argv[i]);
if( zData ){ if( zData ){
MD5Update(p, (unsigned char*)zData, strlen(zData)); MD5Update(p, (unsigned char*)zData, (int)strlen(zData));
} }
} }
} }
...@@ -3544,33 +3550,34 @@ int Md5_Register(sqlite3 *db){ ...@@ -3544,33 +3550,34 @@ int Md5_Register(sqlite3 *db){
** the TCL interpreter reads and evaluates that file. ** the TCL interpreter reads and evaluates that file.
*/ */
#if TCLSH==1 #if TCLSH==1
static char zMainloop[] = static const char *tclsh_main_loop(void){
"set line {}\n" static const char zMainloop[] =
"while {![eof stdin]} {\n" "set line {}\n"
"if {$line!=\"\"} {\n" "while {![eof stdin]} {\n"
"puts -nonewline \"> \"\n" "if {$line!=\"\"} {\n"
"} else {\n" "puts -nonewline \"> \"\n"
"puts -nonewline \"% \"\n" "} else {\n"
"}\n" "puts -nonewline \"% \"\n"
"flush stdout\n" "}\n"
"append line [gets stdin]\n" "flush stdout\n"
"if {[info complete $line]} {\n" "append line [gets stdin]\n"
"if {[catch {uplevel #0 $line} result]} {\n" "if {[info complete $line]} {\n"
"puts stderr \"Error: $result\"\n" "if {[catch {uplevel #0 $line} result]} {\n"
"} elseif {$result!=\"\"} {\n" "puts stderr \"Error: $result\"\n"
"puts $result\n" "} elseif {$result!=\"\"} {\n"
"puts $result\n"
"}\n"
"set line {}\n"
"} else {\n"
"append line \\n\n"
"}\n" "}\n"
"set line {}\n"
"} else {\n"
"append line \\n\n"
"}\n" "}\n"
"}\n" ;
; return zMainloop;
}
#endif #endif
#if TCLSH==2 #if TCLSH==2
static char zMainloop[] = static const char *tclsh_main_loop(void);
#include "spaceanal_tcl.h"
;
#endif #endif
#ifdef SQLITE_TEST #ifdef SQLITE_TEST
...@@ -3654,6 +3661,17 @@ static void init_all(Tcl_Interp *interp){ ...@@ -3654,6 +3661,17 @@ static void init_all(Tcl_Interp *interp){
Md5_Init(interp); Md5_Init(interp);
#endif #endif
/* Install the [register_dbstat_vtab] command to access the implementation
** of virtual table dbstat (source file test_stat.c). This command is
** required for testfixture and sqlite3_analyzer, but not by the production
** Tcl extension. */
#if defined(SQLITE_TEST) || TCLSH==2
{
extern int SqlitetestStat_Init(Tcl_Interp*);
SqlitetestStat_Init(interp);
}
#endif
#ifdef SQLITE_TEST #ifdef SQLITE_TEST
{ {
extern int Sqliteconfig_Init(Tcl_Interp*); extern int Sqliteconfig_Init(Tcl_Interp*);
...@@ -3683,7 +3701,6 @@ static void init_all(Tcl_Interp *interp){ ...@@ -3683,7 +3701,6 @@ static void init_all(Tcl_Interp *interp){
extern int Sqlitetestbackup_Init(Tcl_Interp*); extern int Sqlitetestbackup_Init(Tcl_Interp*);
extern int Sqlitetestintarray_Init(Tcl_Interp*); extern int Sqlitetestintarray_Init(Tcl_Interp*);
extern int Sqlitetestvfs_Init(Tcl_Interp *); extern int Sqlitetestvfs_Init(Tcl_Interp *);
extern int SqlitetestStat_Init(Tcl_Interp*);
extern int Sqlitetestrtree_Init(Tcl_Interp*); extern int Sqlitetestrtree_Init(Tcl_Interp*);
extern int Sqlitequota_Init(Tcl_Interp*); extern int Sqlitequota_Init(Tcl_Interp*);
extern int Sqlitemultiplex_Init(Tcl_Interp*); extern int Sqlitemultiplex_Init(Tcl_Interp*);
...@@ -3727,7 +3744,6 @@ static void init_all(Tcl_Interp *interp){ ...@@ -3727,7 +3744,6 @@ static void init_all(Tcl_Interp *interp){
Sqlitetestbackup_Init(interp); Sqlitetestbackup_Init(interp);
Sqlitetestintarray_Init(interp); Sqlitetestintarray_Init(interp);
Sqlitetestvfs_Init(interp); Sqlitetestvfs_Init(interp);
SqlitetestStat_Init(interp);
Sqlitetestrtree_Init(interp); Sqlitetestrtree_Init(interp);
Sqlitequota_Init(interp); Sqlitequota_Init(interp);
Sqlitemultiplex_Init(interp); Sqlitemultiplex_Init(interp);
...@@ -3763,12 +3779,13 @@ int TCLSH_MAIN(int argc, char **argv){ ...@@ -3763,12 +3779,13 @@ int TCLSH_MAIN(int argc, char **argv){
** sqlite3_initialize() is. */ ** sqlite3_initialize() is. */
sqlite3_shutdown(); sqlite3_shutdown();
Tcl_FindExecutable(argv[0]);
interp = Tcl_CreateInterp();
#if TCLSH==2 #if TCLSH==2
sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
#endif #endif
Tcl_FindExecutable(argv[0]);
interp = Tcl_CreateInterp();
init_all(interp); init_all(interp);
if( argc>=2 ){ if( argc>=2 ){
int i; int i;
...@@ -3789,7 +3806,7 @@ int TCLSH_MAIN(int argc, char **argv){ ...@@ -3789,7 +3806,7 @@ int TCLSH_MAIN(int argc, char **argv){
} }
} }
if( TCLSH==2 || argc<=1 ){ if( TCLSH==2 || argc<=1 ){
Tcl_GlobalEval(interp, zMainloop); Tcl_GlobalEval(interp, tclsh_main_loop());
} }
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment