public void ResolveJoinInfo_ShouldThrowUnmappedExceptionForMember()
        {
            var customerTableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Customer), "dbo.Customers", "t1");

            var customerDefinition = new SqlEntityDefinitionExpression(customerTableInfo.ItemType, customerTableInfo.TableAlias, null, e => e);

            var joinInfo = new UnresolvedJoinInfo(customerDefinition, _unmappedInfo, JoinCardinality.One);

            _mappingResolver.ResolveJoinInfo(joinInfo, _generator);
        }
        public void ResolveSimpleTableInfo_WithInheritanceHierarchy()
        {
            var simpleTableInfo = new ResolvedSimpleTableInfo(typeof(ContactWithInheritanceHierarchy), "dbo.Contact", "t0");

            SqlEntityDefinitionExpression resolvedExpr = _mappingResolver.ResolveSimpleTableInfo(simpleTableInfo, _generator);
            var actualColumnNames = resolvedExpr.Columns.Select(c => c.ColumnName).ToArray();

            var expectedMembersAndDeclaringTypes = new[] { "ContactID", "ContactType", "Password", "PhotoColumn", "HomePage" };

            Assert.That(actualColumnNames, Is.EquivalentTo(expectedMembersAndDeclaringTypes));
        }
        public void ResolveMemberExpression_NonPrimaryKey()
        {
            var sqlEntityExpression = new SqlEntityDefinitionExpression(typeof(DataContextTestClass.Customer), "c", null, e => e);

            var        memberInfo = typeof(DataContextTestClass.Customer).GetProperty("CompanyName");
            Expression result     = _mappingResolver.ResolveMemberExpression(sqlEntityExpression, memberInfo);

            var expectedExpression = new SqlColumnDefinitionExpression(typeof(string), "c", "CompanyName", false);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedExpression, result);
        }
        public void ResolveMemberExpression()
        {
            var sqlEntityExpression = new SqlEntityDefinitionExpression(typeof(PersonTestClass), "p", null, e => e);

            var        memberInfo = typeof(PersonTestClass).GetProperty("First");
            Expression result     = _mappingResolver.ResolveMemberExpression(sqlEntityExpression, memberInfo);

            var expectedExpression = new SqlColumnDefinitionExpression(typeof(string), "p", "FirstName", true);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedExpression, result);
        }
        public void ResolveMemberExpression_ShouldThrowUnmappedExceptionForType()
        {
            var sqlEntityExpression = new SqlEntityDefinitionExpression(typeof(PersonTestClass), "p", null, e => e);

            var memberInfoStub = MockRepository.GenerateStub <MemberInfo>();

            memberInfoStub
            .Stub(stub => stub.DeclaringType)
            .Return(_unmappedType);

            _mappingResolver.ResolveMemberExpression(sqlEntityExpression, memberInfoStub);
        }
        public void TryResolveOptimizedIdentity_ForeignKeyOnTheRight()
        {
            var tableInfo         = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.ClassWithOneToOneRelation_VirtualSide), "X", "x");
            var originatingEntity = new SqlEntityDefinitionExpression(tableInfo.ItemType, tableInfo.TableAlias, null, e => e);

            var relationMember            = tableInfo.ItemType.GetProperty("ForeignKeySide");
            var entityRefMemberExpression = new SqlEntityRefMemberExpression(originatingEntity, relationMember);

            var result = _mappingResolver.TryResolveOptimizedIdentity(entityRefMemberExpression);

            Assert.That(result, Is.Null);
        }
        public void ResolveMemberExpression_Association()
        {
            var referencedSqlExpression = new SqlEntityDefinitionExpression(typeof(DataContextTestClass.Customer), "c", null, e => e);

            var sqlEntityExpression = new SqlEntityReferenceExpression(typeof(DataContextTestClass.Order), "o", null, referencedSqlExpression);

            var memberInfo = typeof(DataContextTestClass.Order).GetProperty("Customer");
            var result     = _mappingResolver.ResolveMemberExpression(sqlEntityExpression, memberInfo);

            var expectedExpression = new SqlEntityRefMemberExpression(sqlEntityExpression, memberInfo);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedExpression, result);
        }
