qualified_name_list any_name any_name_list
                                any_operator expr_list attrs
                                target_list update_col_list update_target_list
-                               update_value_list insert_column_list
+                               update_value_list set_opt insert_column_list
                                values_list def_list indirection opt_indirection
                                group_clause TriggerFuncArgs select_limit
                                opt_select_limit opclass_item_list
  *****************************************************************************/
 
 UpdateStmt: UPDATE relation_expr_opt_alias
-                       SET update_target_list
-                       from_clause
-                       where_clause
-                       returning_clause
-                               {
-                                       UpdateStmt *n = makeNode(UpdateStmt);
-                                       n->relation = $2;
-                                       n->targetList = $4;
-                                       n->fromClause = $5;
-                                       n->whereClause = $6;
-                                       n->returningList = $7;
-                                       $$ = (Node *)n;
-                               }
-            | UPDATE relation_expr_opt_alias
-                       SET update_target_lists_list
+                       SET set_opt
                        from_clause
                        where_clause
                        returning_clause
                                }
                ;
 
+set_opt:
+                       update_target_list                                              { $$ = $1; }
+                       | update_target_lists_list                              { $$ = $1; }
+               ;
+
 
 /*****************************************************************************
  *
                                        {
                                                /* merge update_value_list with update_col_list */
                                                ResTarget *res_col = (ResTarget *) lfirst(col_cell);
-                                               ResTarget *res_val = (ResTarget *) lfirst(val_cell);
+                                               Node *res_val = (Node *) lfirst(val_cell);
 
                                                res_col->val = (Node *)copyObject(res_val);
                                        }