diff options
author | drh <> | 2023-03-14 20:08:39 +0000 |
---|---|---|
committer | drh <> | 2023-03-14 20:08:39 +0000 |
commit | cdfb518f6f4909e320d26285e4408f86b6e6a6f4 (patch) | |
tree | b31e069f8b9d768af1cea1c2e6188ed8042814da /src | |
parent | bf7602a7d891ba4ceca74679403ebecbfe38c6a2 (diff) | |
download | sqlite-cdfb518f6f4909e320d26285e4408f86b6e6a6f4.tar.gz sqlite-cdfb518f6f4909e320d26285e4408f86b6e6a6f4.zip |
Fix Bloom filters on an expression index.
[forum:/forumpost/2e427099d5|forum post 2e427099d5] and
[forum:/forumpost/d47a0e8e3a|forum post d47a0e8e3a].
FossilOrigin-Name: c028fb669a5ae34dbaf50fffab1ae49bc568b994435cf02e145d24da3cfb48d7
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 1 | ||||
-rw-r--r-- | src/where.c | 8 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index dc90956b3..223ebf1cb 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3867,6 +3867,7 @@ void sqlite3ExprCodeGetColumnOfTable( Column *pCol; assert( v!=0 ); assert( pTab!=0 ); + assert( iCol!=XN_EXPR ); if( iCol<0 || iCol==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); VdbeComment((v, "%s.rowid", pTab->zName)); diff --git a/src/where.c b/src/where.c index d7dbd5790..727c77948 100644 --- a/src/where.c +++ b/src/where.c @@ -1135,6 +1135,10 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( Vdbe *v = pParse->pVdbe; /* VDBE under construction */ WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */ int iCur; /* Cursor for table getting the filter */ + IndexedExpr *saved_pIdxEpr; /* saved copy of Parse.pIdxEpr */ + + saved_pIdxEpr = pParse->pIdxEpr; + pParse->pIdxEpr = 0; assert( pLoop!=0 ); assert( v!=0 ); @@ -1191,9 +1195,8 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( int r1 = sqlite3GetTempRange(pParse, n); int jj; for(jj=0; jj<n; jj++){ - int iCol = pIdx->aiColumn[jj]; assert( pIdx->pTable==pItem->pTab ); - sqlite3ExprCodeGetColumnOfTable(v, pIdx->pTable, iCur, iCol,r1+jj); + sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iCur, jj, r1+jj); } sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n); sqlite3ReleaseTempRange(pParse, r1, n); @@ -1224,6 +1227,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( } }while( iLevel < pWInfo->nLevel ); sqlite3VdbeJumpHere(v, addrOnce); + pParse->pIdxEpr = saved_pIdxEpr; } |