Exemplo n.º 8
0
        public void GenerateSql_VisitSqlColumnReferenceExpression_WithNamedEntity_WithStarColumn()
        {
            var entityExpression = new SqlEntityDefinitionExpression(
                typeof(Cook),
                "c",
                "Test",
                e => e.GetColumn(typeof(int), "ID", true),
                new SqlColumnDefinitionExpression(typeof(Cook), "c", "*", false));
            var sqlColumnExpression = new SqlColumnReferenceExpression(typeof(int), "s", "ID", false, entityExpression);

            SqlGeneratingExpressionVisitor.GenerateSql(sqlColumnExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[s].[ID]"));
        }
        public void TryResolveOptimizedMemberExpression_OtherMember()
        {
            var tableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.ClassWithOneToOneRelation_ForeignKeySide), "X", "x");

            var originatingEntity = new SqlEntityDefinitionExpression(
                tableInfo.ItemType, tableInfo.TableAlias, null, e => e.GetColumn(typeof(int), "ID", true));

            var relationMember            = tableInfo.ItemType.GetProperty("VirtualSide");
            var entityRefMemberExpression = new SqlEntityRefMemberExpression(originatingEntity, relationMember);

            var identityMember = typeof(DataContextTestClass.ClassWithOneToOneRelation_VirtualSide).GetProperty("OtherMember");
            var result         = _mappingResolver.TryResolveOptimizedMemberExpression(entityRefMemberExpression, identityMember);

            Assert.That(result, Is.Null);
        }
Exemplo n.º 10
0
        public void GenerateSql_VisitSqlEntityExpression_NamedEntity_StarColumn()
        {
            var sqlColumnListExpression = new SqlEntityDefinitionExpression(
                typeof(string),
                "t",
                "Test",
                e => e.GetColumn(typeof(int), "ID", true),
                new[]
            {
                new SqlColumnDefinitionExpression(typeof(string), "t", "*", false)
            });

            SqlGeneratingSelectExpressionVisitor.GenerateSql(sqlColumnListExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[t].*"));
        }
        public void TryResolveOptimizedIdentity_ForeignKeyOnTheLeft()
        {
            var tableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.ClassWithOneToOneRelation_ForeignKeySide), "X", "x");

            var originatingEntity = new SqlEntityDefinitionExpression(
                tableInfo.ItemType, tableInfo.TableAlias, null, e => e.GetColumn(typeof(int), "ID", true));

            var relationMember            = tableInfo.ItemType.GetProperty("VirtualSide");
            var entityRefMemberExpression = new SqlEntityRefMemberExpression(originatingEntity, relationMember);

            var result = _mappingResolver.TryResolveOptimizedIdentity(entityRefMemberExpression);

            var orderForeignKey = new SqlColumnDefinitionExpression(typeof(int), tableInfo.TableAlias, "VirtualSideID", false);

            SqlExpressionTreeComparer.CheckAreEqualTrees(orderForeignKey, result);
        }
Exemplo n.º 12
0
        public void Update()
        {
            var columns = new[]
            {
                new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false),
                new SqlColumnDefinitionExpression(typeof(string), "c", "FirstName", false)
            };

            var entityExpression = new SqlEntityDefinitionExpression(typeof(Cook), "c", null, e => e.GetColumn(typeof(int), "ID", true), columns);

            var result = entityExpression.Update(typeof(Kitchen), "f", null);

            var expectedResult = new SqlEntityDefinitionExpression(typeof(Kitchen), "f", null, entityExpression.IdentityExpressionGenerator, columns);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
Exemplo n.º 13
0
        public void CreateReference()
        {
            var columns = new[]
            {
                new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false),
                new SqlColumnDefinitionExpression(typeof(string), "c", "FirstName", false)
            };

            var entityExpression = new SqlEntityDefinitionExpression(typeof(Cook), "c", null, e => e.GetColumn(typeof(int), "ID", true), columns);

            var result = entityExpression.CreateReference("c1", typeof(Cook));

            var expectedResult = new SqlEntityReferenceExpression(typeof(Cook), "c1", null, entityExpression);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
