aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2023-03-14 20:08:39 +0000
committerdrh <>2023-03-14 20:08:39 +0000
commitcdfb518f6f4909e320d26285e4408f86b6e6a6f4 (patch)
treeb31e069f8b9d768af1cea1c2e6188ed8042814da /src
parentbf7602a7d891ba4ceca74679403ebecbfe38c6a2 (diff)
downloadsqlite-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.c1
-rw-r--r--src/where.c8
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;
}