Changeset 1063
- Timestamp:
- 11/22/07 22:28:59 (11 months ago)
- Files:
-
- trunk/src/main/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinder.php (modified) (3 diffs)
- trunk/src/main/php/net/stubbles/rdbms/persistence/stubDefaultEntityManager.php (modified) (1 diff)
- trunk/src/main/php/net/stubbles/rdbms/persistence/stubEntityManager.php (modified) (1 diff)
- trunk/src/test/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinderTestCase.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinder.php
r951 r1063 95 95 96 96 $setterMethodHelper = new stubSetterMethodHelper($entityClass); 97 $select = $this->createSelect($entityClass, $setterMethodHelper, $primaryKeys); 98 try { 99 $result = $this->connection->query(stubDatabaseQueryBuilderFactory::create($this->connection)->createSelect($select)); 100 $data = $result->fetch(); 101 $result->free(); 102 } catch (stubException $se) { 103 throw new stubDatabaseFinderException('Can not find instance of ' . $entityClass->getFullQualifiedClassName() . ' by its primary keys.', $se); 104 } 105 106 if (false === $data) { 97 $data = $this->fetchData($entityClass, $setterMethodHelper, null, $primaryKeys); 98 if (count($data) === 0) { 107 99 return null; 108 100 } … … 130 122 131 123 $setterMethodHelper = new stubSetterMethodHelper($entityClass); 132 $select = $this->createSelect($entityClass, $setterMethodHelper); 133 $select->addCriterion($criterion); 124 $data = $this->fetchData($entityClass, $setterMethodHelper, $criterion); 125 $finderResult = new stubDatabaseFinderResult($entityClass, $data, $setterMethodHelper, $arguments); 126 return $finderResult; 127 } 128 129 /** 130 * finds all instances of $entityClass 131 * 132 * @param string $entityClass entity class to find instances of 133 * @param array $arguments optional arguments for constructor 134 * @return stubDatabaseFinderResult list of instances of $entityClass found 135 * @throws stubDatabaseFinderException 136 * @throws stubPersistenceException 137 */ 138 public function findAll(stubBaseReflectionClass $entityClass, array $arguments = null) 139 { 140 if ($entityClass->hasAnnotation('Entity') === false) { 141 throw new stubPersistenceException('Class ' . $entityClass->getFullQualifiedClassName() . ' is not an entity.'); 142 } 143 144 $setterMethodHelper = new stubSetterMethodHelper($entityClass); 145 $data = $this->fetchData($entityClass, $setterMethodHelper); 146 $finderResult = new stubDatabaseFinderResult($entityClass, $data, $setterMethodHelper, $arguments); 147 return $finderResult; 148 } 149 150 /** 151 * helper method to retrieve the data for a given select instance 152 * 153 * @param stubDatabaseSelect $select 154 * @param stubBaseReflectionClass $entityClass 155 * @return array 156 */ 157 protected function fetchData(stubBaseReflectionClass $entityClass, stubSetterMethodHelper $setterMethodHelper, stubCriterion $criterion = null, array $primaryKeys = null) 158 { 159 $select = $this->createSelect($entityClass, $setterMethodHelper, ((null === $primaryKeys) ? (array()) : ($primaryKeys))); 160 if (null !== $criterion) { 161 $select->addCriterion($criterion); 162 } 163 134 164 try { 135 165 $result = $this->connection->query(stubDatabaseQueryBuilderFactory::create($this->connection)->createSelect($select)); 136 $data = $result->fetchAll(); 166 if (null !== $primaryKeys) { 167 $data = $result->fetch(); 168 } else { 169 $data = $result->fetchAll(); 170 } 171 137 172 $result->free(); 138 173 } catch (stubDatabaseException $se) { 139 throw new stubDatabaseFinderException('Can not find any instance of ' . $entityClass->getFullQualifiedClassName() . ' by criterion ' . $criterion, $se); 140 } 174 $exceptionInfo = null; 175 if (null !== $criterion) { 176 $exceptionInfo = ' by criterion ' . $criterion; 177 } elseif (null !== $primaryKeys) { 178 $exceptionInfo = ' by its primary keys.'; 179 } 180 181 throw new stubDatabaseFinderException('Can not find any instance of ' . $entityClass->getFullQualifiedClassName() . $exceptionInfo, $se); 182 } 141 183 142 184 if (false === $data) { 143 $data = array(); 144 } 145 146 $finderResult = new stubDatabaseFinderResult($entityClass, $data, $setterMethodHelper, $arguments); 147 return $finderResult; 185 return array(); 186 } 187 188 return $data; 148 189 } 149 190 … … 158 199 protected function createSelect(stubBaseReflectionClass $entityClass, stubSetterMethodHelper $setterMethodHelper, array $primaryKeys = array()) 159 200 { 160 161 201 $select = new stubDatabaseSelect($this->getTableDescription($entityClass)); 162 202 $methods = $entityClass->getMethods(); trunk/src/main/php/net/stubbles/rdbms/persistence/stubDefaultEntityManager.php
r1056 r1063 69 69 70 70 /** 71 * finds all instances of $entityClass 72 * 73 * @param string $entityClass entity class to find instances of 74 * @param array $arguments optional arguments for constructor 75 * @return stubDatabaseFinderResult list of instances of $entityClass found 76 * @throws stubDatabaseFinderException 77 * @throws stubPersistenceException 78 */ 79 public function findAll(stubBaseReflectionClass $entityClass, array $arguments = null) 80 { 81 return stubDatabaseFinder::getInstance($this->connection) 82 ->findAll($entityClass, $arguments); 83 } 84 85 /** 71 86 * takes an entity and serializes it into the database 72 87 * trunk/src/main/php/net/stubbles/rdbms/persistence/stubEntityManager.php
r1054 r1063 48 48 49 49 /** 50 * finds all instances of $entityClass 51 * 52 * @param string $entityClass entity class to find instances of 53 * @param array $arguments optional arguments for constructor 54 * @return stubDatabaseFinderResult list of instances of $entityClass found 55 * @throws stubDatabaseFinderException 56 * @throws stubPersistenceException 57 */ 58 public function findAll(stubBaseReflectionClass $entityClass, array $arguments = null); 59 60 /** 50 61 * takes an entity and serializes it into the database 51 62 * trunk/src/test/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinderTestCase.php
r951 r1063 193 193 $mockResult = new MockstubDatabaseResult(); 194 194 $this->mockConnection->setReturnValue('query', $mockResult); 195 $mockResult->setReturnValue('fetch', array( ));195 $mockResult->setReturnValue('fetch', array('foo' => 'notUsed')); 196 196 $entity = $this->dbFinder->findByPrimaryKeys(new stubReflectionClass('MockInstanceArgsEntity'), array(), array('foo', 'bar')); 197 197 $this->assertEqual($entity->getArg1(), 'foo'); … … 231 231 $select = $this->mockQueryBuilder->getSelect(); 232 232 $this->assertEqual($select->getBaseTableName(), 'foo'); 233 $this->assertTrue($select->hasCriterion()); 233 234 } 234 235 … … 251 252 $this->assertEqual($data->getArg1(), 'foo'); 252 253 $this->assertNull($data->getArg2()); 254 $select = $this->mockQueryBuilder->getSelect(); 255 $this->assertEqual($select->getBaseTableName(), 'bar'); 256 $this->assertTrue($select->hasCriterion()); 257 } 258 259 /** 260 * test that finding data for all instances of an object works as expected 261 */ 262 public function testFindAll() 263 { 264 $mockResult = new MockstubDatabaseResult(); 265 $this->mockConnection->setReturnValue('query', $mockResult); 266 $mockResult->setReturnValueAt(0, 'fetchAll', false); 267 $mockResult->setReturnValueAt(1, 'fetchAll', array(array('bar' => 'Here is bar.', 'default' => 'And this is default.'))); 268 $finderResult = $this->dbFinder->findAll(new stubReflectionClass('MockSinglePrimaryKeyEntity')); 269 $this->assertEqual($finderResult->count(), 0); 270 $finderResult = $this->dbFinder->findAll(new stubReflectionClass('MockSinglePrimaryKeyEntity')); 271 $this->assertEqual($finderResult->count(), 1); 272 $data = $finderResult->current(); 273 $this->assertEqual($data->withAnnotation(), 'Here is bar.'); 274 $this->assertEqual($data->withDefaultValue(), 'And this is default.'); 275 $select = $this->mockQueryBuilder->getSelect(); 276 $this->assertEqual($select->getBaseTableName(), 'foo'); 277 $this->assertFalse($select->hasCriterion()); 278 } 279 280 /** 281 * test that instance args are transmitted correct 282 */ 283 public function testFindAllWithInstanceArguments() 284 { 285 $mockResult = new MockstubDatabaseResult(); 286 $this->mockConnection->setReturnValue('query', $mockResult); 287 $mockResult->setReturnValue('fetchAll', array(array())); 288 $finderResult = $this->dbFinder->findAll(new stubReflectionClass('MockInstanceArgsEntity'), array('foo', 'bar')); 289 $data = $finderResult->current(); 290 $this->assertEqual($data->getArg1(), 'foo'); 291 $this->assertEqual($data->getArg2(), 'bar'); 292 $finderResult = $this->dbFinder->findAll(new stubReflectionClass('MockInstanceArgsEntity'), array('foo')); 293 $data = $finderResult->current(); 294 $this->assertEqual($data->getArg1(), 'foo'); 295 $this->assertNull($data->getArg2()); 296 $select = $this->mockQueryBuilder->getSelect(); 297 $this->assertEqual($select->getBaseTableName(), 'bar'); 298 $this->assertFalse($select->hasCriterion()); 253 299 } 254 300 }
