On Sat, Jan 11, 2014 at 10:06:27PM +0100, Pavel Stehule wrote: > > > > 2014/1/11 Tom Lane <t...@sss.pgh.pa.us> > > Bruce Momjian <br...@momjian.us> writes: > > Oh, I think you are right. I have reverted the patch. Attached is > > proposed documentation for '='. > > Meh. Variable initialization is only one of multiple cases (assignment, > GET DIAGNOSTICS; maybe others, I've not examined the grammar). Also, > if we do it like this, we're implying that both := and = are equally > preferred, which might not be the impression we want to leave. > > > GET DIAGNOSTICS is defined by standard - and there "=" should be allowed only > - > although we allow ":=" too. It is a embedded SQL statement - although it is > implemented as plpgsql statement.
OK, docs updated for that. I assume OPEN and FOR also can take := or =, right? > Same situation is with UPDATE statement - we don't allow ":=" there. > > > > I'd be a bit inclined to just stick a NOTE somewhere saying that "=" > can be used in place of ":=" for assignment. > > > ok > > If we accept it and we close this topic, then following comment should be > removed > > assign_operator : '=' /* not documented because it might be removed someday > * Comment updated. Patch attached. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + Everyone has their own god. +
diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml new file mode 100644 index ca2c2b5..da1d35c *** a/doc/src/sgml/plpgsql.sgml --- b/doc/src/sgml/plpgsql.sgml *************** arow RECORD; *** 328,334 **** <para> The general syntax of a variable declaration is: <synopsis> ! <replaceable>name</replaceable> <optional> CONSTANT </optional> <replaceable>type</replaceable> <optional> COLLATE <replaceable>collation_name</replaceable> </optional> <optional> NOT NULL </optional> <optional> { DEFAULT | := } <replaceable>expression</replaceable> </optional>; </synopsis> The <literal>DEFAULT</> clause, if given, specifies the initial value assigned to the variable when the block is entered. If the <literal>DEFAULT</> clause --- 328,334 ---- <para> The general syntax of a variable declaration is: <synopsis> ! <replaceable>name</replaceable> <optional> CONSTANT </optional> <replaceable>type</replaceable> <optional> COLLATE <replaceable>collation_name</replaceable> </optional> <optional> NOT NULL </optional> <optional> { DEFAULT | := | = } <replaceable>expression</replaceable> </optional>; </synopsis> The <literal>DEFAULT</> clause, if given, specifies the initial value assigned to the variable when the block is entered. If the <literal>DEFAULT</> clause *************** arow RECORD; *** 343,348 **** --- 343,349 ---- is specified, an assignment of a null value results in a run-time error. All variables declared as <literal>NOT NULL</> must have a nonnull default value specified. + Equals (<literal>=</>) can be used instead of <literal>:=</>. </para> <para> *************** PREPARE <replaceable>statement_name</>(i *** 866,872 **** An assignment of a value to a <application>PL/pgSQL</application> variable is written as: <synopsis> ! <replaceable>variable</replaceable> := <replaceable>expression</replaceable>; </synopsis> As explained previously, the expression in such a statement is evaluated by means of an SQL <command>SELECT</> command sent to the main --- 867,873 ---- An assignment of a value to a <application>PL/pgSQL</application> variable is written as: <synopsis> ! <replaceable>variable</replaceable> { := | = } <replaceable>expression</replaceable>; </synopsis> As explained previously, the expression in such a statement is evaluated by means of an SQL <command>SELECT</> command sent to the main *************** PREPARE <replaceable>statement_name</>(i *** 874,880 **** a row value, if the variable is a row or record variable). The target variable can be a simple variable (optionally qualified with a block name), a field of a row or record variable, or an element of an array ! that is a simple variable or field. </para> <para> --- 875,882 ---- a row value, if the variable is a row or record variable). The target variable can be a simple variable (optionally qualified with a block name), a field of a row or record variable, or an element of an array ! that is a simple variable or field. Equals (<literal>=</>) can be ! used instead of <literal>:=</>. </para> <para> *************** EXECUTE format('UPDATE tbl SET %I = $1 W *** 1411,1417 **** command, which has the form: <synopsis> ! GET <optional> CURRENT </optional> DIAGNOSTICS <replaceable>variable</replaceable> = <replaceable>item</replaceable> <optional> , ... </optional>; </synopsis> This command allows retrieval of system status indicators. Each --- 1413,1419 ---- command, which has the form: <synopsis> ! GET <optional> CURRENT </optional> DIAGNOSTICS <replaceable>variable</replaceable> { = | := } <replaceable>item</replaceable> <optional> , ... </optional>; </synopsis> This command allows retrieval of system status indicators. Each *************** SELECT merge_db(1, 'dennis'); *** 2672,2678 **** <command>GET STACKED DIAGNOSTICS</command> command, which has the form: <synopsis> ! GET STACKED DIAGNOSTICS <replaceable>variable</replaceable> = <replaceable>item</replaceable> <optional> , ... </optional>; </synopsis> Each <replaceable>item</replaceable> is a key word identifying a status --- 2674,2680 ---- <command>GET STACKED DIAGNOSTICS</command> command, which has the form: <synopsis> ! GET STACKED DIAGNOSTICS <replaceable>variable</replaceable> { = | := } <replaceable>item</replaceable> <optional> , ... </optional>; </synopsis> Each <replaceable>item</replaceable> is a key word identifying a status *************** END; *** 2776,2782 **** <para> <synopsis> ! GET <optional> CURRENT </optional> DIAGNOSTICS <replaceable>variable</replaceable> = <replaceable>PG_CONTEXT</replaceable> <optional> , ... </optional>; </synopsis> --- 2778,2784 ---- <para> <synopsis> ! GET <optional> CURRENT </optional> DIAGNOSTICS <replaceable>variable</replaceable> { = | := } <replaceable>PG_CONTEXT</replaceable> <optional> , ... </optional>; </synopsis> *************** OPEN curs1 FOR EXECUTE 'SELECT * FROM ' *** 2980,2986 **** <title>Opening a Bound Cursor</title> <synopsis> ! OPEN <replaceable>bound_cursorvar</replaceable> <optional> ( <optional> <replaceable>argument_name</replaceable> := </optional> <replaceable>argument_value</replaceable> <optional>, ...</optional> ) </optional>; </synopsis> <para> --- 2982,2988 ---- <title>Opening a Bound Cursor</title> <synopsis> ! OPEN <replaceable>bound_cursorvar</replaceable> <optional> ( <optional> <replaceable>argument_name</replaceable> { := | = } </optional> <replaceable>argument_value</replaceable> <optional>, ...</optional> ) </optional>; </synopsis> <para> *************** COMMIT; *** 3333,3339 **** <synopsis> <optional> <<<replaceable>label</replaceable>>> </optional> ! FOR <replaceable>recordvar</replaceable> IN <replaceable>bound_cursorvar</replaceable> <optional> ( <optional> <replaceable>argument_name</replaceable> := </optional> <replaceable>argument_value</replaceable> <optional>, ...</optional> ) </optional> LOOP <replaceable>statements</replaceable> END LOOP <optional> <replaceable>label</replaceable> </optional>; </synopsis> --- 3335,3341 ---- <synopsis> <optional> <<<replaceable>label</replaceable>>> </optional> ! FOR <replaceable>recordvar</replaceable> IN <replaceable>bound_cursorvar</replaceable> <optional> ( <optional> <replaceable>argument_name</replaceable> { := | = } </optional> <replaceable>argument_value</replaceable> <optional>, ...</optional> ) </optional> LOOP <replaceable>statements</replaceable> END LOOP <optional> <replaceable>label</replaceable> </optional>; </synopsis> diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y new file mode 100644 index 3fd6655..03a132d *** a/src/pl/plpgsql/src/pl_gram.y --- b/src/pl/plpgsql/src/pl_gram.y *************** decl_defkey : assign_operator *** 796,802 **** | K_DEFAULT ; ! assign_operator : '=' /* not documented because it might be removed someday */ | COLON_EQUALS ; --- 796,802 ---- | K_DEFAULT ; ! assign_operator : '=' /* alternative to := */ | COLON_EQUALS ;
-- Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-docs