aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2013-10-31 17:38:01 +0000
committerdrh <drh@noemail.net>2013-10-31 17:38:01 +0000
commitee0ec8e1db6049e6c38c94fa08201ca73ef3f60a (patch)
tree541ba1456a5b331e71225dbb41fc36ef49c84853 /src
parent6934fc7b6ffde4b1e24e277f0ac6fb783790e5db (diff)
downloadsqlite-ee0ec8e1db6049e6c38c94fa08201ca73ef3f60a.tar.gz
sqlite-ee0ec8e1db6049e6c38c94fa08201ca73ef3f60a.zip
Fix issues with quering from an auxiliary index that must refer back to the
PRIMARY KEY index of a WITHOUT ROWID table. FossilOrigin-Name: cff1f55c52ff57557d9b728a5cd830a367091794
Diffstat (limited to 'src')
-rw-r--r--src/expr.c6
-rw-r--r--src/vdbe.c1
-rw-r--r--src/where.c8
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;