diff options
Diffstat (limited to 'includes/database/select.inc')
-rw-r--r-- | includes/database/select.inc | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/includes/database/select.inc b/includes/database/select.inc index d7579f661..86110bc79 100644 --- a/includes/database/select.inc +++ b/includes/database/select.inc @@ -401,6 +401,13 @@ class SelectQuery extends Query implements QueryConditionInterface, QueryAlterab } /** + * Private list of aliases already attributed to expression fields. + * + * @var Array + */ + private $expressionAliases = array(); + + /** * Adds an expression to the list of "fields" to be SELECTed. * * An expression can be any arbitrary string that is valid SQL. That includes @@ -412,7 +419,7 @@ class SelectQuery extends Query implements QueryConditionInterface, QueryAlterab * @param $alias * The alias for this expression. If not specified, one will be generated * automatically in the form "expression_#". The alias will be checked for - * uniqueness, so the requested alias may not be the alias that is asigned + * uniqueness, so the requested alias may not be the alias that is assigned * in all cases. * @param $arguments * Any placeholder arguments needed for this expression. @@ -420,19 +427,16 @@ class SelectQuery extends Query implements QueryConditionInterface, QueryAlterab * The unique alias that was assigned for this expression. */ public function addExpression($expression, $alias = NULL, $arguments = array()) { - static $alaises = array(); - if (empty($alias)) { $alias = 'expression'; } - if (empty($aliases[$alias])) { - $aliases[$alias] = 1; - } - - if (!empty($this->expressions[$alias])) { - $alias = $alias . '_' . $aliases[$alias]++; + $alias_candidate = $alias; + $count = 2; + while (!empty($this->expressions[$alias_candidate])) { + $alias_candidate = $alias . '_' . $count++; } + $alias = $alias_candidate; $this->expressions[$alias] = array( 'expression' => $expression, |