private void ProcessSetOperators(StringBuilder sb, List<ResultOperatorBase> operators)
{
foreach (var it in operators)
{
sb.AppendLine();
var ero = it as ExceptResultOperator;
var iro = it as IntersectResultOperator;
var uro = it as UnionResultOperator;
var cro = it as ConcatResultOperator;
if (ero != null)
{
sb.AppendLine("EXCEPT");
sb.AppendLine(SqlGeneratorExpressionTreeVisitor.GetSqlExpression(ero.Source2, this));
}
else if (iro != null)
{
sb.AppendLine("INTERSECT");
sb.AppendLine(SqlGeneratorExpressionTreeVisitor.GetSqlExpression(iro.Source2, this));
}
else
{
if (OrderBy.Count > 0)
{
sb.Insert(0, '(');
sb.AppendLine(")");
}
SubQueryExpression sqe;
if (uro != null)
{
sb.AppendLine("UNION");
sqe = uro.Source2 as SubQueryExpression;
}
else
{
sb.AppendLine("UNION ALL");
sqe = cro.Source2 as SubQueryExpression;
}
foreach (var ro in ResultOperators)
{
if (ro is UnionResultOperator == false && ro is ConcatResultOperator == false)
sqe.QueryModel.ResultOperators.Add(ro);
}
sb.AppendLine(SqlGeneratorExpressionTreeVisitor.GetSqlExpression(sqe, this));
}
}
}