]> granicus.if.org Git - postgresql/commitdiff
Change the notation for calling functions with named parameters from
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 30 May 2010 18:10:41 +0000 (18:10 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 30 May 2010 18:10:41 +0000 (18:10 +0000)
"val AS name" to "name := val", as per recent discussion.

This patch catches everything in the original named-parameters patch,
but I'm not certain that no other dependencies snuck in later (grepping
the source tree for all uses of AS soon proved unworkable).

In passing I note that we've dropped the ball at least once on keeping
ecpg's lexer (as opposed to parser) in sync with the backend.  It would
be a good idea to go through all of pgc.l and see if it's in sync now.
I didn't attempt that at the moment.

doc/src/sgml/syntax.sgml
doc/src/sgml/xfunc.sgml
src/backend/parser/gram.y
src/backend/parser/parse_func.c
src/backend/parser/scan.l
src/backend/utils/adt/ruleutils.c
src/bin/psql/psqlscan.l
src/interfaces/ecpg/preproc/parse.pl
src/interfaces/ecpg/preproc/pgc.l
src/test/regress/expected/polymorphism.out
src/test/regress/sql/polymorphism.sql

index c9fa642345c4d5d9269ca35ffd328afe5076ddfc..8f6b728aa03b92bdf8d59bb1d6011324159aed7d 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.144 2010/05/27 18:23:47 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.145 2010/05/30 18:10:40 tgl Exp $ -->
 
 <chapter id="sql-syntax">
  <title>SQL Syntax</title>
@@ -2285,10 +2285,11 @@ SELECT concat_lower_or_upper('Hello', 'World');
     </indexterm>
 
     <para>
-     In named notation, each argument's name is specified using the
-     <literal>AS</literal> keyword.  For example:
+     In named notation, each argument's name is specified using
+     <literal>:=</literal> to separate it from the argument expression.
+     For example:
 <screen>
-SELECT concat_lower_or_upper('Hello' AS a, 'World' AS b);
+SELECT concat_lower_or_upper(a := 'Hello', b := 'World');
  concat_lower_or_upper 
 -----------------------
  hello world
@@ -2299,13 +2300,13 @@ SELECT concat_lower_or_upper('Hello' AS a, 'World' AS b);
      using named notation is that the arguments may be specified in any
      order, for example:
 <screen>
-SELECT concat_lower_or_upper('Hello' AS a, 'World' AS b, true AS uppercase);
+SELECT concat_lower_or_upper(a := 'Hello', b := 'World', uppercase := true);
  concat_lower_or_upper 
 -----------------------
  HELLO WORLD
 (1 row)
 
-SELECT concat_lower_or_upper('Hello' AS a, true AS uppercase, 'World' AS b);
+SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');
  concat_lower_or_upper 
 -----------------------
  HELLO WORLD
@@ -2327,7 +2328,7 @@ SELECT concat_lower_or_upper('Hello' AS a, true AS uppercase, 'World' AS b);
     already mentioned, named arguments cannot precede positional arguments.
     For example:
 <screen>
-SELECT concat_lower_or_upper('Hello', 'World', true AS uppercase);
+SELECT concat_lower_or_upper('Hello', 'World', uppercase := true);
  concat_lower_or_upper 
 -----------------------
  HELLO WORLD
index c422fcc78a8d96d5403f2cb568d6c5c44e4dac91..b2795c2cf09315b994ba612a3492f05056670cab 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.148 2010/05/16 04:35:04 rhaas Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.149 2010/05/30 18:10:40 tgl Exp $ -->
 
  <sect1 id="xfunc">
   <title>User-Defined Functions</title>
@@ -705,14 +705,14 @@ SELECT mleast(VARIADIC ARRAY[10, -1, 5, 4.4]);
      <literal>VARIADIC</>.  For example, this will work:
 
 <screen>
-SELECT mleast(VARIADIC ARRAY[10, -1, 5, 4.4] AS arr);
+SELECT mleast(VARIADIC arr := ARRAY[10, -1, 5, 4.4]);
 </screen>
 
      but not these:
 
 <screen>
-SELECT mleast(10 AS arr);
-SELECT mleast(ARRAY[10, -1, 5, 4.4] AS arr);
+SELECT mleast(arr := 10);
+SELECT mleast(arr := ARRAY[10, -1, 5, 4.4]);
 </screen>
     </para>
    </sect2>
