More agg cleanup.

This commit is contained in:
Bruce Momjian 1999-01-26 23:32:04 +00:00
parent 38a5bda208
commit 36693c0525
2 changed files with 22 additions and 24 deletions

View File

@ -117,8 +117,7 @@ ExecAgg(Agg *node)
*/ */
/* /*
* We loop retrieving groups until we find one matching * We loop retrieving groups until we find one matching node->plan.qual
* node->plan.qual
*/ */
do do
{ {
@ -141,14 +140,14 @@ ExecAgg(Agg *node)
MemSet(aggFuncInfo, 0, sizeof(AggFuncInfo) * nagg); MemSet(aggFuncInfo, 0, sizeof(AggFuncInfo) * nagg);
noInitValue = (int *) palloc(sizeof(int) * nagg); noInitValue = (int *) palloc(sizeof(int) * nagg);
MemSet(noInitValue, 0, sizeof(noInitValue) * nagg); MemSet(noInitValue, 0, sizeof(int) * nagg);
outerPlan = outerPlan(node); outerPlan = outerPlan(node);
oneTuple = NULL; oneTuple = NULL;
projInfo = aggstate->csstate.cstate.cs_ProjInfo; projInfo = aggstate->csstate.cstate.cs_ProjInfo;
aggno = 0; aggno = -1;
foreach(alist, node->aggs) foreach(alist, node->aggs)
{ {
Aggref *aggref = lfirst(alist); Aggref *aggref = lfirst(alist);
@ -159,6 +158,8 @@ ExecAgg(Agg *node)
xfn2_oid, xfn2_oid,
finalfn_oid; finalfn_oid;
aggno++;
/* --------------------- /* ---------------------
* find transfer functions of all the aggregates and initialize * find transfer functions of all the aggregates and initialize
* their initial values * their initial values
@ -226,7 +227,6 @@ ExecAgg(Agg *node)
nulls[aggno] = 1; nulls[aggno] = 1;
} }
} }
aggno++;
} }
/* ---------------- /* ----------------
@ -257,7 +257,7 @@ ExecAgg(Agg *node)
tupValue = projInfo->pi_tupValue; tupValue = projInfo->pi_tupValue;
/* initially, set all the values to NULL */ /* initially, set all the values to NULL */
null_array = palloc(tupType->natts); null_array = palloc(sizeof(char) * tupType->natts);
for (aggno = 0; aggno < tupType->natts; aggno++) for (aggno = 0; aggno < tupType->natts; aggno++)
null_array[aggno] = 'n'; null_array[aggno] = 'n';
oneTuple = heap_formtuple(tupType, tupValue, null_array); oneTuple = heap_formtuple(tupType, tupValue, null_array);
@ -266,14 +266,14 @@ ExecAgg(Agg *node)
break; break;
} }
aggno = 0; aggno = -1;
foreach(alist, node->aggs) foreach(alist, node->aggs)
{ {
Aggref *aggref = lfirst(alist); Aggref *aggref = lfirst(alist);
AttrNumber attnum; AttrNumber attnum;
int2 attlen = 0; int2 attlen = 0;
Datum newVal = (Datum) NULL; Datum newVal = (Datum) NULL;
AggFuncInfo *aggfns = &aggFuncInfo[aggno]; AggFuncInfo *aggfns = &aggFuncInfo[++aggno];
Datum args[2]; Datum args[2];
Node *tagnode = NULL; Node *tagnode = NULL;
@ -388,7 +388,6 @@ ExecAgg(Agg *node)
(FmgrValues *) &xfn2_val, &isNull2); (FmgrValues *) &xfn2_val, &isNull2);
Assert(!isNull2); Assert(!isNull2);
} }
aggno++;
} }
/* /*
@ -407,11 +406,11 @@ ExecAgg(Agg *node)
* -------------- * --------------
*/ */
aggno = 0; aggno = -1;
foreach(alist, node->aggs) foreach(alist, node->aggs)
{ {
char *args[2]; char *args[2];
AggFuncInfo *aggfns = &aggFuncInfo[aggno]; AggFuncInfo *aggfns = &aggFuncInfo[++aggno];
if (noInitValue[aggno]) if (noInitValue[aggno])
{ {
@ -450,7 +449,6 @@ ExecAgg(Agg *node)
value1[aggno] = value2[aggno]; value1[aggno] = value2[aggno];
else else
elog(ERROR, "ExecAgg: no valid transition functions??"); elog(ERROR, "ExecAgg: no valid transition functions??");
aggno++;
} }
/* /*
@ -539,10 +537,10 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent)
econtext = aggstate->csstate.cstate.cs_ExprContext; econtext = aggstate->csstate.cstate.cs_ExprContext;
econtext->ecxt_values = econtext->ecxt_values =
(Datum *) palloc(sizeof(Datum) * length(node->aggs)); (Datum *) palloc(sizeof(Datum) * length(node->aggs));
MemSet(econtext->ecxt_values, 0, sizeof(Datum) * length(node->aggs)); MemSet(econtext->ecxt_values, 0, sizeof(Datum) * length(node->aggs));
econtext->ecxt_nulls = (char *) palloc(length(node->aggs)); econtext->ecxt_nulls = (char *) palloc(sizeof(char) * length(node->aggs));
MemSet(econtext->ecxt_nulls, 0, length(node->aggs)); MemSet(econtext->ecxt_nulls, 0, sizeof(char) * length(node->aggs));
/* /*
* initializes child nodes * initializes child nodes
@ -583,8 +581,8 @@ int
ExecCountSlotsAgg(Agg *node) ExecCountSlotsAgg(Agg *node)
{ {
return ExecCountSlotsNode(outerPlan(node)) + return ExecCountSlotsNode(outerPlan(node)) +
ExecCountSlotsNode(innerPlan(node)) + ExecCountSlotsNode(innerPlan(node)) +
AGG_NSLOTS; AGG_NSLOTS;
} }
/* ------------------------ /* ------------------------
@ -654,8 +652,8 @@ aggGetAttr(TupleTableSlot *slot,
tempSlot = makeNode(TupleTableSlot); tempSlot = makeNode(TupleTableSlot);
tempSlot->ttc_shouldFree = false; tempSlot->ttc_shouldFree = false;
tempSlot->ttc_descIsNew = true; tempSlot->ttc_descIsNew = true;
tempSlot->ttc_tupleDescriptor = (TupleDesc) NULL, tempSlot->ttc_tupleDescriptor = (TupleDesc) NULL;
tempSlot->ttc_buffer = InvalidBuffer; tempSlot->ttc_buffer = InvalidBuffer;
tempSlot->ttc_whichplan = -1; tempSlot->ttc_whichplan = -1;
tup = heap_copytuple(heapTuple); tup = heap_copytuple(heapTuple);
@ -691,7 +689,7 @@ ExecReScanAgg(Agg *node, ExprContext *exprCtxt, Plan *parent)
aggstate->agg_done = FALSE; aggstate->agg_done = FALSE;
MemSet(econtext->ecxt_values, 0, sizeof(Datum) * length(node->aggs)); MemSet(econtext->ecxt_values, 0, sizeof(Datum) * length(node->aggs));
MemSet(econtext->ecxt_nulls, 0, length(node->aggs)); MemSet(econtext->ecxt_nulls, 0, sizeof(char) * length(node->aggs));
/* /*
* if chgParam of subnode is not null then plan will be re-scanned by * if chgParam of subnode is not null then plan will be re-scanned by

View File

@ -239,7 +239,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.63 1999/01/25 12:01:07 vadim Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.64 1999/01/26 23:32:04 momjian Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@ -4791,7 +4791,7 @@ static const short yycheck[] = { 3,
-1, -1, -1, -1, -1, -1, -1, 214 -1, -1, -1, -1, -1, -1, -1, 214
}; };
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/share/misc/bison.simple" #line 3 "/usr/local/bison/bison.simple"
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@ -4984,7 +4984,7 @@ __yy_memcpy (char *to, char *from, int count)
#endif #endif
#endif #endif
#line 196 "/usr/share/misc/bison.simple" #line 196 "/usr/local/bison/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed /* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *. into yyparse. The argument should have type void *.
@ -11088,7 +11088,7 @@ case 960:
break;} break;}
} }
/* the action file gets copied in in place of this dollarsign */ /* the action file gets copied in in place of this dollarsign */
#line 498 "/usr/share/misc/bison.simple" #line 498 "/usr/local/bison/bison.simple"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;