- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/orm/fields/expressionfield.php
- Класс: Bitrix\Main\ORM\Fields\ExpressionField
- Вызов: ExpressionField::removeSubqueryBody
static function removeSubqueryBody($query)
{
$subqPattern = '\(\s*SELECT\s+';
$matches = null;
preg_match('/' . $subqPattern . '/i', $query, $matches);
if (!empty($matches))
{
$substring = $matches[0];
$subqPosition = mb_strpos($query, $substring);
$subqStartPosition = $subqPosition + mb_strlen($substring);
$bracketsCount = 1;
$currentPosition = $subqStartPosition;
// until initial bracket is closed
while ($bracketsCount > 0)
{
$symbol = mb_substr($query, $currentPosition, 1);
if ($symbol == '')
{
// end of string
break;
}
if ($symbol == '(')
{
$bracketsCount++;
}
elseif ($symbol == ')')
{
$bracketsCount--;
}
$currentPosition++;
}
$query = mb_substr($query, 0, $subqPosition).mb_substr($query, $currentPosition);
}
return $query;
}