index 368586a95e6b53504932823b085faff3ea57a8bb..c75bc825a8d907b51ad75825fe6b24bae1a0dff8 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.711 2010/02/23 22:51:42 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.712 2010/05/30 18:10:40 tgl Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -444,8 +444,8 @@ static TypeName *TableFuncTypeName(List *columns);
  * the set of keywords.  PL/pgsql depends on this so that it can share the
  * same lexer.  If you add/change tokens here, fix PL/pgsql to match!
  *
- * DOT_DOT and COLON_EQUALS are unused in the core SQL grammar, and so will
- * always provoke parse errors.  They are needed by PL/pgsql.
+ * DOT_DOT is unused in the core SQL grammar, and so will always provoke
+ * parse errors.  It is needed by PL/pgsql.
  */
 %token <str>   IDENT FCONST SCONST BCONST XCONST Op
 %token <ival>  ICONST PARAM
@@ -10212,13 +10212,13 @@ func_arg_expr:  a_expr
                                {
                                        $$ = $1;
                                }
-                       | a_expr AS param_name
+                       | param_name COLON_EQUALS a_expr
                                {
                                        NamedArgExpr *na = makeNode(NamedArgExpr);
-                                       na->arg = (Expr *) $1;
-                                       na->name = $3;
+                                       na->name = $1;
+                                       na->arg = (Expr *) $3;
                                        na->argnumber = -1;             /* until determined */
-                                       na->location = @3;
+                                       na->location = @1;
                                        $$ = (Node *) na;
                                }
                ;
@@ -10698,7 +10698,7 @@ AexprConst: Iconst
                                                if (IsA(arg, NamedArgExpr))
                                                        ereport(ERROR,
                                                                    (errcode(ERRCODE_SYNTAX_ERROR),
-                                                                    errmsg("type modifier cannot have AS name"),
+                                                                    errmsg("type modifier cannot have parameter name"),
                                                                     parser_errposition(arg->location)));
                                        }
                                        t->typmods = $3;
