From 466c414ebc9dde38e80f20fd96fd891431404fca Mon Sep 17 00:00:00 2001 From: "godzilla80@gmx.net" <> Date: Sun, 22 Mar 2009 08:02:35 +0000 Subject: Fixed Issue #88 - SQLMap $Param$ re-evaluation bug --- framework/Data/SqlMap/Statements/TPreparedCommand.php | 9 ++++++++- framework/Data/SqlMap/Statements/TSimpleDynamicSql.php | 14 +++----------- 2 files changed, 11 insertions(+), 12 deletions(-) (limited to 'framework/Data/SqlMap/Statements') diff --git a/framework/Data/SqlMap/Statements/TPreparedCommand.php b/framework/Data/SqlMap/Statements/TPreparedCommand.php index 99bb6eff..66ff2a70 100644 --- a/framework/Data/SqlMap/Statements/TPreparedCommand.php +++ b/framework/Data/SqlMap/Statements/TPreparedCommand.php @@ -25,9 +25,15 @@ class TPreparedCommand { public function create(TSqlMapManager $manager, $connection, $statement, $parameterObject,$skip=null,$max=null) { - $prepared = $statement->getSQLText()->getPreparedStatement($parameterObject); + $sqlText = $statement->getSQLText(); + + $prepared = $sqlText->getPreparedStatement($parameterObject); $connection->setActive(true); $sql = $prepared->getPreparedSql(); + + if($sqlText instanceof TSimpleDynamicSql) + $sql = $sqlText->replaceDynamicParameter($sql, $parameterObject); + if($max!==null || $skip!==null) { $builder = TDbMetaData::getInstance($connection)->createCommandBuilder(); @@ -35,6 +41,7 @@ class TPreparedCommand } $command = $connection->createCommand($sql); $this->applyParameterMap($manager, $command, $prepared, $statement, $parameterObject); + return $command; } diff --git a/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php b/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php index 910fd659..3e8969ba 100644 --- a/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php +++ b/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php @@ -27,23 +27,15 @@ class TSimpleDynamicSql extends TStaticSql $this->_mappings = $mappings; } - public function getPreparedStatement($parameter=null) + public function replaceDynamicParameter($sql, $parameter) { - $statement = parent::getPreparedStatement($parameter); - if($parameter !== null) - $this->mapDynamicParameter($statement, $parameter); - return $statement; - } - - protected function mapDynamicParameter($statement, $parameter) - { - $sql = $statement->getPreparedSql(); foreach($this->_mappings as $property) { $value = TPropertyAccess::get($parameter, $property); $sql = preg_replace('/'.TSimpleDynamicParser::DYNAMIC_TOKEN.'/', $value, $sql, 1); } - $statement->setPreparedSql($sql); + + return $sql; } } -- cgit v1.2.3