Commit b4bcc51c authored by zYne's avatar zYne

--no commit message

--no commit message
parent b6dcef0e
...@@ -118,9 +118,13 @@ class Doctrine_Hydrate ...@@ -118,9 +118,13 @@ class Doctrine_Hydrate
*/ */
protected $type = self::SELECT; protected $type = self::SELECT;
protected $shortAliases = array(); protected $_tableAliases = array();
/**
protected $shortAliasIndexes = array(); * @var array $_tableAliasSeeds A simple array keys representing table aliases and values
* as table alias seeds. The seeds are used for generating short table
* aliases.
*/
protected $_tableAliasSeeds = array();
/** /**
* constructor * constructor
* *
...@@ -133,18 +137,25 @@ class Doctrine_Hydrate ...@@ -133,18 +137,25 @@ class Doctrine_Hydrate
} }
$this->_conn = $connection; $this->_conn = $connection;
} }
public function generateNewAlias($alias) /**
* generateNewTableAlias
* generates a new alias from given table alias
*
* @param string $tableAlias table alias from which to generate the new alias from
* @return string the created table alias
*/
public function generateNewTableAlias($tableAlias)
{ {
if (isset($this->shortAliases[$alias])) { if (isset($this->_tableAliases[$tableAlias])) {
// generate a new alias // generate a new alias
$name = substr($alias, 0, 1); $name = substr($tableAlias, 0, 1);
$i = ((int) substr($alias, 1)); $i = ((int) substr($tableAlias, 1));
if ($i == 0) { if ($i == 0) {
$i = 1; $i = 1;
} }
$newIndex = ($this->shortAliasIndexes[$name] + $i); $newIndex = ($this->_tableAliasSeeds[$name] + $i);
return $name . $newIndex; return $name . $newIndex;
} }
...@@ -154,38 +165,53 @@ class Doctrine_Hydrate ...@@ -154,38 +165,53 @@ class Doctrine_Hydrate
public function hasAlias($tableName) public function hasAlias($tableName)
{ {
return (isset($this->shortAliases[$tableName])); return (isset($this->_tableAliases[$tableName]));
} }
public function getComponentAlias($tableAlias) public function getComponentAlias($tableAlias)
{ {
if ( ! isset($this->shortAliases[$tableAlias])) { if ( ! isset($this->_tableAliases[$tableAlias])) {
throw new Doctrine_Hydrate_Exception('Unknown table alias ' . $tableAlias); throw new Doctrine_Hydrate_Exception('Unknown table alias ' . $tableAlias);
} }
return $this->shortAliases[$tableAlias]; return $this->_tableAliases[$tableAlias];
} }
/**
public function getShortAliasIndex($alias) * getTableAliasSeed
* returns the alias seed for given table alias
*
* @param string $tableAlias table alias that identifies the alias seed
* @return integer table alias seed
*/
public function getTableAliasSeed($tableAlias)
{ {
if ( ! isset($this->shortAliasIndexes[$alias])) { if ( ! isset($this->_tableAliasSeeds[$tableAlias])) {
return 0; return 0;
} }
return $this->shortAliasIndexes[$alias]; return $this->_tableAliasSeeds[$tableAlias];
} }
public function generateShortAlias($componentAlias, $tableName) /**
* generateTableAlias
* generates a table alias from given table name and associates
* it with given component alias
*
* @param string $componentAlias the component alias to be associated with generated table alias
* @param string $tableName the table name from which to generate the table alias
* @return string the generated table alias
*/
public function generateTableAlias($componentAlias, $tableName)
{ {
$char = strtolower(substr($tableName, 0, 1)); $char = strtolower(substr($tableName, 0, 1));
$alias = $char; $alias = $char;
if ( ! isset($this->shortAliasIndexes[$alias])) { if ( ! isset($this->_tableAliasSeeds[$alias])) {
$this->shortAliasIndexes[$alias] = 1; $this->_tableAliasSeeds[$alias] = 1;
} }
while (isset($this->shortAliases[$alias])) { while (isset($this->_tableAliases[$alias])) {
$alias = $char . ++$this->shortAliasIndexes[$alias]; $alias = $char . ++$this->_tableAliasSeeds[$alias];
} }
$this->shortAliases[$alias] = $componentAlias; $this->_tableAliases[$alias] = $componentAlias;
return $alias; return $alias;
} }
...@@ -197,7 +223,7 @@ class Doctrine_Hydrate ...@@ -197,7 +223,7 @@ class Doctrine_Hydrate
*/ */
public function getAliases() public function getAliases()
{ {
return $this->shortAliases; return $this->_tableAliases;
} }
/** /**
* addTableAlias * addTableAlias
...@@ -209,7 +235,7 @@ class Doctrine_Hydrate ...@@ -209,7 +235,7 @@ class Doctrine_Hydrate
*/ */
public function addTableAlias($tableAlias, $componentAlias) public function addTableAlias($tableAlias, $componentAlias)
{ {
$this->shortAliases[$tableAlias] = $componentAlias; $this->_tableAliases[$tableAlias] = $componentAlias;
return $this; return $this;
} }
...@@ -227,7 +253,7 @@ class Doctrine_Hydrate ...@@ -227,7 +253,7 @@ class Doctrine_Hydrate
*/ */
public function getTableAlias($componentAlias, $tableName = null) public function getTableAlias($componentAlias, $tableName = null)
{ {
$alias = array_search($componentAlias, $this->shortAliases); $alias = array_search($componentAlias, $this->_tableAliases);
if ($alias !== false) { if ($alias !== false) {
return $alias; return $alias;
...@@ -237,7 +263,7 @@ class Doctrine_Hydrate ...@@ -237,7 +263,7 @@ class Doctrine_Hydrate
throw new Doctrine_Hydrate_Exception("Couldn't get short alias for " . $componentAlias); throw new Doctrine_Hydrate_Exception("Couldn't get short alias for " . $componentAlias);
} }
return $this->generateShortAlias($componentAlias, $tableName); return $this->generateTableAlias($componentAlias, $tableName);
} }
/** /**
* addQueryPart * addQueryPart
...@@ -301,7 +327,7 @@ class Doctrine_Hydrate ...@@ -301,7 +327,7 @@ class Doctrine_Hydrate
*/ */
public function copyAliases(Doctrine_Hydrate $query) public function copyAliases(Doctrine_Hydrate $query)
{ {
$this->shortAliases = $query->shortAliases; $this->_tableAliases = $query->_tableAliases;
return $this; return $this;
} }
...@@ -333,6 +359,15 @@ class Doctrine_Hydrate ...@@ -333,6 +359,15 @@ class Doctrine_Hydrate
{ {
return false; return false;
} }
/**
* setQueryPart
* sets a query part in the query part array
*
* @param string $name the name of the query part to be set
* @param string $part query part string
* @throws Doctrine_Hydrate_Exception if trying to set unknown query part
* @return Doctrine_Hydrate this object
*/
public function getQueryPart($part) public function getQueryPart($part)
{ {
if ( ! isset($this->parts[$part])) { if ( ! isset($this->parts[$part])) {
...@@ -342,18 +377,23 @@ class Doctrine_Hydrate ...@@ -342,18 +377,23 @@ class Doctrine_Hydrate
return $this->parts[$part]; return $this->parts[$part];
} }
/** /**
* remove * removeQueryPart
* removes a query part from the query part array
* *
* @param $name * @param string $name the name of the query part to be removed
* @throws Doctrine_Hydrate_Exception if trying to remove unknown query part
* @return Doctrine_Hydrate this object
*/ */
public function remove($name) public function removeQueryPart($name)
{ {
if (isset($this->parts[$name])) { if (isset($this->parts[$name])) {
if ($name == "limit" || $name == "offset") { if ($name == 'limit' || $name == 'offset') {
$this->parts[$name] = false; $this->parts[$name] = false;
} else { } else {
$this->parts[$name] = array(); $this->parts[$name] = array();
} }
} else {
throw new Doctrine_Hydrate_Exception('Unknown query part ' . $part);
} }
return $this; return $this;
} }
......
...@@ -756,7 +756,7 @@ class Doctrine_Query extends Doctrine_Query_Abstract implements Countable ...@@ -756,7 +756,7 @@ class Doctrine_Query extends Doctrine_Query_Abstract implements Countable
} }
if($this->hasAlias($part)) { if($this->hasAlias($part)) {
$parts[$k] = $this->generateNewAlias($part); $parts[$k] = $this->generateNewTableAlias($part);
} }
if(strpos($part, '.') !== false) { if(strpos($part, '.') !== false) {
...@@ -765,7 +765,7 @@ class Doctrine_Query extends Doctrine_Query_Abstract implements Countable ...@@ -765,7 +765,7 @@ class Doctrine_Query extends Doctrine_Query_Abstract implements Countable
$trimmed = ltrim($e[0], '( '); $trimmed = ltrim($e[0], '( ');
$pos = strpos($e[0], $trimmed); $pos = strpos($e[0], $trimmed);
$e[0] = substr($e[0], 0, $pos) . $this->generateNewAlias($trimmed); $e[0] = substr($e[0], 0, $pos) . $this->generateNewTableAlias($trimmed);
$parts[$k] = implode('.', $e); $parts[$k] = implode('.', $e);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment