module OracleSqlParser::Grammar::Select
grammar Union rule subqueries_with_union query_block space? more:(union_or_intersect_or_minus space? subquery)+ { def ast OracleSqlParser::Ast::Array[ query_block.ast, *more_queries.map(&:ast), ] end def more_queries more.elements.map{|e| [e.union_or_intersect_or_minus, e.subquery]}.flatten end } end rule union_or_intersect_or_minus ( union:union_all / intersect:intersect_keyword / minus:minus_keyword ) { def ast if respond_to? :union union.ast elsif respond_to? :intersect OracleSqlParser::Ast::Array[intersect.ast] elsif respond_to? :minus OracleSqlParser::Ast::Array[minus.ast] end end } end rule union_all union_keyword all:(space all_keyword)? { def ast OracleSqlParser::Ast::Array[ union_keyword.ast, all.try(:all_keyword).ast ] end } end end
end