示例#1
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="session"></param>
        /// <param name="translatedQuery">The translated query.</param>
        /// <param name="parameterContext">The parameter context.</param>
        internal DelayedQueryResult(Session session, TranslatedQuery <TResult> translatedQuery, ParameterContext parameterContext)
        {
            ArgumentValidator.EnsureArgumentNotNull(session, "session");
            ArgumentValidator.EnsureArgumentNotNull(translatedQuery, "translatedQuery");
            ArgumentValidator.EnsureArgumentNotNull(parameterContext, "parameterContext");

            Session       = session;
            LifetimeToken = session.GetLifetimeToken();

            materializer           = translatedQuery.Materializer;
            tupleParameterBindings = translatedQuery.TupleParameterBindings;
            this.parameterContext  = parameterContext;
            Task = new QueryTask(translatedQuery.DataSource, LifetimeToken, parameterContext);
        }
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="session"></param>
        /// <param name="translatedQuery">The translated query.</param>
        /// <param name="outerParameterContext">The parameter context.</param>
        internal DelayedQuery(Session session, TranslatedQuery translatedQuery, ParameterContext outerParameterContext)
        {
            ArgumentValidator.EnsureArgumentNotNull(session, nameof(session));
            ArgumentValidator.EnsureArgumentNotNull(translatedQuery, nameof(translatedQuery));
            ArgumentValidator.EnsureArgumentNotNull(outerParameterContext, nameof(outerParameterContext));

            Session       = session;
            LifetimeToken = session.GetLifetimeToken();

            materializer     = translatedQuery.Materializer;
            parameterContext = new ParameterContext(outerParameterContext);
            foreach (var(parameter, tuple) in translatedQuery.TupleParameterBindings)
            {
                parameterContext.SetValue(parameter, tuple);
            }

            Task = new QueryTask(translatedQuery.DataSource, LifetimeToken, parameterContext);
        }
示例#3
0
        protected override Expression VisitSubQueryExpression(SubQueryExpression subQueryExpression)
        {
            // 1. Prepare subquery parameters.
            Parameter <Tuple> parameterOfTuple;
            Type elementType;
            ProjectionExpression projection;
            TranslatedQuery      translatedQuery = PrepareSubqueryParameters(subQueryExpression, out parameterOfTuple, out elementType, out projection);

            // 2. Create constructor
            var subQueryCtor = typeof(SubQuery <>)
                               .MakeGenericType(elementType)
                               .GetConstructor(new[] { typeof(ProjectionExpression), typeof(TranslatedQuery), typeof(Parameter <Tuple>), typeof(Tuple), typeof(ItemMaterializationContext) });

            // 3. Create result expression.
            var resultExpression = Expression.New(
                subQueryCtor,
                Expression.Constant(projection),
                Expression.Constant(translatedQuery),
                Expression.Constant(parameterOfTuple),
                tupleParameter,
                itemMaterializationContextParameter);

            return(Expression.Convert(resultExpression, subQueryExpression.Type));
        }
        public WhereClauseParserTests()
        {
            var mockValueProvider = new Mock <IValueProvider>();

            valueProvider   = mockValueProvider.Object;
            translatedQuery = new TranslatedQueryMock();

            schema = new Schema()
            {
                IsDummy = false
            };
            schema.AddColumn(new Column()
            {
                Name = "title", DataType = Common.DataType.String
            });
            schema.AddColumn(new Column()
            {
                Name = "body", DataType = Common.DataType.String
            });
            schema.AddColumn(new Column()
            {
                Name = "userkey", DataType = Common.DataType.String
            });
        }
示例#5
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="translatedQuery">The translated query.</param>
        /// <param name="parameterContext">The parameter context.</param>
        internal Delayed(Session session, TranslatedQuery <T> translatedQuery, ParameterContext parameterContext) :
            base(session, translatedQuery, parameterContext)
        {
        }
示例#6
0
        // Constructors

        public DelayedSequence(Session session, TranslatedQuery <IEnumerable <T> > translatedQuery, ParameterContext parameterContext)
            : base(session, translatedQuery, parameterContext)
        {
        }
示例#7
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="translatedQuery">The translated query.</param>
        /// <param name="parameterContext">The parameter context.</param>
        internal DelayedScalarQuery(Session session, TranslatedQuery translatedQuery, ParameterContext parameterContext)
            : base(session, translatedQuery, parameterContext)
        {
            resultAccessMethod = translatedQuery.ResultAccessMethod;
        }