Index: src/resolve.c ================================================================== --- src/resolve.c +++ src/resolve.c @@ -1741,10 +1741,26 @@ if( sqlite3ResolveExprNames(pNC, pList->a[i].pExpr) ) return WRC_Abort; } } return WRC_Continue; } + +/* +** Set the affinity of all expressions in the result set of a subquery +** or view. +*/ +void sqlite3ResolveSubqueryAffinity(ExprList *pList){ + int i; + if( pList ){ + for(i=0; inExpr; i++){ + Expr *p = pList->a[i].pExpr; + if( p==0 ) continue; + p->affExpr = sqlite3ExprAffinity(p); + if( p->affExpr==0 ) p->affExpr = SQLITE_AFF_BLOB; + } + } +} /* ** Resolve all names in all expressions of a SELECT and in all ** decendents of the SELECT, including compounds off of p->pPrior, ** subqueries in expressions, and subqueries used as FROM clause Index: src/select.c ================================================================== --- src/select.c +++ src/select.c @@ -3901,10 +3901,11 @@ /* Begin flattening the iFrom-th entry of the FROM clause ** in the outer query. */ pSub = pSub1 = pSubitem->pSelect; + sqlite3ResolveSubqueryAffinity(pSub->pEList); /* Delete the transient table structure associated with the ** subquery */ sqlite3DbFree(db, pSubitem->zDatabase); @@ -4365,10 +4366,11 @@ x.pParse = pParse; x.iTable = iCursor; x.iNewTable = iCursor; x.isLeftJoin = 0; x.pEList = pSubq->pEList; + sqlite3ResolveSubqueryAffinity(x.pEList); pNew = substExpr(&x, pNew); if( pSubq->selFlags & SF_Aggregate ){ pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew); }else{ pSubq->pWhere = sqlite3ExprAnd(pParse, pSubq->pWhere, pNew); Index: src/sqliteInt.h ================================================================== --- src/sqliteInt.h +++ src/sqliteInt.h @@ -4337,10 +4337,11 @@ void sqlite3SelectPrep(Parse*, Select*, NameContext*); void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p); int sqlite3MatchSpanName(const char*, const char*, const char*, const char*); int sqlite3ResolveExprNames(NameContext*, Expr*); int sqlite3ResolveExprListNames(NameContext*, ExprList*); +void sqlite3ResolveSubqueryAffinity(ExprList*); void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*); int sqlite3ResolveSelfReference(Parse*,Table*,int,Expr*,ExprList*); int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*); void sqlite3ColumnDefault(Vdbe *, Table *, int, int); void sqlite3AlterFinishAddColumn(Parse *, Token *);