*** pgsql/src/backend/parser/gram.y 2009/01/07 22:54:45 2.652 --- pgsql/src/backend/parser/gram.y 2009/01/12 08:54:26 2.653 *************** *** 11,17 **** * * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.651 2009/01/01 17:23:45 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT --- 11,17 ---- * * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.652 2009/01/07 22:54:45 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT *************** static TypeName *TableFuncTypeName(List *** 284,289 **** --- 284,290 ---- execute_param_clause using_clause returning_clause enum_val_list table_func_column_list create_generic_options alter_generic_options + relation_expr_list %type OptTempTableName %type into_clause create_as_target *************** attrs: '.' attr_name *** 3794,3800 **** *****************************************************************************/ TruncateStmt: ! TRUNCATE opt_table qualified_name_list opt_restart_seqs opt_drop_behavior { TruncateStmt *n = makeNode(TruncateStmt); n->relations = $3; --- 3795,3801 ---- *****************************************************************************/ TruncateStmt: ! TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior { TruncateStmt *n = makeNode(TruncateStmt); n->relations = $3; *************** using_clause: *** 6558,6564 **** | /*EMPTY*/ { $$ = NIL; } ; ! LockStmt: LOCK_P opt_table qualified_name_list opt_lock opt_nowait { LockStmt *n = makeNode(LockStmt); --- 6559,6573 ---- | /*EMPTY*/ { $$ = NIL; } ; ! ! /***************************************************************************** ! * ! * QUERY: ! * LOCK TABLE ! * ! *****************************************************************************/ ! ! LockStmt: LOCK_P opt_table relation_expr_list opt_lock opt_nowait { LockStmt *n = makeNode(LockStmt); *************** relation_expr: *** 7487,7492 **** --- 7496,7507 ---- ; + relation_expr_list: + relation_expr { $$ = list_make1($1); } + | relation_expr_list ',' relation_expr { $$ = lappend($1, $3); } + ; + + /* * Given "UPDATE foo set set ...", we have to decide without looking any * further ahead whether the first "set" is an alias or the UPDATE's SET