Thread: parse_expr.c:typecast_expression:return immediate on NULL input

parse_expr.c:typecast_expression:return immediate on NULL input

From
Hannes Eder
Date:
in parse_expr.c:typecast_expression: return immediate on NULL input,
i.e. do not lookup target type Oid as it is not required.

-Hannes
Index: src/backend/parser/parse_expr.c
===================================================================
--- src/backend/parser/parse_expr.c    (revision 377)
+++ src/backend/parser/parse_expr.c    (working copy)
@@ -2226,11 +2226,11 @@
     Oid            targetType;
     int32        targetTypmod;

-    targetType = typenameTypeId(pstate, typename, &targetTypmod);
-
     if (inputType == InvalidOid)
         return expr;            /* do nothing if NULL input */

+    targetType = typenameTypeId(pstate, typename, &targetTypmod);
+
     expr = coerce_to_target_type(pstate, expr, inputType,
                                  targetType, targetTypmod,
                                  COERCION_EXPLICIT,

Re: parse_expr.c:typecast_expression:return immediate on NULL input

From
Tom Lane
Date:
Hannes Eder <Hannes@HannesEder.net> writes:
> in parse_expr.c:typecast_expression: return immediate on NULL input,
> i.e. do not lookup target type Oid as it is not required.

I think the existing ordering is intentional, to detect and error out
if the given typename is bogus.

It's fairly likely that the test for InvalidOid is dead code anyway,
but it's cheap enough that I'm not in a hurry to take it out.

            regards, tom lane

Re: parse_expr.c:typecast_expression:return immediate on NULL input

From
"Hannes Eder"
Date:
Tom Lane <tgl@sss.pgh.pa.us> writes:
> Hannes Eder <Hannes@HannesEder.net> writes:
> > in parse_expr.c:typecast_expression: return immediate on NULL
> input, i.e. do not lookup target type Oid as it is not required.
>
> I think the existing ordering is intentional, to detect and error
> out if the given typename is bogus.

Ups, yes, you are right. typecast_expression calls typenameTypeId and
this calls typenameType, which will ereport an error if the typename
cannot be found.

-Hannes