Commit a65e9f3f authored by Tom Lane's avatar Tom Lane

Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat.

Other equalfuncs.c checks on CoercionForm fields use
COMPARE_COERCIONFORM_FIELD (which makes them no-ops),
but commit 40c24bfe neglected to make _equalFuncCall
do likewise.  Fix that.

This is only strictly correct if FuncCall.funcformat has
no semantic effect, instead just determining ruleutils.c
display formatting.  40c24bfe added a couple of checks
in parse analysis that could break that rule; but on closer
inspection, they're redundant, so just take them out again.

Per report from Noah Misch.

Discussion: https://postgr.es/m/20210606063331.GC297923@rfd.leadboat.com
parent d57ecebd
...@@ -2420,7 +2420,7 @@ _equalFuncCall(const FuncCall *a, const FuncCall *b) ...@@ -2420,7 +2420,7 @@ _equalFuncCall(const FuncCall *a, const FuncCall *b)
COMPARE_SCALAR_FIELD(agg_star); COMPARE_SCALAR_FIELD(agg_star);
COMPARE_SCALAR_FIELD(agg_distinct); COMPARE_SCALAR_FIELD(agg_distinct);
COMPARE_SCALAR_FIELD(func_variadic); COMPARE_SCALAR_FIELD(func_variadic);
COMPARE_SCALAR_FIELD(funcformat); COMPARE_COERCIONFORM_FIELD(funcformat);
COMPARE_LOCATION_FIELD(location); COMPARE_LOCATION_FIELD(location);
return true; return true;
......
...@@ -543,7 +543,6 @@ transformRangeFunction(ParseState *pstate, RangeFunction *r) ...@@ -543,7 +543,6 @@ transformRangeFunction(ParseState *pstate, RangeFunction *r)
!fc->agg_star && !fc->agg_star &&
!fc->agg_distinct && !fc->agg_distinct &&
!fc->func_variadic && !fc->func_variadic &&
fc->funcformat == COERCE_EXPLICIT_CALL &&
coldeflist == NIL) coldeflist == NIL)
{ {
ListCell *lc; ListCell *lc;
......
...@@ -222,7 +222,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, ...@@ -222,7 +222,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
agg_order == NIL && agg_filter == NULL && agg_order == NIL && agg_filter == NULL &&
!agg_star && !agg_distinct && over == NULL && !agg_star && !agg_distinct && over == NULL &&
!func_variadic && argnames == NIL && !func_variadic && argnames == NIL &&
funcformat == COERCE_EXPLICIT_CALL &&
list_length(funcname) == 1 && list_length(funcname) == 1 &&
(actual_arg_types[0] == RECORDOID || (actual_arg_types[0] == RECORDOID ||
ISCOMPLEX(actual_arg_types[0]))); ISCOMPLEX(actual_arg_types[0])));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment