Author: Frederik Holljen
Date: 2007-02-02 10:43:11 +0100 (Fri, 02 Feb 2007)
New Revision: 4621

Log:
- Fixed issue #010153: Persistent Object and manual generator (negative and 
  0 primary keys

Added:
   
trunk/PersistentObject/tests/data/persistent_test_object_no_auto_increment.dba
Modified:
   trunk/PersistentObject/ChangeLog
   trunk/PersistentObject/src/persistent_session.php
   trunk/PersistentObject/tests/data/persistent_test_object.php
   trunk/PersistentObject/tests/manual_generator_test.php

Modified: trunk/PersistentObject/ChangeLog
===================================================================
--- trunk/PersistentObject/ChangeLog    2007-02-02 09:14:32 UTC (rev 4620)
+++ trunk/PersistentObject/ChangeLog    2007-02-02 09:43:11 UTC (rev 4621)
@@ -5,7 +5,10 @@
   error messages.
 - Fixed testcase for manual generator giving failure for postgresql on correct
   behaviour (INSERT violating NULL contraint does give an error...)
-
+- Fixed issue #010153: Persistent Object and manual generator (negative and 
+  0 primary keys)
+       
+       
 1.2 - Monday 18 December 2006
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

Modified: trunk/PersistentObject/src/persistent_session.php
===================================================================
--- trunk/PersistentObject/src/persistent_session.php   2007-02-02 09:14:32 UTC 
(rev 4620)
+++ trunk/PersistentObject/src/persistent_session.php   2007-02-02 09:43:11 UTC 
(rev 4621)
@@ -973,7 +973,7 @@
         $idValue = $state[$def->idProperty->propertyName];
 
         // check that this object is stored to db already
-        if (  $idValue < 1 )
+        if (  $idValue === null )
         {
             throw new ezcPersistentObjectNotPersistentException( get_class( 
$pObject ) );
         }

Modified: trunk/PersistentObject/tests/data/persistent_test_object.php
===================================================================
--- trunk/PersistentObject/tests/data/persistent_test_object.php        
2007-02-02 09:14:32 UTC (rev 4620)
+++ trunk/PersistentObject/tests/data/persistent_test_object.php        
2007-02-02 09:43:11 UTC (rev 4621)
@@ -62,12 +62,21 @@
 
     /**
      * Loads the schema from file into the database.
+     *
+     * If autoIncrement is set to false a schema with the id field not set to 
autoincrement is used.
      */
-    public static function setupTable()
+    public static function setupTable( $autoIncrement = true )
     {
         $db = ezcDbInstance::get();
         // Load schema
-        $schema = ezcDbSchema::createFromFile( 'array', dirname( __FILE__ ) . 
'/persistent_test_object.dba' );
+        if( $autoIncrement == true )
+        {
+            $schema = ezcDbSchema::createFromFile( 'array', dirname( __FILE__ 
) . '/persistent_test_object.dba' );
+        }
+        else
+        {
+            $schema = ezcDbSchema::createFromFile( 'array', dirname( __FILE__ 
) . '/persistent_test_object_no_auto_increment.dba' );
+        }
         $schema->writeToDb( $db );
 
         // create sequence if it is a postgres database

Added: 
trunk/PersistentObject/tests/data/persistent_test_object_no_auto_increment.dba
===================================================================
--- 
trunk/PersistentObject/tests/data/persistent_test_object_no_auto_increment.dba  
    2007-02-02 09:14:32 UTC (rev 4620)
+++ 
trunk/PersistentObject/tests/data/persistent_test_object_no_auto_increment.dba  
    2007-02-02 09:43:11 UTC (rev 4621)
@@ -0,0 +1,75 @@
+<?php
+require_once 'PHPUnit/Util/Filter.php';
+PHPUnit_Util_Filter::addFileToFilter(__FILE__);
+
+return array (
+       0 => array(
+               'PO_test' => 
+               ezcDbSchemaTable::__set_state(array(
+                       'fields' => 
+                       array (
+                               'id' => 
+                               ezcDbSchemaField::__set_state(array(
+                                       'type' => 'integer',
+                                       'length' => 10,
+                                       'notNull' => true,
+                                       'default' => 0,
+                                       'autoIncrement' => false,
+                                       'unsigned' => false,
+                               )),
+                               'type_varchar' => 
+                               ezcDbSchemaField::__set_state(array(
+                                       'type' => 'text',
+                                       'length' => 20,
+                                       'notNull' => false,
+                                       'default' => NULL,
+                                       'autoIncrement' => false,
+                                       'unsigned' => false,
+                               )),
+                               'type_integer' => 
+                               ezcDbSchemaField::__set_state(array(
+                                       'type' => 'integer',
+                                       'length' => 11,
+                                       'notNull' => false,
+                                       'default' => NULL,
+                                       'autoIncrement' => false,
+                                       'unsigned' => false,
+                               )),
+                               'type_decimal' => 
+                               ezcDbSchemaField::__set_state(array(
+                                       'type' => 'float',
+                                       'length' => 10,
+                                       'notNull' => false,
+                                       'default' => NULL,
+                                       'autoIncrement' => false,
+                                       'unsigned' => false,
+                               )),
+                               'type_text' => 
+                               ezcDbSchemaField::__set_state(array(
+                                       'type' => 'text',
+                                       'length' => 0,
+                                       'notNull' => false,
+                                       'default' => NULL,
+                                       'autoIncrement' => false,
+                                       'unsigned' => false,
+                               )),
+                       ),
+                       'indexes' => array (
+                               0 => 
+                               ezcDbSchemaIndex::__set_state(array (
+                                       'indexFields' => array (
+                                               'id' => 
ezcDbSchemaIndexField::__set_state(array(
+                                                       'sorting' => NULL,
+                                               )),
+                                       ),
+                                       'primary' => true,
+                                       'unique'  => false,
+                                       )
+                               )
+                       ),
+               )),
+       ),
+       1 => array(),
+);
+
+?>

Modified: trunk/PersistentObject/tests/manual_generator_test.php
===================================================================
--- trunk/PersistentObject/tests/manual_generator_test.php      2007-02-02 
09:14:32 UTC (rev 4620)
+++ trunk/PersistentObject/tests/manual_generator_test.php      2007-02-02 
09:43:11 UTC (rev 4621)
@@ -33,7 +33,7 @@
             $this->markTestSkipped( 'There was no database configured' );
         }
 
