public void StackReferenceExpressionSerializationTest()
        {
            ISimpleService service             = Simply.Do[ConfigKey].Resolve <ISimpleService>();
            int            hh                  = 42;
            Expression <Predicate <int> > pred = i => i == hh;
            EditableExpression            expr = EditableExpression.Create(Funcletizer.PartialEval(pred));

            service.TestExpression(expr, 41).Should().Be.False();
            service.TestExpression(expr, 42).Should().Be.True();
        }
Beispiel #2
0
        /// <summary>
        /// Constructs a new compiled query instance which hosts the delegate returned to the user
        /// (one of the Invoke overloads).
        /// </summary>
        /// <param name="query">Compiled query expression.</param>
        /// <param name="parameterDelegateType">The type of the delegate producing parameter values from CompiledQuery
        /// delegate arguments. For details, see CompiledQuery.Parameter.CreateObjectParameter.</param>
        private CompiledQuery(LambdaExpression query)
        {
            EntityUtil.CheckArgumentNull(query, "query");

            // lockdown the query (all closures become constants)
            Funcletizer funcletizer = Funcletizer.CreateCompiledQueryLockdownFuncletizer();
            Func <bool> recompiledRequire;

            _query = (LambdaExpression)funcletizer.Funcletize(query, out recompiledRequire);
        }
Beispiel #3
0
        /// <summary>
        ///     Constructs a new compiled query instance which hosts the delegate returned to the user
        ///     (one of the Invoke overloads).
        /// </summary>
        /// <param name="query"> Compiled query expression. </param>
        /// <param name="parameterDelegateType"> The type of the delegate producing parameter values from CompiledQuery delegate arguments. For details, see CompiledQuery.Parameter.CreateObjectParameter. </param>
        private CompiledQuery(LambdaExpression query)
        {
            DebugCheck.NotNull(query);

            // lockdown the query (all closures become constants)
            var         funcletizer = Funcletizer.CreateCompiledQueryLockdownFuncletizer();
            Func <bool> recompiledRequire;

            _query = (LambdaExpression)funcletizer.Funcletize(query, out recompiledRequire);
        }
Beispiel #4
0
 private void Subquery(MemberInfo association, LambdaExpression subquery)
 {
     if (frozen)
     {
         throw Error.SubqueryNotAllowedAfterFreeze();
     }
     subquery = (LambdaExpression)Funcletizer.Funcletize(subquery);
     ValidateSubqueryMember(association);
     ValidateSubqueryExpression(subquery);
     this.subqueries[new MetaPosition(association)] = subquery;
 }
        public void SimpleExpressionSerializationTest()
        {
            using (Simply.KeyContext(ConfigKey))
            {
                ISimpleService service             = Simply.Do.Resolve <ISimpleService>();
                Expression <Predicate <int> > pred = i => i == 42;
                EditableExpression            expr = EditableExpression.Create(Funcletizer.PartialEval(pred));

                service.TestExpression(expr, 41).Should().Be.False();
                service.TestExpression(expr, 42).Should().Be.True();
            }
        }
        public void TestItInternalInternal <T, TRet>(Expression <T> expr, Func <T, TRet> howToCall, ISimpleSerializer serializer)
        {
            var expr1 = EditableExpression.Create(Funcletizer.PartialEval(expr));

            byte[]             data  = serializer.Serialize(expr1);
            EditableExpression expr2 = (EditableExpression)serializer.Deserialize(data);
            T func2 = ((Expression <T>)expr2.ToExpression()).Compile();

            var value1 = howToCall(func2);
            var value2 = howToCall(expr.Compile());

            Assert.AreEqual(value2, value1);
        }
Beispiel #7
0
        internal override QueryInfo[] BuildQuery(Expression query, SqlNodeAnnotations annotations)
        {
            CheckDispose();
            query = Funcletizer.Funcletize(query);
            var converter = new MySqlQueryConverter(services, typeProvider, translator, sqlFactory)
            {
                ConverterStrategy = ConverterStrategy.CanOutputFromInsert | ConverterStrategy.CanUseJoinOn |
                                    ConverterStrategy.CanUseOuterApply | ConverterStrategy.SkipWithRowNumber
            };
            SqlNode node       = converter.ConvertOuter(query);
            var     queryInfos = BuildQuery(GetResultShape(query), GetResultType(query), node, null, annotations);
            var     formatter  = new MySqlFormatter(this);

            for (int i = 0; i < queryInfos.Length; i++)
            {
                var queryInfo = queryInfos[i];
                queryInfo.CommandText = formatter.Format(queryInfo.Query);
            }
            return(queryInfos);
        }
Beispiel #8
0
 public void GetObjectData(object obj, SerializationInfo info, StreamingContext context)
 {
     info.AddValue("_", SimpleSerializer.Binary().Serialize(EditableExpression.Create(Funcletizer.PartialEval((Expression)obj))));
 }