/** * Test select with limit on lte SQLServer2008 * * @return void */ public function testSelectLimitOldServer() { $driver = $this->getMockBuilder('Cake\\Database\\Driver\\Sqlserver')->setMethods(['_connect', 'connection', '_version'])->setConstructorArgs([[]])->getMock(); $driver->expects($this->any())->method('_version')->will($this->returnValue(8)); $connection = $this->getMockBuilder('\\Cake\\Database\\Connection')->setMethods(['connect', 'driver'])->setConstructorArgs([['log' => false]])->getMock(); $connection->expects($this->any())->method('driver')->will($this->returnValue($driver)); $query = new \Cake\Database\Query($connection); $query->select(['id', 'title'])->from('articles')->limit(10); $expected = 'SELECT TOP 10 id, title FROM articles'; $this->assertEquals($expected, $query->sql()); $query = new \Cake\Database\Query($connection); $query->select(['id', 'title'])->from('articles')->offset(10); $expected = 'SELECT * FROM (SELECT id, title, (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS [_cake_page_rownum_] ' . 'FROM articles) _cake_paging_ ' . 'WHERE _cake_paging_._cake_page_rownum_ > 10'; $this->assertEquals($expected, $query->sql()); $query = new \Cake\Database\Query($connection); $query->select(['id', 'title'])->from('articles')->order(['id'])->offset(10); $expected = 'SELECT * FROM (SELECT id, title, (ROW_NUMBER() OVER (ORDER BY id)) AS [_cake_page_rownum_] ' . 'FROM articles) _cake_paging_ ' . 'WHERE _cake_paging_._cake_page_rownum_ > 10'; $this->assertEquals($expected, $query->sql()); $query = new \Cake\Database\Query($connection); $query->select(['id', 'title'])->from('articles')->order(['id'])->where(['title' => 'Something'])->limit(10)->offset(50); $expected = 'SELECT * FROM (SELECT id, title, (ROW_NUMBER() OVER (ORDER BY id)) AS [_cake_page_rownum_] ' . 'FROM articles WHERE title = :c0) _cake_paging_ ' . 'WHERE (_cake_paging_._cake_page_rownum_ > 50 AND _cake_paging_._cake_page_rownum_ <= 60)'; $this->assertEquals($expected, $query->sql()); }