• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_entity_list_builder.php
  • Класс: \CCrmEntityListBuilder
  • Вызов: CCrmEntityListBuilder::GetRowCountSql
private function GetRowCountSql($threshold)
{
	$fieldsKeys = array_keys($this->fields);
	$primaryKey = $fieldsKeys[0];

	if($threshold > 0)
	{
		if(isset($this->tableAlias[0]))
		{
			$sql = "SELECT {$this->tableAlias}.{$primaryKey} FROM {$this->tableName} {$this->tableAlias}";
		}
		else
		{
			$sql = "SELECT {$primaryKey} FROM {$this->tableName}";
		}

		if(isset($this->sqlData['FROM_WHERE'][0]))
		{
			$sql .= ' '.$this->sqlData['FROM_WHERE'];
		}
		elseif (isset($this->sqlData['FROM'][0]))
		{
			$sql .= ' '.$this->sqlData['FROM'];
		}
		elseif(isset($this->fields[$primaryKey]['FROM']) && isset($this->fields[$primaryKey]['FROM'][0]))
		{
			//Hack for CrmEvent table.
			$sql .= ' '.$this->fields['ID']['FROM'];
		}
		if (isset($this->sqlData['WHERE'][0]))
		{
			$sql .= ' WHERE '.$this->sqlData['WHERE'];
		}
		if (isset($arSql['GROUPBY'][0]))
		{
			$sql .= ' GROUP BY '.$this->sqlData['GROUPBY'];
		}

		$sql = Main\Application::getConnection()->getSqlHelper()->getTopSql($sql, $threshold, 0);
		$sql = "SELECT COUNT(*) AS CNT FROM ({$sql}) T";
	}
	else
	{
		$sql = "SELECT COUNT('x') as CNT FROM {$this->tableName}";
		if(isset($this->tableAlias[0]))
		{
			$sql .= ' '.$this->tableAlias;
		}

		if(isset($this->sqlData['FROM_WHERE']) && $this->sqlData['FROM_WHERE'] !== '')
		{
			$sql .= ' '.$this->sqlData['FROM_WHERE'];
		}
		elseif(isset($this->sqlData['FROM']) && $this->sqlData['FROM'] !== '')
		{
			$sql .= ' '.$this->sqlData['FROM'];
		}
		elseif(isset($this->fields['ID'])
			&& isset($this->fields['ID']['FROM'])
			&& $this->fields['ID']['FROM'] !== '')
		{
			//Hack for CrmEvent table.
			$sql .= ' '.$this->fields['ID']['FROM'];
		}

		if (isset($this->sqlData['WHERE'][0]))
		{
			$sql .= ' WHERE '.$this->sqlData['WHERE'];
		}
		if (isset($arSql['GROUPBY'][0]))
		{
			$sql .= ' GROUP BY '.$this->sqlData['GROUPBY'];
		}
	}

	return $sql;
}