• Модуль: biconnector
  • Путь к файлу: ~/bitrix/modules/biconnector/lib/dictionarymanager.php
  • Класс: BitrixBIConnectorDictionaryManager
  • Вызов: DictionaryManager::validateCache
static function validateCache($dictionaryId)
{
	$dictionaryId = intval($dictionaryId);
	$manager = Manager::getInstance();
	$connection = $manager->getDatabaseConnection();
	$helper = $connection->getSqlHelper();

	if (isset(static::$validated[$dictionaryId]))
	{
		return static::$validated[$dictionaryId];
	}

	$select = static::getInsertSelect($dictionaryId);
	if (!$select)
	{
		static::$validated[$dictionaryId] = false;
		return false;
	}

	$sql = '
		SELECT UPDATE_DATE
		FROM ' . DictionaryCacheTable::getTableName() . '
		WHERE DICTIONARY_ID = ' . $dictionaryId . '
		AND DATE_ADD(UPDATE_DATE, INTERVAL TTL SECOND) > ' . $helper->getCurrentDateTimeFunction() . '
	';
	$updateDate = $connection->queryScalar($sql);
	if ($updateDate)
	{
		static::$validated[$dictionaryId] = true;
		return true;
	}

	$now = new BitrixMainTypeDateTime();
	$insertFields = [
		'DICTIONARY_ID' => $dictionaryId,
		'UPDATE_DATE' => $now,
		'TTL' => Dictionary::CACHE_TTL,
	];

	$updateFields = [
		'UPDATE_DATE' => $now,
		'TTL' => Dictionary::CACHE_TTL,
	];

	$queries = $helper->prepareMerge(DictionaryCacheTable::getTableName(), [
		'DICTIONARY_ID',
	], $insertFields, $updateFields);

	foreach ($queries as $query)
	{
		$connection->queryExecute($query);
	}

	DictionaryDataTable::deleteByFilter([
		'=DICTIONARY_ID' => $dictionaryId,
	]);

	DictionaryDataTable::insertSelect($select);

	static::$validated[$dictionaryId] = true;
	return true;
}