Re: Why does to_json take "anyelement" rather than "any"? - Mailing list pgsql-hackers

From Mohamed Wael Khobalatte
Subject Re: Why does to_json take "anyelement" rather than "any"?
Date
Msg-id CABZeWdwoR9UGJuLEMg7HxfboYUH_MX+yWq6e6DicW+WCKj7bpg@mail.gmail.com
Whole thread Raw
In response to Why does to_json take "anyelement" rather than "any"?  (Nikhil Benesch <nikhil.benesch@gmail.com>)
Responses Re: Why does to_json take "anyelement" rather than "any"?
List pgsql-hackers


On Tue, Nov 3, 2020 at 11:54 AM Nikhil Benesch <nikhil.benesch@gmail.com> wrote:
to_json is declared as taking "anyelement" as input, which means
you can't pass it something of unknown type:

     postgres=# SELECT to_json('foo');
     ERROR:  could not determine polymorphic type because input has type unknown

But this works fine with the very similar json_build_array function:

     postgres=# SELECT json_build_array('foo');
      json_build_array
     ------------------
      ["foo"]
     (1 row)

The difference is that json_build_array takes type "any" as input, while
to_json takes "anyelement" as input.

Is there some reason to_json couldn't be switched to take "any" as input?
Hacking this together seems to mostly just work:

     postgres=# CREATE FUNCTION my_to_json ("any") RETURNS json LANGUAGE 'internal' AS 'to_json';
     postgres=# SELECT my_to_json('foo');
      my_to_json
     ------------
      "foo"
     (1 row)

Is there something I'm missing?

Nikhil


Hm, good question. I am also curious as to why this happens. `json_build_array` ends up casting unknowns to text (from reading the code), which seems like a reasonable (although not completely tight) assumption. Not sure why `to_json` can't just do the same. You can always cast to text yourself, of course, but I am not familiar with the type hierarchy enough to tell why `to_json` can't deduce that as text whereas the other function can. 

pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Hybrid Hash/Nested Loop joins and caching results from subplans
Next
From: Thomas Munro
Date:
Subject: Re: [Patch] Optimize dropping of relation buffers using dlist