Состояние модуля i128f


НАЧАЛО >> Ядро доступа к ИРБИС64 >> Состояние модуля i128f📄 Скачать в DOCX


Раздел описывает служебные свойства, через которые модуль i128f хранит состояние подключения к ИРБИС64 и кэш уже открытых баз. Эти свойства нужны для внутренней работы модуля; внешний код должен пользоваться публичными методами GetRootDP(), GetRootAdminDP(), GetDb() и OpenDbByMnemonicName().

1. Инициализация подключения

При запуске Init() задает имя и тип модуля, проверяет базовые параметры OPTIONS, затем вызывает Connect(). До успешного подключения состояние явно инициализировано начальными значениями:

Connect() использует $IsConnected и $IsConnecting как защиту от повторного входа. Если подключение уже выполнено или выполняется, метод сразу завершает работу. При начале подключения $IsConnecting становится true; после инициализации корневого провайдера и чтения irbis_server.ini модуль устанавливает $IsConnected = true и возвращает $IsConnecting в false.

Пока $IsConnected не установлен, GetRootDP() возвращает null, а OpenDbByMnemonicName() не возвращает объект базы. Это защищает вызывающий код от работы с неинициализированным корневым провайдером.

2. Кэш открытых баз

$Databases объявлен как приватный массив array<string, ObjectDataDatabase> и сразу инициализирован пустым массивом. Ключом служит мнемоническое имя базы, а значением - объект ObjectDataDatabase.

OpenDbByMnemonicName($dbName) сначала вызывает Connect(), затем проверяет имя базы. Если имя начинается с -, база открывается в режиме только чтения, а для ключа кэша используется имя без префикса. Если база уже есть в $Databases, метод возвращает существующий объект без повторного открытия.

Когда база открывается впервые, модуль:

Режим открытия определяется первым обращением к базе. Если первым было имя с префиксом -, последующие обращения к той же базе возвращают уже созданный объект в режиме чтения.

3. Внешний доступ к состоянию

Прямое чтение или изменение служебных свойств модуля не является поддерживаемым контрактом. Для прикладного кода предназначены публичные методы:

Подробности выбора провайдера и параметров подключения описаны в разделе Провайдеры и подключение.