diff options
author | drh <> | 2023-03-15 17:58:51 +0000 |
---|---|---|
committer | drh <> | 2023-03-15 17:58:51 +0000 |
commit | ffcad5893aa40c52629d02851b05de20cee60f0d (patch) | |
tree | 47831f5b2c696dac1b080b3cfd7d8596627e1092 /src | |
parent | eb5d71ed58ce1b5b9a68c928f48063e4e3969467 (diff) | |
download | sqlite-ffcad5893aa40c52629d02851b05de20cee60f0d.tar.gz sqlite-ffcad5893aa40c52629d02851b05de20cee60f0d.zip |
Disallow the one-pass optimization for DELETE if the WHERE clause contains
a subquery. Fix for the problem reported by
[forum:/forumpost/e61252062c9d286d|forum post e61252062c9d286d]. This fix
is more restrictive than necessary. It could be relaxed if the subquery does
not involve the table that is the subject of the DELETE.
FossilOrigin-Name: 73f0036f045bf37193b6e87ae45b578c5831614c530488257c69666178da3aa5
Diffstat (limited to 'src')
-rw-r--r-- | src/delete.c | 2 | ||||
-rw-r--r-- | src/resolve.c | 2 | ||||
-rw-r--r-- | src/sqliteInt.h | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/src/delete.c b/src/delete.c index 704a3c711..22ef7ab65 100644 --- a/src/delete.c +++ b/src/delete.c @@ -483,7 +483,7 @@ void sqlite3DeleteFrom( #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ { u16 wcf = WHERE_ONEPASS_DESIRED|WHERE_DUPLICATES_OK; - if( sNC.ncFlags & NC_VarSelect ) bComplex = 1; + if( sNC.ncFlags & NC_Subquery ) bComplex = 1; wcf |= (bComplex ? 0 : WHERE_ONEPASS_MULTIROW); if( HasRowid(pTab) ){ /* For a rowid table, initialize the RowSet to an empty set */ diff --git a/src/resolve.c b/src/resolve.c index dfb343439..4b36ecca3 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1252,8 +1252,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ assert( pNC->nRef>=nRef ); if( nRef!=pNC->nRef ){ ExprSetProperty(pExpr, EP_VarSelect); - pNC->ncFlags |= NC_VarSelect; } + pNC->ncFlags |= NC_Subquery; } break; } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 3a7be541a..95fda3bbb 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3343,7 +3343,7 @@ struct NameContext { #define NC_HasAgg 0x000010 /* One or more aggregate functions seen */ #define NC_IdxExpr 0x000020 /* True if resolving columns of CREATE INDEX */ #define NC_SelfRef 0x00002e /* Combo: PartIdx, isCheck, GenCol, and IdxExpr */ -#define NC_VarSelect 0x000040 /* A correlated subquery has been seen */ +#define NC_Subquery 0x000040 /* A subquery has been seen */ #define NC_UEList 0x000080 /* True if uNC.pEList is used */ #define NC_UAggInfo 0x000100 /* True if uNC.pAggInfo is used */ #define NC_UUpsert 0x000200 /* True if uNC.pUpsert is used */ |