/// <inheritdoc/>
        protected override SqlProvider VisitIntersect(IntersectProvider 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.Intersect(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 VisitIntersect(IntersectProvider provider)
        {
            CompilableProvider left;
            CompilableProvider right;

            VisitBinaryProvider(provider, out left, out right);
            if (left != provider.Left || right != provider.Right)
            {
                return(new IntersectProvider(left, right));
            }
            return(provider);
        }
 protected override Provider VisitIntersect(IntersectProvider provider)
 {
     return(VisitSetOperationProvider(provider));
 }
Beispiel #4
0
 /// <summary>
 /// Compiles <see cref="IntersectProvider"/>.
 /// </summary>
 /// <param name="provider">Intersect provider.</param>
 protected abstract TResult VisitIntersect(IntersectProvider provider);
Beispiel #5
0
 protected override Provider VisitIntersect(IntersectProvider provider) => VisitSetOperationProvider(provider);