/// <inheritdoc/> protected override SqlProvider VisitUnion(UnionProvider provider) { var left = Compile(provider.Left); var right = Compile(provider.Right); var leftSelect = left.Request.Statement; var keepOrderForLeft = (leftSelect.HasLimit || leftSelect.HasOffset) && providerInfo.Supports(ProviderFeatures.PagingRequiresOrderBy); if (!keepOrderForLeft) { leftSelect.OrderBy.Clear(); } var rightSelect = right.Request.Statement; var keepOrderForRight = (leftSelect.HasLimit || leftSelect.HasOffset) && providerInfo.Supports(ProviderFeatures.PagingRequiresOrderBy); if (!keepOrderForRight) { rightSelect.OrderBy.Clear(); } var result = SqlDml.Union(leftSelect, rightSelect); var queryRef = SqlDml.QueryRef(result); SqlSelect query = SqlDml.Select(queryRef); query.Columns.AddRange(queryRef.Columns.Cast <SqlColumn>()); return(CreateProvider(query, provider, left, right)); }
protected override Provider VisitUnion(UnionProvider provider) { CompilableProvider left; CompilableProvider right; VisitBinaryProvider(provider, out left, out right); if (left != provider.Left || right != provider.Right) { return(new UnionProvider(left, right)); } return(provider); }
protected override Provider VisitUnion(UnionProvider provider) { return(VisitSetOperationProvider(provider)); }
/// <summary> /// Compiles <see cref="UnionProvider"/>. /// </summary> /// <param name="provider">Union provider.</param> protected abstract TResult VisitUnion(UnionProvider provider);
protected override Provider VisitUnion(UnionProvider provider) => VisitSetOperationProvider(provider);