Re: Lack of RelabelType is causing me pain - Mailing list pgsql-hackers
From | Joe Conway |
---|---|
Subject | Re: Lack of RelabelType is causing me pain |
Date | |
Msg-id | 3FB00251.8090702@joeconway.com Whole thread Raw |
In response to | Lack of RelabelType is causing me pain (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: Lack of RelabelType is causing me pain
|
List | pgsql-hackers |
Tom Lane wrote: > Joe, do you recall the reasoning for this code in parse_coerce.c? > > if (targetTypeId == ANYOID || > targetTypeId == ANYARRAYOID || > targetTypeId == ANYELEMENTOID) > { > /* assume can_coerce_type verified that implicit coercion is okay */ > /* NB: we do NOT want a RelabelType here */ > return node; > } I see this in REL7_3_STABLE else if (targetTypeId == ANYOID || targetTypeId == ANYARRAYOID) { /* assume can_coerce_type verifiedthat implicit coercion is okay */ /* NB: we do NOT want a RelabelType here */ result = node; } This was introduced here: ------------------------------------------ Revision 2.80 / (download) - annotate - [select for diffs] , Thu Aug 22 00:01:42 2002 UTC (14 months, 2 weeks ago) by tgl Changes since 2.79: +42 -19 lines Diff to previous 2.79 Add a bunch of pseudo-types to replace the behavior formerly associated with OPAQUE, as per recent pghackers discussion. I still want to do some more work on the 'cstring' pseudo-type, but I'm going to commit the bulk of the changes now before the tree starts shifting under me ... ------------------------------------------ I think I just followed suit when adding ANYELEMENTOID. > This is AFAICT the only case where the parser will generate an > expression tree that is not labeled with the same datatype expected > by the next-higher operator. That is precisely the sort of mismatch > that RelabelType was invented to avoid, and I'm afraid that we have > broken some things by regressing on the explicit representation of > type coercions. > > The particular case that is causing me pain right now is that in my > modified tree with support for cross-datatype index operations, cases > involving anyarray_ops indexes are blowing up. That's because the > visible input type of an indexed comparison isn't matching the declared > righthand input type of any operator in the opclass. But RelabelType > was put in to avoid a number of other problems that I can't recall in > detail, so I am suspicious that this shortcut breaks other things too. > > I think that the reason we did this was to allow get_fn_expr_argtype() > to see the unrelabeled datatype of the input to an anyarray/anyelement- > accepting function. Couldn't we fix that locally in that function > instead of breaking a system-wide convention? I'm thinking that we > could simply make that function "burrow down" through any RelabelTypes > for any/anyarray/anyelement. Does the RelabelType keep a record of what was relabeled (I presume from your description above it does)? The original code above predates get_fn_expr_argtype() I think, but it sounds like a reasonable approach to me. Joe
pgsql-hackers by date: