aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/build.c1
-rw-r--r--src/delete.c1
-rw-r--r--src/select.c2
-rw-r--r--src/sqliteInt.h5
-rw-r--r--src/where.c1
5 files changed, 8 insertions, 2 deletions
diff --git a/src/build.c b/src/build.c
index 58762bf37..1bf082712 100644
--- a/src/build.c
+++ b/src/build.c
@@ -4927,6 +4927,7 @@ void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
}else{
pItem->u1.zIndexedBy = sqlite3NameFromToken(pParse->db, pIndexedBy);
pItem->fg.isIndexedBy = 1;
+ assert( pItem->fg.isCte==0 ); /* No collision on union u2 */
}
}
}
diff --git a/src/delete.c b/src/delete.c
index 0debce3cb..e2b283ea4 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -210,6 +210,7 @@ Expr *sqlite3LimitWhere(
pSelectSrc = sqlite3SrcListDup(db, pSrc, 0);
pSrc->a[0].pTab = pTab;
if( pSrc->a[0].fg.isIndexedBy ){
+ assert( pSrc->a[0].fg.isCte==0 );
pSrc->a[0].u2.pIBIndex = 0;
pSrc->a[0].fg.isIndexedBy = 0;
sqlite3DbFree(db, pSrc->a[0].u1.zIndexedBy);
diff --git a/src/select.c b/src/select.c
index e846a0220..13ed20f6c 100644
--- a/src/select.c
+++ b/src/select.c
@@ -4995,6 +4995,7 @@ int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){
pParse->checkSchema = 1;
return SQLITE_ERROR;
}
+ assert( pFrom->fg.isCte==0 );
pFrom->u2.pIBIndex = pIdx;
return SQLITE_OK;
}
@@ -5252,6 +5253,7 @@ static int resolveFromTermToCte(
if( db->mallocFailed ) return 2;
pFrom->pSelect->selFlags |= SF_CopyCte;
assert( pFrom->pSelect );
+ assert( pFrom->fg.isIndexedBy==0 ); /* Prevent collision in union u2 */
pFrom->fg.isCte = 1;
pFrom->u2.pCteUse = pCteUse;
pCteUse->nUse++;
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 009742c4d..f51743168 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -2975,11 +2975,12 @@ struct ExprList {
unsigned bSorterRef :1; /* Defer evaluation until after sorting */
unsigned bNulls: 1; /* True if explicit "NULLS FIRST/LAST" */
union {
- struct {
+ struct { /* Used by any ExprList other than Parse.pConsExpr */
u16 iOrderByCol; /* For ORDER BY, column number in result set */
u16 iAlias; /* Index into Parse.aAlias[] for zName */
} x;
- int iConstExprReg; /* Register in which Expr value is cached */
+ int iConstExprReg; /* Register in which Expr value is cached. Used only
+ ** by Parse.pConstExpr */
} u;
} a[1]; /* One slot for each expression in the list */
};
diff --git a/src/where.c b/src/where.c
index 7583f0563..4d1737660 100644
--- a/src/where.c
+++ b/src/where.c
@@ -3002,6 +3002,7 @@ static int whereLoopAddBtree(
assert( !IsVirtual(pSrc->pTab) );
if( pSrc->fg.isIndexedBy ){
+ assert( pSrc->fg.isCte==0 );
/* An INDEXED BY clause specifies a particular index to use */
pProbe = pSrc->u2.pIBIndex;
}else if( !HasRowid(pTab) ){