public void VisitQueryModel_ConstantExpressionCollection_VisitResultOperatorsIsCalled()
        {
            var handlerMock = MockRepository.GenerateStrictMock <IResultOperatorHandler>();
            var registry    = new ResultOperatorHandlerRegistry();

            registry.Register(typeof(TestChoiceResultOperator), handlerMock);
            var queryModelVisitor = new TestableSqlPreparationQueryModelVisitor(_context, _stageMock, _generator, registry);

            var constantExpression = Expression.Constant(new[] { "t1", "t2" });

            _queryModel.MainFromClause.FromExpression = constantExpression;
            var resultOperator = new TestChoiceResultOperator(false);

            _queryModel.ResultOperators.Add(resultOperator);
            var sqlStatementBuilder = queryModelVisitor.SqlStatementBuilder;

            handlerMock.Expect(
                mock =>
                mock.HandleResultOperator(
                    Arg <ResultOperatorBase> .Matches(o => o == resultOperator),
                    Arg <SqlStatementBuilder> .Matches(sb => sb == sqlStatementBuilder),
                    Arg <UniqueIdentifierGenerator> .Matches(g => g == _generator),
                    Arg <ISqlPreparationStage> .Matches(s => s == _stageMock),
                    Arg <ISqlPreparationContext> .Matches(c => c != _context)));
            handlerMock.Replay();

            queryModelVisitor.VisitQueryModel(_queryModel);

            handlerMock.VerifyAllExpectations();
        }
        public void VisitQueryModel_VisitsClauses_AndNamesSelectClause()
        {
            var fakeSelectProjection = Expression.Constant(0);

            _visitorPartialMock.Expect(mock => mock.VisitMainFromClause(_queryModel.MainFromClause, _queryModel));
            _visitorPartialMock
            .Expect(mock => mock.VisitSelectClause(_queryModel.SelectClause, _queryModel))
            .WhenCalled(mi => _visitorPartialMock.SqlStatementBuilder.SelectProjection = fakeSelectProjection);
            _visitorPartialMock.Replay();

            _visitorPartialMock.VisitQueryModel(_queryModel);

            _visitorPartialMock.VerifyAllExpectations();

            Assert.That(_visitorPartialMock.SqlStatementBuilder.SelectProjection, Is.TypeOf(typeof(NamedExpression)));
            Assert.That(((NamedExpression)_visitorPartialMock.SqlStatementBuilder.SelectProjection).Name, Is.Null);
            Assert.That(((NamedExpression)_visitorPartialMock.SqlStatementBuilder.SelectProjection).Expression, Is.SameAs(fakeSelectProjection));
        }
        public void VisitQueryModel_ConstantExpression_Collection()
        {
            var constantExpression = Expression.Constant(new[] { "t1", "t2" });

            _queryModel.MainFromClause.FromExpression = constantExpression;

            _visitor.VisitQueryModel(_queryModel);

            Assert.That(_visitor.SqlStatementBuilder.SelectProjection, Is.TypeOf(typeof(NamedExpression)));
            Assert.That(((NamedExpression)_visitor.SqlStatementBuilder.SelectProjection).Expression, Is.TypeOf(typeof(ConstantExpression)));

            var constantExpressionInSelectProjection = ((ConstantExpression)((NamedExpression)_visitor.SqlStatementBuilder.SelectProjection).Expression);

            Assert.That(constantExpressionInSelectProjection.Value, Is.EqualTo(constantExpression.Value));
            Assert.That(_visitor.SqlStatementBuilder.SqlTables.Count, Is.EqualTo(0));

            var expectedDataInfo = _queryModel.SelectClause.GetOutputDataInfo();

            Assert.That(((StreamedSequenceInfo)_visitor.SqlStatementBuilder.DataInfo).ItemExpression, Is.SameAs(expectedDataInfo.ItemExpression));
        }
    public void VisitQueryModel_ConstantExpressionCollection_VisitResultOperatorsIsCalled ()
    {
      var handlerMock = MockRepository.GenerateStrictMock<IResultOperatorHandler>();
      var registry = new ResultOperatorHandlerRegistry();
      registry.Register (typeof (TestChoiceResultOperator), handlerMock);
      var queryModelVisitor = new TestableSqlPreparationQueryModelVisitor (_context, _stageMock, _generator, registry);

      var constantExpression = Expression.Constant (new[] { "t1", "t2" });
      _queryModel.MainFromClause.FromExpression = constantExpression;
      var resultOperator = new TestChoiceResultOperator (false);
      _queryModel.ResultOperators.Add (resultOperator);
      var sqlStatementBuilder = queryModelVisitor.SqlStatementBuilder;

      handlerMock.Expect (
          mock =>
          mock.HandleResultOperator (
              Arg<ResultOperatorBase>.Matches (o => o == resultOperator),
              Arg<SqlStatementBuilder>.Matches (sb => sb == sqlStatementBuilder),
              Arg<UniqueIdentifierGenerator>.Matches (g => g == _generator),
              Arg<ISqlPreparationStage>.Matches (s => s == _stageMock),
              Arg<ISqlPreparationContext>.Matches (c => c != _context)));
      handlerMock.Replay();

      queryModelVisitor.VisitQueryModel (_queryModel);

      handlerMock.VerifyAllExpectations();
    }