X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=vendor%2Fdoctrine%2Fdbal%2Ftests%2FDoctrine%2FTests%2FDBAL%2FFunctional%2FModifyLimitQueryTest.php;fp=vendor%2Fdoctrine%2Fdbal%2Ftests%2FDoctrine%2FTests%2FDBAL%2FFunctional%2FModifyLimitQueryTest.php;h=69ba6ac290a09ce9eca4dc12e9b2928a90a7231d;hb=8b04b2d11798dee4f3e1358e4f43e97a6df851f6;hp=0000000000000000000000000000000000000000;hpb=73568cf05a785a45f94ca3f2351d9e07bf917958;p=zf2.biz%2Fapplication_blanche.git diff --git a/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/ModifyLimitQueryTest.php b/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/ModifyLimitQueryTest.php new file mode 100644 index 0000000..69ba6ac --- /dev/null +++ b/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/ModifyLimitQueryTest.php @@ -0,0 +1,114 @@ +addColumn('test_int', 'integer'); + $table->setPrimaryKey(array('test_int')); + + $table2 = new \Doctrine\DBAL\Schema\Table("modify_limit_table2"); + $table2->addColumn('id', 'integer', array('autoincrement' => true)); + $table2->addColumn('test_int', 'integer'); + $table2->setPrimaryKey(array('id')); + + $sm = $this->_conn->getSchemaManager(); + $sm->createTable($table); + $sm->createTable($table2); + self::$tableCreated = true; + } + $this->_conn->exec($this->_conn->getDatabasePlatform()->getTruncateTableSQL('modify_limit_table')); + $this->_conn->exec($this->_conn->getDatabasePlatform()->getTruncateTableSQL('modify_limit_table2')); + } + + public function testModifyLimitQuerySimpleQuery() + { + $this->_conn->insert('modify_limit_table', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table', array('test_int' => 2)); + $this->_conn->insert('modify_limit_table', array('test_int' => 3)); + $this->_conn->insert('modify_limit_table', array('test_int' => 4)); + + $sql = "SELECT * FROM modify_limit_table"; + + $this->assertLimitResult(array(1, 2, 3, 4), $sql, 10, 0); + $this->assertLimitResult(array(1, 2), $sql, 2, 0); + $this->assertLimitResult(array(3, 4), $sql, 2, 2); + } + + public function testModifyLimitQueryJoinQuery() + { + $this->_conn->insert('modify_limit_table', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table', array('test_int' => 2)); + + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 2)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 2)); + + $sql = "SELECT modify_limit_table.test_int FROM modify_limit_table INNER JOIN modify_limit_table2 ON modify_limit_table.test_int = modify_limit_table2.test_int"; + + $this->assertLimitResult(array(1, 1, 1, 2, 2), $sql, 10, 0); + $this->assertLimitResult(array(1, 1, 1), $sql, 3, 0); + $this->assertLimitResult(array(2, 2), $sql, 2, 3); + } + + public function testModifyLimitQueryOrderBy() + { + $this->_conn->insert('modify_limit_table', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table', array('test_int' => 2)); + $this->_conn->insert('modify_limit_table', array('test_int' => 3)); + $this->_conn->insert('modify_limit_table', array('test_int' => 4)); + + $sql = "SELECT * FROM modify_limit_table ORDER BY test_int DESC"; + + $this->assertLimitResult(array(4, 3, 2, 1), $sql, 10, 0); + $this->assertLimitResult(array(4, 3), $sql, 2, 0); + $this->assertLimitResult(array(2, 1), $sql, 2, 2); + } + + public function testModifyLimitQueryGroupBy() + { + $this->_conn->insert('modify_limit_table', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table', array('test_int' => 2)); + + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 1)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 2)); + $this->_conn->insert('modify_limit_table2', array('test_int' => 2)); + + $sql = "SELECT modify_limit_table.test_int FROM modify_limit_table " . + "INNER JOIN modify_limit_table2 ON modify_limit_table.test_int = modify_limit_table2.test_int ". + "GROUP BY modify_limit_table.test_int"; + $this->assertLimitResult(array(1, 2), $sql, 10, 0); + $this->assertLimitResult(array(1), $sql, 1, 0); + $this->assertLimitResult(array(2), $sql, 1, 1); + } + + public function assertLimitResult($expectedResults, $sql, $limit, $offset) + { + $p = $this->_conn->getDatabasePlatform(); + $data = array(); + foreach ($this->_conn->fetchAll($p->modifyLimitQuery($sql, $limit, $offset)) AS $row) { + $row = array_change_key_case($row, CASE_LOWER); + $data[] = $row['test_int']; + } + $this->assertEquals($expectedResults, $data); + } +} \ No newline at end of file