Ensure that variables are not used in the WINDOW clause of a query inside
of a trigger. dbsqlfuzz d9cf66100064952b66951845dfab41de1c124611 FossilOrigin-Name: 1a341378ab24a5091e6cf03b9e957d11b2bfe5c711835e8c583785f8fa0125d3
This commit is contained in:
@@ -514,6 +514,7 @@ void sqlite3FixInit(
|
||||
pFix->w.xSelectCallback2 = 0;
|
||||
pFix->w.walkerDepth = 0;
|
||||
pFix->w.eCode = 0;
|
||||
pFix->w.bWalkWinDefn = 1;
|
||||
pFix->w.u.pFix = pFix;
|
||||
}
|
||||
|
||||
|
||||
@@ -3833,6 +3833,7 @@ struct Walker {
|
||||
void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
|
||||
int walkerDepth; /* Number of subqueries */
|
||||
u16 eCode; /* A small processing code */
|
||||
unsigned bWalkWinDefn : 1; /* True to walk pWinDefn */
|
||||
union { /* Extra data for callback */
|
||||
NameContext *pNC; /* Naming context */
|
||||
int n; /* A counter */
|
||||
|
||||
+6
-4
@@ -130,10 +130,12 @@ int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
|
||||
if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
|
||||
if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
|
||||
if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
|
||||
#if !defined(SQLITE_OMIT_WINDOWFUNC) && !defined(SQLITE_OMIT_ALTERTABLE)
|
||||
{
|
||||
Parse *pParse = pWalker->pParse;
|
||||
if( pParse && IN_RENAME_OBJECT ){
|
||||
#if !defined(SQLITE_OMIT_WINDOWFUNC)
|
||||
if( p->pWinDefn ){
|
||||
Parse *pParse;
|
||||
if( pWalker->bWalkWinDefn
|
||||
|| ((pParse = pWalker->pParse)!=0 && IN_RENAME_OBJECT)
|
||||
){
|
||||
/* The following may return WRC_Abort if there are unresolvable
|
||||
** symbols (e.g. a table that does not exist) in a window definition. */
|
||||
int rc = walkWindowList(pWalker, p->pWinDefn, 0);
|
||||
|
||||
Reference in New Issue
Block a user