diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/resolve.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/resolve.c b/src/resolve.c index fdf4bf0f0..5c01df4f8 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -624,15 +624,28 @@ Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){ Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0); if( p ){ struct SrcList_item *pItem = &pSrc->a[iSrc]; - p->y.pTab = pItem->pTab; + Table *pTab = p->y.pTab = pItem->pTab; p->iTable = pItem->iCursor; if( p->y.pTab->iPKey==iCol ){ p->iColumn = -1; }else{ p->iColumn = (ynVar)iCol; - testcase( iCol==BMS ); - testcase( iCol==BMS-1 ); - pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + if( pTab->tabFlags & TF_HasGenerated ){ + Column *pColumn = pTab->aCol + iCol; + if( pColumn->colFlags & COLFLAG_GENERATED ){ + testcase( pTab->nCol==63 ); + testcase( pTab->nCol==64 ); + if( pTab->nCol>=64 ){ + pItem->colUsed = ALLBITS; + }else{ + pItem->colUsed = MASKBIT(pTab->nCol)-1; + } + } + }else{ + testcase( iCol==BMS ); + testcase( iCol==BMS-1 ); + pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } } } return p; |