1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +03:00

Minor changes to function tokenExpr() in order to claw back cycles lost to the

rename-column change.

FossilOrigin-Name: 479976955ecb27c3e77a280187eaf23722178549e072b34f3183354a27a4e5c3
This commit is contained in:
dan
2018-08-21 08:29:48 +00:00
parent b013738b4c
commit d145e5f46f
5 changed files with 26 additions and 13 deletions

View File

@@ -939,7 +939,7 @@ struct RenameCtx {
** Add a new RenameToken object mapping parse tree element pPtr into
** token *pToken to the Parse object currently under construction.
*/
void sqlite3RenameToken(Parse *pParse, void *pPtr, Token *pToken){
void *sqlite3RenameToken(Parse *pParse, void *pPtr, Token *pToken){
RenameToken *pNew;
pNew = sqlite3DbMallocZero(pParse->db, sizeof(RenameToken));
if( pNew ){
@@ -948,6 +948,7 @@ void sqlite3RenameToken(Parse *pParse, void *pPtr, Token *pToken){
pNew->pNext = pParse->pRename;
pParse->pRename = pNew;
}
return pPtr;
}
/*

View File

@@ -929,10 +929,19 @@ idlist(A) ::= nm(Y).
static Expr *tokenExpr(Parse *pParse, int op, Token t){
Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
if( p ){
memset(p, 0, sizeof(Expr));
/* memset(p, 0, sizeof(Expr)); */
p->op = (u8)op;
p->affinity = 0;
p->flags = EP_Leaf;
p->iAgg = -1;
p->pLeft = p->pRight = 0;
p->x.pList = 0;
p->pAggInfo = 0;
p->pTab = 0;
p->op2 = 0;
#ifndef SQLITE_OMIT_WINDOWFUNC
p->pWin = 0;
#endif
p->u.zToken = (char*)&p[1];
memcpy(p->u.zToken, t.z, t.n);
p->u.zToken[t.n] = 0;
@@ -940,13 +949,16 @@ idlist(A) ::= nm(Y).
if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
sqlite3Dequote(p->u.zToken);
}
if( IN_RENAME_COLUMN ) sqlite3RenameToken(pParse, (void*)p, &t);
#if SQLITE_MAX_EXPR_DEPTH>0
p->nHeight = 1;
#endif
if( IN_RENAME_COLUMN ){
return (Expr*)sqlite3RenameToken(pParse, (void*)p, &t);
}
}
return p;
}
}
expr(A) ::= term(A).

View File

@@ -4236,7 +4236,7 @@ int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*);
void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
void sqlite3AlterFinishAddColumn(Parse *, Token *);
void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
void sqlite3RenameToken(Parse*, void*, Token*);
void *sqlite3RenameToken(Parse*, void*, Token*);
void sqlite3MoveRenameToken(Parse*, void *pTo, void *pFrom);
CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*);
char sqlite3AffinityType(const char*, Column*);