Пример #1
0
        public void Transform_AddDays()
        {
            var value      = new CustomExpression(typeof(double));
            var methodInfo = MemberInfoFromExpressionUtility.GetMethod(() => DateTime.Now.AddDays(0.0));
            var expression = Expression.Call(_dateTimeInstance, methodInfo, value);

            var result = _transformer.Transform(expression);

            var expectedResult = new SqlFunctionExpression(
                typeof(DateTime),
                "DATEADD",
                new SqlCustomTextExpression("millisecond", typeof(string)),
                Expression.Modulo(
                    new SqlConvertExpression(typeof(long), Expression.Multiply(value, new SqlLiteralExpression(86400000.0))),
                    new SqlLiteralExpression(86400000L)),
                new SqlFunctionExpression
                (
                    typeof(DateTime),
                    "DATEADD",
                    new SqlCustomTextExpression("day", typeof(string)),
                    Expression.Divide(
                        new SqlConvertExpression(typeof(long), Expression.Multiply(value, new SqlLiteralExpression(86400000.0))),
                        new SqlLiteralExpression(86400000L)),
                    _dateTimeInstance));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
Пример #2
0
        public void VisitMethodCallExpression_NoSetOperations()
        {
            var visitor = CreateVisitor(SetOperationsMode.StatementIsNotSetCombined);

            Assert.That(visitor.ColumnPosition, Is.EqualTo(0));

            var methodCallExpression = Expression.Call(
                _namedIntExpression,
                MemberInfoFromExpressionUtility.GetMethod(() => 0.ToString ("")),
                new Expression[] { _namedNameColumnExpression });

            visitor.VisitMethodCall(methodCallExpression);

            Assert.That(visitor.ColumnPosition, Is.EqualTo(2));

            var expectedRowParameter = _commandBuilder.InMemoryProjectionRowParameter;
            // Constants are used as is in the projection, whereas columns are taken from the SQL result
            var expectedProjectionForInstanceExpression = Expression.Constant(0);
            var expectedProjectionForArgumentExpression = GetExpectedProjectionForNamedExpression(expectedRowParameter, "SomeName", 1, typeof(string));

            var expectedProjection = Expression.Call(
                expectedProjectionForInstanceExpression,
                methodCallExpression.Method,
                new Expression[] { expectedProjectionForArgumentExpression });

            Assert.That(
                _commandBuilder.GetCommandText(),
                Is.EqualTo("NULL AS [test],[c].[Name] AS [SomeName]"));
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedProjection, _commandBuilder.GetInMemoryProjectionBody());
        }
Пример #3
0
            public void NormalMethod_ReturnsNull()
            {
                var method = MemberInfoFromExpressionUtility.GetMethod((DomainType obj) => obj.Method());
                var result = method.GetRelatedEventInfo();

                Assert.That(result, Is.Null);
            }
Пример #4
0
        public void ConvertToRuntimeProperty_WithPropertyAdapter_ReturnsRuntimeType()
        {
            var expectedProperty = MemberInfoFromExpressionUtility.GetProperty((TheType t) => t.TheProperty);
            IPropertyInformation propertyInformation = PropertyInfoAdapter.Create(expectedProperty);

            Assert.That(propertyInformation.ConvertToRuntimePropertyInfo(), Is.SameAs(expectedProperty));
        }
