[DDC-1900] Throw exception when overwriting internal function.
This commit is contained in:
parent
cc4613533b
commit
12cddf20e3
@ -380,6 +380,10 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function addCustomStringFunction($name, $className)
|
||||
{
|
||||
if (Query\Parser::isInternalFunction($name)) {
|
||||
throw ORMException::overwriteInternalDQLFunctionNotAllowed($name);
|
||||
}
|
||||
|
||||
$this->_attributes['customStringFunctions'][strtolower($name)] = $className;
|
||||
}
|
||||
|
||||
@ -410,7 +414,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function setCustomStringFunctions(array $functions)
|
||||
{
|
||||
$this->_attributes['customStringFunctions'] = array_change_key_case($functions);
|
||||
foreach ($functions as $name => $className) {
|
||||
$this->addCustomStringFunction($name, $className);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -425,6 +431,10 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function addCustomNumericFunction($name, $className)
|
||||
{
|
||||
if (Query\Parser::isInternalFunction($name)) {
|
||||
throw ORMException::overwriteInternalDQLFunctionNotAllowed($name);
|
||||
}
|
||||
|
||||
$this->_attributes['customNumericFunctions'][strtolower($name)] = $className;
|
||||
}
|
||||
|
||||
@ -455,7 +465,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function setCustomNumericFunctions(array $functions)
|
||||
{
|
||||
$this->_attributes['customNumericFunctions'] = array_change_key_case($functions);
|
||||
foreach ($functions as $name => $className) {
|
||||
$this->addCustomNumericFunction($name, $className);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -470,6 +482,10 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function addCustomDatetimeFunction($name, $className)
|
||||
{
|
||||
if (Query\Parser::isInternalFunction($name)) {
|
||||
throw ORMException::overwriteInternalDQLFunctionNotAllowed($name);
|
||||
}
|
||||
|
||||
$this->_attributes['customDatetimeFunctions'][strtolower($name)] = $className;
|
||||
}
|
||||
|
||||
@ -500,7 +516,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
*/
|
||||
public function setCustomDatetimeFunctions(array $functions)
|
||||
{
|
||||
$this->_attributes['customDatetimeFunctions'] = array_change_key_case($functions);
|
||||
foreach ($functions as $name => $className) {
|
||||
$this->addCustomDatetimeFunction($name, $className);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -149,4 +149,9 @@ class ORMException extends Exception
|
||||
{
|
||||
return new self("The identifier $fieldName is missing for a query of " . $className);
|
||||
}
|
||||
|
||||
public static function overwriteInternalDQLFunctionNotAllowed($functionName)
|
||||
{
|
||||
return new self("It is not allowed to overwrite internal function '$functionName' in the DQL parser through user-defined functions.");
|
||||
}
|
||||
}
|
||||
|
@ -136,6 +136,22 @@ class Parser
|
||||
*/
|
||||
private $_identVariableExpressions = array();
|
||||
|
||||
/**
|
||||
* Check if a function is internally defined. Used to prevent overwriting
|
||||
* of built-in functions through user-defined functions.
|
||||
*
|
||||
* @param string $functionName
|
||||
* @return bool
|
||||
*/
|
||||
static public function isInternalFunction($functionName)
|
||||
{
|
||||
$functionName = strtolower($functionName);
|
||||
|
||||
return isset(self::$_STRING_FUNCTIONS[$functionName])
|
||||
|| isset(self::$_DATETIME_FUNCTIONS[$functionName])
|
||||
|| isset(self::$_NUMERIC_FUNCTIONS[$functionName]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new query parser object.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user