On Fri, Jun 03, 2011 at 10:42:01AM -0400, Tom Lane wrote:
> Noah Misch <n...@leadboat.com> writes:
> > On Fri, Jun 03, 2011 at 12:27:35AM -0400, Robert Haas wrote:
> >> and we
> >> treat the call as a request to smash bar to the underlying array type.
> 
> > No, there's no need to do that.  The domain "is" an array, not merely
> > something that can be coerced to an array.  Therefore, it can be
> > chosen as the polymorphic type directly.  Indeed, all released
> > versions do this.
> 
> No, it cannot "be chosen as the polymorphic type directly".

This already happens today.

> The problem
> with that is that there is no principled way to resolve ANYELEMENT
> unless you consider that you have downcasted the domain to the array
> type.

I have nothing material to add to my statement in
http://archives.postgresql.org/message-id/20110511093217.gb26...@tornado.gateway.2wire.net

Let's be concrete; run this on 9.0:

  CREATE DOMAIN foo AS int[];

  SELECT pg_typeof(array_append('{1}'::foo, 1));
  SELECT pg_typeof(array_prepend(1, '{1}'::foo));
  SELECT pg_typeof(array_fill(1, array[3]));

Which of those type resolutions do you find unprincipled, or what hypothetical
function does 9.0 resolve in an unprincipled way?  (What the function actually
does isn't important.)

> You could perhaps ignore that problem for polymorphic functions
> that use only ANYARRAY and not ANYELEMENT in their arguments and return
> type --- but I'm not happy with the idea that that case would work
> differently from a function that does use both.

It would be no good to bifurcate the rules that way.

> So far as the other points you raise are concerned, I'm still of the
> opinion that we might be best off to consider that domains should be
> smashed to their base types when matching them to ANYELEMENT, too.
> Again, if we don't do that, we have a problem with figuring out what
> ANYARRAY ought to be (since we don't create an array type to go with a
> domain).

Perhaps, though it paints us into a backward compatibility corner should we ever
support arrays of domains.  How many field complaints has the longstanding error
outcome produced?

> More generally, this dodges the whole problem of needing
> polymorphic functions to enforce domain constraints, something I still
> believe is entirely impractical from an implementation standpoint.

I wrote about the implementation scope in
http://archives.postgresql.org/message-id/20110511191249.ga29...@tornado.gateway.2wire.net

While I don't doubt the presence of implementation challenges beyond those I
identified, we can't meaningfully discuss them as generalities.

nm

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to