moved nativequery
This commit is contained in:
parent
77fefcbd8f
commit
c24ecd7bcf
92
lib/Doctrine/ORM/NativeQuery.php
Normal file
92
lib/Doctrine/ORM/NativeQuery.php
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
#namespace Doctrine::ORM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @todo Migrate the old RawSql to NativeQuery.
|
||||||
|
* Use JPA/Hibernate NativeQuerys as a role-model.
|
||||||
|
*/
|
||||||
|
class Doctrine_NativeQuery
|
||||||
|
{
|
||||||
|
private static $_placeHolderPattern = '#\{([a-z][a-z0-9_]*)\.(\*|[a-z][a-z0-9_]*)\}#i';
|
||||||
|
private $_sql;
|
||||||
|
private $_conn;
|
||||||
|
|
||||||
|
private $_params = array();
|
||||||
|
|
||||||
|
private $_entities = array();
|
||||||
|
private $_placeholders = array();
|
||||||
|
private $_usedEntityAliases = array();
|
||||||
|
private $_usedFields = array();
|
||||||
|
|
||||||
|
public function __construct($sql, Doctrine_Connection $conn)
|
||||||
|
{
|
||||||
|
$numMatches = preg_match_all(self::$_placeHolderPattern, $sql, $matches);
|
||||||
|
|
||||||
|
$this->_placeHolders = $matches[0];
|
||||||
|
$this->_usedEntityAliases = $matches[1];
|
||||||
|
$this->_usedFields = $matches[2];
|
||||||
|
|
||||||
|
$this->_sql = $sql;
|
||||||
|
$this->_conn = $conn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _parse()
|
||||||
|
{
|
||||||
|
// replace placeholders in $sql with generated names
|
||||||
|
for ($i = 0; $i < count($this->_placeholders); $i++) {
|
||||||
|
$entityClassName = $this->_entities[$this->_usedEntityAliases[$i]];
|
||||||
|
$entityClass = $this->_conn->getClassMetadata($entityClassName);
|
||||||
|
$columnName = $entityClass->getColumnName($this->_usedFields[$i]);
|
||||||
|
$tableName = $entityClass->getTableName();
|
||||||
|
$replacement = $tableName . '.' . $columnName . ' AS '
|
||||||
|
. $this->_generateColumnAlias($columnName, $tableName);
|
||||||
|
$sql = str_replace($this->_placeholders[$i], $replacement, $sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _generateColumnAlias($columnName, $tableName)
|
||||||
|
{
|
||||||
|
return $tableName . '__' . $columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public function addScalar()
|
||||||
|
{
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public function addEntity($alias, $className)
|
||||||
|
{
|
||||||
|
$this->_entities[$alias] = $className;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addJoin($join)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setParameter($key, $value)
|
||||||
|
{
|
||||||
|
$this->_params[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addParameter($value)
|
||||||
|
{
|
||||||
|
$this->_params[] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function execute(array $params)
|
||||||
|
{
|
||||||
|
if ($this->_entities) {
|
||||||
|
//...
|
||||||
|
} else {
|
||||||
|
return $this->_conn->execute($this->_sql, array_merge($this->_params, $params));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function executeUpdate(array $params)
|
||||||
|
{
|
||||||
|
return $this->_conn->exec($this->_sql, array_merge($this->_params, $params));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user