• Модуль: perfmon
  • Путь к файлу: ~/bitrix/modules/perfmon/classes/general/sql_format.php
  • Класс: CSqlTokenizer
  • Вызов: CSqlTokenizer::removeBalancedBrackets
protected function removeBalancedBrackets()
{
	$pos = $this->current;
	$balance = 0;
	$hasOp = array(false);
	while (isset($this->tokens[$pos]))
	{
		if ($this->tokens[$pos][0] === "(")
		{
			$balance++;
			$hasOp[$balance] = false;
		}
		elseif ($this->tokens[$pos][0] === ")")
		{
			$balance--;
		}
		elseif (
			$this->tokens[$pos][0] === T_LOGICAL_AND
			|| $this->tokens[$pos][0] === T_LOGICAL_OR
			|| $this->tokens[$pos][0] === ","
		)
		{
			$hasOp[$balance] = true;
		}

		if ($balance === 0)
		{
			if (!$hasOp[$balance + 1])
			{
				array_splice($this->tokens, $pos, 1);
				array_splice($this->tokens, $this->current, 1);
				return true;
			}
			else
			{
				return false;
			}
		}
		$pos++;
	}
	return false;
}