public static SqlQueryExpression Form(IContext context, PlSqlParser.SubqueryContext subquery, out SqlParseIntoClause into) { var query = Form(context, subquery.subqueryBasicElements(), out @into); var opPart = subquery.subquery_operation_part(); if (opPart.Length > 0) { if (@into != null) { throw new InvalidOperationException("Cannot SELECT INTO in a composite query."); } foreach (var part in opPart) { CompositeFunction function; if (part.MINUS() != null || part.EXCEPT() != null) { function = CompositeFunction.Except; } else if (part.UNION() != null) { function = CompositeFunction.Union; } else if (part.INTERSECT() != null) { function = CompositeFunction.Intersect; } else { throw new ParseCanceledException("Invalid composite function."); } bool isAll = part.ALL() != null; var next = Form(context, part.subqueryBasicElements()); var prev = query.NextComposite; if (prev == null) { prev = new SqlQueryExpressionComposite(function, isAll, next); } else { prev.Expression.NextComposite = new SqlQueryExpressionComposite(function, isAll, next); } query.NextComposite = prev; } } return(query); }
public override SqlExpression VisitSubquery(PlSqlParser.SubqueryContext context) { return(SqlParseSubquery.Form(context)); }
public static SqlQueryExpression Form(IContext context, PlSqlParser.SubqueryContext subquery) { SqlParseIntoClause into; return(Form(context, subquery, out @into)); }
public static SqlQueryExpression Form(PlSqlParser.SubqueryContext context) { SqlParseIntoClause into; return(Form(context, out into)); }