Ejemplo n.º 1
0
        private static Expression HandleContains(
            EntityQueryModelVisitor entityQueryModelVisitor,
            ContainsResultOperator containsResultOperator,
            QueryModel queryModel)
        {
            var item = entityQueryModelVisitor
                       .ReplaceClauseReferences(
                containsResultOperator.Item,
                queryModel.MainFromClause);

            return(CallWithPossibleCancellationToken(
                       entityQueryModelVisitor.LinqOperatorProvider.Contains
                       .MakeGenericMethod(entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType),
                       entityQueryModelVisitor.Expression,
                       item));
        }
Ejemplo n.º 2
0
        public virtual void FindQuerySourcesRequiringMaterialization(
            [NotNull] EntityQueryModelVisitor queryModelVisitor, [NotNull] QueryModel queryModel)
        {
            Check.NotNull(queryModelVisitor, nameof(queryModelVisitor));
            Check.NotNull(queryModel, nameof(queryModel));

            _querySourcesRequiringMaterialization
                = _requiresMaterializationExpressionVisitorFactory
                  .Create(queryModelVisitor)
                  .FindQuerySourcesRequiringMaterialization(queryModel);

            foreach (var groupJoinClause in queryModel.BodyClauses.OfType <GroupJoinClause>())
            {
                _querySourcesRequiringMaterialization.Add(groupJoinClause.JoinClause);
            }
        }
Ejemplo n.º 3
0
        public virtual Expression HandleResultOperator(
            EntityQueryModelVisitor entityQueryModelVisitor,
            ResultOperatorBase resultOperator,
            QueryModel queryModel)
        {
            Check.NotNull(entityQueryModelVisitor, nameof(entityQueryModelVisitor));
            Check.NotNull(resultOperator, nameof(resultOperator));
            Check.NotNull(queryModel, nameof(queryModel));

            ResultHandler handler;

            if (!_handlers.TryGetValue(resultOperator.GetType(), out handler))
            {
                throw new NotImplementedException(resultOperator.GetType().ToString());
            }

            return(handler(entityQueryModelVisitor, resultOperator, queryModel));
        }
Ejemplo n.º 4
0
        private static Expression HandleCast(
            EntityQueryModelVisitor entityQueryModelVisitor, CastResultOperator castResultOperator)
        {
            var resultItemTypeInfo
                = entityQueryModelVisitor.Expression.Type
                  .GetSequenceType().GetTypeInfo();

            if (castResultOperator.CastItemType.GetTypeInfo()
                .IsAssignableFrom(resultItemTypeInfo))
            {
                return(entityQueryModelVisitor.Expression);
            }

            return(Expression.Call(
                       entityQueryModelVisitor.LinqOperatorProvider
                       .Cast.MakeGenericMethod(castResultOperator.CastItemType),
                       entityQueryModelVisitor.Expression));
        }
        private static Expression HandleAll(
            EntityQueryModelVisitor entityQueryModelVisitor,
            AllResultOperator allResultOperator,
            QueryModel queryModel)
        {
            var predicate
                = entityQueryModelVisitor
                  .ReplaceClauseReferences(
                      allResultOperator.Predicate,
                      queryModel.MainFromClause);

            return(Expression.Call(
                       _all.MakeGenericMethod(typeof(QuerySourceScope)),
                       entityQueryModelVisitor.CreateScope(
                           entityQueryModelVisitor.Expression,
                           entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType,
                           queryModel.MainFromClause),
                       Expression.Lambda(predicate, EntityQueryModelVisitor.QuerySourceScopeParameter)));
        }
Ejemplo n.º 6
0
        private static Expression HandleAll(
            EntityQueryModelVisitor entityQueryModelVisitor,
            AllResultOperator allResultOperator,
            QueryModel queryModel)
        {
            var predicate
                = entityQueryModelVisitor
                  .ReplaceClauseReferences(
                      allResultOperator.Predicate,
                      queryModel.MainFromClause);

            return(CallWithPossibleCancellationToken(
                       entityQueryModelVisitor.LinqOperatorProvider.All
                       .MakeGenericMethod(typeof(QueryResultScope)),
                       entityQueryModelVisitor.CreateScope(
                           entityQueryModelVisitor.Expression,
                           entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType,
                           queryModel.MainFromClause),
                       Expression.Lambda(predicate, EntityQueryModelVisitor.QueryResultScopeParameter)));
        }
Ejemplo n.º 7
0
        private static Expression HandleAll(
            EntityQueryModelVisitor entityQueryModelVisitor,
            AllResultOperator allResultOperator,
            QueryModel queryModel)
        {
            var sequenceType
                = entityQueryModelVisitor.Expression.Type.GetSequenceType();

            var predicate
                = entityQueryModelVisitor
                  .ReplaceClauseReferences(
                      allResultOperator.Predicate,
                      queryModel.MainFromClause);

            return(CallWithPossibleCancellationToken(
                       entityQueryModelVisitor.LinqOperatorProvider.All
                       .MakeGenericMethod(sequenceType),
                       entityQueryModelVisitor.Expression,
                       Expression.Lambda(predicate, entityQueryModelVisitor.CurrentParameter)));
        }
