==================
Simple update
==================

UPDATE my_table
SET for = foo + 1;

---

(program
 (statement
  (update
   (keyword_update)
   (update_expression
    (table_reference name: (identifier))
    (keyword_set)
    (assignment_list
     (assignment
      left: (field name: (identifier))
      right:
       (binary_expression
        left: (field name: (identifier))
        right: (literal))))))))

==================
update with multiple assignments
==================

UPDATE my_table
SET for = foo + 1, col2 = col1;

---

(program
 (statement
  (update
   (keyword_update)
   (update_expression
    (table_reference name: (identifier))
    (keyword_set)
    (assignment_list
     (assignment
      left: (field name: (identifier))
      right:
       (binary_expression
        left: (field name: (identifier))
        right: (literal)))
     (assignment
      left: (field name: (identifier))
      right: (field name: (identifier))))))))

==================
update with multiple table references
==================

UPDATE items, month
SET items.price=month.price
WHERE items.id=month.item_id;

---

(program
 (statement
  (update
   (keyword_update)
   (update_expression
    (table_reference name: (identifier))
    (table_reference name: (identifier))
    (keyword_set)
    (assignment_list
     (assignment
      left: (field table_alias: (identifier) name: (identifier))
      right: (field table_alias: (identifier) name: (identifier))))
    (where
     (keyword_where)
     (where_expression
      (predicate
       left: (field table_alias: (identifier) name: (identifier))
       right: (field table_alias: (identifier) name: (identifier)))))))))

==================
update with function call
==================

UPDATE my_table
SET ts = now();

---

(program
 (statement
  (update
   (keyword_update)
   (update_expression
    (table_reference name: (identifier))
    (keyword_set)
    (assignment_list
     (assignment
      left: (field name: (identifier))
      right:
      (function_call
       (invocation
        name: (identifier)))))))))