Exemplo n.º 14
0
        public void GenerateSql_VisitSqlEntityExpression_NamedEntity_ReferencingNamed()
        {
            var referencedEntity = new SqlEntityDefinitionExpression(
                typeof(Cook),
                "c",
                "Cook",
                e => e,
                new[]
            {
                new SqlColumnDefinitionExpression(typeof(string), "t", "Name", false),
                new SqlColumnDefinitionExpression(typeof(string), "t", "City", false)
            });
            var entityExpression = new SqlEntityReferenceExpression(typeof(Cook), "c", "ref", referencedEntity);

            SqlGeneratingSelectExpressionVisitor.GenerateSql(entityExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[c].[Cook_Name] AS [ref_Name],[c].[Cook_City] AS [ref_City]"));
        }
        public void SetUp()
        {
            _stageMock      = MockRepository.GenerateStrictMock <ISqlGenerationStage> ();
            _commandBuilder = new SqlCommandBuilder();
            _visitor        = new TestableSqlGeneratingOuterSelectExpressionVisitor(_commandBuilder, _stageMock);

            _namedIntExpression   = new NamedExpression("test", Expression.Constant(0));
            _nameColumnExpression = new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false);
            _entityExpression     = new SqlEntityDefinitionExpression(
                typeof(Cook),
                "c",
                "test",
                e => e,
                new SqlColumnDefinitionExpression(typeof(int), "c", "ID", true),
                _nameColumnExpression,
                new SqlColumnDefinitionExpression(typeof(string), "c", "FirstName", false)
                );
        }
        public void ResolveSimpleTableInfo()
        {
            var simpleTableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Region), "dbo.Region", "t0");

            SqlEntityDefinitionExpression resolvedExpr = _mappingResolver.ResolveSimpleTableInfo(simpleTableInfo, _generator);

            SqlColumnExpression expectedPrimaryColumn     = new SqlColumnDefinitionExpression(typeof(int), simpleTableInfo.TableAlias, "RegionID", true);
            SqlColumnExpression expectedDescriptionColumn =
                new SqlColumnDefinitionExpression(typeof(string), simpleTableInfo.TableAlias, "RegionDescription", false);

            Assert.That(resolvedExpr.Type, Is.SameAs(typeof(DataContextTestClass.Region)));
            Assert.That(resolvedExpr.TableAlias, Is.EqualTo("t0"));
            Assert.That(resolvedExpr.Name, Is.Null);
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedPrimaryColumn, resolvedExpr.GetIdentityExpression());
            Assert.That(resolvedExpr.Columns, Has.Count.EqualTo(2));
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedPrimaryColumn, resolvedExpr.Columns[0]);
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedDescriptionColumn, resolvedExpr.Columns[1]);
        }
Exemplo n.º 17
0
        public void GenerateSql_VisitSqlEntityExpression_UnnamedEntity()
        {
            var sqlColumnListExpression = new SqlEntityDefinitionExpression(
                typeof(string),
                "t",
                null,
                e => e,
                new[]
            {
                new SqlColumnDefinitionExpression(typeof(string), "t", "ID", true),
                new SqlColumnDefinitionExpression(typeof(string), "t", "Name", false),
                new SqlColumnDefinitionExpression(typeof(string), "t", "City", false)
            });

            SqlGeneratingSelectExpressionVisitor.GenerateSql(
                sqlColumnListExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[t].[ID],[t].[Name],[t].[City]"));
        }
        public void ResolveJoinInfo_OneNullableColumn_TheOtherNot_LeadsToConversion()
        {
            var regionTableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Region), "dbo.Regions", "t1");
            var regionEntity    = new SqlEntityDefinitionExpression(regionTableInfo.ItemType, regionTableInfo.TableAlias, null, e => e);

            var territoriesMember  = regionTableInfo.ItemType.GetProperty("Territories");
            var unresolvedJoinInfo = new UnresolvedJoinInfo(regionEntity, territoriesMember, JoinCardinality.Many);

            var resolvedJoinInfo = _mappingResolver.ResolveJoinInfo(unresolvedJoinInfo, _generator);

            var regionPrimaryKey            = new SqlColumnDefinitionExpression(typeof(int), regionTableInfo.TableAlias, "RegionID", true);
            var expectedTerritoryTableInfo  = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Territory), "dbo.Territories", "t0");
            var expectedTerritoryForeignKey = new SqlColumnDefinitionExpression(typeof(int?), expectedTerritoryTableInfo.TableAlias, "RegionID", false);

            SqlExpressionTreeComparer.CheckAreEqualTrees(
                Expression.Equal(
                    Expression.Convert(regionPrimaryKey, typeof(int?)),
                    expectedTerritoryForeignKey), resolvedJoinInfo.JoinCondition);
        }
        public void ResolveSimpleTableInfo_MultiplePrimaryKeyProperties()
        {
            var simpleTableInfo = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.ClassWithCompoundPrimaryKey), "ClassWithCompoundPrimaryKey", "t0");

            SqlEntityDefinitionExpression resolvedExpr = _mappingResolver.ResolveSimpleTableInfo(simpleTableInfo, _generator);

            SqlColumnExpression expectedPrimaryColumn1 = new SqlColumnDefinitionExpression(typeof(int), simpleTableInfo.TableAlias, "Key1", true);
            SqlColumnExpression expectedPrimaryColumn2 = new SqlColumnDefinitionExpression(typeof(string), simpleTableInfo.TableAlias, "Key2", true);
            var type = typeof(MappingResolver.CompoundIdentityTuple <int, string>);
            var expectedIdentityExpression = Expression.New(
                type.GetConstructors().Single(),
                new[] { new NamedExpression("Item1", expectedPrimaryColumn1), new NamedExpression("Item2", expectedPrimaryColumn2) },
                new[] { type.GetProperty("Item1"), type.GetProperty("Item2") });

            Assert.That(resolvedExpr.Type, Is.SameAs(typeof(DataContextTestClass.ClassWithCompoundPrimaryKey)));
            Assert.That(resolvedExpr.TableAlias, Is.EqualTo("t0"));
            Assert.That(resolvedExpr.Name, Is.Null);
            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedIdentityExpression, resolvedExpr.GetIdentityExpression());
        }
        public void ResolveJoinInfo_ForeignKeyOnTheRight()
        {
            var customerTableInfo  = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Customer), "dbo.Customers", "t1");
            var customerPrimaryKey = new SqlColumnDefinitionExpression(typeof(string), customerTableInfo.TableAlias, "CustomerID", true);
            var customerEntity     = new SqlEntityDefinitionExpression(customerTableInfo.ItemType, customerTableInfo.TableAlias, null, e => e);

            var ordersMember       = customerTableInfo.ItemType.GetProperty("Orders");
            var unresolvedJoinInfo = new UnresolvedJoinInfo(customerEntity, ordersMember, JoinCardinality.Many);

            var resolvedJoinInfo = _mappingResolver.ResolveJoinInfo(unresolvedJoinInfo, _generator);

            var expectedOrderTableInfo  = new ResolvedSimpleTableInfo(typeof(DataContextTestClass.Order), "dbo.Order", "t0");
            var expectedOrderForeignKey = new SqlColumnDefinitionExpression(typeof(string), expectedOrderTableInfo.TableAlias, "CustomerID", false);

            SqlExpressionTreeComparer.CheckAreEqualTrees(Expression.Equal(customerPrimaryKey, expectedOrderForeignKey), resolvedJoinInfo.JoinCondition);

            Assert.That(resolvedJoinInfo.ItemType, Is.EqualTo(expectedOrderTableInfo.ItemType));
            Assert.That(resolvedJoinInfo.ForeignTableInfo.ItemType, Is.EqualTo(expectedOrderTableInfo.ItemType));
            Assert.That(resolvedJoinInfo.ForeignTableInfo.TableAlias, Is.EqualTo(expectedOrderTableInfo.TableAlias));
        }
