anchor.diff:      ;
   
   create_or_alter_ddl_trigger
  -    : ((CREATE (OR ALTER)?) | ALTER) TRIGGER simple_id
  +    : ((CREATE (OR ALTER)?) | ALTER) TRIGGER simple_name
         ON (ALL SERVER | DATABASE)
         (WITH dml_trigger_option (',' dml_trigger_option)* )?
         (FOR | AFTER) ddl_trigger_operation (',' dml_trigger_operation)*
  -      AS sql_clauses
  +      AS sql_clauses+
       ;
   
   ddl_trigger_operation
  
positive.code:     ;
  
  column_elem
      : ((table_name '.')? (column_name=id | '$' IDENTITY | '$' ROWGUID) | NULL) as_column_alias?
      ;
  
  udt_elem
  
negative.code:     ;
  
  table_source_item_joined
      : table_source_item joins+=join_part*
      ;
  
  table_source_item
      : table_name_with_hint        as_table_alias?
      | full_table_name             as_table_alias?
      | rowset_function             as_table_alias?
      | '(' derived_table ')'       (as_table_alias column_alias_list?)?
      | change_table                as_table_alias?
      | function_call               (as_table_alias column_alias_list?)?
      | loc_id=LOCAL_ID             as_table_alias?
      | nodes_method                (as_table_alias column_alias_list?)?
      | loc_id_call=LOCAL_ID '.' loc_fcall=function_call (as_table_alias column_alias_list?)?
      | open_xml
      | open_json
      | ':' ':' oldstyle_fcall=function_call       as_table_alias? // Build-in function (old syntax)
      ;
  
  // https://docs.microsoft.com/en-us/sql/t-sql/functions/openxml-transact-sql
  open_xml
      : OPENXML '(' expression ',' expression (',' expression)? ')'
      (WITH '(' schema_declaration ')' )? as_table_alias?
      ;
  
  open_json
      : OPENJSON '(' expression (',' expression)? ')'
      (WITH '(' json_declaration ')' )? as_table_alias?
      ;
  
  json_declaration
      : json_col+=json_column_declaration (',' json_col+=json_column_declaration)*
      ;
  
  json_column_declaration
      : column_declaration (AS JSON)?
      ;
  
  schema_declaration
      : xml_col+=column_declaration (',' xml_col+=column_declaration)*
      ;
  
  column_declaration
      : id data_type (STRING)?
      ;
  
  change_table
      : change_table_changes
      | change_table_version
      ;
  
  change_table_changes
      : CHANGETABLE '(' CHANGES changetable=table_name ',' changesid=(NULL | DECIMAL | LOCAL_ID) ')'
      ;
  change_table_version
      : CHANGETABLE '(' VERSION versiontable=table_name ',' (pk_columns=full_column_name_list) ',' (pk_values=select_list)  ')'
      ;
      
  // https://msdn.microsoft.com/en-us/library/ms191472.aspx
  join_part
      // https://msdn.microsoft.com/en-us/library/ms173815(v=sql.120).aspx
      : join_on
      | cross_join
      | apply
      | pivot
      | unpivot
      ;
  join_on
      :
      (inner=INNER? |
         join_type=(LEFT | RIGHT | FULL) outer=OUTER?) (join_hint=(LOOP | HASH | MERGE | REMOTE))?
         JOIN source=table_source ON cond=search_condition
      ;
  
  cross_join
      : CROSS JOIN table_source
      ;
  
  apply
      : apply_style=(CROSS | OUTER) APPLY source=table_source
      ;
  
  pivot
      : PIVOT pivot_clause as_table_alias
      ;
  
  unpivot
      :     UNPIVOT unpivot_clause as_table_alias
      ;
  
  pivot_clause
  