================================================================================
Comment on table
================================================================================

COMMENT ON TABLE my_schema.my_table IS "this table is a test";

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_table)
      (object_reference
        schema: (identifier)
        name: (identifier))
      (keyword_is)
      (literal))))

================================================================================
Comment on table with FQN
================================================================================

COMMENT ON TABLE my_database.my_schema.my_table IS "this table is a test";

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_table)
      (object_reference
        database: (identifier)
        schema: (identifier)
        name: (identifier))
      (keyword_is)
      (literal))))

================================================================================
Comment on column is null
================================================================================

COMMENT ON COLUMN my_schema.my_table.my_column IS NULL;

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_column)
      (object_reference
        (object_reference
          (identifier)
          (identifier))
        (identifier))
      (keyword_is)
      (keyword_null))))

================================================================================
Comment on column is null with FQN
================================================================================

COMMENT ON COLUMN my_database.my_schema.my_table.my_column IS NULL;

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_column)
      (object_reference
        (object_reference
          (identifier)
          (identifier)
          (identifier))
        (identifier))
      (keyword_is)
      (keyword_null))))

================================================================================
Comment on cast
================================================================================

COMMENT ON CAST (varchar AS text) IS "convert varchar to text";

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (cast
        (keyword_cast)
        (field
          (identifier))
        (keyword_as)
        (keyword_text))
      (keyword_is)
      (literal))))

================================================================================
Comment on materialized view
================================================================================

COMMENT ON MATERIALIZED VIEW matview IS "this view is materialized";

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_materialized)
      (keyword_view)
      (object_reference
        (identifier))
      (keyword_is)
      (literal))))

================================================================================
Comment on trigger
================================================================================

COMMENT ON TRIGGER on_insert ON users IS "new user has been added";

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_trigger)
      (identifier)
      (keyword_on)
      (object_reference
        name: (identifier))
      (keyword_is)
      (literal))))

================================================================================
Comment on function
================================================================================

COMMENT ON FUNCTION schema_test.do_somthing(arg1 text) IS 'Do something';

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_function)
      (object_reference
        (identifier)
        (identifier))
      (function_arguments
        (function_argument
          (identifier)
          (keyword_text)))
      (keyword_is)
      (literal))))

================================================================================
Comment on extension
================================================================================

COMMENT ON EXTENSION ext_test IS 'A testing extension';

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_extension)
      (object_reference
        (identifier))
      (keyword_is)
      (literal))))

================================================================================
Comment on function with arg mode
================================================================================

COMMENT ON FUNCTION schema_test.do_somthing(OUT arg1 text) IS 'Do something';

--------------------------------------------------------------------------------

(program
  (statement
    (comment_statement
      (keyword_comment)
      (keyword_on)
      (keyword_function)
      (object_reference
        (identifier)
        (identifier))
      (function_arguments
        (function_argument
          (keyword_out)
          (identifier)
          (keyword_text)))
      (keyword_is)
      (literal))))
