diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 8bed5baf3b..17b7a372cc 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.40 1999/01/24 00:28:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.41 1999/01/25 18:02:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -67,7 +67,7 @@ bool execConstByVal; int execConstLen; /* static functions decls */ -static Datum ExecEvalAggref(Aggref *agg, ExprContext *econtext, bool *isNull); +static Datum ExecEvalAggref(Aggref *aggref, ExprContext *econtext, bool *isNull); static Datum ExecEvalArrayRef(ArrayRef *arrayRef, ExprContext *econtext, bool *isNull, bool *isDone); static Datum ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull); @@ -192,10 +192,10 @@ ExecEvalArrayRef(ArrayRef *arrayRef, * ---------------------------------------------------------------- */ static Datum -ExecEvalAggref(Aggref *agg, ExprContext *econtext, bool *isNull) +ExecEvalAggref(Aggref *aggref, ExprContext *econtext, bool *isNull) { - *isNull = econtext->ecxt_nulls[agg->aggno]; - return econtext->ecxt_values[agg->aggno]; + *isNull = econtext->ecxt_nulls[aggref->aggno]; + return econtext->ecxt_values[aggref->aggno]; } /* ---------------------------------------------------------------- diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index a20ef4baa6..03d0041b64 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -45,7 +45,7 @@ typedef struct AggFuncInfo FmgrInfo finalfn; } AggFuncInfo; -static Datum aggGetAttr(TupleTableSlot *tuple, Aggref *agg, bool *isNull); +static Datum aggGetAttr(TupleTableSlot *tuple, Aggref *aggref, bool *isNull); /* --------------------------------------- @@ -90,9 +90,8 @@ ExecAgg(Agg *node) { AggState *aggstate; EState *estate; - Aggref **aggregates; Plan *outerPlan; - int i, + int aggno, nagg; Datum *value1, *value2; @@ -123,7 +122,6 @@ ExecAgg(Agg *node) */ do { - aggstate = node->aggstate; if (aggstate->agg_done) return NULL; @@ -133,17 +131,6 @@ ExecAgg(Agg *node) nagg = length(node->aggs); - aggregates = (Aggref **) palloc(sizeof(Aggref *) * nagg); - - /* take List* and make it an array that can be quickly indexed */ - alist = node->aggs; - for (i = 0; i < nagg; i++) - { - aggregates[i] = lfirst(alist); - aggregates[i]->aggno = i; - alist = lnext(alist); - } - value1 = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_values; nulls = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_nulls; @@ -161,9 +148,10 @@ ExecAgg(Agg *node) projInfo = aggstate->csstate.cstate.cs_ProjInfo; - for (i = 0; i < nagg; i++) + aggno = 0; + foreach(alist, node->aggs) { - Aggref *agg; + Aggref *aggref = lfirst(alist); char *aggname; HeapTuple aggTuple; Form_pg_aggregate aggp; @@ -171,22 +159,20 @@ ExecAgg(Agg *node) xfn2_oid, finalfn_oid; - agg = aggregates[i]; - /* --------------------- * find transfer functions of all the aggregates and initialize * their initial values * --------------------- */ - aggname = agg->aggname; + aggname = aggref->aggname; aggTuple = SearchSysCacheTuple(AGGNAME, PointerGetDatum(aggname), - ObjectIdGetDatum(agg->basetype), + ObjectIdGetDatum(aggref->basetype), 0, 0); if (!HeapTupleIsValid(aggTuple)) elog(ERROR, "ExecAgg: cache lookup failed for aggregate \"%s\"(%s)", aggname, - typeidTypeName(agg->basetype)); + typeidTypeName(aggref->basetype)); aggp = (Form_pg_aggregate) GETSTRUCT(aggTuple); xfn1_oid = aggp->aggtransfn1; @@ -195,15 +181,15 @@ ExecAgg(Agg *node) if (OidIsValid(finalfn_oid)) { - fmgr_info(finalfn_oid, &aggFuncInfo[i].finalfn); - aggFuncInfo[i].finalfn_oid = finalfn_oid; + fmgr_info(finalfn_oid, &aggFuncInfo[aggno].finalfn); + aggFuncInfo[aggno].finalfn_oid = finalfn_oid; } if (OidIsValid(xfn2_oid)) { - fmgr_info(xfn2_oid, &aggFuncInfo[i].xfn2); - aggFuncInfo[i].xfn2_oid = xfn2_oid; - value2[i] = (Datum) AggNameGetInitVal((char *) aggname, + fmgr_info(xfn2_oid, &aggFuncInfo[aggno].xfn2); + aggFuncInfo[aggno].xfn2_oid = xfn2_oid; + value2[aggno] = (Datum) AggNameGetInitVal((char *) aggname, aggp->aggbasetype, 2, &isNull2); @@ -219,9 +205,9 @@ ExecAgg(Agg *node) if (OidIsValid(xfn1_oid)) { - fmgr_info(xfn1_oid, &aggFuncInfo[i].xfn1); - aggFuncInfo[i].xfn1_oid = xfn1_oid; - value1[i] = (Datum) AggNameGetInitVal((char *) aggname, + fmgr_info(xfn1_oid, &aggFuncInfo[aggno].xfn1); + aggFuncInfo[aggno].xfn1_oid = xfn1_oid; + value1[aggno] = (Datum) AggNameGetInitVal((char *) aggname, aggp->aggbasetype, 1, &isNull1); @@ -236,10 +222,11 @@ ExecAgg(Agg *node) */ if (isNull1) { - noInitValue[i] = 1; - nulls[i] = 1; + noInitValue[aggno] = 1; + nulls[aggno] = 1; } } + aggno++; } /* ---------------- @@ -271,53 +258,55 @@ ExecAgg(Agg *node) /* initially, set all the values to NULL */ null_array = palloc(tupType->natts); - for (i = 0; i < tupType->natts; i++) - null_array[i] = 'n'; + for (aggno = 0; aggno < tupType->natts; aggno++) + null_array[aggno] = 'n'; oneTuple = heap_formtuple(tupType, tupValue, null_array); pfree(null_array); } break; } - for (i = 0; i < nagg; i++) + aggno = 0; + foreach(alist, node->aggs) { + Aggref *aggref = lfirst(alist); AttrNumber attnum; int2 attlen = 0; Datum newVal = (Datum) NULL; - AggFuncInfo *aggfns = &aggFuncInfo[i]; + AggFuncInfo *aggfns = &aggFuncInfo[aggno]; Datum args[2]; Node *tagnode = NULL; - switch (nodeTag(aggregates[i]->target)) + switch (nodeTag(aggref->target)) { case T_Var: tagnode = NULL; newVal = aggGetAttr(outerslot, - aggregates[i], + aggref, &isNull); break; case T_Expr: - tagnode = ((Expr *) aggregates[i]->target)->oper; + tagnode = ((Expr *) aggref->target)->oper; econtext->ecxt_scantuple = outerslot; - newVal = ExecEvalExpr(aggregates[i]->target, econtext, + newVal = ExecEvalExpr(aggref->target, econtext, &isNull, &isDone); break; case T_Const: tagnode = NULL; econtext->ecxt_scantuple = outerslot; - newVal = ExecEvalExpr(aggregates[i]->target, econtext, + newVal = ExecEvalExpr(aggref->target, econtext, &isNull, &isDone); break; default: - elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); + elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", aggno); } - if (isNull && !aggregates[i]->usenulls) + if (isNull && !aggref->usenulls) continue; /* ignore this tuple for this agg */ if (aggfns->xfn1.fn_addr != NULL) { - if (noInitValue[i]) + if (noInitValue[aggno]) { int byVal = 0; @@ -333,10 +322,10 @@ ExecAgg(Agg *node) * came will be freed on the next iteration of the * scan */ - switch (nodeTag(aggregates[i]->target)) + switch (nodeTag(aggref->target)) { case T_Var: - attnum = ((Var *) aggregates[i]->target)->varattno; + attnum = ((Var *) aggref->target)->varattno; attlen = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attlen; byVal = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attbyval; @@ -355,35 +344,34 @@ ExecAgg(Agg *node) break; } case T_Const: - attlen = ((Const *) aggregates[i]->target)->constlen; - byVal = ((Const *) aggregates[i]->target)->constbyval; + attlen = ((Const *) aggref->target)->constlen; + byVal = ((Const *) aggref->target)->constbyval; break; default: - elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); + elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", aggno); } if (attlen == -1) { /* variable length */ attlen = VARSIZE((struct varlena *) newVal); } - value1[i] = (Datum) palloc(attlen); + value1[aggno] = (Datum) palloc(attlen); if (byVal) - value1[i] = newVal; + value1[aggno] = newVal; else - memmove((char *) (value1[i]), (char *) newVal, attlen); - noInitValue[i] = 0; - nulls[i] = 0; + memmove((char *) (value1[aggno]), (char *) newVal, attlen); + noInitValue[aggno] = 0; + nulls[aggno] = 0; } else { - /* * apply the transition functions. */ - args[0] = value1[i]; + args[0] = value1[aggno]; args[1] = newVal; - value1[i] = + value1[aggno] = (Datum) fmgr_c(&aggfns->xfn1, (FmgrValues *) args, &isNull1); @@ -393,13 +381,14 @@ ExecAgg(Agg *node) if (aggfns->xfn2.fn_addr != NULL) { - Datum xfn2_val = value2[i]; + Datum xfn2_val = value2[aggno]; - value2[i] = + value2[aggno] = (Datum) fmgr_c(&aggfns->xfn2, (FmgrValues *) &xfn2_val, &isNull2); Assert(!isNull2); } + aggno++; } /* @@ -417,12 +406,14 @@ ExecAgg(Agg *node) * finalize the aggregate (if necessary), and get the resultant value * -------------- */ - for (i = 0; i < nagg; i++) + + aggno = 0; + foreach(alist, node->aggs) { char *args[2]; - AggFuncInfo *aggfns = &aggFuncInfo[i]; + AggFuncInfo *aggfns = &aggFuncInfo[aggno]; - if (noInitValue[i]) + if (noInitValue[aggno]) { /* @@ -435,17 +426,17 @@ ExecAgg(Agg *node) { if (aggfns->finalfn.fn_nargs > 1) { - args[0] = (char *) value1[i]; - args[1] = (char *) value2[i]; + args[0] = (char *) value1[aggno]; + args[1] = (char *) value2[aggno]; } else if (aggfns->xfn1.fn_addr != NULL) - args[0] = (char *) value1[i]; + args[0] = (char *) value1[aggno]; else if (aggfns->xfn2.fn_addr != NULL) - args[0] = (char *) value2[i]; + args[0] = (char *) value2[aggno]; else elog(NOTICE, "ExecAgg: no valid transition functions??"); - value1[i] = (Datum) fmgr_c(&aggfns->finalfn, - (FmgrValues *) args, &(nulls[i])); + value1[aggno] = (Datum) fmgr_c(&aggfns->finalfn, + (FmgrValues *) args, &(nulls[aggno])); } else if (aggfns->xfn1.fn_addr != NULL) { @@ -456,9 +447,10 @@ ExecAgg(Agg *node) */ } else if (aggfns->xfn2.fn_addr != NULL) - value1[i] = value2[i]; + value1[aggno] = value2[aggno]; else elog(ERROR, "ExecAgg: no valid transition functions??"); + aggno++; } /* @@ -494,11 +486,12 @@ ExecAgg(Agg *node) if(node->plan.qual != NULL){ qual_result = ExecQual(fix_opids(node->plan.qual), econtext); } + else qual_result = false; if (oneTuple) pfree(oneTuple); } - while ((node->plan.qual != NULL) && (qual_result != true)); + while (node->plan.qual != NULL && qual_result != true); return resultSlot; } @@ -516,7 +509,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) AggState *aggstate; Plan *outerPlan; ExprContext *econtext; - + /* * assign the node's execution state */ @@ -528,7 +521,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) aggstate = makeNode(AggState); node->aggstate = aggstate; aggstate->agg_done = FALSE; - + /* * assign node's base id and create expression context */ @@ -628,7 +621,7 @@ ExecEndAgg(Agg *node) */ static Datum aggGetAttr(TupleTableSlot *slot, - Aggref *agg, + Aggref *aggref, bool *isNull) { Datum result; @@ -645,7 +638,7 @@ aggGetAttr(TupleTableSlot *slot, tuple_type = slot->ttc_tupleDescriptor; buffer = slot->ttc_buffer; - attnum = ((Var *) agg->target)->varattno; + attnum = ((Var *) aggref->target)->varattno; /* * If the attribute number is invalid, then we are supposed to return diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 94b788882d..a008de72be 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.54 1999/01/24 00:28:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.55 1999/01/25 18:02:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -506,7 +506,7 @@ _copyAgg(Agg *from) CopyPlanFields((Plan *) from, (Plan *) newnode); - newnode->aggs = set_agg_tlist_references(newnode); + newnode->aggs = get_agg_tlist_references(newnode); Node_Copy(from, newnode, aggstate); return newnode; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 8413991fd9..a3f813f64a 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.37 1999/01/25 12:01:04 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.38 1999/01/25 18:02:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -249,7 +249,7 @@ union_planner(Query *parse) { int old_length=0, new_length=0; - /* Create the AGG node but use 'tlist' not 'new_tlist' as target list because we + /* Create the Agg node but use 'tlist' not 'new_tlist' as target list because we * don't want the additional attributes (only used for the havingQual, see above) * to show up in the result */ result_plan = (Plan *) make_agg(tlist, result_plan); @@ -259,7 +259,7 @@ union_planner(Query *parse) * the result tuple of the subplans. */ ((Agg *) result_plan)->aggs = - set_agg_tlist_references((Agg *) result_plan); + get_agg_tlist_references((Agg *) result_plan); /***S*H***/ diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index f6a87e2883..7027f3c015 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.32 1999/01/24 00:28:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.33 1999/01/25 18:02:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -700,7 +700,7 @@ OperandIsInner(Node *opnd, int inner_relid) /*--------------------------------------------------------- * - * set_agg_tlist_references - + * get_agg_tlist_references - * changes the target list of an Agg node so that it points to * the tuples returned by its left tree subplan. * @@ -708,7 +708,7 @@ OperandIsInner(Node *opnd, int inner_relid) * */ List * -set_agg_tlist_references(Agg *aggNode) +get_agg_tlist_references(Agg *aggNode) { List *aggTargetList; List *subplanTargetList; diff --git a/src/backend/rewrite/locks.c b/src/backend/rewrite/locks.c index fe6cf9cc3a..53809266b2 100644 --- a/src/backend/rewrite/locks.c +++ b/src/backend/rewrite/locks.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.15 1999/01/24 00:28:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.16 1999/01/25 18:02:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -68,9 +68,9 @@ nodeThisLockWasTriggered(Node *node, int varno, AttrNumber attnum, break; case T_Aggref: { - Aggref *agg = (Aggref *) node; + Aggref *aggref = (Aggref *) node; - return nodeThisLockWasTriggered(agg->target, varno, attnum, + return nodeThisLockWasTriggered(aggref->target, varno, attnum, sublevels_up); } break; diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index d922b719d3..2af5f52fd4 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.31 1999/01/25 12:01:14 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.32 1999/01/25 18:02:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -162,10 +162,10 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; return rangeTableEntry_used( - (Node *)(agg->target), + (Node *)(aggref->target), rt_index, sublevels_up); } @@ -398,10 +398,10 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; return attribute_used( - (Node *)(agg->target), + (Node *)(aggref->target), rt_index, attno, sublevels_up); @@ -607,10 +607,10 @@ modifyAggrefUplevel(Node *node) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; modifyAggrefUplevel( - (Node *)(agg->target)); + (Node *)(aggref->target)); } break; @@ -743,10 +743,10 @@ modifyAggrefChangeVarnodes(Node **nodePtr, int rt_index, int new_index, int subl case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; modifyAggrefChangeVarnodes( - (Node **)(&(agg->target)), + (Node **)(&(aggref->target)), rt_index, new_index, sublevels_up); @@ -933,12 +933,12 @@ modifyAggrefDropQual(Node **nodePtr, Node *orignode, Expr *expr) case T_Aggref: { - Aggref *agg = (Aggref *)node; - Aggref *oagg = (Aggref *)orignode; + Aggref *aggref = (Aggref *)node; + Aggref *oaggref = (Aggref *)orignode; modifyAggrefDropQual( - (Node **)(&(agg->target)), - (Node *)(oagg->target), + (Node **)(&(aggref->target)), + (Node *)(oaggref->target), expr); } break; @@ -1378,10 +1378,10 @@ apply_RIR_adjust_sublevel(Node *node, int sublevels_up) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; apply_RIR_adjust_sublevel( - (Node *)(agg->target), + (Node *)(aggref->target), sublevels_up); } break; @@ -1527,10 +1527,10 @@ apply_RIR_view(Node **nodePtr, int rt_index, RangeTblEntry *rte, List *tlist, in case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; apply_RIR_view( - (Node **)(&(agg->target)), + (Node **)(&(aggref->target)), rt_index, rte, tlist, @@ -1928,10 +1928,10 @@ fireRIRonSubselect(Node *node) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; fireRIRonSubselect( - (Node *)(agg->target)); + (Node *)(aggref->target)); } break; diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index d5aa077bdc..2042080d0b 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.25 1999/01/24 00:28:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.26 1999/01/25 18:02:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -55,10 +55,10 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; OffsetVarNodes( - (Node *)(agg->target), + (Node *)(aggref->target), offset, sublevels_up); } @@ -273,10 +273,10 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) case T_Aggref: { - Aggref *agg = (Aggref *)node; + Aggref *aggref = (Aggref *)node; ChangeVarNodes( - (Node *)(agg->target), + (Node *)(aggref->target), rt_index, new_index, sublevels_up); @@ -748,9 +748,9 @@ nodeHandleRIRAttributeRule(Node **nodePtr, break; case T_Aggref: { - Aggref *agg = (Aggref *) node; + Aggref *aggref = (Aggref *) node; - nodeHandleRIRAttributeRule(&agg->target, rtable, targetlist, + nodeHandleRIRAttributeRule(&aggref->target, rtable, targetlist, rt_index, attr_num, modified, badsql, sublevels_up); } @@ -913,9 +913,9 @@ nodeHandleViewRule(Node **nodePtr, break; case T_Aggref: { - Aggref *agg = (Aggref *) node; + Aggref *aggref = (Aggref *) node; - nodeHandleViewRule(&(agg->target), rtable, targetlist, + nodeHandleViewRule(&(aggref->target), rtable, targetlist, rt_index, modified, sublevels_up); } break; diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 4c9ae3d502..7f2068f673 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * out of it's tuple * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.7 1999/01/24 00:28:32 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.8 1999/01/25 18:02:23 momjian Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -1247,13 +1247,13 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) case T_Aggref: { - Aggref *agg = (Aggref *) node; + Aggref *aggref = (Aggref *) node; strcat(buf, "\""); - strcat(buf, agg->aggname); + strcat(buf, aggref->aggname); strcat(buf, "\"("); strcat(buf, get_rule_expr(qh, rt_index, - (Node *) (agg->target), varprefix)); + (Node *) (aggref->target), varprefix)); strcat(buf, ")"); return pstrdup(buf); } @@ -1729,10 +1729,10 @@ check_if_rte_used(int rt_index, Node *node, int sup) case T_Aggref: { - Aggref *agg = (Aggref *) node; + Aggref *aggref = (Aggref *) node; return check_if_rte_used(rt_index, - (Node *) (agg->target), sup); + (Node *) (aggref->target), sup); } break; diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h index 83f6977a0c..eef980c9cc 100644 --- a/src/include/optimizer/planmain.h +++ b/src/include/optimizer/planmain.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: planmain.h,v 1.17 1998/10/08 18:30:34 momjian Exp $ + * $Id: planmain.h,v 1.18 1999/01/25 18:02:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,7 +54,7 @@ extern List *join_references(List *clauses, List *outer_tlist, List *inner_tlist); extern List *index_outerjoin_references(List *inner_indxqual, List *outer_tlist, Index inner_relid); -extern List *set_agg_tlist_references(Agg *aggNode); +extern List *get_agg_tlist_references(Agg *aggNode); extern void set_agg_agglist_references(Agg *aggNode); extern void del_agg_tlist_references(List *tlist); extern List *check_having_qual_for_aggs(Node *clause, diff --git a/src/test/regress/sql/datetime.sql b/src/test/regress/sql/datetime.sql index 5c4cdb6b45..1961fbcb05 100644 --- a/src/test/regress/sql/datetime.sql +++ b/src/test/regress/sql/datetime.sql @@ -10,6 +10,9 @@ SELECT ('tomorrow'::datetime = ('yesterday'::datetime + '2 days'::timespan)) as SELECT ('current'::datetime = 'now'::datetime) as "True"; SELECT ('now'::datetime - 'current'::datetime) AS "ZeroSecs"; +SET DateStyle = 'Postgres,noneuropean'; +SELECT datetime('1994-01-01', '11:00') AS "Jan_01_1994_11am"; + CREATE TABLE DATETIME_TBL( d1 datetime); INSERT INTO DATETIME_TBL VALUES ('current');