• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/database.php
  • Класс: CAllDatabase
  • Вызов: CAllDatabase::GetDBNodeConnection
static function GetDBNodeConnection($node_id, $bIgnoreErrors = false, $bCheckStatus = true)
{
	global $DB;

	if(!array_key_exists($node_id, self::$arNodes))
	{
		if(CModule::IncludeModule('cluster'))
			self::$arNodes[$node_id] = CClusterDBNode::GetByID($node_id);
		else
			self::$arNodes[$node_id] = false;
	}
	$node = &self::$arNodes[$node_id];

	if(
		is_array($node)
		&& (
			!$bCheckStatus
			|| (
				$node["ACTIVE"] == "Y"
				&& ($node["STATUS"] == "ONLINE" || $node["STATUS"] == "READY")
			)
		)
		&& !isset($node["ONHIT_ERROR"])
	)
	{
		if(!array_key_exists("DB", $node))
		{
			$node_DB = new CDatabase;
			$node_DB->type = $DB->type;
			$node_DB->debug = $DB->debug;
			$node_DB->DebugToFile = $DB->DebugToFile;
			$node_DB->bNodeConnection = true;
			$node_DB->node_id = $node_id;

			if($node_DB->Connect($node["DB_HOST"], $node["DB_NAME"], $node["DB_LOGIN"], $node["DB_PASSWORD"], "node".$node_id))
			{
				if(defined("DELAY_DB_CONNECT") && DELAY_DB_CONNECT===true)
				{
					if($node_DB->DoConnect("node".$node_id))
						$node["DB"] = $node_DB;
				}
				else
				{
					$node["DB"] = $node_DB;
				}
			}
		}

		if(array_key_exists("DB", $node))
			return $node["DB"];
	}

	if($bIgnoreErrors)
	{
		return false;
	}
	else
	{
		static::showConnectionError();
		die();
	}
}