summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2009-06-07 20:09:34 +0000
committerTom Lane2009-06-07 20:09:34 +0000
commitf7be838a57d46f50411c418312a29ef490a47a5e (patch)
tree4a99874b0b3297d0394f85a886ad4e8586b159ee
parent686073428a17c81472abaceab2c8a153ffb4c942 (diff)
Revert my patch of 2009-04-04 that removed contrib/intarray's definitions of
the <@ and @> operators. These are not in fact equivalent to the built-in anyarray operators of the same names, because they have different behavior for empty arrays, namely they don't think empty arrays are contained in anything. That is mathematically wrong, no doubt, but until we can persuade GIN indexes to implement the mathematical definition we should probably not change this. Another reason for not changing it now is that we can't yet ensure the opclasses will be updated correctly in a dump-and-reload upgrade. Per recent discussions.
-rw-r--r--contrib/intarray/_int.sql.in44
-rw-r--r--contrib/intarray/uninstall__int.sql4
-rw-r--r--doc/src/sgml/intarray.sgml33
-rw-r--r--doc/src/sgml/release-8.4.sgml14
4 files changed, 46 insertions, 49 deletions
diff --git a/contrib/intarray/_int.sql.in b/contrib/intarray/_int.sql.in
index 1c4f060183..afdd98652c 100644
--- a/contrib/intarray/_int.sql.in
+++ b/contrib/intarray/_int.sql.in
@@ -152,23 +152,23 @@ CREATE OPERATOR && (
-- JOIN = neqjoinsel
--);
---CREATE OPERATOR @> (
--- LEFTARG = _int4,
--- RIGHTARG = _int4,
--- PROCEDURE = _int_contains,
--- COMMUTATOR = '<@',
--- RESTRICT = contsel,
--- JOIN = contjoinsel
---);
+CREATE OPERATOR @> (
+ LEFTARG = _int4,
+ RIGHTARG = _int4,
+ PROCEDURE = _int_contains,
+ COMMUTATOR = '<@',
+ RESTRICT = contsel,
+ JOIN = contjoinsel
+);
---CREATE OPERATOR <@ (
--- LEFTARG = _int4,
--- RIGHTARG = _int4,
--- PROCEDURE = _int_contained,
--- COMMUTATOR = '@>',
--- RESTRICT = contsel,
--- JOIN = contjoinsel
---);
+CREATE OPERATOR <@ (
+ LEFTARG = _int4,
+ RIGHTARG = _int4,
+ PROCEDURE = _int_contained,
+ COMMUTATOR = '@>',
+ RESTRICT = contsel,
+ JOIN = contjoinsel
+);
-- obsolete:
CREATE OPERATOR @ (
@@ -365,8 +365,8 @@ CREATE OPERATOR CLASS gist__int_ops
DEFAULT FOR TYPE _int4 USING gist AS
OPERATOR 3 &&,
OPERATOR 6 = (anyarray, anyarray),
- OPERATOR 7 @> (anyarray, anyarray),
- OPERATOR 8 <@ (anyarray, anyarray),
+ OPERATOR 7 @>,
+ OPERATOR 8 <@,
OPERATOR 13 @,
OPERATOR 14 ~,
OPERATOR 20 @@ (_int4, query_int),
@@ -442,8 +442,8 @@ FOR TYPE _int4 USING gist
AS
OPERATOR 3 &&,
OPERATOR 6 = (anyarray, anyarray),
- OPERATOR 7 @> (anyarray, anyarray),
- OPERATOR 8 <@ (anyarray, anyarray),
+ OPERATOR 7 @>,
+ OPERATOR 8 <@,
OPERATOR 13 @,
OPERATOR 14 ~,
OPERATOR 20 @@ (_int4, query_int),
@@ -473,8 +473,8 @@ FOR TYPE _int4 USING gin
AS
OPERATOR 3 &&,
OPERATOR 6 = (anyarray, anyarray),
- OPERATOR 7 @> (anyarray, anyarray),
- OPERATOR 8 <@ (anyarray, anyarray),
+ OPERATOR 7 @>,
+ OPERATOR 8 <@,
OPERATOR 13 @,
OPERATOR 14 ~,
OPERATOR 20 @@ (_int4, query_int),
diff --git a/contrib/intarray/uninstall__int.sql b/contrib/intarray/uninstall__int.sql
index 1523521854..f2ac1a24a6 100644
--- a/contrib/intarray/uninstall__int.sql
+++ b/contrib/intarray/uninstall__int.sql
@@ -91,6 +91,10 @@ DROP FUNCTION icount(_int4);
DROP FUNCTION intset(int4);
+DROP OPERATOR <@ (_int4, _int4);
+
+DROP OPERATOR @> (_int4, _int4);
+
DROP OPERATOR ~ (_int4, _int4);
DROP OPERATOR @ (_int4, _int4);
diff --git a/doc/src/sgml/intarray.sgml b/doc/src/sgml/intarray.sgml
index 95bc41475d..a19edee50f 100644
--- a/doc/src/sgml/intarray.sgml
+++ b/doc/src/sgml/intarray.sgml
@@ -134,12 +134,12 @@
<entry>overlap &mdash; <literal>true</> if arrays have at least one common element</entry>
</row>
<row>
- <entry><literal>int[] @ int[]</literal></entry>
+ <entry><literal>int[] @&gt; int[]</literal></entry>
<entry><type>boolean</type></entry>
<entry>contains &mdash; <literal>true</> if left array contains right array</entry>
</row>
<row>
- <entry><literal>int[] ~ int[]</literal></entry>
+ <entry><literal>int[] &lt;@ int[]</literal></entry>
<entry><type>boolean</type></entry>
<entry>contained &mdash; <literal>true</> if left array is contained in right array</entry>
</row>
@@ -203,13 +203,22 @@
</table>
<para>
- The containment operators <literal>@</> and <literal>~</> are functionally
- equivalent to <productname>PostgreSQL</>'s built-in operators
- <literal>@&gt;</> and <literal>&lt;@</>, respectively, except that
- <literal>@</> and <literal>~</> work only on integer arrays. These
- operator names are deprecated and will eventually be retired. (Notice that
- these names are reversed from the convention formerly followed by the core
- geometric datatypes!)
+ (Before PostgreSQL 8.2, the containment operators <literal>@&gt;</> and
+ <literal>&lt;@</> were respectively called <literal>@</> and <literal>~</>.
+ These names are still available, but are deprecated and will eventually be
+ retired. Notice that the old names are reversed from the convention
+ formerly followed by the core geometric datatypes!)
+ </para>
+
+ <para>
+ The containment operators <literal>@&gt;</> and <literal>&lt;@</> are
+ approximately equivalent to <productname>PostgreSQL</>'s built-in operators
+ of the same names, except that they work only on integer arrays while the
+ built-in operators work for any array type. An important difference is
+ that <filename>intarray</>'s operators do not consider an empty array to be
+ contained in anything else. This is consistent with the behavior of
+ GIN-indexed queries, but not with the usual mathematical definition of
+ containment.
</para>
<para>
@@ -230,10 +239,8 @@
<para>
<filename>intarray</> provides index support for the
- <literal>&amp;&amp;</>, <literal>@</>, <literal>~</>,
- and <literal>@@</> operators, as well as regular array equality
- and the built-in <literal>@&gt;</> and <literal>&lt;@</> operators
- (when used on integer arrays).
+ <literal>&amp;&amp;</>, <literal>@&gt;</>, <literal>&lt;@</>,
+ and <literal>@@</> operators, as well as regular array equality.
</para>
<para>
diff --git a/doc/src/sgml/release-8.4.sgml b/doc/src/sgml/release-8.4.sgml
index b479259828..0dd1c01cf7 100644
--- a/doc/src/sgml/release-8.4.sgml
+++ b/doc/src/sgml/release-8.4.sgml
@@ -3323,20 +3323,6 @@
<listitem>
<para>
- Remove <filename>contrib/intarray</>'s definitions of the
- <literal>&lt;@</> and <literal>@&gt;</> operators (Tom)
- </para>
-
- <para>
- This avoids confusion with the equivalent built-in operators.
- If needed, the <filename>contrib/intarray</> implementations
- are still available under their historical names <literal>@</>
- and <literal>~</>.
- </para>
- </listitem>
-
- <listitem>
- <para>
Make <filename>contrib/pg_standby</> recover all available WAL before
failover (Fujii Masao, Simon, Heikki)
</para>