From 741364bf5caeeae79b83bbdba778805d286622ba Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 3 Apr 2014 16:57:45 -0400 Subject: Code review for commit d26888bc4d1e539a82f21382b0000fe5bbf889d9. Mostly, copy-edit the comments; but also fix it to not reject domains over arrays. --- src/backend/utils/adt/varlena.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'src/backend/utils/adt/varlena.c') diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index cb07a066ef1..aab4897f618 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -3834,16 +3834,15 @@ concat_internal(const char *sepstr, int argidx, return NULL; /* - * Non-null argument had better be an array - * - * Correct values are ensured by parser check, but this function - * can be called directly, bypassing the parser, so we should do - * some minimal check too - this form of call requires correctly set - * expr argtype in flinfo. + * Non-null argument had better be an array. We assume that any call + * context that could let get_fn_expr_variadic return true will have + * checked that a VARIADIC-labeled parameter actually is an array. So + * it should be okay to just Assert that it's an array rather than + * doing a full-fledged error check. */ - Assert(OidIsValid(get_fn_expr_argtype(fcinfo->flinfo, argidx))); - Assert(OidIsValid(get_element_type(get_fn_expr_argtype(fcinfo->flinfo, argidx)))); + Assert(OidIsValid(get_base_element_type(get_fn_expr_argtype(fcinfo->flinfo, argidx)))); + /* OK, safe to fetch the array value */ arr = PG_GETARG_ARRAYTYPE_P(argidx); /* @@ -4063,16 +4062,15 @@ text_format(PG_FUNCTION_ARGS) else { /* - * Non-null argument had better be an array - * - * Correct values are ensured by parser check, but this function - * can be called directly, bypassing the parser, so we should do - * some minimal check too - this form of call requires correctly set - * expr argtype in flinfo. + * Non-null argument had better be an array. We assume that any + * call context that could let get_fn_expr_variadic return true + * will have checked that a VARIADIC-labeled parameter actually is + * an array. So it should be okay to just Assert that it's an + * array rather than doing a full-fledged error check. */ - Assert(OidIsValid(get_fn_expr_argtype(fcinfo->flinfo, 1))); - Assert(OidIsValid(get_element_type(get_fn_expr_argtype(fcinfo->flinfo, 1)))); + Assert(OidIsValid(get_base_element_type(get_fn_expr_argtype(fcinfo->flinfo, 1)))); + /* OK, safe to fetch the array value */ arr = PG_GETARG_ARRAYTYPE_P(1); /* Get info about array element type */ -- cgit v1.2.3