-        PersistentTestObject::setupTable();
+        PersistentTestObject::setupTable( false ); /* No auto increment */
         PersistentTestObject::insertCleanData();
 //        PersistentTestObject::saveSqlSchemas();
         $this->session = new ezcPersistentSession( ezcDbInstance::get(),
@@ -84,7 +84,6 @@
         $this->assertEquals( 42, (int)$object2->integer );
         $this->assertEquals( 1.42, (float)$object2->decimal );
         $this->assertEquals( 'Finland has Nokia!', $object2->text );
-
     }
 
     // test save already stored
@@ -103,6 +102,85 @@
         $this->fail( "Did not get exception when saving object twice.." );
     }
 
+    public function testSaveZeroIdentifier()
+    {
+        $object = new ManualGeneratorTest();
+        $object->id = 0;
+        $object->varchar = 'Finland';
+        $object->integer = 42;
+        $object->decimal = 1.42;
+        $object->text = "Finland has Nokia!";
+        $this->session->save( $object );
+        $this->assertEquals( 0, $object->id );
+
+        $object2 = new ManualGeneratorTest();
+        $this->session->loadIntoObject( $object2, 0 );
+        $this->assertEquals( 'Finland', $object2->varchar );
+        $this->assertEquals( 42, (int)$object2->integer );
+        $this->assertEquals( 1.42, (float)$object2->decimal );
+        $this->assertEquals( 'Finland has Nokia!', $object2->text );
+    }
+
+    public function testUpdateZeroIdentifier()
+    {
+        $object = new ManualGeneratorTest();
+        $object->id = 0;
+        $object->varchar = 'Finland';
+        $object->integer = 42;
+        $object->decimal = 1.42;
+        $object->text = "Finland has Nokia!";
+        $this->session->save( $object );
+
+        $object2 = $this->session->loadIfExists( 'PersistentTestObject', 0 );
+        $object2->integer = 99; // gretzky the greatest.
+        $this->session->update( $object2 );
+
+        $object3 = $this->session->loadIfExists( 'PersistentTestObject', 0 );
+        $this->assertEquals( 'Finland', $object3->varchar );
+        $this->assertEquals( 99, (int)$object3->integer );
+        $this->assertEquals( 1.42, (float)$object3->decimal );
+        $this->assertEquals( 'Finland has Nokia!', $object3->text );
+    }
+
+    public function testSaveNegativeIdentifier()
+    {
+        $object = new ManualGeneratorTest();
+        $object->id = -1;
+        $object->varchar = 'Finland';
+        $object->integer = 42;
+        $object->decimal = 1.42;
+        $object->text = "Finland has Nokia!";
+        $this->session->save( $object );
+
+        $this->assertEquals( -1, $object->id );
+        $object2 = $this->session->loadIfExists( 'PersistentTestObject', -1 );
+        $this->assertEquals( 'Finland', $object2->varchar );
+        $this->assertEquals( 42, (int)$object2->integer );
+        $this->assertEquals( 1.42, (float)$object2->decimal );
+        $this->assertEquals( 'Finland has Nokia!', $object2->text );
+    }
+
+    public function testUpdateNegativeIdentifier()
+    {
+        $object = new ManualGeneratorTest();
+        $object->id = -1;
+        $object->varchar = 'Finland';
+        $object->integer = 42;
+        $object->decimal = 1.42;
+        $object->text = "Finland has Nokia!";
+        $this->session->save( $object );
+
+        $object2 = $this->session->loadIfExists( 'PersistentTestObject', -1 );
+        $object2->integer = 99; // gretzky the greatest.
+        $this->session->update( $object2 );
+
+        $object3 = $this->session->loadIfExists( 'PersistentTestObject', -1 );
+        $this->assertEquals( 'Finland', $object3->varchar );
+        $this->assertEquals( 99, (int)$object3->integer );
+        $this->assertEquals( 1.42, (float)$object3->decimal );
+        $this->assertEquals( 'Finland has Nokia!', $object3->text );
+    }
+
     // test struct
     public function testGeneratorDefinitionStruct()
     {

-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to