public void SetUp()
 {
     _sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
     {
         SelectProjection = new NamedExpression("test", Expression.Constant(5)),
         DataInfo         = new StreamedSequenceInfo(typeof(int[]), Expression.Constant(0))
     }.GetSqlStatement();
     _tableInfo = new ResolvedSubStatementTableInfo("c", _sqlStatement);
 }
        public void ResolveSqlStatement()
        {
            var constantExpression = Expression.Constant(new Restaurant());
            var whereCondition     = Expression.Constant(true);
            var topExpression      = Expression.Constant("top");
            var groupExpression    = Expression.Constant("group");
            var ordering           = new Ordering(Expression.Constant("ordering"), OrderingDirection.Desc);
            var builder            = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection  = constantExpression,
                DataInfo          = new StreamedSequenceInfo(typeof(Restaurant[]), constantExpression),
                WhereCondition    = whereCondition,
                GroupByExpression = groupExpression,
                TopExpression     = topExpression,
            };

            builder.Orderings.Add(ordering);
            var sqlStatement        = builder.GetSqlStatement();
            var fakeExpression      = Expression.Constant(new Cook());
            var fakeWhereCondition  = Expression.Constant(true);
            var fakeGroupExpression = Expression.Constant("group");
            var fakeTopExpression   = Expression.Constant("top");
            var fakeOrderExpression = Expression.Constant("order");

            _stageMock
            .Expect(mock => mock.ResolveSelectExpression(Arg.Is(constantExpression), Arg <SqlStatementBuilder> .Is.Anything, Arg.Is(_mappingResolutionContext)))
            .Return(fakeExpression);
            _stageMock
            .Expect(mock => mock.ResolveWhereExpression(whereCondition, _mappingResolutionContext))
            .Return(fakeWhereCondition);
            _stageMock
            .Expect(mock => mock.ResolveGroupByExpression(groupExpression, _mappingResolutionContext))
            .Return(fakeGroupExpression);
            _stageMock
            .Expect(mock => mock.ResolveTopExpression(topExpression, _mappingResolutionContext))
            .Return(fakeTopExpression);
            _stageMock
            .Expect(mock => mock.ResolveOrderingExpression(ordering.Expression, _mappingResolutionContext))
            .Return(fakeOrderExpression);
            _stageMock
            .Expect(mock => mock.ResolveTableInfo(((SqlTable)sqlStatement.SqlTables[0]).TableInfo, _mappingResolutionContext))
            .Return(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"));
            _stageMock.Replay();

            var resolveSqlStatement = _visitor.ResolveSqlStatement(sqlStatement);

            _stageMock.VerifyAllExpectations();
            Assert.That(resolveSqlStatement.DataInfo, Is.TypeOf(typeof(StreamedSequenceInfo)));
            Assert.That(((StreamedSequenceInfo)resolveSqlStatement.DataInfo).DataType, Is.EqualTo(typeof(IQueryable <>).MakeGenericType(typeof(Cook))));
            Assert.That(resolveSqlStatement.SelectProjection, Is.SameAs(fakeExpression));
            Assert.That(resolveSqlStatement.WhereCondition, Is.SameAs(fakeWhereCondition));
            Assert.That(resolveSqlStatement.TopExpression, Is.SameAs(fakeTopExpression));
            Assert.That(resolveSqlStatement.GroupByExpression, Is.SameAs(fakeGroupExpression));
            Assert.That(resolveSqlStatement.Orderings[0].Expression, Is.SameAs(fakeOrderExpression));
            Assert.That(sqlStatement.Orderings[0].Expression, Is.SameAs(ordering.Expression));
        }
 public void SetUp()
 {
     _stageMock                = MockRepository.GenerateMock <IMappingResolutionStage>();
     _resolverMock             = MockRepository.GenerateMock <IMappingResolver>();
     _unresolvedTableInfo      = SqlStatementModelObjectMother.CreateUnresolvedTableInfo(typeof(Cook));
     _resolvedTableInfo        = SqlStatementModelObjectMother.CreateResolvedTableInfo(typeof(Cook));
     _generator                = new UniqueIdentifierGenerator();
     _sqlStatement             = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));
     _mappingResolutionContext = new MappingResolutionContext();
 }
        public void Initialization_ItemTypeWithCovariantSubstatement()
        {
            var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection = new NamedExpression("test", Expression.Constant(5)),
                DataInfo         = new StreamedSequenceInfo(typeof(object[]), Expression.Constant(0))
            }.GetSqlStatement();
            var tableInfo = new ResolvedSubStatementTableInfo("c", sqlStatement);

            Assert.That(tableInfo.ItemType, Is.EqualTo(typeof(object)));
        }
