mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Bug fixes. (CVS 306)
FossilOrigin-Name: 84997fda33fd6ce93b821d3da3a7251cf60e06ec
This commit is contained in:
@ -11,7 +11,7 @@
|
||||
*************************************************************************
|
||||
** A TCL Interface to SQLite
|
||||
**
|
||||
** $Id: tclsqlite.c,v 1.27 2001/10/22 02:58:10 drh Exp $
|
||||
** $Id: tclsqlite.c,v 1.28 2001/11/09 13:41:10 drh Exp $
|
||||
*/
|
||||
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include "tcl.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
** If TCL uses UTF-8 and SQLite is configured to use iso8859, then we
|
||||
@ -50,7 +51,7 @@ struct CallbackData {
|
||||
Tcl_Interp *interp; /* The TCL interpreter */
|
||||
char *zArray; /* The array into which data is written */
|
||||
Tcl_Obj *pCode; /* The code to execute for each row */
|
||||
int once; /* Set only for the first invocation of callback */
|
||||
int once; /* Set for first callback only */
|
||||
int tcl_rc; /* Return code from TCL script */
|
||||
int nColName; /* Number of entries in the azColName[] array */
|
||||
char **azColName; /* Column names translated to UTF-8 */
|
||||
@ -74,26 +75,29 @@ static int DbEvalCallback(
|
||||
int i, rc;
|
||||
Tcl_DString dCol;
|
||||
Tcl_DStringInit(&dCol);
|
||||
if( azCol==0 || (cbData->once && cbData->zArray[0]) ){
|
||||
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);
|
||||
if( azCol ){
|
||||
cbData->azColName = malloc( nCol*sizeof(char*) );
|
||||
if( cbData->azColName==0 ){ return 1; }
|
||||
if( cbData->azColName==0 ){
|
||||
assert( cbData->once );
|
||||
cbData->once = 0;
|
||||
if( cbData->zArray[0] ){
|
||||
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);
|
||||
}
|
||||
cbData->azColName = malloc( nCol*sizeof(char*) );
|
||||
if( cbData->azColName==0 ){ return 1; }
|
||||
cbData->nColName = nCol;
|
||||
for(i=0; i<nCol; i++){
|
||||
Tcl_ExternalToUtfDString(NULL, azN[i], -1, &dCol);
|
||||
if( azCol ){
|
||||
cbData->azColName[i] = malloc( Tcl_DStringLength(&dCol) + 1);
|
||||
if( cbData->azColName[i] ){
|
||||
strcpy(cbData->azColName[i], Tcl_DStringValue(&dCol));
|
||||
}
|
||||
cbData->azColName[i] = malloc( Tcl_DStringLength(&dCol) + 1 );
|
||||
if( cbData->azColName[i] ){
|
||||
strcpy(cbData->azColName[i], Tcl_DStringValue(&dCol));
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
if( cbData->zArray[0] ){
|
||||
Tcl_SetVar2(cbData->interp, cbData->zArray, "*",
|
||||
Tcl_DStringValue(&dCol), TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
|
||||
}
|
||||
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", Tcl_DStringValue(&dCol),
|
||||
TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
|
||||
Tcl_DStringFree(&dCol);
|
||||
}
|
||||
cbData->once = 0;
|
||||
}
|
||||
if( azCol!=0 ){
|
||||
if( cbData->zArray[0] ){
|
||||
@ -414,6 +418,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
|
||||
if( cbData.azColName[i] ) free(cbData.azColName[i]);
|
||||
}
|
||||
free(cbData.azColName);
|
||||
cbData.azColName = 0;
|
||||
}
|
||||
#endif
|
||||
return rc;
|
||||
|
@ -13,7 +13,7 @@
|
||||
** is not included in the SQLite library. It is used for automated
|
||||
** testing of the SQLite library.
|
||||
**
|
||||
** $Id: test3.c,v 1.12 2001/09/23 02:35:53 drh Exp $
|
||||
** $Id: test3.c,v 1.13 2001/11/09 13:41:10 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "pager.h"
|
||||
@ -589,6 +589,8 @@ static int btree_move_to(
|
||||
Tcl_AppendResult(interp, errorName(rc), 0);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if( res<0 ) res = -1;
|
||||
if( res>0 ) res = 1;
|
||||
sprintf(zBuf,"%d",res);
|
||||
Tcl_AppendResult(interp, zBuf, 0);
|
||||
return SQLITE_OK;
|
||||
|
@ -13,7 +13,7 @@
|
||||
** the WHERE clause of SQL statements. Also found here are subroutines
|
||||
** to generate VDBE code to evaluate expressions.
|
||||
**
|
||||
** $Id: where.c,v 1.26 2001/11/08 00:45:22 drh Exp $
|
||||
** $Id: where.c,v 1.27 2001/11/09 13:41:10 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
|
||||
@ -409,7 +409,6 @@ WhereInfo *sqliteWhereBegin(
|
||||
if( goDirect ){
|
||||
/* Case 1: We can directly reference a single row using the ROWID field.
|
||||
*/
|
||||
cont = brk;
|
||||
for(k=0; k<nExpr; k++){
|
||||
if( aExpr[k].p==0 ) continue;
|
||||
if( aExpr[k].idxLeft==idx
|
||||
|
Reference in New Issue
Block a user