1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Allow named parameters to be specified using => in addition to :=

SQL has standardized on => as the use of to specify named parameters,
and we've wanted for many years to support the same syntax ourselves,
but this has been complicated by the possible use of => as an operator
name.  In PostgreSQL 9.0, we began emitting a warning when an operator
named => was defined, and in PostgreSQL 9.2, we stopped shipping a
=>(text, text) operator as part of hstore.  By the time the next major
version of PostgreSQL is released, => will have been deprecated for a
full five years, so hopefully there won't be too many people still
relying on it.  We continue to support := for compatibility with
previous PostgreSQL releases.

Pavel Stehule, reviewed by Petr Jelinek, with a few documentation
tweaks by me.
This commit is contained in:
Robert Haas
2015-03-10 10:59:11 -04:00
parent 4f3924d9cd
commit 865f14a2d3
10 changed files with 124 additions and 24 deletions

View File

@ -29,13 +29,14 @@ CREATE OPERATOR #%# (
-- Test comments
COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
ERROR: operator does not exist: integer ######
-- Show deprecated message. => is deprecated now
-- => is disallowed now
CREATE OPERATOR => (
leftarg = int8, -- right unary
procedure = numeric_fac
);
WARNING: => is deprecated as an operator name
DETAIL: This name may be disallowed altogether in future versions of PostgreSQL.
ERROR: syntax error at or near "=>"
LINE 1: CREATE OPERATOR => (
^
-- Should fail. CREATE OPERATOR requires USAGE on SCHEMA
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op1;

View File

@ -1356,6 +1356,73 @@ select dfunc('a'::text, 'b', flag := true); -- mixed notation
a
(1 row)
-- ansi/sql syntax
select dfunc(a => 1, b => 2);
dfunc
-------
1
(1 row)
select dfunc(a => 'a'::text, b => 'b');
dfunc
-------
a
(1 row)
select dfunc(a => 'a'::text, b => 'b', flag => false); -- named notation
dfunc
-------
b
(1 row)
select dfunc(b => 'b'::text, a => 'a'); -- named notation with default
dfunc
-------
a
(1 row)
select dfunc(a => 'a'::text, flag => true); -- named notation with default
dfunc
-------
a
(1 row)
select dfunc(a => 'a'::text, flag => false); -- named notation with default
dfunc
-------
(1 row)
select dfunc(b => 'b'::text, a => 'a', flag => true); -- named notation
dfunc
-------
a
(1 row)
select dfunc('a'::text, 'b', false); -- full positional notation
dfunc
-------
b
(1 row)
select dfunc('a'::text, 'b', flag => false); -- mixed notation
dfunc
-------
b
(1 row)
select dfunc('a'::text, 'b', true); -- full positional notation
dfunc
-------
a
(1 row)
select dfunc('a'::text, 'b', flag => true); -- mixed notation
dfunc
-------
a
(1 row)
-- check reverse-listing of named-arg calls
CREATE VIEW dfview AS
SELECT q1, q2,

View File

@ -35,7 +35,7 @@ CREATE OPERATOR #%# (
-- Test comments
COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
-- Show deprecated message. => is deprecated now
-- => is disallowed now
CREATE OPERATOR => (
leftarg = int8, -- right unary
procedure = numeric_fac

View File

@ -748,6 +748,22 @@ select dfunc('a'::text, 'b', flag := false); -- mixed notation
select dfunc('a'::text, 'b', true); -- full positional notation
select dfunc('a'::text, 'b', flag := true); -- mixed notation
-- ansi/sql syntax
select dfunc(a => 1, b => 2);
select dfunc(a => 'a'::text, b => 'b');
select dfunc(a => 'a'::text, b => 'b', flag => false); -- named notation
select dfunc(b => 'b'::text, a => 'a'); -- named notation with default
select dfunc(a => 'a'::text, flag => true); -- named notation with default
select dfunc(a => 'a'::text, flag => false); -- named notation with default
select dfunc(b => 'b'::text, a => 'a', flag => true); -- named notation
select dfunc('a'::text, 'b', false); -- full positional notation
select dfunc('a'::text, 'b', flag => false); -- mixed notation
select dfunc('a'::text, 'b', true); -- full positional notation
select dfunc('a'::text, 'b', flag => true); -- mixed notation
-- check reverse-listing of named-arg calls
CREATE VIEW dfview AS
SELECT q1, q2,