Author: ts Date: Tue Nov 27 13:47:12 2007 New Revision: 6832 Log: - Fixed issue with SQLite prefixing of column names with table names in queries other than SELECT. # Related to issue #11129.
Modified: trunk/PersistentObject/src/persistent_session.php trunk/PersistentObject/tests/persistent_session_test.php Modified: trunk/PersistentObject/src/persistent_session.php ============================================================================== --- trunk/PersistentObject/src/persistent_session.php [iso-8859-1] (original) +++ trunk/PersistentObject/src/persistent_session.php [iso-8859-1] Tue Nov 27 13:47:12 2007 @@ -253,7 +253,7 @@ // init query $q = $this->database->createDeleteQuery(); - $q->setAliases( $this->generateAliasMap( $def ) ); + $q->setAliases( $this->generateAliasMap( $def, false ) ); $q->deleteFrom( $this->database->quoteIdentifier( $def->table ) ); return $q; @@ -304,7 +304,7 @@ // init query $q = $this->database->createUpdateQuery(); - $q->setAliases( $this->generateAliasMap( $def ) ); + $q->setAliases( $this->generateAliasMap( $def, false ) ); $q->update( $this->database->quoteIdentifier( $def->table ) ); return $q; @@ -1127,13 +1127,17 @@ * @param ezcPersistentObjectDefinition $def Definition. * @return array(string=>string) */ - public function generateAliasMap( ezcPersistentObjectDefinition $def ) + public function generateAliasMap( ezcPersistentObjectDefinition $def, $prefixTableName = true ) { $table = array(); - $table[$def->idProperty->propertyName] = $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $def->idProperty->columnName ); + $table[$def->idProperty->propertyName] = ( $prefixTableName + ? $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $def->idProperty->columnName ) + : $this->database->quoteIdentifier( $def->idProperty->columnName ) ); foreach ( $def->properties as $prop ) { - $table[$prop->propertyName] = $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $prop->columnName ); + $table[$prop->propertyName] = ( $prefixTableName + ? $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $prop->columnName ) + : $this->database->quoteIdentifier( $prop->columnName ) ); } $table[$def->class] = $def->table; return $table; @@ -1145,13 +1149,17 @@ * @param ezcPersistentObjectDefinition $def Defintion. * @return array(int=>string) */ - public function getColumnsFromDefinition( ezcPersistentObjectDefinition $def ) + public function getColumnsFromDefinition( ezcPersistentObjectDefinition $def, $prefixTableName = true ) { $columns = array(); - $columns[] = $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $def->idProperty->columnName ); + $columns[] = ( $prefixTableName + ? $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $def->idProperty->columnName ) + : $this->database->quoteIdentifier( $def->idProperty->columnName ) ); foreach ( $def->properties as $property ) { - $columns[] = $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $property->columnName ); + $columns[] = ( $prefixTableName + ? $this->database->quoteIdentifier( $def->table ) . '.' . $this->database->quoteIdentifier( $property->columnName ) + : $this->database->quoteIdentifier( $property->columnName ) ); } return $columns; } Modified: trunk/PersistentObject/tests/persistent_session_test.php ============================================================================== --- trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1] (original) +++ trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1] Tue Nov 27 13:47:12 2007 @@ -704,6 +704,53 @@ $this->assertEquals( $res, $def, "ezcPersistentObjectDefinition not deserialized correctly." ); } + + public function testTablePrefixingInFindQuery() + { + $q = $this->session->createFindQuery( 'PersistentTestObject' ); + $q->where( + $q->expr->eq( 'integer', $q->bindValue( 50 ) ) + ); + $sql = $q->getQuery(); + + $this->assertNotEquals( + false, + strpos( + $sql, + $this->session->database->quoteIdentifier( 'PO_test' ) . '.' . $this->session->database->quoteIdentifier( 'type_integer' ) + ) + ); + } + + public function testNoTablePrefixingInDeleteQuery() + { + $q = $this->session->createDeleteQuery( 'PersistentTestObject' ); + $q->where( + $q->expr->eq( 'integer', $q->bindValue( 50 ) ) + ); + $sql = $q->getQuery(); + + $this->assertFalse( + strpos( + $sql, + $this->session->database->quoteIdentifier( 'PO_test' ) . '.' . $this->session->database->quoteIdentifier( 'type_integer' ) + ) + ); + } + + public function testNoTablePrefixingInUpdateQuery() + { + $q = $this->session->createUpdateQuery( 'PersistentTestObject' ); + $q->set( 'integer', 50 ); + $sql = $q->getQuery(); + + $this->assertFalse( + strpos( + $sql, + $this->session->database->quoteIdentifier( 'PO_test' ) . '.' . $this->session->database->quoteIdentifier( 'type_integer' ) + ) + ); + } } ?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components