anchor.diff:  CURRENT_TIME: 'CURRENT_TIME';
   CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP';
   EXTRACT: 'EXTRACT';
  -TIMEZONE_HOUR: 'TIMEZONE_HOUR';
  -TIMEZONE_MINUTE: 'TIMEZONE_MINUTE';
   COALESCE: 'COALESCE';
   NULLIF: 'NULLIF';
   CASE: 'CASE';
  
positive.code:     | DOUBLE
      | BOOLEAN
      ;
  
  extractFieldOrIdent
      : ident
      | extractField
      ;
  
  extractField
      : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | TIMEZONE_HOUR | TIMEZONE_MINUTE
      ;
  
  
  caseExpression
      : NULLIF '(' expr ',' expr ')'          -> ^(NULLIF expr expr)
  
negative.code:     | CURRENT_TIME ('(' integer ')')?              -> ^(CURRENT_TIME integer?)
      | CURRENT_TIMESTAMP ('(' integer ')')?         -> ^(CURRENT_TIMESTAMP integer?)
      | SUBSTRING '(' expr FROM expr (FOR expr)? ')' -> ^(FUNCTION_CALL ^(QNAME IDENT[$SUBSTRING]) expr expr expr?)
      | EXTRACT '(' ident FROM expr ')'              -> ^(EXTRACT ident expr)
      | CAST '(' expr AS type ')'                    -> ^(CAST expr IDENT[$type.text])
      ;
  
  