Ejemplo n.º 8
0
        public virtual Expression HandleResultOperator(
            EntityQueryModelVisitor entityQueryModelVisitor,
            IStreamedDataInfo streamedDataInfo,
            ResultOperatorBase resultOperator,
            QueryModel queryModel)
        {
            Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor");
            Check.NotNull(streamedDataInfo, "streamedDataInfo");
            Check.NotNull(resultOperator, "resultOperator");
            Check.NotNull(queryModel, "queryModel");

            return
                (Expression.Call(
                     _executeResultOperatorMethodInfo
                     .MakeGenericMethod(
                         entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType,
                         streamedDataInfo.DataType),
                     entityQueryModelVisitor.Expression,
                     Expression.Constant(resultOperator),
                     Expression.Constant(entityQueryModelVisitor.StreamedSequenceInfo)));
        }
Ejemplo n.º 9
0
        public virtual Expression HandleResultOperator(
            EntityQueryModelVisitor entityQueryModelVisitor,
            ResultOperatorBase resultOperator,
            QueryModel queryModel)
        {
            Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor");
            Check.NotNull(resultOperator, "resultOperator");
            Check.NotNull(queryModel, "queryModel");

            Func <Expression, Type, ResultOperatorBase, Expression> asyncHandler;

            if (!_asyncHandlers.TryGetValue(resultOperator.GetType(), out asyncHandler))
            {
                // TODO: Implement the rest...
                throw new NotImplementedException();
            }

            return(asyncHandler(
                       entityQueryModelVisitor.Expression,
                       entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType,
                       resultOperator));
        }
Ejemplo n.º 10
0
        private static Expression HandleGroup(
            EntityQueryModelVisitor entityQueryModelVisitor,
            GroupResultOperator groupResultOperator,
            QueryModel queryModel)
        {
            var sequenceType
                = entityQueryModelVisitor.Expression.Type.GetSequenceType();

            var keySelector
                = entityQueryModelVisitor
                  .ReplaceClauseReferences(
                      groupResultOperator.KeySelector,
                      queryModel.MainFromClause);

            var elementSelector
                = entityQueryModelVisitor
                  .ReplaceClauseReferences(
                      groupResultOperator.ElementSelector,
                      queryModel.MainFromClause);

            var expression
                = Expression.Call(
                      entityQueryModelVisitor.LinqOperatorProvider.GroupBy
                      .MakeGenericMethod(
                          sequenceType,
                          keySelector.Type,
                          elementSelector.Type),
                      entityQueryModelVisitor.Expression,
                      Expression.Lambda(keySelector, entityQueryModelVisitor.CurrentParameter),
                      Expression.Lambda(elementSelector, entityQueryModelVisitor.CurrentParameter));

            entityQueryModelVisitor.CurrentParameter
                = Expression.Parameter(sequenceType, groupResultOperator.ItemName);

            entityQueryModelVisitor
            .AddOrUpdateMapping(groupResultOperator, entityQueryModelVisitor.CurrentParameter);

            return(expression);
        }
Ejemplo n.º 11
0
            protected Expression VisitProjectionSubQuery(
                SubQueryExpression expression, EntityQueryModelVisitor queryModelVisitor)
            {
                queryModelVisitor.VisitQueryModel(expression.QueryModel);

                var subExpression = queryModelVisitor._expression;

                if (queryModelVisitor._streamedSequenceInfo == null)
                {
                    return(subExpression);
                }

                if (typeof(IQueryable).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo()))
                {
                    subExpression
                        = Expression.Call(
                              _asQueryableShim.MakeGenericMethod(
                                  queryModelVisitor._streamedSequenceInfo.ResultItemType),
                              subExpression);
                }

                return(Expression.Convert(subExpression, expression.Type));
            }
Ejemplo n.º 12
0
        public virtual Expression HandleResultOperator(
            EntityQueryModelVisitor entityQueryModelVisitor,
            ResultOperatorBase resultOperator,
            QueryModel queryModel)
        {
            Check.NotNull(entityQueryModelVisitor, nameof(entityQueryModelVisitor));
            Check.NotNull(resultOperator, nameof(resultOperator));
            Check.NotNull(queryModel, nameof(queryModel));

            var relationalQueryModelVisitor
                = (RelationalQueryModelVisitor)entityQueryModelVisitor;

            var selectExpression
                = relationalQueryModelVisitor
                  .TryGetQuery(queryModel.MainFromClause);

            var handlerContext
                = new HandlerContext(
                      _resultOperatorHandler,
                      relationalQueryModelVisitor,
                      resultOperator,
                      queryModel,
                      selectExpression);

            Func <HandlerContext, Expression> resultHandler;

            if (relationalQueryModelVisitor.RequiresClientFilter ||
                relationalQueryModelVisitor.RequiresClientResultOperator ||
                relationalQueryModelVisitor.RequiresClientSelectMany ||
                !_resultHandlers.TryGetValue(resultOperator.GetType(), out resultHandler) ||
                selectExpression == null)
            {
                return(handlerContext.EvalOnClient);
            }

            return(resultHandler(handlerContext));
        }
