diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 4 | ||||
-rw-r--r-- | src/parse.y | 3 | ||||
-rw-r--r-- | src/sqliteInt.h | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/expr.c b/src/expr.c index 942b2467c..dd0c3cc06 100644 --- a/src/expr.c +++ b/src/expr.c @@ -938,7 +938,7 @@ Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){ ** instance of the wildcard, the next sequential variable number is ** assigned. */ -void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ +void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n){ sqlite3 *db = pParse->db; const char *z; @@ -947,13 +947,13 @@ void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ z = pExpr->u.zToken; assert( z!=0 ); assert( z[0]!=0 ); + assert( n==sqlite3Strlen30(z) ); if( z[1]==0 ){ /* Wildcard of the form "?". Assign the next variable number */ assert( z[0]=='?' ); pExpr->iColumn = (ynVar)(++pParse->nVar); }else{ ynVar x = 0; - u32 n = sqlite3Strlen30(z); if( z[0]=='?' ){ /* Wildcard of the form "?nnn". Convert "nnn" to an integer and ** use it as the variable number */ diff --git a/src/parse.y b/src/parse.y index 5c5e450f3..1eff123d1 100644 --- a/src/parse.y +++ b/src/parse.y @@ -890,8 +890,9 @@ term(A) ::= INTEGER(X). { } expr(A) ::= VARIABLE(X). { if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){ + u32 n = X.n; spanExpr(&A, pParse, TK_VARIABLE, X); - sqlite3ExprAssignVarNumber(pParse, A.pExpr); + sqlite3ExprAssignVarNumber(pParse, A.pExpr, n); }else{ /* When doing a nested parse, one can include terms in an expression ** that look like this: #1 #2 ... These terms refer to registers diff --git a/src/sqliteInt.h b/src/sqliteInt.h index fade8a34d..2d13f2635 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3555,7 +3555,7 @@ Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*); void sqlite3PExprAddSelect(Parse*, Expr*, Select*); Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); -void sqlite3ExprAssignVarNumber(Parse*, Expr*); +void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); void sqlite3ExprDelete(sqlite3*, Expr*); ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); |