From 3d3f8d3832921f99daf8ce1953304763c2e76c62 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 14 Apr 2006 06:22:09 +0000 Subject: Importing SQLMap + sample + docs. --- .../SQLMap/Configuration/TConfigDeserialize.php | 171 +++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php (limited to 'framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php') diff --git a/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php b/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php new file mode 100644 index 00000000..250133b9 --- /dev/null +++ b/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php @@ -0,0 +1,171 @@ +_properties = $properties; + } + + public function loadConfiguration($object, $node, $file) + { + foreach($node->attributes() as $k=>$v) + { + if($object->canSetProperty($k)) + $object->{'set'.$k}($this->replaceProperties((string)($v))); + else + throw new TUndefinedAttributeException($k,$node,$object,$file); + } + } + + public function replaceProperties($string) + { + foreach($this->_properties as $find => $replace) + $string = str_replace('${'.$find.'}', $replace, $string); + return $string; + } + + public function parameterMap($node, $sqlMap, $file) + { + $parameterMap = new TParameterMap; + $this->loadConfiguration($parameterMap, $node, $file); + foreach($node->parameter as $parameter) + { + $property = $this->parameterProperty($parameter, $sqlMap, $file); + $property->initialize($sqlMap); + $parameterMap->addParameterProperty($property); + } + return $parameterMap; + } + + public function parameterProperty($node, $sqlMap, $file) + { + $property = new TParameterProperty; + $this->loadConfiguration($property, $node, $file); + return $property; + } + + public function select($node, $sqlMap, $file) + { + $select = new TSqlMapSelect; + $this->loadConfiguration($select, $node, $file); + $select->initialize($sqlMap); + return $select; + } + + public function update($node, $sqlMap, $file) + { + $update = new TSqlMapUpdate; + $this->loadConfiguration($update, $node, $file); + $update->initialize($sqlMap); + return $update; + } + + public function delete($node, $sqlMap, $file) + { + $delete = new TSqlMapDelete; + $this->loadConfiguration($delete, $node, $file); + $delete->initialize($sqlMap); + return $delete; + } + + + public function insert($node, $sqlMap, $file) + { + $insert = new TSqlMapInsert; + $this->loadConfiguration($insert, $node, $file); + if(isset($node->selectKey)) + { + $selectKey = new TSqlMapSelectKey; + $this->loadConfiguration($selectKey, $node->selectKey, $file); + $type = $selectKey->getType(); + $selectKey->setType(strtolower($type) == 'post' ? 'post' : 'pre'); + $insert->setSelectKey($selectKey); + } + if(isset($node->generate)) + { + var_dump("add generate"); + } + + $insert->initialize($sqlMap); + return $insert; + } + + public function statement($node, $sqlMap, $file) + { + $statement = new TSqlMapStatement; + $this->loadConfiguration($statement, $node, $file); + $statement->initialize($sqlMap); + return $statement; + } + + public function resultMap($node, $sqlMap, $file) + { + $resultMap = new TResultMap; + $this->loadConfiguration($resultMap, $node, $file); + foreach($node->result as $result) + { + $property = $this->resultProperty($result, $sqlMap, $file); + $property->initialize($sqlMap, $resultMap); + $resultMap->addResultProperty($property); + } + $discriminator = null; + if(isset($node->discriminator)) + { + $discriminator = new TDiscriminator; + $this->loadConfiguration($discriminator, $node->discriminator, $file); + $discriminator->initMapping($sqlMap, $resultMap); + } + foreach($node->subMap as $subMapNode) + { + if(is_null($discriminator)) + throw new TSqlMapConfigurationException( + 'sqlmap_undefined_discriminator', $resultMap->getID(), $file); + $subMap = new TSubMap; + $this->loadConfiguration($subMap, $subMapNode, $file); + $discriminator->add($subMap); + } + if(!is_null($discriminator)) + $resultMap->setDiscriminator($discriminator); + + return $resultMap; + } + + public function resultProperty($node, $sqlMap, $file) + { + $resultProperty = new TResultProperty; + $this->loadConfiguration($resultProperty, $node, $file); + return $resultProperty; + } + + public function cacheModel($node, $sqlMap, $file) + { + $cacheModel = new TSqlMapCacheModel; + $this->loadConfiguration($cacheModel, $node, $file); + if(isset($node->flushInterval)) + { + $interval = $node->flushInterval; + $span = 0; //span in seconds + if(isset($interval['hours'])) + $span += intval($interval['hours'])*60*60; + if(isset($interval['minutes'])) + $span += intval($interval['minutes'])*60; + if(isset($interval['seconds'])) + $span += intval($interval['seconds']); + if($span > 0) + $cacheModel->setFlushInterval($span); + } + if(isset($node->property)) + { + foreach($node->property as $property) + $cacheModel->addProperty((string)$property['name'], + (string)$property['value']); + } + return $cacheModel; + } +} + + +?> \ No newline at end of file -- cgit v1.2.3