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