|
|
@@ -81,6 +81,8 @@ class Zend_Db_Select
|
|
|
const SQL_ASC = 'ASC';
|
|
|
const SQL_DESC = 'DESC';
|
|
|
|
|
|
+ const REGEX_COLUMN_EXPR = '/^([\w]*\(([^\(\)]|(?1))*\))$/';
|
|
|
+
|
|
|
/**
|
|
|
* Bind variables for query
|
|
|
*
|
|
|
@@ -509,7 +511,7 @@ class Zend_Db_Select
|
|
|
}
|
|
|
|
|
|
foreach ($spec as $val) {
|
|
|
- if (preg_match('/^([\w]*\(([^\)]|(?1))*\))$/', (string) $val)) {
|
|
|
+ if (preg_match(self::REGEX_COLUMN_EXPR, (string) $val)) {
|
|
|
$val = new Zend_Db_Expr($val);
|
|
|
}
|
|
|
$this->_parts[self::GROUP][] = $val;
|
|
|
@@ -601,7 +603,7 @@ class Zend_Db_Select
|
|
|
$val = trim($matches[1]);
|
|
|
$direction = $matches[2];
|
|
|
}
|
|
|
- if (preg_match('/^([\w]*\(([^\)]|(?1))*\))$/', (string) $val)) {
|
|
|
+ if (preg_match(self::REGEX_COLUMN_EXPR, (string) $val)) {
|
|
|
$val = new Zend_Db_Expr($val);
|
|
|
}
|
|
|
$this->_parts[self::ORDER][] = array($val, $direction);
|
|
|
@@ -943,7 +945,7 @@ class Zend_Db_Select
|
|
|
$alias = $m[2];
|
|
|
}
|
|
|
// Check for columns that look like functions and convert to Zend_Db_Expr
|
|
|
- if (preg_match('/^([\w]*\(([^\)]|(?1))*\))$/', (string) $col)) {
|
|
|
+ if (preg_match(self::REGEX_COLUMN_EXPR, (string) $col)) {
|
|
|
$col = new Zend_Db_Expr($col);
|
|
|
} elseif (preg_match('/(.+)\.(.+)/', $col, $m)) {
|
|
|
$currentCorrelationName = $m[1];
|