anchor.diff:  	;
   	
   dataType:
  -	simpleExpr
  +	BIT dataTypeLength?
  +	|((TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER| BIGINT) dataTypeLength? (NOT? NULL)? AUTO_INCREMENT? numberTypeSuffix)
  +	|((REAL | DOUBLE | FLOAT | DECIMAL | NUMERIC) dataTypeLengthWithPrecision? (NOT? NULL)? AUTO_INCREMENT? numberTypeSuffix )
  +	|((DATE | TIME) (NOT? NULL)? (DEFAULT (STRING | NULL))?)
  +	|((timestampType | DATETIME) (NOT? NULL)?  (DEFAULT (currentTimestampType | NUMBER | STRING | NULL))? (ON UPDATE currentTimestampType)? )
  +	|(YEAR dataTypeLength? (NOT? NULL)?  (DEFAULT (NUMBER | STRING | NULL))?)
  +	|((CHAR | VARCHAR) dataTypeLength? (NOT? NULL)? characterSet? collateClause? (DEFAULT (STRING | NULL))?)
  +	|((BINARY | VARBINARY) dataTypeLength? (NOT? NULL)?  (DEFAULT NUMBER |STRING | NULL)? )
  +	|(TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB |JSON) (NOT? NULL)? 
  +	|((TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT ) (NOT? NULL)?  BINARY ? characterSet? collateClause? )
  +	|((ENUM | SET) (LEFT_PAREN STRING (COMMA STRING)* RIGHT_PAREN  (NOT? NULL)? (DEFAULT (STRING | NULL))? characterSet? collateClause?))
  +	;
  +	
  +timestampType:
  +	TIMESTAMP dataTypeLength?
  +	;
  +	
  +currentTimestampType:
  +	CURRENT_TIMESTAMP dataTypeLength?
  +	;
  +	
  +dataTypeLength:
  +	(LEFT_PAREN NUMBER RIGHT_PAREN)
  +	;
  +
  +dataTypeLengthWithPrecision:
  +	(LEFT_PAREN NUMBER COMMA NUMBER RIGHT_PAREN)
  +	;
  +
  +numberTypeSuffix:
  +	UNSIGNED? ZEROFILL?  (DEFAULT (NUMBER |STRING | NULL))?
   	;
   	
   dataTypeOption:
  -	(NOT? NULL)? 
  -	(DEFAULT defaultValue)? 
  -	AUTO_INCREMENT? 
   	(UNIQUE KEY?)? 
   	(PRIMARY? KEY)?
   	(COMMENT STRING)?
  
positive.code: 	
  subpartitionDefinition:
      SUBPARTITION partitionName
          ((STORAGE)? ENGINE EQ_OR_ASSIGN? engineName)?
          (COMMENT EQ_OR_ASSIGN? STRING )?
          (DATA DIRECTORY EQ_OR_ASSIGN? STRING)?
          (INDEX DIRECTORY EQ_OR_ASSIGN? STRING)?
          (MAX_ROWS EQ_OR_ASSIGN? INT)?
          (MIN_ROWS EQ_OR_ASSIGN? INT)?
          (TABLESPACE EQ_OR_ASSIGN? tablespaceName)?
  	;
  
  tablespaceName:
  	ID
  	;
  
  collationName:
  	ID
  	;	
  
  
  
  
  
  
  
       
  
negative.code: 
  partitionOptions:
  	PARTITION BY (linearPartition | rangeOrListPartition)
      (PARTITIONS NUMBER)?
      (SUBPARTITION BY linearPartition (SUBPARTITIONS NUMBER)? )?
    	partitionDefinitions?
     	;
  
  //hash(YEAR(col)) YEAR is keyword which does not match expr
  linearPartition:
   	LINEAR? ((HASH (yearFunctionExpr | exprWithParen)) |keyColumnList)
   	;
   
   yearFunctionExpr:
   	LEFT_PAREN YEAR exprWithParen RIGHT_PAREN
   	;
   	
  keyColumnList:
  	KEY (ALGORITHM EQ_OR_ASSIGN NUMBER)? columnList
  	;
  	
  exprWithParen:
  