public void Visit_AnyOtherExpression()
        {
            var visitor = new GroupAggregateSimplifier.SimplifyingVisitor(_resolvedJoinedGroupingTable, _associatedGroupingSelectExpression.ElementExpression);

            var input  = Expression.Constant(0);
            var result = visitor.Visit(input);

            Assert.That(visitor.CanBeTransferredToGroupingSource, Is.True);
            Assert.That(result, Is.SameAs(input));
        }
        public void Visit_ReferenceToOtherTable()
        {
            var visitor = new GroupAggregateSimplifier.SimplifyingVisitor(_resolvedJoinedGroupingTable, _associatedGroupingSelectExpression.ElementExpression);

            var input = new SqlTableReferenceExpression(SqlStatementModelObjectMother.CreateSqlTable());

            visitor.Visit(input);

            Assert.That(visitor.CanBeTransferredToGroupingSource, Is.False);
        }
        public void Visit_ReferenceToRightTable()
        {
            var visitor = new GroupAggregateSimplifier.SimplifyingVisitor(_resolvedJoinedGroupingTable, _associatedGroupingSelectExpression.ElementExpression);

            var input  = new SqlTableReferenceExpression(_resolvedJoinedGroupingTable);
            var result = visitor.Visit(input);

            Assert.That(visitor.CanBeTransferredToGroupingSource, Is.True);
            Assert.That(result, Is.SameAs(_associatedGroupingSelectExpression.ElementExpression));
        }
        public void Visit_ReferenceToRightTable_Nested()
        {
            var visitor = new GroupAggregateSimplifier.SimplifyingVisitor(_resolvedJoinedGroupingTable, _associatedGroupingSelectExpression.ElementExpression);

            var input = Expression.Equal(
                new SqlTableReferenceExpression(_resolvedJoinedGroupingTable),
                new SqlTableReferenceExpression(_resolvedJoinedGroupingTable));

            var result = visitor.Visit(input);

            Assert.That(visitor.CanBeTransferredToGroupingSource, Is.True);
            var expectedResult = Expression.ReferenceEqual(
                _associatedGroupingSelectExpression.ElementExpression,
                _associatedGroupingSelectExpression.ElementExpression);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }