Changeset 1896
- Timestamp:
- 10/23/08 19:37:46 (3 months ago)
- Files:
-
- framework/trunk/src/main/php/net/stubbles/rdbms/persistence/serializer/stubDatabaseSerializer.php (modified) (3 diffs)
- framework/trunk/src/main/php/net/stubbles/rdbms/persistence/stubPersistenceHelper.php (modified) (2 diffs)
- framework/trunk/src/main/php/net/stubbles/rdbms/persistence/stubSetterMethodHelper.php (modified) (4 diffs)
- framework/trunk/src/test/php/net/stubbles/rdbms/persistence/MockSinglePrimaryKeyEntity.php (modified) (3 diffs)
- framework/trunk/src/test/php/net/stubbles/rdbms/persistence/creator/stubDatabaseCreatorTestCase.php (modified) (2 diffs)
- framework/trunk/src/test/php/net/stubbles/rdbms/persistence/serializer/stubDatabaseSerializerTestCase.php (modified) (7 diffs)
- framework/trunk/src/test/php/net/stubbles/rdbms/persistence/stubSetterMethodHelperTestCase.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
framework/trunk/src/main/php/net/stubbles/rdbms/persistence/serializer/stubDatabaseSerializer.php
r1763 r1896 7 7 * @subpackage rdbms_persistence_serializer 8 8 */ 9 stubClassLoader::load('net::stubbles::rdbms::stubDatabaseConnection', 9 stubClassLoader::load('net::stubbles::lang::types::stubDate', 10 'net::stubbles::rdbms::stubDatabaseConnection', 10 11 'net::stubbles::rdbms::criteria::stubEqualCriterion', 11 12 'net::stubbles::rdbms::persistence::stubPersistenceHelper', … … 213 214 } catch (ReflectionException $re) { 214 215 throw new stubDatabaseSerializerException('Can not get return value of ' . $entityClass->getFullQualifiedClassName() . '::' . $method->getName() . '(), invocation failed.', $re); 216 } 217 218 if ($value instanceof stubDate) { 219 $value = $value->format('Y-m-d H:i:s'); 215 220 } 216 221 … … 264 269 // fill default values into entity and table row 265 270 foreach ($defaultValues as $defaultValue) { 266 $defaultValue['setterMethod']->invokeArgs($entity, array($defaultValue['defaultValue'])); 271 // only reset entity with default value if default value is not null 272 if (null !== $defaultValue['defaultValue']) { 273 $defaultValue['setterMethod']->invokeArgs($entity, array($defaultValue['defaultValue'])); 274 } 275 267 276 $tableRow->setColumn($defaultValue['column'], $defaultValue['defaultValue']); 268 277 } framework/trunk/src/main/php/net/stubbles/rdbms/persistence/stubPersistenceHelper.php
r1763 r1896 77 77 return null; 78 78 } else { 79 $column = new stubDatabaseTableColumn();79 $column = new stubDatabaseTableColumn(); 80 80 $column->setName($this->getPropertyName($method->getName())); 81 81 $returnType = $method->getReturnType(); … … 86 86 87 87 if ($returnType instanceof stubReflectionClass) { 88 // not supported yet 89 throw new stubPersistenceException('Returning classes from entity getter methods is currently not supported. Sorry. :('); 90 } 91 92 switch ($returnType->value()) { 93 case 'int': 94 $column->setType('INT'); 95 $column->setSize(10); 96 break; 88 if ($returnType->getName() !== 'stubDate') { 89 // not supported yet 90 throw new stubPersistenceException('Returning classes from entity getter methods is currently not supported, except for net::stubbles::lang::types::stubDate. Sorry. :('); 91 } 97 92 98 case 'float': 99 $column->setType('FLOAT'); 100 $column->setSize(10); 101 break; 102 103 case 'bool': 104 $column->setType('TINYINT'); 105 $column->setSize(1); 106 break; 107 108 default: 109 $column->setType('VARCHAR'); 110 $column->setSize(255); 93 $column->setType('DATETIME'); 94 } else { 95 switch ($returnType->value()) { 96 case 'int': 97 $column->setType('INT'); 98 $column->setSize(10); 99 break; 100 101 case 'float': 102 $column->setType('FLOAT'); 103 $column->setSize(10); 104 break; 105 106 case 'bool': 107 $column->setType('TINYINT'); 108 $column->setSize(1); 109 break; 110 111 default: 112 $column->setType('VARCHAR'); 113 $column->setSize(255); 114 } 111 115 } 112 116 } framework/trunk/src/main/php/net/stubbles/rdbms/persistence/stubSetterMethodHelper.php
r1763 r1896 7 7 * @subpackage rdbms_persistence 8 8 */ 9 stubClassLoader::load('net::stubbles::rdbms::querybuilder::stubDatabaseTableColumn', 9 stubClassLoader::load('net::stubbles::lang::types::stubDate', 10 'net::stubbles::rdbms::querybuilder::stubDatabaseTableColumn', 10 11 'net::stubbles::rdbms::persistence::stubPersistenceException', 11 12 'net::stubbles::reflection::reflection' … … 28 29 * list of setter methods 29 30 * 30 * @var array<string, ReflectionMethod>31 * @var array<string,array<string,mixed>> 31 32 */ 32 33 protected $setterMethods = array(); … … 51 52 public function addSetterMethod(stubDatabaseTableColumn $dbColumn, $getterMethodName) 52 53 { 53 $this->setterMethods[$dbColumn->getName()] = self::create($dbColumn, $this->refBaseClass, $getterMethodName); 54 $this->setterMethods[$dbColumn->getName()] = array('setterMethod' => self::create($dbColumn, $this->refBaseClass, $getterMethodName), 55 'type' => $dbColumn->getType() 56 ); 54 57 } 55 58 … … 68 71 } 69 72 70 foreach ($this->setterMethods as $columnName => $ setterMethod) {73 foreach ($this->setterMethods as $columnName => $info) { 71 74 if (isset($data[$columnName]) == false) { 72 75 continue; 73 76 } 74 77 75 $setterMethod->invoke($entity, $data[$columnName]); 78 if ('DATETIME' === $info['type']) { 79 $data[$columnName] = new stubDate($data[$columnName]); 80 } 81 82 $info['setterMethod']->invoke($entity, $data[$columnName]); 76 83 } 77 84 } framework/trunk/src/test/php/net/stubbles/rdbms/persistence/MockSinglePrimaryKeyEntity.php
r1763 r1896 6 6 * @subpackage rdbms_persistence_test 7 7 */ 8 stubClassLoader::load('net::stubbles::lang::types::stubDate'); 8 9 /** 9 10 * This is a mocked entity that has some annotations. … … 34 35 */ 35 36 protected $id; 37 /** 38 * a date instance 39 * 40 * @var stubDate 41 */ 42 protected $date; 36 43 37 44 /** … … 101 108 return $this->defaultValue; 102 109 } 110 111 /** 112 * sets the date instance 113 * 114 * @param stubDate $date 115 */ 116 public function setDate(stubDate $date) 117 { 118 $this->date = $date; 119 } 120 121 /** 122 * method that returns a date instance 123 * 124 * @return stubDate 125 * @DBColumn(name='date', type='DATETIME', setterMethod='setDate') 126 */ 127 public function withDate() 128 { 129 return $this->date; 130 } 103 131 } 104 132 ?> framework/trunk/src/test/php/net/stubbles/rdbms/persistence/creator/stubDatabaseCreatorTestCase.php
r1763 r1896 167 167 $this->assertEquals($tableDescription->getName(), 'foo'); 168 168 $columns = $tableDescription->getColumns(); 169 $this->assertEquals( 3, count($columns));169 $this->assertEquals(4, count($columns)); 170 170 $this->assertEquals('id', $columns[1]->getName()); 171 171 $this->assertTrue($columns[1]->isPrimaryKey()); … … 174 174 $this->assertEquals('default', $columns[3]->getName()); 175 175 $this->assertFalse($columns[3]->isPrimaryKey()); 176 $this->assertEquals('date', $columns[4]->getName()); 177 $this->assertEquals('DATETIME', $columns[4]->getType()); 178 $this->assertFalse($columns[3]->isPrimaryKey()); 176 179 } 177 180 } framework/trunk/src/test/php/net/stubbles/rdbms/persistence/serializer/stubDatabaseSerializerTestCase.php
r1763 r1896 190 190 $this->assertTrue(isset($tableRows['foo'])); 191 191 $this->assertEquals('mockId', $singlePrimaryKeyEntity->getId()); 192 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'example' ), $tableRows['foo']->getColumns());192 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'example', 'date' => null), $tableRows['foo']->getColumns()); 193 193 $this->assertFalse($tableRows['foo']->hasCriterion()); 194 194 } … … 213 213 $this->assertTrue(isset($tableRows['foo'])); 214 214 $this->assertEquals('mockId', $singlePrimaryKeyEntity->getId()); 215 $this->assertEquals(array('id' => 'mockId', 'bar' => 'this is bar', 'default' => 'example' ), $tableRows['foo']->getColumns());215 $this->assertEquals(array('id' => 'mockId', 'bar' => 'this is bar', 'default' => 'example', 'date' => null), $tableRows['foo']->getColumns()); 216 216 $this->assertFalse($tableRows['foo']->hasCriterion()); 217 217 } … … 227 227 $singlePrimaryKeyEntity->setId('mockId'); 228 228 $singlePrimaryKeyEntity->setDefaultValue('anotherExample'); 229 $singlePrimaryKeyEntity->setDate(new stubDate('2008-10-23 19:27:22')); 229 230 $this->mockConnection->expects($this->never())->method('getLastInsertId'); 230 231 $this->mockConnection->expects($this->once())->method('exec'); … … 237 238 $this->assertTrue(isset($tableRows['foo'])); 238 239 $this->assertEquals('mockId', $singlePrimaryKeyEntity->getId()); 239 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'anotherExample' ), $tableRows['foo']->getColumns());240 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'anotherExample', 'date' => '2008-10-23 19:27:22'), $tableRows['foo']->getColumns()); 240 241 $this->assertTrue($tableRows['foo']->hasCriterion()); 241 242 $this->assertEquals("(`foo`.`id` = 'mockId')", $tableRows['foo']->getCriterion()->toSQL()); … … 260 261 $this->assertTrue(isset($tableRows['foo'])); 261 262 $this->assertEquals('mockId', $singlePrimaryKeyEntity->getId()); 262 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'example' ), $tableRows['foo']->getColumns());263 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'example', 'date' => null), $tableRows['foo']->getColumns()); 263 264 $this->assertFalse($tableRows['foo']->hasCriterion()); 264 265 } … … 274 275 $singlePrimaryKeyEntity->setId('mockId'); 275 276 $singlePrimaryKeyEntity->setDefaultValue('anotherExample'); 277 $singlePrimaryKeyEntity->setDate(new stubDate('2008-10-23 19:27:22')); 276 278 $this->mockConnection->expects($this->never())->method('getLastInsertId'); 277 279 $this->mockConnection->expects($this->once())->method('exec'); … … 284 286 $this->assertTrue(isset($tableRows['foo'])); 285 287 $this->assertEquals('mockId', $singlePrimaryKeyEntity->getId()); 286 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'anotherExample' ), $tableRows['foo']->getColumns());288 $this->assertEquals(array('bar' => 'this is bar', 'default' => 'anotherExample', 'date' => '2008-10-23 19:27:22'), $tableRows['foo']->getColumns()); 287 289 $this->assertTrue($tableRows['foo']->hasCriterion()); 288 290 $this->assertEquals("(`foo`.`id` = 'mockId')", $tableRows['foo']->getCriterion()->toSQL()); framework/trunk/src/test/php/net/stubbles/rdbms/persistence/stubSetterMethodHelperTestCase.php
r1763 r1896 51 51 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'withDefaultValue'); 52 52 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 53 $this->setterMethodHelper->applySetterMethods($entity, array('id' => 909, 'default' => 'foo', 'ignored' => 'ignored')); 53 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'withDate'); 54 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 55 $this->setterMethodHelper->applySetterMethods($entity, array('id' => 909, 'default' => 'foo', 'ignored' => 'ignored', 'date' => null)); 54 56 $this->assertEquals(909, $entity->getId()); 55 57 $this->assertEquals('this is bar', $entity->withAnnotation()); 56 58 $this->assertEquals('foo', $entity->withDefaultValue()); 59 $this->assertNull($entity->withDate()); 60 } 61 62 /** 63 * test that the setter methods are applied as expected 64 * 65 * @test 66 */ 67 public function setterMethodsWithDate() 68 { 69 $entity = new MockSinglePrimaryKeyEntity(); 70 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'getId'); 71 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 72 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'withAnnotation'); 73 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 74 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'withDefaultValue'); 75 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 76 $refMethod = new stubReflectionMethod('MockSinglePrimaryKeyEntity', 'withDate'); 77 $this->setterMethodHelper->addSetterMethod($refMethod->getAnnotation('DBColumn')->getTableColumn(), $refMethod->getName()); 78 $this->setterMethodHelper->applySetterMethods($entity, array('id' => 909, 'default' => 'foo', 'ignored' => 'ignored', 'date' => '2008-10-23 19:18:09')); 79 $this->assertEquals(909, $entity->getId()); 80 $this->assertEquals('this is bar', $entity->withAnnotation()); 81 $this->assertEquals('foo', $entity->withDefaultValue()); 82 $this->assertEquals('2008-10-23 19:18:09', $entity->withDate()->format('Y-m-d H:i:s')); 57 83 } 58 84
