НАЧАЛО >> Ядро доступа к ИРБИС64 >> Состояние модуля i128f📄 Скачать в DOCX
Раздел описывает служебные свойства, через которые модуль i128f хранит состояние подключения к ИРБИС64 и кэш уже открытых баз. Эти свойства нужны для внутренней работы модуля; внешний код должен пользоваться публичными методами GetRootDP(), GetRootAdminDP(), GetDb() и OpenDbByMnemonicName().
При запуске Init() задает имя и тип модуля, проверяет базовые параметры OPTIONS, затем вызывает Connect(). До успешного подключения состояние явно инициализировано начальными значениями:
$IsConnected имеет тип bool и начальное значение false;$IsConnecting имеет тип bool и начальное значение false;$debugmode имеет тип bool и начальное значение true.Connect() использует $IsConnected и $IsConnecting как защиту от повторного входа. Если подключение уже выполнено или выполняется, метод сразу завершает работу. При начале подключения $IsConnecting становится true; после инициализации корневого провайдера и чтения irbis_server.ini модуль устанавливает $IsConnected = true и возвращает $IsConnecting в false.
Пока $IsConnected не установлен, GetRootDP() возвращает null, а OpenDbByMnemonicName() не возвращает объект базы. Это защищает вызывающий код от работы с неинициализированным корневым провайдером.
$Databases объявлен как приватный массив array<string, ObjectDataDatabase> и сразу инициализирован пустым массивом. Ключом служит мнемоническое имя базы, а значением - объект ObjectDataDatabase.
OpenDbByMnemonicName($dbName) сначала вызывает Connect(), затем проверяет имя базы. Если имя начинается с -, база открывается в режиме только чтения, а для ключа кэша используется имя без префикса. Если база уже есть в $Databases, метод возвращает существующий объект без повторного открытия.
Когда база открывается впервые, модуль:
Database::getInstance()->GetNew();ReadOnly;WSOPT, PFTOPT и FMTMNU;$Databases[$dbName].Режим открытия определяется первым обращением к базе. Если первым было имя с префиксом -, последующие обращения к той же базе возвращают уже созданный объект в режиме чтения.
Прямое чтение или изменение служебных свойств модуля не является поддерживаемым контрактом. Для прикладного кода предназначены публичные методы:
GetRootDP() возвращает корневой провайдер после успешного подключения;GetRootAdminDP() оставлен совместимым синонимом GetRootDP();GetDb($dbName) открывает или возвращает из кэша объект базы;OpenDbByMnemonicName($dbName) выполняет полную инициализацию базы по мнемоническому имени.Подробности выбора провайдера и параметров подключения описаны в разделе Провайдеры и подключение.