mirror of
https://github.com/sqlite/sqlite.git
synced 2025-12-03 08:01:19 +03:00
Add the OP_ColumnsUsed opcode (when compiled with
SQLITE_ENABLE_COLUMN_USED_MASK) as a hint to the b-tree layer as to which columns of a btree cursor will be used. FossilOrigin-Name: 711a176cbfad5dde6defa9648fba6d0d663af134
This commit is contained in:
19
src/where.c
19
src/where.c
@@ -4213,6 +4213,10 @@ WhereInfo *sqlite3WhereBegin(
|
||||
SQLITE_INT_TO_PTR(n), P4_INT32);
|
||||
assert( n<=pTab->nCol );
|
||||
}
|
||||
#ifdef SQLITE_ENABLE_COLUMN_USED_MASK
|
||||
sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, pTabItem->iCursor, 0, 0,
|
||||
(const u8*)&pTabItem->colUsed, P4_INT64);
|
||||
#endif
|
||||
}else{
|
||||
sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
|
||||
}
|
||||
@@ -4258,6 +4262,21 @@ WhereInfo *sqlite3WhereBegin(
|
||||
sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ); /* Hint to COMDB2 */
|
||||
}
|
||||
VdbeComment((v, "%s", pIx->zName));
|
||||
#ifdef SQLITE_ENABLE_COLUMN_USED_MASK
|
||||
{
|
||||
u64 colUsed = 0;
|
||||
int ii, jj;
|
||||
for(ii=0; ii<pIx->nColumn; ii++){
|
||||
jj = pIx->aiColumn[ii];
|
||||
if( jj<0 ) continue;
|
||||
if( jj>63 ) jj = 63;
|
||||
if( (pTabItem->colUsed & MASKBIT(jj))==0 ) continue;
|
||||
colUsed |= ((u64)1)<<(ii<63 ? ii : 63);
|
||||
}
|
||||
sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, iIndexCur, 0, 0,
|
||||
(u8*)&colUsed, P4_INT64);
|
||||
}
|
||||
#endif /* SQLITE_ENABLE_COLUMN_USED_MASK */
|
||||
}
|
||||
}
|
||||
if( iDb>=0 ) sqlite3CodeVerifySchema(pParse, iDb);
|
||||
|
||||
Reference in New Issue
Block a user