]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Doc: clarify behavior of "anyrange" pseudo-type.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Mar 2020 19:05:17 +0000 (15:05 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Mar 2020 19:05:17 +0000 (15:05 -0400)
I noticed that we completely failed to document the restriction
that an "anyrange" result type has to be inferred from an "anyrange"
input.  The docs also were less clear than they could be about the
relationship between "anyrange" and "anyarray".

It's been like this all along, so back-patch.

doc/src/sgml/extend.sgml

index 2e3b5f678e754edb2d7674fccf447050062f0e8d..8c68d595e52f20f351976ed757f3ad56c4b5949a 100644 (file)
      <type>anyarray</type> positions must be an array whose elements are
      the same type appearing in the <type>anyelement</type> positions.
      Similarly, if there are positions declared <type>anyrange</type>
-     and others declared <type>anyelement</type>, the actual range type in
-     the <type>anyrange</type> positions must be a range whose subtype is
-     the same type appearing in the <type>anyelement</type> positions.
-     <type>anynonarray</> is treated exactly the same as <type>anyelement</>,
+     and others declared <type>anyelement</type> or <type>anyarray</type>,
+     the actual range type in the <type>anyrange</type> positions must be a
+     range whose subtype is the same type appearing in
+     the <type>anyelement</type> positions and the same as the element type
+     of the <type>anyarray</type> positions.
+     <type>anynonarray</type> is treated exactly the same as <type>anyelement</type>,
      but adds the additional constraint that the actual type must not be
      an array type.
      <type>anyenum</> is treated exactly the same as <type>anyelement</>,
      will only accept arrays of enum types.
     </para>
 
+    <para>
+     In most cases, the parser can infer the actual data type for a
+     polymorphic result type from arguments that are of a different
+     polymorphic type; for example <type>anyarray</type> can be deduced
+     from <type>anyelement</type> or vice versa.  The exception is that a
+     polymorphic result of type <type>anyrange</type> requires an argument
+     of type <type>anyrange</type>; it cannot be deduced
+     from <type>anyarray</type> or <type>anyelement</type> arguments.  This
+     is because there could be multiple range types with the same subtype.
+    </para>
+
     <para>
      Note that <type>anynonarray</> and <type>anyenum</> do not represent
      separate type variables; they are the same type as