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

Reply via email to