mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-16 23:02:26 +03:00
When an index is used by all branches of the WHERE_MULTI_OR optimization and
becomes a covering index, make sure the index has been created prior to NULLing it in the OP_NullRow opcode of a LEFT JOIN. See [forum:/forumpost/0575376e07|forum post 0575376e07]. The covering-index for WHERE_MULTI_OR optimization was added by [62678be3df35cdcb]. Test cases are in the orindex01.test module of TH3. FossilOrigin-Name: 787c76a865dc51dbca4f30432d64783199c2efb1df4619e4bbaf32182977321e
This commit is contained in:
@@ -5528,6 +5528,12 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
|
||||
if( (ws & WHERE_INDEXED)
|
||||
|| ((ws & WHERE_MULTI_OR) && pLevel->u.pCovidx)
|
||||
){
|
||||
if( ws & WHERE_MULTI_OR ){
|
||||
Index *pIx = pLevel->u.pCovidx;
|
||||
int iDb = sqlite3SchemaToIndex(db, pIx->pSchema);
|
||||
sqlite3VdbeAddOp3(v, OP_ReopenIdx, pLevel->iIdxCur, pIx->tnum, iDb);
|
||||
sqlite3VdbeSetP4KeyInfo(pParse, pIx);
|
||||
}
|
||||
sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
|
||||
}
|
||||
if( pLevel->op==OP_Return ){
|
||||
|
||||
Reference in New Issue
Block a user