aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2010-06-22 11:36:16 +0000
committerRobert Haas <rhaas@postgresql.org>2010-06-22 11:36:16 +0000
commitf974212320960452950921d68c6fea275c2257da (patch)
treec596be9ea814d410a22bc028fb8985229c1c0dc6
parent9b2c14cf115452fa595fa01c7943f4e532b8c86c (diff)
downloadpostgresql-f974212320960452950921d68c6fea275c2257da.tar.gz
postgresql-f974212320960452950921d68c6fea275c2257da.zip
Deprecate the use of => as an operator name.
In HEAD, emit a warning when an operator named => is defined. In both HEAD and the backbranches (except in 8.2, where contrib modules do not have documentation), document that hstore's text => text operator may be removed in a future release, and encourage the use of the hstore(text, text) function instead. This function only exists in HEAD (previously, it was called tconvert), so backpatch it back to 8.2, when hstore was added. Per discussion.
-rw-r--r--doc/src/sgml/hstore.sgml18
-rw-r--r--doc/src/sgml/ref/create_operator.sgml8
-rw-r--r--src/backend/commands/operatorcmds.c12
3 files changed, 35 insertions, 3 deletions
diff --git a/doc/src/sgml/hstore.sgml b/doc/src/sgml/hstore.sgml
index d5d320adf90..ef09a4ca869 100644
--- a/doc/src/sgml/hstore.sgml
+++ b/doc/src/sgml/hstore.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/hstore.sgml,v 1.10 2010/06/18 03:52:03 rhaas Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/hstore.sgml,v 1.11 2010/06/22 11:36:16 rhaas Exp $ -->
<sect1 id="hstore">
<title>hstore</title>
@@ -225,6 +225,14 @@
</para>
</note>
+ <note>
+ <para>
+ The <literal>=&gt;</> operator is deprecated and may be removed in a
+ future release. Use the <literal>hstore(text, text)</literal> function
+ instead.
+ </para>
+ </note>
+
<table id="hstore-func-table">
<title><type>hstore</> Functions</title>
@@ -266,6 +274,14 @@
</row>
<row>
+ <entry><function>hstore(text, text)</function></entry>
+ <entry><type>hstore</type></entry>
+ <entry>make single-item <type>hstore</></entry>
+ <entry><literal>hstore('a', 'b')</literal></entry>
+ <entry><literal>"a"=&gt;"b"</literal></entry>
+ </row>
+
+ <row>
<entry><function>akeys(hstore)</function></entry>
<entry><type>text[]</type></entry>
<entry>get <type>hstore</>'s keys as an array</entry>
diff --git a/doc/src/sgml/ref/create_operator.sgml b/doc/src/sgml/ref/create_operator.sgml
index a5595e6e69c..d70fefcf05c 100644
--- a/doc/src/sgml/ref/create_operator.sgml
+++ b/doc/src/sgml/ref/create_operator.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.52 2010/04/03 07:22:58 petere Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.53 2010/06/22 11:36:16 rhaas Exp $
PostgreSQL documentation
-->
@@ -71,6 +71,12 @@ CREATE OPERATOR <replaceable>name</replaceable> (
parse SQL-compliant commands without requiring spaces between tokens.
</para>
</listitem>
+ <listitem>
+ <para>
+ The use of <literal>=&gt;</> as an operator name is deprecated. It may
+ be disallowed altogether in a future release.
+ </para>
+ </listitem>
</itemizedlist>
</para>
diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c
index ff94aea42d4..2936c92a94e 100644
--- a/src/backend/commands/operatorcmds.c
+++ b/src/backend/commands/operatorcmds.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/operatorcmds.c,v 1.45 2010/02/14 18:42:14 rhaas Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/operatorcmds.c,v 1.46 2010/06/22 11:36:16 rhaas Exp $
*
* DESCRIPTION
* The "DefineFoo" routines take the parse tree and pick out the
@@ -88,6 +88,16 @@ DefineOperator(List *names, List *parameters)
/* Convert list of names to a name and namespace */
oprNamespace = QualifiedNameGetCreationNamespace(names, &oprName);
+ /*
+ * The SQL standard committee has decided that => should be used for
+ * named parameters; therefore, a future release of PostgreSQL may
+ * disallow it as the name of a user-defined operator.
+ */
+ if (strcmp(oprName, "=>") == 0)
+ ereport(WARNING,
+ (errmsg("=> is deprecated as an operator name"),
+ errdetail("This name may be disallowed altogether in future versions of PostgreSQL.")));
+
/* Check we have creation rights in target namespace */
aclresult = pg_namespace_aclcheck(oprNamespace, GetUserId(), ACL_CREATE);
if (aclresult != ACLCHECK_OK)