_db->quoteIdentifier('product_name'); $select = $this->_db->select() ->from('zfproducts') ->where($product_name . ' = ?', "as'as:x"); return $select; } public function testSelectGroupByExpr() { $this->markTestSkipped($this->getDriver() . ' does not support expressions in GROUP BY'); } public function testSelectGroupByAutoExpr() { $this->markTestSkipped($this->getDriver() . ' does not support expressions in GROUP BY'); } /** * Ensures that from() provides expected behavior using schema specification * * @return void */ public function testSelectFromSchemaSpecified() { $schema = 'public'; $table = 'zfbugs'; $sql = $this->_db->select()->from($table, '*', $schema); $this->assertRegExp("/FROM \"$schema\".\"$table\"/", $sql->__toString()); $rowset = $this->_db->fetchAll($sql); $this->assertEquals(4, count($rowset)); } /** * Ensures that from() provides expected behavior using schema in the table name * * @return void */ public function testSelectFromSchemaInName() { $schema = 'public'; $table = 'zfbugs'; $name = "$schema.$table"; $sql = $this->_db->select()->from($name); $this->assertRegExp("/FROM \"$schema\".\"$table\"/", $sql->__toString()); $rowset = $this->_db->fetchAll($sql); $this->assertEquals(4, count($rowset)); } /** * Ensures that from() overrides schema specification with schema in the table name * * @return void */ public function testSelectFromSchemaInNameOverridesSchemaArgument() { $schema = 'public'; $table = 'zfbugs'; $name = "$schema.$table"; $sql = $this->_db->select()->from($name, '*', 'ignored'); $this->assertRegExp("/FROM \"$schema\".\"$table\"/", $sql->__toString()); $rowset = $this->_db->fetchAll($sql); $this->assertEquals(4, count($rowset)); } public function testSqlInjectionWithOrder() { $select = $this->_db->select(); $select->from(array('p' => 'products'))->order('MD5(1);select'); $this->assertEquals('SELECT "p".* FROM "products" AS "p" ORDER BY "MD5(1);select" ASC', $select->assemble()); $select = $this->_db->select(); $select->from(array('p' => 'products'))->order('name;select;MD5(1)'); $this->assertEquals('SELECT "p".* FROM "products" AS "p" ORDER BY "name;select;MD5(1)" ASC', $select->assemble()); } /** * @group ZF-378 */ public function testOrderOfSingleFieldWithDirection() { $select = $this->_db->select(); $select->from(array ('p' => 'product')) ->order('productId DESC'); $expected = 'SELECT "p".* FROM "product" AS "p" ORDER BY "productId" DESC'; $this->assertEquals($expected, $select->assemble(), 'Order direction of field failed'); } /** * @group ZF-378 */ public function testOrderOfMultiFieldWithDirection() { $select = $this->_db->select(); $select->from(array ('p' => 'product')) ->order(array ('productId DESC', 'userId ASC')); $expected = 'SELECT "p".* FROM "product" AS "p" ORDER BY "productId" DESC, "userId" ASC'; $this->assertEquals($expected, $select->assemble(), 'Order direction of field failed'); } /** * @group ZF-378 */ public function testOrderOfMultiFieldButOnlyOneWithDirection() { $select = $this->_db->select(); $select->from(array ('p' => 'product')) ->order(array ('productId', 'userId DESC')); $expected = 'SELECT "p".* FROM "product" AS "p" ORDER BY "productId" ASC, "userId" DESC'; $this->assertEquals($expected, $select->assemble(), 'Order direction of field failed'); } /** * @group ZF-378 * @group ZF-381 */ public function testOrderOfConditionalFieldWithDirection($adapter) { $select = $this->_db->select(); $select->from(array ('p' => 'product')) ->order('IF("productId" > 5,1,0) ASC'); $expected = 'SELECT "p".* FROM "product" AS "p" ORDER BY IF("productId" > 5,1,0) ASC'; $this->assertEquals($expected, $select->assemble(), 'Order direction of field failed'); } }