aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-10-18 10:05:06 +0000
committerdrh <drh@noemail.net>2019-10-18 10:05:06 +0000
commit463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce (patch)
tree52f70c6cda7ce99569dde0e8613810f0dd5866fc /src
parent9942ef0d95c5a34bec24b669f454fc157bbf8eee (diff)
downloadsqlite-463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce.tar.gz
sqlite-463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce.zip
Get indexes working on virtual columns.
FossilOrigin-Name: 450c48766c8e62653d074c95f69b0576de3880d183a1d1e5992d88b6fce6cc39
Diffstat (limited to 'src')
-rw-r--r--src/insert.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/insert.c b/src/insert.c
index d53db3dd3..f3bfeb4f6 100644
--- a/src/insert.c
+++ b/src/insert.c
@@ -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]);