index 8a2663c232c66bd212c732cf6176aabcbc24a51d..5de08dc78c82ed00a2b004eefcd1d555cbfd9f76 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/parse_func.c,v 1.223 2010/03/17 16:52:38 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/parse_func.c,v 1.224 2010/05/30 18:10:40 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1386,12 +1386,12 @@ funcname_signature_string(const char *funcname, int nargs,
        {
                if (i)
                        appendStringInfoString(&argbuf, ", ");
-               appendStringInfoString(&argbuf, format_type_be(argtypes[i]));
                if (i >= numposargs)
                {
-                       appendStringInfo(&argbuf, " AS %s", (char *) lfirst(lc));
+                       appendStringInfo(&argbuf, "%s := ", (char *) lfirst(lc));
                        lc = lnext(lc);
                }
+               appendStringInfoString(&argbuf, format_type_be(argtypes[i]));
        }
 
        appendStringInfoChar(&argbuf, ')');
index b09187a2c0248987a672aa31e2de866a31aba432..81502adc95e1ce33580481bbf9fee14c7acf059c 100644 (file)
@@ -24,7 +24,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.166 2010/01/16 17:39:55 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.167 2010/05/30 18:10:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -317,8 +317,6 @@ ident_cont          [A-Za-z\200-\377_0-9\$]
 identifier             {ident_start}{ident_cont}*
 
 typecast               "::"
-
-/* these two token types are used by PL/pgsql, though not in core SQL */
 dot_dot                        \.\.
 colon_equals   ":="
 
index 316562537bedafdc3b7234fbd8b02a8b6ced9a73..54b6018d8e48d0fb6748b77661e008dda67fbddc 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.325 2010/02/26 02:01:09 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.326 2010/05/30 18:10:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4537,8 +4537,8 @@ get_rule_expr(Node *node, deparse_context *context,
                        {
                                NamedArgExpr *na = (NamedArgExpr *) node;
 
+                               appendStringInfo(buf, "%s := ", quote_identifier(na->name));
                                get_rule_expr((Node *) na->arg, context, showimplicit);
-                               appendStringInfo(buf, " AS %s", quote_identifier(na->name));
                        }
                        break;
 
index cef0e73e9f982b649db322aaa86a0ab88d0f4f5b..8c105c11ed133696646032f3d3814321e0925c07 100644 (file)
@@ -33,7 +33,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/bin/psql/psqlscan.l,v 1.33 2010/05/05 22:18:56 tgl Exp $
+ *       $PostgreSQL: pgsql/src/bin/psql/psqlscan.l,v 1.34 2010/05/30 18:10:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -345,8 +345,6 @@ ident_cont          [A-Za-z\200-\377_0-9\$]
 identifier             {ident_start}{ident_cont}*
 
 typecast               "::"
-
-/* these two token types are used by PL/pgsql, though not in core SQL */
 dot_dot                        \.\.
 colon_equals   ":="
 
index 0db79227f486394bee5c48079425c9eabb97b88b..30217a35dc61fd3121dcdd1faa8244a28db3461c 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl
-# $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/parse.pl,v 1.7 2010/01/02 16:58:11 momjian Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/parse.pl,v 1.8 2010/05/30 18:10:41 tgl Exp $
 # parser generater for ecpg
 # call with backend parser as stdin
 #
@@ -41,6 +41,8 @@ $replace_string{'WITH_TIME'} = 'with time';
 $replace_string{'NULLS_FIRST'} = 'nulls first';
 $replace_string{'NULLS_LAST'} = 'nulls last';
 $replace_string{'TYPECAST'} = '::';
+$replace_string{'DOT_DOT'} = '..';
+$replace_string{'COLON_EQUALS'} = ':=';
 
 # specific replace_types for specific non-terminals - never include the ':'
 # ECPG-only replace_types are defined in ecpg-replace_types
index cb00408752a73a5fe087f22f8e80a128643ff2a2..e0f112d3c4fb057378221e4f5d8238ef11cd0e6a 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.173 2010/03/21 10:49:51 meskes Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.174 2010/05/30 18:10:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -230,6 +230,8 @@ identifier          {ident_start}{ident_cont}*
 
 array                  ({ident_cont}|{whitespace}|[\[\]\+\-\*\%\/\(\)\>\.])*
 typecast               "::"
+dot_dot                        \.\.
+colon_equals   ":="
 
 /*
  * "self" is the set of chars that should be returned as single-character
@@ -595,6 +597,8 @@ cppline                     {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                                        }
 <xdc>{xdcinside}       { addlit(yytext, yyleng); }
 <SQL>{typecast}                { return TYPECAST; }
+<SQL>{dot_dot}         { return DOT_DOT; }
+<SQL>{colon_equals}    { return COLON_EQUALS; }
 <SQL>{informix_special}        {
                          /* are we simulating Informix? */
                                if (INFORMIX_MODE)
index cc104522b0c0ad54872f60c95952d3d6e03dcd76..bae04a2719b622cf4e7d3ebaab8c402ecc8aff86 100644 (file)
@@ -1052,19 +1052,19 @@ select (dfunc(10,20,30)).*;
  10 | 20 | 30 | 0
 (1 row)
 
-select (dfunc(10 as a, 20 as b, 30 as c)).*;
+select (dfunc(a := 10, b := 20, c := 30)).*;
  a  | b  | c  | d 
 ----+----+----+---
  10 | 20 | 30 | 0
 (1 row)
 
-select * from dfunc(10 as a, 20 as b);
+select * from dfunc(a := 10, b := 20);
  a  | b  | c | d 
 ----+----+---+---
  10 | 20 | 0 | 0
 (1 row)
 
-select * from dfunc(10 as b, 20 as a);
+select * from dfunc(b := 10, a := 20);
  a  | b  | c | d 
 ----+----+---+---
  20 | 10 | 0 | 0
@@ -1081,39 +1081,39 @@ select * from dfunc(1,2);
  1 | 2 | 0 | 0
 (1 row)
 
-select * from dfunc(1,2,3 as c);
+select * from dfunc(1,2,c := 3);
  a | b | c | d 
 ---+---+---+---
  1 | 2 | 3 | 0
 (1 row)
 
-select * from dfunc(1,2,3 as d);
+select * from dfunc(1,2,d := 3);
  a | b | c | d 
 ---+---+---+---
  1 | 2 | 0 | 3
 (1 row)
 
-select * from dfunc(10 as x, 20 as b, 30 as x);  -- fail, duplicate name
+select * from dfunc(x := 20, b := 10, x := 30);  -- fail, duplicate name
 ERROR:  argument name "x" used more than once
-LINE 1: select * from dfunc(10 as x, 20 as b, 30 as x);
-                                                    ^
-select * from dfunc(10, 20 as b, 30);  -- fail, named args must be last
+LINE 1: select * from dfunc(x := 20, b := 10, x := 30);
+                                              ^
+select * from dfunc(10, b := 20, 30);  -- fail, named args must be last
 ERROR:  positional argument cannot follow named argument
-LINE 1: select * from dfunc(10, 20 as b, 30);
+LINE 1: select * from dfunc(10, b := 20, 30);
                                          ^
-select * from dfunc(10 as x, 20 as b, 30 as c);  -- fail, unknown param
-ERROR:  function dfunc(integer AS x, integer AS b, integer AS c) does not exist
-LINE 1: select * from dfunc(10 as x, 20 as b, 30 as c);
+select * from dfunc(x := 10, b := 20, c := 30);  -- fail, unknown param
+ERROR:  function dfunc(x := integer, b := integer, c := integer) does not exist
+LINE 1: select * from dfunc(x := 10, b := 20, c := 30);
                       ^
 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
-select * from dfunc(10, 10, 20 as a);  -- fail, a overlaps positional parameter
-ERROR:  function dfunc(integer, integer, integer AS a) does not exist
-LINE 1: select * from dfunc(10, 10, 20 as a);
+select * from dfunc(10, 10, a := 20);  -- fail, a overlaps positional parameter
+ERROR:  function dfunc(integer, integer, a := integer) does not exist
+LINE 1: select * from dfunc(10, 10, a := 20);
                       ^
 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
-select * from dfunc(1,2 as c,3 as d); -- fail, no value for b
-ERROR:  function dfunc(integer, integer AS c, integer AS d) does not exist
-LINE 1: select * from dfunc(1,2 as c,3 as d);
+select * from dfunc(1,c := 2,d := 3); -- fail, no value for b
+ERROR:  function dfunc(integer, c := integer, d := integer) does not exist
+LINE 1: select * from dfunc(1,c := 2,d := 3);
                       ^
 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
 drop function dfunc(int, int, int, int);
@@ -1134,27 +1134,27 @@ select * from dfunc('Hello World', 20, '2009-07-25'::date);
  Hello World | 20 | 07-25-2009
 (1 row)
 
-select * from dfunc('2009-07-25'::date as c, 'Hello World' as a, 20 as b);
+select * from dfunc(c := '2009-07-25'::date, a := 'Hello World', b := 20);
       a      | b  |     c      
 -------------+----+------------
  Hello World | 20 | 07-25-2009
 (1 row)
 
-select * from dfunc('Hello World', 20 as b, '2009-07-25'::date as c);
+select * from dfunc('Hello World', b := 20, c := '2009-07-25'::date);
       a      | b  |     c      
 -------------+----+------------
  Hello World | 20 | 07-25-2009
 (1 row)
 
-select * from dfunc('Hello World', '2009-07-25'::date as c, 20 as b);
+select * from dfunc('Hello World', c := '2009-07-25'::date, b := 20);
       a      | b  |     c      
 -------------+----+------------
  Hello World | 20 | 07-25-2009
 (1 row)
 
-select * from dfunc('Hello World', 20 as c, '2009-07-25'::date as b);  -- fail
-ERROR:  function dfunc(unknown, integer AS c, date AS b) does not exist
-LINE 1: select * from dfunc('Hello World', 20 as c, '2009-07-25'::da...
+select * from dfunc('Hello World', c := 20, b := '2009-07-25'::date);  -- fail
+ERROR:  function dfunc(unknown, c := integer, b := date) does not exist
+LINE 1: select * from dfunc('Hello World', c := 20, b := '2009-07-25...
                       ^
 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
 drop function dfunc(varchar, numeric, date);
@@ -1181,13 +1181,13 @@ select * from dfunc('Hello', 100);
  Hello | 100
 (1 row)
 
-select * from dfunc('Hello' as a, 100 as c);
+select * from dfunc(a := 'Hello', c := 100);
   _a   | _c  
 -------+-----
  Hello | 100
 (1 row)
 
-select * from dfunc(100 as c, 'Hello' as a);
+select * from dfunc(c := 100, a := 'Hello');
   _a   | _c  
 -------+-----
  Hello | 100
@@ -1199,13 +1199,13 @@ select * from dfunc('Hello');
  Hello |   
 (1 row)
 
-select * from dfunc('Hello', 100 as c);
+select * from dfunc('Hello', c := 100);
   _a   | _c  
 -------+-----
  Hello | 100
 (1 row)
 
-select * from dfunc(100 as c);
+select * from dfunc(c := 100);
   _a   | _c  
 -------+-----
  def a | 100
@@ -1268,43 +1268,43 @@ select dfunc('a'::text, 'b'); -- positional notation with default
  a
 (1 row)
 
-select dfunc(1 as a, 2 as b);
+select dfunc(a := 1, b := 2);
  dfunc 
 -------
      1
 (1 row)
 
-select dfunc('a'::text as a, 'b' as b);
+select dfunc(a := 'a'::text, b := 'b');
  dfunc 
 -------
  a
 (1 row)
 
-select dfunc('a'::text as a, 'b' as b, false as flag); -- named notation
+select dfunc(a := 'a'::text, b := 'b', flag := false); -- named notation
  dfunc 
 -------
  b
 (1 row)
 
-select dfunc('b'::text as b, 'a' as a); -- named notation with default
+select dfunc(b := 'b'::text, a := 'a'); -- named notation with default
  dfunc 
 -------
  a
 (1 row)
 
-select dfunc('a'::text as a, true as flag); -- named notation with default
+select dfunc(a := 'a'::text, flag := true); -- named notation with default
  dfunc 
 -------
  a
 (1 row)
 
-select dfunc('a'::text as a, false as flag); -- named notation with default
+select dfunc(a := 'a'::text, flag := false); -- named notation with default
  dfunc 
 -------
  
 (1 row)
 
-select dfunc('b'::text as b, 'a' as a, true as flag); -- named notation
+select dfunc(b := 'b'::text, a := 'a', flag := true); -- named notation
  dfunc 
 -------
  a
@@ -1316,7 +1316,7 @@ select dfunc('a'::text, 'b', false); -- full positional notation
  b
 (1 row)
 
-select dfunc('a'::text, 'b', false as flag); -- mixed notation
+select dfunc('a'::text, 'b', flag := false); -- mixed notation
  dfunc 
 -------
  b
@@ -1328,7 +1328,7 @@ select dfunc('a'::text, 'b', true); -- full positional notation
  a
 (1 row)
 
-select dfunc('a'::text, 'b', true as flag); -- mixed notation
+select dfunc('a'::text, 'b', flag := true); -- mixed notation
  dfunc 
 -------
  a
@@ -1337,8 +1337,8 @@ select dfunc('a'::text, 'b', true as flag); -- mixed notation
 -- check reverse-listing of named-arg calls
 CREATE VIEW dfview AS
    SELECT q1, q2,
-     dfunc(q1,q2, q1>q2 as flag) as c3,
-     dfunc(q1, q1<q2 as flag, q2 AS b) as c4
+     dfunc(q1,q2, flag := q1>q2) as c3,
+     dfunc(q1, flag := q1<q2, b := q2) as c4
      FROM int8_tbl;
 select * from dfview;
         q1        |        q2         |        c3        |        c4         
@@ -1359,7 +1359,7 @@ select * from dfview;
  c3     | bigint |           | plain   | 
  c4     | bigint |           | plain   | 
 View definition:
- SELECT int8_tbl.q1, int8_tbl.q2, dfunc(int8_tbl.q1, int8_tbl.q2, int8_tbl.q1 > int8_tbl.q2 AS flag) AS c3, dfunc(int8_tbl.q1, int8_tbl.q1 < int8_tbl.q2 AS flag, int8_tbl.q2 AS b) AS c4
+ SELECT int8_tbl.q1, int8_tbl.q2, dfunc(int8_tbl.q1, int8_tbl.q2, flag := int8_tbl.q1 > int8_tbl.q2) AS c3, dfunc(int8_tbl.q1, flag := int8_tbl.q1 < int8_tbl.q2, b := int8_tbl.q2) AS c4
    FROM int8_tbl;
 
 drop view dfview;
index 3c8ab5d79b280d94f9c97b41433382e9aace2b1d..2baebe93235109f2846386f7ce455fce06349004 100644 (file)
@@ -636,19 +636,19 @@ create function dfunc(a int, b int, c int = 0, d int = 0)
 $$ language sql;
 
 select (dfunc(10,20,30)).*;
-select (dfunc(10 as a, 20 as b, 30 as c)).*;
-select * from dfunc(10 as a, 20 as b);
-select * from dfunc(10 as b, 20 as a);
+select (dfunc(a := 10, b := 20, c := 30)).*;
+select * from dfunc(a := 10, b := 20);
+select * from dfunc(b := 10, a := 20);
 select * from dfunc(0);  -- fail
 select * from dfunc(1,2);
-select * from dfunc(1,2,3 as c);
-select * from dfunc(1,2,3 as d);
+select * from dfunc(1,2,c := 3);
+select * from dfunc(1,2,d := 3);
 
-select * from dfunc(10 as x, 20 as b, 30 as x);  -- fail, duplicate name
-select * from dfunc(10, 20 as b, 30);  -- fail, named args must be last
-select * from dfunc(10 as x, 20 as b, 30 as c);  -- fail, unknown param
-select * from dfunc(10, 10, 20 as a);  -- fail, a overlaps positional parameter
-select * from dfunc(1,2 as c,3 as d); -- fail, no value for b
+select * from dfunc(x := 20, b := 10, x := 30);  -- fail, duplicate name
+select * from dfunc(10, b := 20, 30);  -- fail, named args must be last
+select * from dfunc(x := 10, b := 20, c := 30);  -- fail, unknown param
+select * from dfunc(10, 10, a := 20);  -- fail, a overlaps positional parameter
+select * from dfunc(1,c := 2,d := 3); -- fail, no value for b
 
 drop function dfunc(int, int, int, int);
 
@@ -660,10 +660,10 @@ $$ language sql;
 
 select (dfunc('Hello World', 20, '2009-07-25'::date)).*;
 select * from dfunc('Hello World', 20, '2009-07-25'::date);
-select * from dfunc('2009-07-25'::date as c, 'Hello World' as a, 20 as b);
-select * from dfunc('Hello World', 20 as b, '2009-07-25'::date as c);
-select * from dfunc('Hello World', '2009-07-25'::date as c, 20 as b);
-select * from dfunc('Hello World', 20 as c, '2009-07-25'::date as b);  -- fail
+select * from dfunc(c := '2009-07-25'::date, a := 'Hello World', b := 20);
+select * from dfunc('Hello World', b := 20, c := '2009-07-25'::date);
+select * from dfunc('Hello World', c := '2009-07-25'::date, b := 20);
+select * from dfunc('Hello World', c := 20, b := '2009-07-25'::date);  -- fail
 
 drop function dfunc(varchar, numeric, date);
 
@@ -676,11 +676,11 @@ $$ language sql;
 select (dfunc()).*;
 select * from dfunc();
 select * from dfunc('Hello', 100);
-select * from dfunc('Hello' as a, 100 as c);
-select * from dfunc(100 as c, 'Hello' as a);
+select * from dfunc(a := 'Hello', c := 100);
+select * from dfunc(c := 100, a := 'Hello');
 select * from dfunc('Hello');
-select * from dfunc('Hello', 100 as c);
-select * from dfunc(100 as c);
+select * from dfunc('Hello', c := 100);
+select * from dfunc(c := 100);
 
 -- fail, can no longer change an input parameter's name
 create or replace function dfunc(a varchar = 'def a', out _a varchar, x numeric = NULL, out _c numeric)
@@ -718,25 +718,25 @@ $$ language sql;
 select dfunc(1,2);
 select dfunc('a'::text, 'b'); -- positional notation with default
 
-select dfunc(1 as a, 2 as b);
-select dfunc('a'::text as a, 'b' as b);
-select dfunc('a'::text as a, 'b' as b, false as flag); -- named notation
+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'::text as b, 'a' as a); -- named notation with default
-select dfunc('a'::text as a, true as flag); -- named notation with default
-select dfunc('a'::text as a, false as flag); -- named notation with default
-select dfunc('b'::text as b, 'a' as a, true as flag); -- 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', false as flag); -- mixed notation
+select dfunc('a'::text, 'b', flag := false); -- mixed notation
 select dfunc('a'::text, 'b', true); -- full positional notation
-select dfunc('a'::text, 'b', true as flag); -- mixed notation
+select dfunc('a'::text, 'b', flag := true); -- mixed notation
 
 -- check reverse-listing of named-arg calls
 CREATE VIEW dfview AS
    SELECT q1, q2,
-     dfunc(q1,q2, q1>q2 as flag) as c3,
-     dfunc(q1, q1<q2 as flag, q2 AS b) as c4
+     dfunc(q1,q2, flag := q1>q2) as c3,
+     dfunc(q1, flag := q1<q2, b := q2) as c4
      FROM int8_tbl;
 
 select * from dfview;