Ejemplo n.º 13
0
 private static Expression HandleMin(EntityQueryModelVisitor entityQueryModelVisitor)
 {
     return(HandleAggregate(entityQueryModelVisitor, "Min"));
 }
Ejemplo n.º 14
0
 private static Expression HandleTake(
     EntityQueryModelVisitor entityQueryModelVisitor, TakeResultOperator takeResultOperator)
 => Expression.Call(
     entityQueryModelVisitor.LinqOperatorProvider.Take
     .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()),
     entityQueryModelVisitor.Expression, takeResultOperator.Count);
Ejemplo n.º 15
0
 private static Expression HandleAggregate(EntityQueryModelVisitor entityQueryModelVisitor, string methodName)
 => CallWithPossibleCancellationToken(
     entityQueryModelVisitor.LinqOperatorProvider.GetAggregateMethod(
         methodName,
         entityQueryModelVisitor.Expression.Type.GetSequenceType()),
     entityQueryModelVisitor.Expression);
Ejemplo n.º 16
0
 private static Expression HandleSkip(
     EntityQueryModelVisitor entityQueryModelVisitor, SkipResultOperator skipResultOperator)
 => Expression.Call(
     entityQueryModelVisitor.LinqOperatorProvider.Skip
     .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()),
     entityQueryModelVisitor.Expression, skipResultOperator.Count);
Ejemplo n.º 17
0
 private static Expression HandleSum(EntityQueryModelVisitor entityQueryModelVisitor)
 => HandleAggregate(entityQueryModelVisitor, "Sum");
Ejemplo n.º 18
0
 public virtual EntityQueryModelVisitor CreateQueryModelVisitor(
     [CanBeNull] EntityQueryModelVisitor parentEntityQueryModelVisitor)
 => _entityQueryModelVisitorFactory.Create(this, parentEntityQueryModelVisitor);
Ejemplo n.º 19
0
 private static Expression HandleMax(EntityQueryModelVisitor entityQueryModelVisitor)
 => HandleAggregate(entityQueryModelVisitor, "Max");
 public RequiresEntityMaterializationExpressionTreeVisitor(EntityQueryModelVisitor queryModelVisitor)
 {
     _queryModelVisitor = queryModelVisitor;
 }
Ejemplo n.º 21
0
 private static Expression HandleAverage(EntityQueryModelVisitor entityQueryModelVisitor)
 => HandleAggregate(entityQueryModelVisitor, "Average");
Ejemplo n.º 22
0
 protected QueryingExpressionTreeVisitor(EntityQueryModelVisitor parentQueryModelVisitor)
 {
     _parentQueryModelVisitor = parentQueryModelVisitor;
 }
Ejemplo n.º 23
0
 protected EntityQueryModelVisitor(EntityQueryModelVisitor parentQueryModelVisitor)
     : this(new LinqOperatorProvider(), parentQueryModelVisitor)
 {
 }
 public ProjectionExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor)
     : base(entityQueryModelVisitor)
 {
 }
 protected QueryingExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor)
     : base(entityQueryModelVisitor)
 {
 }
            public DefaultExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor)
            {
                Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor");

                _entityQueryModelVisitor = entityQueryModelVisitor;
            }
Ejemplo n.º 27
0
 private static Expression HandleAny(EntityQueryModelVisitor entityQueryModelVisitor)
 => CallWithPossibleCancellationToken(
     entityQueryModelVisitor.LinqOperatorProvider.Any
     .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()),
     entityQueryModelVisitor.Expression);
Ejemplo n.º 28
0
 private static Expression HandleDistinct(EntityQueryModelVisitor entityQueryModelVisitor)
 => Expression.Call(
     entityQueryModelVisitor.LinqOperatorProvider.Distinct
     .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()),
     entityQueryModelVisitor.Expression);
 public abstract EntityQueryModelVisitor CreateQueryModelVisitor(
     [CanBeNull] EntityQueryModelVisitor parentEntityQueryModelVisitor);
Ejemplo n.º 30
0
 protected abstract ExpressionTreeVisitor CreateProjectionExpressionTreeVisitor(EntityQueryModelVisitor parentQueryModelVisitor);