Get indexes working on virtual columns.

FossilOrigin-Name: 450c48766c8e62653d074c95f69b0576de3880d183a1d1e5992d88b6fce6cc39
This commit is contained in:
drh
2019-10-18 10:05:06 +00:00
parent 9942ef0d95
commit 463e76ff8f
3 changed files with 21 additions and 14 deletions
+14 -7
View File
@@ -1755,14 +1755,21 @@ void sqlite3GenerateConstraintChecks(
sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[i].pExpr, regIdx+i);
pParse->iSelfTab = 0;
VdbeComment((v, "%s column %d", pIdx->zName, i));
}else if( iField==XN_ROWID || iField==pTab->iPKey ){
x = regNewData;
sqlite3VdbeAddOp2(v, OP_IntCopy, x, regIdx+i);
VdbeComment((v, "rowid"));
#ifndef SQLITE_OMIT_GENERATED_COLUMNS
}else if( pTab->aCol[iField].colFlags & COLFLAG_VIRTUAL ){
pParse->iSelfTab = -(regNewData+1);
sqlite3ExprCodeCopy(pParse, pTab->aCol[iField].pDflt, regIdx+i);
pParse->iSelfTab = 0;
VdbeComment((v, "%s column %d", pIdx->zName, i));
#endif
}else{
if( iField==XN_ROWID || iField==pTab->iPKey ){
x = regNewData;
}else{
x = iField + regNewData + 1;
}
sqlite3VdbeAddOp2(v, iField<0 ? OP_IntCopy : OP_SCopy, x, regIdx+i);
VdbeComment((v, "%s", iField<0 ? "rowid" : pTab->aCol[iField].zName));
x = sqlite3ColumnOfTable(pTab, iField) + regNewData + 1;
sqlite3VdbeAddOp2(v, OP_SCopy, x, regIdx+i);
VdbeComment((v, "%s", pTab->aCol[iField].zName));
}
}
sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]);