module OracleSqlParser::Grammar
grammar Delete rule delete_statement delete_keyword space delete_from_clause condition:(space delete_condition)? returning_clause:returning_clause? { def ast OracleSqlParser::Ast::DeleteStatement[ :target => delete_from_clause.ast, :where_clause => condition.try(:delete_condition).ast ] end } end rule delete_from_clause from_keyword space delete_target { def ast delete_target.ast end } end rule delete_target t:( table_reference / delete_target_subquery ) a:(space t_alias)? { def ast table_or_subquery = t.ast if table_or_subquery.instance_of? OracleSqlParser::Ast::DeleteTarget table_or_subquery else OracleSqlParser::Ast::DeleteTarget[ :name => t.ast, :alias => a.try(:t_alias).ast, ] end end } end rule delete_target_subquery t:(table_keyword space)? '(' space? subquery space? ')' { def ast OracleSqlParser::Ast::DeleteTarget[ :table => t.try(:table_keyword).ast, :name => subquery.ast ] end } end rule delete_condition where_keyword space where:( search_condition / delete_current_of ) { def ast OracleSqlParser::Ast::WhereClause[:condition => where.ast] end } end rule delete_current_of current_of { def ast super end } end end
end