Exemplo n.º 21
0
        public void SetUp()
        {
            _stageMock             = MockRepository.GenerateStrictMock <ISqlGenerationStage> ();
            _commandBuilder        = new SqlCommandBuilder();
            _someSetOperationsMode = Some.Item(SetOperationsMode.StatementIsSetCombined, SetOperationsMode.StatementIsNotSetCombined);
            _visitor = CreateVisitor(_someSetOperationsMode);

            _namedIntExpression = new NamedExpression("test", Expression.Constant(0));
            var nameColumnExpression = new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false);

            _namedNameColumnExpression = new NamedExpression("SomeName", nameColumnExpression);
            _entityExpression          = new SqlEntityDefinitionExpression(
                typeof(Cook),
                "c",
                "test",
                e => e,
                new SqlColumnDefinitionExpression(typeof(int), "c", "ID", true),
                nameColumnExpression,
                new SqlColumnDefinitionExpression(typeof(string), "c", "FirstName", false)
                );
        }
Exemplo n.º 22
0
        private static object GetColumnValue(object entity, MappingResolverStub mappingResolver, SqlEntityDefinitionExpression sqlEntityDefinition, string columnName)
        {
            var propertiesWithColumnName =
                entity.GetType()
                .GetProperties()
                .SelectMany(p => TryResolveProperty(mappingResolver, sqlEntityDefinition, p, entity), (p, t) => new { Property = p, ColumnNameAndValue = t })
                .ToArray();
            var matchingProperty = propertiesWithColumnName.FirstOrDefault(d => d.ColumnNameAndValue.Key == columnName);

            // Assert.That (matchingProperties, Has.Length.LessThanOrEqualTo (1), entity.GetType().Name + ": " + string.Join (",", matchingProperties));

            Assert.IsNotNull(
                matchingProperty,
                "No member found for column '{0}' on entity type '{1}'.\r\n(Found: {2})",
                columnName,
                entity.GetType().Name,
                string.Join(",", propertiesWithColumnName.Select(p => p.ToString())));
            return(matchingProperty.ColumnNameAndValue.Value);
        }
Exemplo n.º 23
0
 public void SetUp()
 {
     _entityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression();
     _columnExpression = new SqlColumnReferenceExpression(typeof(string), "c", "columnName", false, _entityExpression);
 }
        public void SetUp()
        {
            var columns = new[] { new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false) };

            _entityDefinitionExpression = new SqlEntityDefinitionExpression(typeof(Cook), "c", null, e => e, columns);
        }