예제 #5
0
        public void ResolveSqlStatement_WithNoChanges_ShouldLeaveAllObjectsTheSame()
        {
            var constantExpression            = Expression.Constant(new Restaurant());
            var whereCondition                = Expression.Constant(true);
            var topExpression                 = Expression.Constant("top");
            var groupExpression               = Expression.Constant("group");
            var ordering                      = new Ordering(Expression.Constant("ordering"), OrderingDirection.Desc);
            var setOperationCombinedStatement = SqlStatementModelObjectMother.CreateSetOperationCombinedStatement();
            var builder = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection  = constantExpression,
                DataInfo          = new StreamedSequenceInfo(typeof(Restaurant[]), constantExpression),
                WhereCondition    = whereCondition,
                GroupByExpression = groupExpression,
                TopExpression     = topExpression,
                SetOperationCombinedStatements = { setOperationCombinedStatement }
            };

            builder.Orderings.Add(ordering);
            var sqlStatement = builder.GetSqlStatement();

            _stageMock
            .Expect(mock => mock.ResolveSelectExpression(Arg.Is(constantExpression), Arg <SqlStatementBuilder> .Is.Anything, Arg.Is(_mappingResolutionContext)))
            .Return(constantExpression);
            _stageMock
            .Expect(mock => mock.ResolveWhereExpression(whereCondition, _mappingResolutionContext))
            .Return(whereCondition);
            _stageMock
            .Expect(mock => mock.ResolveGroupByExpression(groupExpression, _mappingResolutionContext))
            .Return(groupExpression);
            _stageMock
            .Expect(mock => mock.ResolveTopExpression(topExpression, _mappingResolutionContext))
            .Return(topExpression);
            _stageMock
            .Expect(mock => mock.ResolveOrderingExpression(ordering.Expression, _mappingResolutionContext))
            .Return(ordering.Expression);
            _stageMock
            .Expect(mock => mock.ResolveTableInfo(sqlStatement.SqlTables[0].TableInfo, _mappingResolutionContext))
            .Return((IResolvedTableInfo)sqlStatement.SqlTables[0].TableInfo);
            _stageMock
            .Expect(mock => mock.ResolveSqlStatement(setOperationCombinedStatement.SqlStatement, _mappingResolutionContext))
            .Return(setOperationCombinedStatement.SqlStatement);

            _stageMock.Replay();

            var resolvedSqlStatement = _visitor.ResolveSqlStatement(sqlStatement);

            _stageMock.VerifyAllExpectations();

            Assert.That(resolvedSqlStatement, Is.EqualTo(sqlStatement));
        }
        public void ResolveTableInfo()
        {
            var sqlStatement = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));
            var fakeResolvedSubStatementTableInfo = new ResolvedSubStatementTableInfo("c", sqlStatement);

            _resolverMock
            .Expect(mock => mock.ResolveTableInfo(_unresolvedTableInfo, _uniqueIdentifierGenerator))
            .Return(fakeResolvedSubStatementTableInfo);
            _resolverMock.Replay();

            var result = _stage.ResolveTableInfo(_sqlTable.TableInfo, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResolvedSubStatementTableInfo));
        }
        public void ApplyContext_ResolvedSubStatementTableInfo_SameTableInfo()
        {
            var subStatement          = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));
            var subStatementTableInfo = new ResolvedSubStatementTableInfo("c", subStatement);

            _stageMock
            .Expect(mock => mock.ApplySelectionContext(subStatement, SqlExpressionContext.ValueRequired, _mappingresolutionContext))
            .Return(subStatement);
            _stageMock.Replay();

            var result = SqlContextTableInfoVisitor.ApplyContext(subStatementTableInfo, SqlExpressionContext.ValueRequired, _stageMock, _mappingresolutionContext);

            Assert.That(result, Is.SameAs(subStatementTableInfo));
            _stageMock.VerifyAllExpectations();
        }
        public void GenerateSql_InnerJoinSemantics_NonFirstTable_SubstatementTableInfo()
        {
            var sqlStatement = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));
            var tableInfo    = new ResolvedSubStatementTableInfo("q0", sqlStatement);
            var sqlTable     = new SqlTable(tableInfo, JoinSemantics.Inner);

            _stageMock
            .Expect(mock => mock.GenerateTextForSqlStatement(_commandBuilder, sqlStatement))
            .WhenCalled(mi => ((ISqlCommandBuilder)mi.Arguments[0]).Append("[Table] AS [t]"));
            _stageMock.Replay();

            SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, isFirstTable: false);

            _stageMock.VerifyAllExpectations();
            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo(" CROSS APPLY ([Table] AS [t]) AS [q0]"));
        }
        public void ResolveSubStatementReferenceExpression_CreatesSqlGroupingSelectExpressionWithNamedExpressions()
        {
            var expression = new SqlGroupingSelectExpression(
                Expression.Constant("key"), Expression.Constant("element"), new[] { Expression.Constant("aggregation") });
            var tableInfo = new ResolvedSubStatementTableInfo("q0", SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)));
            var sqlTable  = SqlStatementModelObjectMother.CreateSqlTable(typeof(Cook));

            var exprectedResult = new SqlGroupingSelectExpression(
                new NamedExpression("key", Expression.Constant("key")),
                new NamedExpression("element", Expression.Constant("element")),
                new[] { new NamedExpression("a0", Expression.Constant("aggregation")) });

            var result = SubStatementReferenceResolver.ResolveSubStatementReferenceExpression(expression, tableInfo, sqlTable, _context);

            SqlExpressionTreeComparer.CheckAreEqualTrees(result, exprectedResult);
            Assert.That(_context.GetReferencedGroupSource(((SqlGroupingSelectExpression)result)), Is.SameAs(sqlTable));
        }
