module OracleSqlParser::Grammar::Expression

grammar Datetime
  rule datetime_expression
    not_loop_sql_expression space? d:(
      at_keyword space? local_keyword /
      at_keyword space? datetime_timezone_clause
    ) {
      def ast
        OracleSqlParser::Ast::DatetimeExpression[
          :expr => not_loop_sql_expression.ast,
          :at => d.try(:at_keyword).ast,
          :local => d.try(:local_keyword).ast,
          :timezone => d.try(:datetime_timezone_clause).ast,
        ]
      end
    }
  end

  rule datetime_timezone_clause
    time_keyword space? zone_keyword space? expr:(
      text_literal /
      dbtimezone_keyword /
      sessiontimezone_keyword /
      expr
    ) {
      def ast
        OracleSqlParser::Ast::TimezoneClause[
          :time => time_keyword.ast,
          :zone => zone_keyword.ast,
          :expr => expr.ast,
        ]
      end
    }
  end
end

end