diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-11-29 21:39:12 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-11-29 21:39:12 +0000 |
commit | f68f11928d5c791873073c882775dae10283ff49 (patch) | |
tree | 628e4491fe33cdafb0e205d73e29b154ef68f94b /src/backend/executor | |
parent | 851a4c48fd468b15ef988d5d2c79a44246dd478d (diff) | |
download | postgresql-f68f11928d5c791873073c882775dae10283ff49.tar.gz postgresql-f68f11928d5c791873073c882775dae10283ff49.zip |
Tighten selection of equality and ordering operators for grouping
operations: make sure we use operators that are compatible, as determined
by a mergejoin link in pg_operator. Also, add code to planner to ensure
we don't try to use hashed grouping when the grouping operators aren't
marked hashable.
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/nodeAgg.c | 11 | ||||
-rw-r--r-- | src/backend/executor/nodeGroup.c | 8 |
2 files changed, 5 insertions, 14 deletions
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 0216f8ebde7..82e9f48e1e0 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -45,7 +45,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.96 2002/11/19 23:21:57 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.97 2002/11/29 21:39:11 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1321,14 +1321,9 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) &peraggstate->inputtypeLen, &peraggstate->inputtypeByVal); - eq_function = compatible_oper_funcid(makeList1(makeString("=")), - inputType, inputType, - true); - if (!OidIsValid(eq_function)) - elog(ERROR, "Unable to identify an equality operator for type %s", - format_type_be(inputType)); + eq_function = equality_oper_funcid(inputType); fmgr_info(eq_function, &(peraggstate->equalfn)); - peraggstate->sortOperator = any_ordering_op(inputType); + peraggstate->sortOperator = ordering_oper_opid(inputType); peraggstate->sortstate = NULL; } diff --git a/src/backend/executor/nodeGroup.c b/src/backend/executor/nodeGroup.c index 3ea0e44d286..d41bcbb6fcc 100644 --- a/src/backend/executor/nodeGroup.c +++ b/src/backend/executor/nodeGroup.c @@ -15,7 +15,7 @@ * locate group boundaries. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeGroup.c,v 1.49 2002/11/06 22:31:23 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeGroup.c,v 1.50 2002/11/29 21:39:11 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -353,11 +353,7 @@ execTuplesMatchPrepare(TupleDesc tupdesc, Oid typid = tupdesc->attrs[att - 1]->atttypid; Oid eq_function; - eq_function = compatible_oper_funcid(makeList1(makeString("=")), - typid, typid, true); - if (!OidIsValid(eq_function)) - elog(ERROR, "Unable to identify an equality operator for type %s", - format_type_be(typid)); + eq_function = equality_oper_funcid(typid); fmgr_info(eq_function, &eqfunctions[i]); } |