From e9486a539c3a43afcc129f647917780ffc1ed6cd Mon Sep 17 00:00:00 2001 From: wei <> Date: Tue, 8 May 2007 08:06:13 +0000 Subject: Fixed #458 --- .gitattributes | 1 + .../Data/SqlMap/Statements/TCachingStatement.php | 16 ++++---- .../Data/SqlMap/Statements/TMappedStatement.php | 8 ++-- framework/Data/SqlMap/TSqlMapGateway.php | 8 ++-- tests/simple_unit/SqlMap/TestQueryForMap.php | 43 ++++++++++++++++++++++ 5 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 tests/simple_unit/SqlMap/TestQueryForMap.php diff --git a/.gitattributes b/.gitattributes index dac6711d..dfdf47c8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2716,6 +2716,7 @@ tests/simple_unit/SqlMap/SelectKeyTest.php -text tests/simple_unit/SqlMap/SqlMapCacheTest.php -text tests/simple_unit/SqlMap/StatementExtendsTest.php -text tests/simple_unit/SqlMap/StatementTest.php -text +tests/simple_unit/SqlMap/TestQueryForMap.php -text tests/simple_unit/SqlMap/common.php -text tests/simple_unit/SqlMap/domain/A.php -text tests/simple_unit/SqlMap/domain/Account.php -text diff --git a/framework/Data/SqlMap/Statements/TCachingStatement.php b/framework/Data/SqlMap/Statements/TCachingStatement.php index 051a8ec3..4d39993d 100644 --- a/framework/Data/SqlMap/Statements/TCachingStatement.php +++ b/framework/Data/SqlMap/Statements/TCachingStatement.php @@ -42,15 +42,15 @@ class TCachingStatement implements IMappedStatement return $this->_mappedStatement->getManager(); } - public function executeQueryForMap($connection, $parameter,$keyProperty, $valueProperty=null, $delegate=null) + public function executeQueryForMap($connection, $parameter,$keyProperty, $valueProperty=null, $skip=-1, $max=-1,$delegate=null) { - $sql = $this->createCommand($connection, $parameter); - $key = $this->getCacheKey(array(clone($sql), $keyProperty, $valueProperty)); + $sql = $this->createCommand($connection, $parameter, $skip, $max); + $key = $this->getCacheKey(array(clone($sql), $keyProperty, $valueProperty,$skip, $max)); $map = $this->getStatement()->getCache()->get($key); if(is_null($map)) { $map = $this->_mappedStatement->runQueryForMap( - $connection, $parameter, $sql, $keyProperty, $valueProperty, $delegate); + $connection, $parameter, $sql, $keyProperty, $valueProperty, $delegate); $this->getStatement()->getCache()->set($key, $map); } return $map; @@ -68,13 +68,13 @@ class TCachingStatement implements IMappedStatement public function executeQueryForList($connection, $parameter, $result=null, $skip=-1, $max=-1, $delegate=null) { - $sql = $this->createCommand($connection, $parameter); + $sql = $this->createCommand($connection, $parameter, $skip, $max); $key = $this->getCacheKey(array(clone($sql), $parameter, $skip, $max)); $list = $this->getStatement()->getCache()->get($key); if(is_null($list)) { $list = $this->_mappedStatement->runQueryForList( - $connection, $parameter, $sql, $result, $skip, $max, $delegate); + $connection, $parameter, $sql, $result, $delegate); $this->getStatement()->getCache()->set($key, $list); } return $list; @@ -99,10 +99,10 @@ class TCachingStatement implements IMappedStatement return $cacheKey->getHash(); } - protected function createCommand($connection, $parameter) + protected function createCommand($connection, $parameter, $skip=null, $max=null) { return $this->_mappedStatement->getCommand()->create($this->getManager(), - $connection, $this->getStatement(), $parameter); + $connection, $this->getStatement(), $parameter, $skip, $max); } } diff --git a/framework/Data/SqlMap/Statements/TMappedStatement.php b/framework/Data/SqlMap/Statements/TMappedStatement.php index db02857f..3b935e7f 100644 --- a/framework/Data/SqlMap/Statements/TMappedStatement.php +++ b/framework/Data/SqlMap/Statements/TMappedStatement.php @@ -204,7 +204,7 @@ class TMappedStatement extends TComponent implements IMappedStatement public function executeQueryForList($connection, $parameter, $result=null, $skip=-1, $max=-1, $delegate=null) { $sql = $this->_command->create($this->_manager, $connection, $this->_statement, $parameter,$skip,$max); - return $this->runQueryForList($connection, $parameter, $sql, $result, $skip, $max, $delegate); + return $this->runQueryForList($connection, $parameter, $sql, $result, $delegate); } /** @@ -223,7 +223,7 @@ class TMappedStatement extends TComponent implements IMappedStatement * @return array a list of result objects * @see executeQueryForList() */ - public function runQueryForList($connection, $parameter, $sql, $result, $skip=-1, $max=-1, $delegate=null) + public function runQueryForList($connection, $parameter, $sql, $result, $delegate=null) { $registry=$this->getManager()->getTypeHandlers(); $list = $result instanceof ArrayAccess ? $result : @@ -274,9 +274,9 @@ class TMappedStatement extends TComponent implements IMappedStatement * @param callback row delegate handler * @return array An array of object containing the rows keyed by keyProperty. */ - public function executeQueryForMap($connection, $parameter, $keyProperty, $valueProperty=null, $delegate=null) + public function executeQueryForMap($connection, $parameter, $keyProperty, $valueProperty=null, $skip=-1, $max=-1, $delegate=null) { - $sql = $this->_command->create($this->_manager, $connection, $this->_statement, $parameter); + $sql = $this->_command->create($this->_manager, $connection, $this->_statement, $parameter, $skip, $max); return $this->runQueryForMap($connection, $parameter, $sql, $keyProperty, $valueProperty, $delegate); } diff --git a/framework/Data/SqlMap/TSqlMapGateway.php b/framework/Data/SqlMap/TSqlMapGateway.php index b2819740..51a13a82 100644 --- a/framework/Data/SqlMap/TSqlMapGateway.php +++ b/framework/Data/SqlMap/TSqlMapGateway.php @@ -163,10 +163,10 @@ class TSqlMapGateway extends TComponent * @param string The property of the result object to be used as the value. * @return TMap Array object containing the rows keyed by keyProperty. */ - public function queryForMap($statementName, $parameter=null, $keyProperty=null, $valueProperty=null) + public function queryForMap($statementName, $parameter=null, $keyProperty=null, $valueProperty=null, $skip=-1, $max=-1) { $statement = $this->getSqlMapManager()->getMappedStatement($statementName); - return $statement->executeQueryForMap($this->getDbConnection(), $parameter, $keyProperty, $valueProperty); + return $statement->executeQueryForMap($this->getDbConnection(), $parameter, $keyProperty, $valueProperty, $skip, $max); } /** @@ -182,10 +182,10 @@ class TSqlMapGateway extends TComponent * @param string The property of the result object to be used as the value. * @return TMap Array object containing the rows keyed by keyProperty. */ - public function queryForMapWithRowDelegate($statementName, $delegate, $parameter=null, $keyProperty=null, $valueProperty=null) + public function queryForMapWithRowDelegate($statementName, $delegate, $parameter=null, $keyProperty=null, $valueProperty=null, $skip=-1, $max=-1) { $statement = $this->getSqlMapManager()->getMappedStatement($statementName); - return $statement->executeQueryForMap($this->getDbConnection(), $parameter, $keyProperty, $valueProperty, $delegate); + return $statement->executeQueryForMap($this->getDbConnection(), $parameter, $keyProperty, $valueProperty, $skip, $max, $delegate); } /** diff --git a/tests/simple_unit/SqlMap/TestQueryForMap.php b/tests/simple_unit/SqlMap/TestQueryForMap.php new file mode 100644 index 00000000..25ef2f4d --- /dev/null +++ b/tests/simple_unit/SqlMap/TestQueryForMap.php @@ -0,0 +1,43 @@ +initSqlMap(); + } + + /** + * Test ExecuteQueryForMap : Hashtable. + */ + function testExecuteQueryForMap() + { + $map = $this->sqlmap->QueryForMap("GetAllAccountsViaResultClass", null, "FirstName",null,0,2); + $this->assertIdentical(2, count($map)); + $this->assertAccount1($map["Joe"]); + + $this->assertIdentical(1, $map["Joe"]->getID()); + $this->assertIdentical(2, $map["Averel"]->getID()); + } + + /** + * Test ExecuteQueryForMap with value property : + * "FirstName" as key, "EmailAddress" as value + */ + function testExecuteQueryForMapWithValueProperty() + { + $map = $this->sqlmap->QueryForMap("GetAllAccountsViaResultClass", null, + "FirstName", "EmailAddress",1,3); + + $this->assertIdentical(3, count($map)); + + $this->assertIdentical("Averel.Dalton@somewhere.com", $map["Averel"]); + $this->assertNull($map["William"]); + $this->assertIdentical("Jack.Dalton@somewhere.com", $map["Jack"]); + } + +} + +?> \ No newline at end of file -- cgit v1.2.3