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