module OracleSqlParser::Grammar::Expression
grammar Interval rule interval_expression '(' space? left:not_loop_sql_expression space? '-' space? right:expr space? ')' e:( space? day_keyword l:(space? '(' space? leading_field_precision space? ')')? space? to_keyword space? second_keyword f:(space? '(' space? fractional_second_precision space? ')')? / space? year_keyword l:(space? '(' space? leading_field_precision space? ')')? space? to_keyword space? month_keyword ) { def ast OracleSqlParser::Ast::IntervalExpression[ :left => left.ast, :right => right.ast, :day => e.try(:day_keyword).ast, :year => e.try(:year_keyword).ast, :leading_field_precision => e.try(:l).try(:leading_field_precision).ast, :to => e.try(:to_keyword).ast, :second => e.try(:second_keyword).ast, :month => e.try(:month_keyword).ast, :fractional_second_precision => e.try(:f).try(:fractional_second_precision).ast, ] end } end rule leading_field_precision [0-9] { def ast OracleSqlParser::Ast::NumberLiteral[:value => text_value] end } end rule fractional_second_precision [0-9] { def ast OracleSqlParser::Ast::NumberLiteral[:value => text_value] end } end end
end