public void HandleResultOperator_CreatesAndPreparesSubStatementWithNewProjection()
        {
            var resultOperator = new SkipResultOperator(Expression.Constant(0));

            _sqlStatementBuilder.Orderings.Add(_ordering);

            var expectedNewProjection = Expression.New(
                _tupleCtor,
                new Expression[] { _selectProjection, new SqlRowNumberExpression(new[] { _ordering }) },
                new MemberInfo[] { GetTupleMethod("get_Key"), GetTupleMethod("get_Value") });

            var fakePreparedProjection = GetFakePreparedProjection();

            _stageMock
            .Expect(mock => mock.PrepareSelectExpression(Arg <Expression> .Is.Anything, Arg.Is(_context)))
            .WhenCalled(mi => SqlExpressionTreeComparer.CheckAreEqualTrees(expectedNewProjection, (Expression)mi.Arguments[0]))
            .Return(fakePreparedProjection);
            _stageMock.Replay();

            _handler.HandleResultOperator(resultOperator, _sqlStatementBuilder, UniqueIdentifierGenerator, _stageMock, _context);

            _stageMock.VerifyAllExpectations();

            Assert.That(_sqlStatementBuilder.SqlTables.Count, Is.EqualTo(1));
            var sqlTable = _sqlStatementBuilder.SqlTables[0];

            Assert.That(sqlTable.TableInfo, Is.TypeOf(typeof(ResolvedSubStatementTableInfo)));
            Assert.That(sqlTable.JoinSemantics, Is.EqualTo(JoinSemantics.Inner));

            var subStatementTableInfo = ((ResolvedSubStatementTableInfo)sqlTable.TableInfo);

            Assert.That(subStatementTableInfo.SqlStatement.SelectProjection, Is.SameAs(fakePreparedProjection));
            Assert.That(subStatementTableInfo.TableAlias, Is.EqualTo("q0"));
        }