diff options
author | drh <drh@noemail.net> | 2019-10-18 10:05:06 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-10-18 10:05:06 +0000 |
commit | 463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce (patch) | |
tree | 52f70c6cda7ce99569dde0e8613810f0dd5866fc /src | |
parent | 9942ef0d95c5a34bec24b669f454fc157bbf8eee (diff) | |
download | sqlite-463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce.tar.gz sqlite-463e76ff8f024ca12d1bad4c6ab23e3a7a8247ce.zip |
Get indexes working on virtual columns.
FossilOrigin-Name: 450c48766c8e62653d074c95f69b0576de3880d183a1d1e5992d88b6fce6cc39
Diffstat (limited to 'src')
-rw-r--r-- | src/insert.c | 21 |
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]); |