]> granicus.if.org Git - postgresql/commitdiff
Revert my patch of 2009-04-04 that removed contrib/intarray's definitions of
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 7 Jun 2009 20:09:34 +0000 (20:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 7 Jun 2009 20:09:34 +0000 (20:09 +0000)
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.

contrib/intarray/_int.sql.in
contrib/intarray/uninstall__int.sql
doc/src/sgml/intarray.sgml
doc/src/sgml/release-8.4.sgml

index 93930b559d501d3b228509c79a94b5f920962a0a..645e9aeea2d0f348239a04a06e2c245751b9744b 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.30 2009/04/05 00:40:35 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.31 2009/06/07 20:09:34 tgl Exp $ */
 
 -- Adjust this setting to control where the objects get created.
 SET search_path = public;
@@ -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),
index 42721ed2fb09c80107d2b2230b83c4e628ec673e..ba962cd0d574dfac91a6b1395123db2df6628630 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.11 2009/04/05 00:40:35 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.12 2009/06/07 20:09:34 tgl Exp $ */
 
 -- Adjust this setting to control where the objects get created.
 SET search_path = public;
@@ -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);
index 2e77b57de3eea1f8f40c64cc79068504bfe1b390..9bd216ed49594dafc55d83e725dac7e768dc70ef 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/intarray.sgml,v 1.7 2009/04/05 00:40:35 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/intarray.sgml,v 1.8 2009/06/07 20:09:34 tgl Exp $ -->
 
 <sect1 id="intarray">
  <title>intarray</title>
       <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>
   </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>
 
   <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>
index a567afffb7d6ca1c2d25d79bbed23ca887be1f05..cca2d033b2c8f773762f2f96164cdf069fdf85d5 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.4.sgml,v 1.7 2009/05/27 22:12:53 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.4.sgml,v 1.8 2009/06/07 20:09:34 tgl Exp $ -->
 <!-- See header comment in release.sgml about typical markup -->
 
  <sect1 id="release-8-4">
       </para>
      </listitem>
 
-     <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