diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 6 | ||||
-rw-r--r-- | src/vdbe.c | 1 | ||||
-rw-r--r-- | src/where.c | 8 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index 99890d94c..24d866f19 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2222,7 +2222,11 @@ void sqlite3ExprCodeGetColumnOfTable( sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); }else{ int op = IsVirtual(pTab) ? OP_VColumn : OP_Column; - sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut); + int x = iCol; + if( !HasRowid(pTab) ){ + x = sqlite3ColumnOfIndex(sqlite3PrimaryKeyIndex(pTab), iCol); + } + sqlite3VdbeAddOp3(v, op, iTabCur, x, regOut); } if( iCol>=0 ){ sqlite3ColumnDefault(v, pTab, iCol, regOut); diff --git a/src/vdbe.c b/src/vdbe.c index 403b27e25..2f648a76a 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -4312,6 +4312,7 @@ case OP_RowData: { } pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */ UPDATE_MAX_BLOBSIZE(pOut); + REGISTER_TRACE(pOp->p2, pOut); break; } diff --git a/src/where.c b/src/where.c index 7dd8c339a..da89853ca 100644 --- a/src/where.c +++ b/src/where.c @@ -6191,7 +6191,13 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ for(; k<last; k++, pOp++){ if( pOp->p1!=pLevel->iTabCur ) continue; if( pOp->opcode==OP_Column ){ - i16 x = sqlite3ColumnOfIndex(pIdx, pOp->p2); + int x = pOp->p2; + Table *pTab = pIdx->pTable; + if( !HasRowid(pTab) ){ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + x = pPk->aiColumn[x]; + } + x = sqlite3ColumnOfIndex(pIdx, x); if( x>=0 ){ pOp->p2 = x; pOp->p1 = pLevel->iIdxCur; |