+ omitted.
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.470 2004/08/12 19:12:21 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.471 2004/08/12 21:00:28 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
%type opt_drop_behavior
-%type createdb_opt_list copy_opt_list
-%type createdb_opt_item copy_opt_item
+%type createdb_opt_list copy_opt_list transaction_mode_list
+%type createdb_opt_item copy_opt_item transaction_mode_item
%type opt_lock lock_type cast_context
-%type opt_force opt_or_replace transaction_access_mode
+%type opt_force opt_or_replace
opt_grant_grant_option opt_revoke_grant_option
opt_nowait
target_list update_target_list insert_column_list
insert_target_list def_list indirection opt_indirection
group_clause TriggerFuncArgs select_limit
- opt_select_limit opclass_item_list transaction_mode_list
+ opt_select_limit opclass_item_list
transaction_mode_list_or_empty
TableFuncElementList
prep_type_clause prep_type_list
| /*EMPTY*/ {}
;
-transaction_mode_list:
+transaction_mode_item:
ISOLATION LEVEL iso_level
- { $$ = list_make1(makeDefElem("transaction_isolation",
- makeStringConst($3, NULL))); }
- | transaction_access_mode
- { $$ = list_make1(makeDefElem("transaction_read_only",
- makeIntConst($1))); }
- | ISOLATION LEVEL iso_level transaction_access_mode
- {
- $$ = list_make2(makeDefElem("transaction_isolation",
- makeStringConst($3, NULL)),
- makeDefElem("transaction_read_only",
- makeIntConst($4)));
- }
- | transaction_access_mode ISOLATION LEVEL iso_level
- {
- $$ = list_make2(makeDefElem("transaction_read_only",
- makeIntConst($1)),
- makeDefElem("transaction_isolation",
- makeStringConst($4, NULL)));
- }
+ { $$ = makeDefElem("transaction_isolation",
+ makeStringConst($3, NULL)); }
+ | READ ONLY
+ { $$ = makeDefElem("transaction_read_only",
+ makeIntConst(TRUE)); }
+ | READ WRITE
+ { $$ = makeDefElem("transaction_read_only",
+ makeIntConst(FALSE)); }
+ ;
+
+/* Syntax with commas is SQL-spec, without commas is Postgres historical */
+transaction_mode_list:
+ transaction_mode_item
+ { $$ = list_make1($1); }
+ | transaction_mode_list ',' transaction_mode_item
+ { $$ = lappend($1, $3); }
+ | transaction_mode_list transaction_mode_item
+ { $$ = lappend($1, $2); }
;
transaction_mode_list_or_empty:
{ $$ = NIL; }
;
-transaction_access_mode:
- READ ONLY { $$ = TRUE; }
- | READ WRITE { $$ = FALSE; }
- ;
-
/*****************************************************************************
*
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.224 2004/08/12 19:12:21 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.225 2004/08/12 21:00:34 tgl Exp $
*
*-------------------------------------------------------------------------
*/
case TRANS_STMT_BEGIN:
case TRANS_STMT_START:
{
- BeginTransactionBlock();
+ ListCell *lc;
- if (stmt->options)
+ BeginTransactionBlock();
+ foreach(lc, stmt->options)
{
- ListCell *head;
-
- foreach(head, stmt->options)
- {
- DefElem *item = (DefElem *) lfirst(head);
-
- if (strcmp(item->defname, "transaction_isolation") == 0)
- SetPGVariable("transaction_isolation",
- list_make1(item->arg), false);
- else if (strcmp(item->defname, "transaction_read_only") == 0)
- SetPGVariable("transaction_read_only",
- list_make1(item->arg), false);
- }
+ DefElem *item = (DefElem *) lfirst(lc);
+
+ if (strcmp(item->defname, "transaction_isolation") == 0)
+ SetPGVariable("transaction_isolation",
+ list_make1(item->arg),
+ false);
+ else if (strcmp(item->defname, "transaction_read_only") == 0)
+ SetPGVariable("transaction_read_only",
+ list_make1(item->arg),
+ false);
}
}
break;