예제 #10
0
        public void VisitSqlSubStatementExpression()
        {
            var sqlStatement           = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));
            var subStatementExpression = new SqlSubStatementExpression(sqlStatement);

            _stageMock
            .Expect(
                mock =>
                mock.GenerateTextForSqlStatement(_commandBuilder, sqlStatement))
            .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("SELECT [t].[Name] FROM [Table] AS [t]"));
            _stageMock.Replay();

            SqlGeneratingExpressionVisitor.GenerateSql(subStatementExpression, _commandBuilder, _stageMock);

            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("(SELECT [t].[Name] FROM [Table] AS [t])"));
            _stageMock.VerifyAllExpectations();
        }
        public void VisitResolvedJoinedGroupingTableInfo()
        {
            var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook[])))
            {
                DataInfo = new StreamedSequenceInfo(typeof(IQueryable <Cook>), Expression.Constant(new Cook()))
            }.GetSqlStatement();
            var resolvedSubTableInfo = SqlStatementModelObjectMother.CreateResolvedJoinedGroupingTableInfo(sqlStatement);

            _stageMock
            .Expect(mock => mock.GenerateTextForSqlStatement(_commandBuilder, sqlStatement))
            .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("XXX"));
            _stageMock.Replay();

            _generator.VisitSubStatementTableInfo(resolvedSubTableInfo);

            _stageMock.VerifyAllExpectations();
            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("(XXX) AS [cook]"));
        }
        public void ApplyContext_TableInfo()
        {
            var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection = Expression.Constant(true),
                DataInfo         = new StreamedSequenceInfo(typeof(Cook[]), Expression.Constant(new Cook()))
            }.GetSqlStatement();
            var tableInfo = new ResolvedSubStatementTableInfo("c", sqlStatement);

            var result = _stage.ApplyContext(tableInfo, SqlExpressionContext.ValueRequired, _mappingResolutionContext);

            Assert.That(result, Is.Not.SameAs(tableInfo));
            Assert.That(((ResolvedSubStatementTableInfo)result).SqlStatement.SelectProjection, Is.TypeOf(typeof(SqlConvertedBooleanExpression)));
            Assert.That(
                ((ConstantExpression)((SqlConvertedBooleanExpression)((ResolvedSubStatementTableInfo)result).SqlStatement.SelectProjection).Expression).
                Value,
                Is.EqualTo(1));
        }
        public void ResolveSubStatementReferenceExpression_CreatesEntityReference_ForEntities()
        {
            var entityDefinitionExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));
            var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection = entityDefinitionExpression,
                DataInfo         = new StreamedSequenceInfo(typeof(Cook[]), Expression.Constant(new Cook()))
            }.GetSqlStatement();
            var tableInfo = new ResolvedSubStatementTableInfo("q0", sqlStatement);
            var sqlTable  = new SqlTable(tableInfo, JoinSemantics.Inner);

            var result = SubStatementReferenceResolver.ResolveSubStatementReferenceExpression(entityDefinitionExpression, tableInfo, sqlTable, _context);

            Assert.That(result, Is.TypeOf(typeof(SqlEntityReferenceExpression)));
            Assert.That(_context.GetSqlTableForEntityExpression((SqlEntityReferenceExpression)result), Is.SameAs(sqlTable));

            var expectedResult = entityDefinitionExpression.CreateReference("q0", tableInfo.SqlStatement.SelectProjection.Type);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
        public void ApplyContext_ResolvedJoinedGroupingTableInfo_NewTableInfo()
        {
            var subStatement = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));

            var joinedGroupingTableInfo = SqlStatementModelObjectMother.CreateResolvedJoinedGroupingTableInfo(subStatement);
            var returnedStatement       = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook));

            _stageMock
            .Expect(mock => mock.ApplySelectionContext(subStatement, SqlExpressionContext.ValueRequired, _mappingresolutionContext))
            .Return(returnedStatement);
            _stageMock.Replay();

            var result = (ResolvedJoinedGroupingTableInfo)SqlContextTableInfoVisitor.ApplyContext(joinedGroupingTableInfo, SqlExpressionContext.ValueRequired, _stageMock, _mappingresolutionContext);

            _stageMock.VerifyAllExpectations();
            Assert.That(result, Is.Not.SameAs(joinedGroupingTableInfo));
            Assert.That(result.GroupSourceTableAlias, Is.EqualTo(joinedGroupingTableInfo.GroupSourceTableAlias));
            Assert.That(result.AssociatedGroupingSelectExpression, Is.SameAs(joinedGroupingTableInfo.AssociatedGroupingSelectExpression));
            Assert.That(result.SqlStatement, Is.SameAs(returnedStatement));
            Assert.That(result.TableAlias, Is.EqualTo(joinedGroupingTableInfo.TableAlias));
        }
        public void ResolveSubStatementReferenceExpression_CreatesSqlGroupingReferenceExpression_ForSqlGroupingSelectExpression()
        {
            var groupingSelectExpression = new SqlGroupingSelectExpression(
                SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook), "key"),
                new NamedExpression("element", Expression.Constant(0)),
                new[] { new NamedExpression("a0", Expression.Constant(1)) });
            var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)))
            {
                SelectProjection = groupingSelectExpression,
                DataInfo         = new StreamedSequenceInfo(typeof(IGrouping <int, int>[]), Expression.Constant(null, typeof(IGrouping <int, int>)))
            }.GetSqlStatement();
            var tableInfo = new ResolvedSubStatementTableInfo("q0", sqlStatement);
            var sqlTable  = new SqlTable(tableInfo, JoinSemantics.Inner);

            var result = SubStatementReferenceResolver.ResolveSubStatementReferenceExpression(groupingSelectExpression, tableInfo, sqlTable, _context);

            Assert.That(result, Is.TypeOf(typeof(SqlGroupingSelectExpression)));

            var referencedKeyExpression         = ((SqlGroupingSelectExpression)result).KeyExpression;
            var expectedReferencedKeyExpression = new NamedExpression("key", new SqlEntityReferenceExpression(
                                                                          typeof(Cook),
                                                                          "q0",
                                                                          null,
                                                                          (SqlEntityExpression)groupingSelectExpression.KeyExpression));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedReferencedKeyExpression, referencedKeyExpression);

            var referencedElementExpression         = ((SqlGroupingSelectExpression)result).ElementExpression;
            var expectedReferencedElementExpression = new NamedExpression("element", new SqlColumnDefinitionExpression(typeof(int), "q0", "element", false));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedReferencedElementExpression, referencedElementExpression);

            Assert.That(((SqlGroupingSelectExpression)result).AggregationExpressions.Count, Is.EqualTo(1));
            var referencedAggregationExpression         = ((SqlGroupingSelectExpression)result).AggregationExpressions[0];
            var expectedReferencedAggregationExpression = new NamedExpression("a0", new SqlColumnDefinitionExpression(typeof(int), "q0", "a0", false));

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedReferencedAggregationExpression, referencedAggregationExpression);

            Assert.That(_context.GetReferencedGroupSource(((SqlGroupingSelectExpression)result)), Is.SameAs(sqlTable));
        }