diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-01-15 19:00:16 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-01-15 19:00:16 +0000 |
commit | 763ff8aef848d71da079049890786edffc3302d6 (patch) | |
tree | a1aed2a633c409071dd6d724b6db2bc7bf4fcb75 /src/backend/parser/analyze.c | |
parent | f22d8e6668e36a5855c35b04cc21a4d1593298d9 (diff) | |
download | postgresql-763ff8aef848d71da079049890786edffc3302d6.tar.gz postgresql-763ff8aef848d71da079049890786edffc3302d6.zip |
Remove Query->qry_aggs and qry_numaggs and replace with Query->hasAggs.
Pass List* of Aggregs into executor, and create needed array there.
No longer need to double-processs Aggregs with second copy in Query.
Fix crash when doing:
select sum(x+1) from test where 1 > 0;
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r-- | src/backend/parser/analyze.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index dcb9eecb5db..45c5d1406ba 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.64 1998/01/11 03:41:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.65 1998/01/15 18:59:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -219,7 +219,7 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt) qry->resultRelation = refnameRangeTablePosn(pstate->p_rtable, stmt->relname); /* make sure we don't have aggregates in the where clause */ - if (pstate->p_numAgg > 0) + if (pstate->p_hasAggs) parseCheckAggregates(pstate, qry); return (Query *) qry; @@ -334,7 +334,7 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) qry->targetList, qry->uniqueFlag); - if (pstate->p_numAgg > 0) + if (pstate->p_hasAggs) finalizeAggregates(pstate, qry); qry->unionall = stmt->unionall; /* in child, so unionClause may be false */ @@ -796,8 +796,7 @@ transformRuleStmt(ParseState *pstate, RuleStmt *stmt) pstate->p_last_resno = 1; pstate->p_is_rule = true; /* for expand all */ - pstate->p_numAgg = 0; - pstate->p_aggs = NULL; + pstate->p_hasAggs = false; lfirst(actions) = transformStmt(pstate, lfirst(actions)); actions = lnext(actions); @@ -853,7 +852,7 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->targetList); qry->rtable = pstate->p_rtable; - if (pstate->p_numAgg > 0) + if (pstate->p_hasAggs) finalizeAggregates(pstate, qry); qry->unionall = stmt->unionall; /* in child, so unionClause may be false */ @@ -890,11 +889,11 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate->p_rtable, stmt->relname); - if (pstate->p_numAgg > 0) + if (pstate->p_hasAggs) finalizeAggregates(pstate, qry); /* make sure we don't have aggregates in the where clause */ - if (pstate->p_numAgg > 0) + if (pstate->p_hasAggs) parseCheckAggregates(pstate, qry); return (Query *) qry; |