aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-03-17 15:05:17 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-03-17 15:05:17 -0400
commit974c8ea0afe35a55c1b9ffb9f2090058b9f356dd (patch)
tree1cbe2b1aaf88c204e05851e118024d4b4f859eff
parent9af2f7dc9603bf1fd1f80a6326cc80e83acd3076 (diff)
downloadpostgresql-974c8ea0afe35a55c1b9ffb9f2090058b9f356dd.tar.gz
postgresql-974c8ea0afe35a55c1b9ffb9f2090058b9f356dd.zip
Doc: clarify behavior of "anyrange" pseudo-type.
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.
-rw-r--r--doc/src/sgml/extend.sgml19
1 files changed, 16 insertions, 3 deletions
diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml
index 4f1bc6130aa..04540ee3ccc 100644
--- a/doc/src/sgml/extend.sgml
+++ b/doc/src/sgml/extend.sgml
@@ -256,9 +256,11 @@
<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.
+ 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.
@@ -290,6 +292,17 @@
</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</type> and <type>anyenum</type> do not represent
separate type variables; they are the same type as
<type>anyelement</type>, just with an additional constraint. For