Пример #5
0
        public Expression <Func <object, object> > GetPropertyAccessExpression(Type validatedType)
        {
            ArgumentUtility.CheckNotNull("validatedType", validatedType);

            var parameterExpression = Expression.Parameter(typeof(object), "t");

            // object o => UsePersistentProperty ((DomainObject)o, _interfaceProperty) ? (object) (TheType o).TheProperty : nonEmptyObject;

            var usePersistentPropertyMethod = MemberInfoFromExpressionUtility.GetMethod(() => UsePersistentProperty(null, null));
            var conditionExpression         = Expression.Call(
                usePersistentPropertyMethod,
                Expression.Convert(parameterExpression, typeof(DomainObject)),
                Expression.Constant(_implementationProperty, typeof(PropertyInfo)));

            // object o => (object) (TheType o).TheProperty
            var domainObjectPropertyAccessExpression = Expression.Convert(
                Expression.MakeMemberAccess(
                    Expression.Convert(parameterExpression, validatedType),
                    _interfaceProperty),
                typeof(object));


            var nonEmptyDummyValue = ReflectionUtility.IsObjectList(_implementationProperty.PropertyType)
          ? FakeDomainObject.CollectionValue
          : (object)FakeDomainObject.SingleValue;
            var nonEmptyDummyValueExpression = Expression.Constant(nonEmptyDummyValue, typeof(object));

            return(Expression.Lambda <Func <object, object> > (
                       Expression.Condition(conditionExpression, domainObjectPropertyAccessExpression, nonEmptyDummyValueExpression),
                       parameterExpression));
        }
Пример #6
0
        public void ResolveIDPropertyViaForeignKey_WithFullObjectID_ResolvesToCompound()
        {
            var propertyDefinition      = CreatePropertyDefinitionAndAssociateWithClass(_classDefinition, "Customer", "Customer");
            var objectIDStorageProperty = ObjectIDStoragePropertyDefinitionObjectMother.Create(
                "CustomerID",
                "CustomerClassID",
                StorageTypeInformationObjectMother.CreateUniqueIdentifierStorageTypeInformation(),
                StorageTypeInformationObjectMother.CreateVarchar100StorageTypeInformation());

            var foreignKeyEndPointDefinition = new RelationEndPointDefinition(propertyDefinition, false);

            _rdbmsPersistenceModelProviderStub
            .Stub(stub => stub.GetStoragePropertyDefinition(foreignKeyEndPointDefinition.PropertyDefinition))
            .Return(objectIDStorageProperty);

            var originatingEntity = CreateEntityDefinition(typeof(Order), "o");

            var result = _storageSpecificExpressionResolver.ResolveIDPropertyViaForeignKey(originatingEntity, foreignKeyEndPointDefinition);

            var expected = Expression.New(
                MemberInfoFromExpressionUtility.GetConstructor(() => new ObjectID("classID", "value")),
                new[]
            {
                new NamedExpression("ClassID", originatingEntity.GetColumn(typeof(string), "CustomerClassID", false)),
                new NamedExpression("Value", Expression.Convert(originatingEntity.GetColumn(typeof(Guid), "CustomerID", false), typeof(object)))
            },
                new[] { typeof(ObjectID).GetProperty("ClassID"), typeof(ObjectID).GetProperty("Value") });

            SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result);
        }
Пример #7
0
        public void ResoveIDProperty()
        {
            var entityExpression = CreateEntityDefinition(typeof(Order), "o");
            var entityDefinition = TableDefinitionObjectMother.Create(TestDomainStorageProviderDefinition, new EntityNameDefinition(null, "Test"));

            _rdbmsPersistenceModelProviderStub
            .Stub(stub => stub.GetEntityDefinition(_classDefinition))
            .Return(entityDefinition);

            var result = _storageSpecificExpressionResolver.ResolveIDProperty(entityExpression, _classDefinition);

            var ctor = MemberInfoFromExpressionUtility.GetConstructor(() => new ObjectID("ClassID", "value"));

            SqlExpressionTreeComparer.CheckAreEqualTrees(
                Expression.New(
                    ctor,
                    new[]
            {
                new NamedExpression("ClassID", new SqlColumnDefinitionExpression(typeof(string), "o", "ClassID", false)),
                new NamedExpression("Value", Expression.Convert(new SqlColumnDefinitionExpression(typeof(Guid), "o", "ID", true), typeof(object)))
            },
                    new[]
            {
                typeof(ObjectID).GetProperty("ClassID"),
                typeof(ObjectID).GetProperty("Value")
            }),
                result);
        }
