module OracleSqlParser::Grammar
grammar Select include OracleSqlParser::Grammar::Select::Order include OracleSqlParser::Grammar::Select::Group include OracleSqlParser::Grammar::Select::Join include OracleSqlParser::Grammar::Select::ForUpdate include OracleSqlParser::Grammar::Select::Union include OracleSqlParser::Grammar::Select::QueryBlock include OracleSqlParser::Grammar::Select::RowLimit rule select_statement space? subquery for_update:(space for_update_clause)? space? { def ast OracleSqlParser::Ast::SelectStatement[ :subquery => subquery.ast, :for_update_clause => for_update.try(:for_update_clause).ast ] end } end rule subquery query:( left_parenthesis:'(' space? subquery space? right_parenthesis:')' / query_block !(space union_or_intersect_or_minus) / subqueries:subqueries_with_union ) order:(space order_by_clause)? row_limit:(space row_limiting_clause:row_limiting_clause)? { def ast OracleSqlParser::Ast::Subquery[ :has_parenthesis => query.try(:left_parenthesis) ? true : nil, :query_block => query.try(:query_block).ast, :subqueries => query.try(:subqueries).ast, :subquery => query.try(:subquery).ast, :order_by_clause => order.try(:order_by_clause).ast, :row_limiting_clause => row_limit.try(:row_limiting_clause).ast, ] end } end end
end