diff options
author | drh <drh@noemail.net> | 2019-10-26 18:47:47 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-10-26 18:47:47 +0000 |
commit | a88c8c1ae4f6e44f52096f0f17203dc20f8bb900 (patch) | |
tree | a9d8a1451df471d0397345db416b702368450e1a /src/pragma.c | |
parent | cbda9c7ac79f8751e18fba943e30fd67f8c68b02 (diff) | |
parent | 1b22c1b8168ce18d5582fc0004369ecef8f7d939 (diff) | |
download | sqlite-a88c8c1ae4f6e44f52096f0f17203dc20f8bb900.tar.gz sqlite-a88c8c1ae4f6e44f52096f0f17203dc20f8bb900.zip |
Add support for generated columns.
FossilOrigin-Name: b855acf1831943b3914491ed0bc333131321930cab480a5281012a3aebbba492
Diffstat (limited to 'src/pragma.c')
-rw-r--r-- | src/pragma.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/pragma.c b/src/pragma.c index 858e314a1..8e2607e5a 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1100,10 +1100,19 @@ void sqlite3Pragma( sqlite3CodeVerifySchema(pParse, iTabDb); sqlite3ViewGetColumnNames(pParse, pTab); for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){ - int isHidden = IsHiddenColumn(pCol); - if( isHidden && pPragma->iArg==0 ){ - nHidden++; - continue; + int isHidden = 0; + if( pCol->colFlags & COLFLAG_NOINSERT ){ + if( pPragma->iArg==0 ){ + nHidden++; + continue; + } + if( pCol->colFlags & COLFLAG_VIRTUAL ){ + isHidden = 2; /* GENERATED ALWAYS AS ... VIRTUAL */ + }else if( pCol->colFlags & COLFLAG_STORED ){ + isHidden = 3; /* GENERATED ALWAYS AS ... STORED */ + }else{ assert( pCol->colFlags & COLFLAG_HIDDEN ); + isHidden = 1; /* HIDDEN */ + } } if( (pCol->colFlags & COLFLAG_PRIMKEY)==0 ){ k = 0; @@ -1112,13 +1121,13 @@ void sqlite3Pragma( }else{ for(k=1; k<=pTab->nCol && pPk->aiColumn[k-1]!=i; k++){} } - assert( pCol->pDflt==0 || pCol->pDflt->op==TK_SPAN ); + assert( pCol->pDflt==0 || pCol->pDflt->op==TK_SPAN || isHidden>=2 ); sqlite3VdbeMultiLoad(v, 1, pPragma->iArg ? "issisii" : "issisi", i-nHidden, pCol->zName, sqlite3ColumnType(pCol,""), pCol->notNull ? 1 : 0, - pCol->pDflt ? pCol->pDflt->u.zToken : 0, + pCol->pDflt && isHidden<2 ? pCol->pDflt->u.zToken : 0, k, isHidden); } @@ -1577,7 +1586,7 @@ void sqlite3Pragma( loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1); if( !isQuick ){ /* Sanity check on record header decoding */ - sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3); + sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3); sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); } /* Verify that all NOT NULL columns really are NOT NULL */ |