diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 4 | ||||
-rw-r--r-- | src/sqliteInt.h | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/src/expr.c b/src/expr.c index d012c3d5e..e7df61c86 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3436,7 +3436,7 @@ static int findCompatibleInRhsSubrtn( Vdbe *v; if( pNewSig==0 ) return 0; - if( pParse->bHasSubrtn==0 ) return 0; + if( (pParse->mSubrtnSig & (1<<(pNewSig->selId&7)))==0 ) return 0; assert( pExpr->op==TK_IN ); assert( !ExprUseYSub(pExpr) ); assert( ExprUseXSelect(pExpr) ); @@ -3564,7 +3564,7 @@ void sqlite3CodeRhsOfIN( pSig->regReturn = pExpr->y.sub.regReturn; pSig->iTable = iTab; sqlite3VdbeChangeP4(v, -1, (const char*)pSig, P4_SUBRTNSIG); - pParse->bHasSubrtn = 1; + pParse->mSubrtnSig = 1 << (pSig->selId&7); } addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 323a257f6..6a92befe0 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3834,7 +3834,7 @@ struct Parse { u8 prepFlags; /* SQLITE_PREPARE_* flags */ u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */ u8 bHasWith; /* True if statement contains WITH */ - u8 bHasSubrtn; /* True if any P4_SUBRTNSIG has been set */ + u8 mSubrtnSig; /* mini Bloom filter on available SubrtnSig.selId */ #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */ #endif |