Пример #8
0
        public void VisitMethodCallExpression_NoSetOperations_WithoutObject()
        {
            var visitor = CreateVisitor(SetOperationsMode.StatementIsNotSetCombined);

            Assert.That(visitor.ColumnPosition, Is.EqualTo(0));

            var methodCallExpression = Expression.Call(
                MemberInfoFromExpressionUtility.GetMethod(() => int.Parse("")),
                new Expression[] { _namedNameColumnExpression });

            visitor.VisitMethodCall(methodCallExpression);

            Assert.That(visitor.ColumnPosition, Is.EqualTo(1));

            var expectedRowParameter = _commandBuilder.InMemoryProjectionRowParameter;
            var expectedProjectionForArgumentExpression = GetExpectedProjectionForNamedExpression(expectedRowParameter, "SomeName", 0, typeof(string));

            var expectedProjection = Expression.Call(
                methodCallExpression.Method,
                new Expression[] { expectedProjectionForArgumentExpression });

            Assert.That(
                _commandBuilder.GetCommandText(),
                Is.EqualTo("[c].[Name] AS [SomeName]"));
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedProjection, _commandBuilder.GetInMemoryProjectionBody());
        }
Пример #9
0
        public void GetField_Instance()
        {
            var member = MemberInfoFromExpressionUtility.GetField((DomainType obj) => obj.InstanceField);

            var expected = typeof(DomainType).GetField("InstanceField");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #10
0
            public void FuncWithArgs()
            {
                var methodInfo = MemberInfoFromExpressionUtility.GetMethod(((DomainType obj) => obj.MixedMethod("a", 1)));

                var result = methodInfo.GetDelegateType();

                Assert.That(result, Is.EqualTo(typeof(Func <string, int, object>)));
            }
Пример #11
0
            public void Func()
            {
                var methodInfo = MemberInfoFromExpressionUtility.GetMethod(((DomainType obj) => obj.ReturnMethod()));

                var result = methodInfo.GetDelegateType();

                Assert.That(result, Is.EqualTo(typeof(Func <string>)));
            }
Пример #12
0
            public void ActionWithArgs()
            {
                var methodInfo = MemberInfoFromExpressionUtility.GetMethod(((DomainType obj) => obj.ArgMethod("a")));

                var result = methodInfo.GetDelegateType();

                Assert.That(result, Is.EqualTo(typeof(Action <string>)));
            }
Пример #13
0
            public void Action()
            {
                var methodInfo = MemberInfoFromExpressionUtility.GetMethod(((DomainType obj) => obj.SimpleMethod()));

                var result = methodInfo.GetDelegateType();

                Assert.That(result, Is.EqualTo(typeof(Action)));
            }
            public void UserDefinedMethod()
            {
                var methodInfo = MemberInfoFromExpressionUtility.GetMethod(((DomainType obj) => obj.Method()));

                var result = methodInfo.IsCompilerGenerated();

                Assert.That(result, Is.False);
            }
Пример #15
0
        public void GetMethod_StaticVoid()
        {
            var member = MemberInfoFromExpressionUtility.GetMethod(() => DomainType.StaticVoidMethod());

            var expected = typeof(DomainType).GetMethod("StaticVoidMethod");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #16
0
        public void GetConstructor()
        {
            var member = MemberInfoFromExpressionUtility.GetConstructor(() => new DomainType());

            var expected = typeof(DomainType).GetConstructor(Type.EmptyTypes);

            Assert.That(member, Is.EqualTo(expected));
        }
        protected PropertyDefinition GetPropertyDefinition <TSourceObject, TPropertyType> (Expression <Func <TSourceObject, TPropertyType> > expression)
            where TSourceObject : DomainObject
        {
            var propertyInfo    = MemberInfoFromExpressionUtility.GetProperty(expression);
            var classDefinition = MappingConfiguration.Current.GetTypeDefinition(typeof(TSourceObject));

            return(classDefinition.ResolveProperty(PropertyInfoAdapter.Create(propertyInfo)));
        }
Пример #18
0
        public void GetMember_Instance_MemberExpression_OverridingProperty()
        {
            var member = MemberInfoFromExpressionUtility.GetMember((DomainType obj) => obj.OverridingProperty);

            var expected = typeof(DomainTypeBase).GetProperty("OverridingProperty");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #19
0
        public void GetMember_Instance_MethodCallExpression()
        {
            var member = MemberInfoFromExpressionUtility.GetMember((DomainType obj) => obj.InstanceMethod());

            var expected = typeof(DomainType).GetMember("InstanceMethod").Single();

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #20
0
        public void GetProperty_Instance_VirtualBaseProperty()
        {
            var member = MemberInfoFromExpressionUtility.GetProperty((DomainType obj) => obj.VirtualBaseProperty);

            var expected = typeof(DomainTypeBase).GetProperty("VirtualBaseProperty");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #21
0
        public void GetProperty_FromInterface()
        {
            var member = MemberInfoFromExpressionUtility.GetProperty((IDomainInterface obj) => obj.InterfaceProperty);

            var expected = typeof(IDomainInterface).GetProperty("InterfaceProperty");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #22
0
        public void GetProperty_Static()
        {
            var member = MemberInfoFromExpressionUtility.GetProperty(() => DomainType.StaticProperty);

            var expected = typeof(DomainType).GetProperty("StaticProperty");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #23
0
        public void GetMember_Static_NewExpression()
        {
            var member = MemberInfoFromExpressionUtility.GetMember(() => new DomainType());

            var expected = typeof(DomainType).GetMember(".ctor").Single();

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #24
0
        public void GetMember_Static_MethodCallExpression()
        {
            var member = MemberInfoFromExpressionUtility.GetMember(() => DomainType.StaticMethod());

            var expected = typeof(DomainType).GetMember("StaticMethod").Single();

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #25
0
        public void GetGenericMethodDefinition_Instance_OverridingMethod()
        {
            var member = MemberInfoFromExpressionUtility.GetGenericMethodDefinition((DomainType obj) => obj.OverridingGenericMethod <SampleType> (null));

            var expected = typeof(DomainTypeBase).GetMethod("OverridingGenericMethod");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #26
0
        public void GetGenericMethodDefinition_Static()
        {
            var member = MemberInfoFromExpressionUtility.GetGenericMethodDefinition(() => DomainType.StaticGenericMethod <SampleType> (null));

            var expected = typeof(DomainType).GetMethod("StaticGenericMethod");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #27
0
        public void GetMethod_Instance_InterfaceMethod()
        {
            var member = MemberInfoFromExpressionUtility.GetMethod((DomainType obj) => obj.InterfaceMethod());

            var expected = typeof(DomainType).GetMethod("InterfaceMethod");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #28
0
        public void GetMethod_Instance_GenericMethod()
        {
            var member = MemberInfoFromExpressionUtility.GetMethod((DomainType obj) => obj.InstanceGenericMethod <SampleType> (null));

            var expected = typeof(DomainType).GetMethod("InstanceGenericMethod").MakeGenericMethod(typeof(SampleType));

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #29
0
        public void GetMethod_Instance_Overriding()
        {
            var member = MemberInfoFromExpressionUtility.GetMethod((DomainType obj) => obj.OverridingMethod());

            var expected = typeof(DomainTypeBase).GetMethod("OverridingMethod");

            Assert.That(member, Is.EqualTo(expected));
        }
Пример #30
0
            public void AccessorMethod_ReturnsPropertyInfo()
            {
                var accessorMethod = typeof(DomainType).GetMethod("get_Property", BindingFlags.Instance | BindingFlags.Public);
                var propertyInfo   = MemberInfoFromExpressionUtility.GetProperty((DomainType obj) => obj.Property);

                var result = accessorMethod.GetRelatedPropertyInfo();

                Assert.That(result, Is.EqualTo(propertyInfo));
            }