aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/resolve.c21
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;