Эксперименты с подключением к FB

С пятницей.

Сто лет назад, в 2006, я озвучивал вслух мысль о том что «было бы неплохо иметь возможность получать информацию о сервере базы данных до подключения к самой базе данных». Сейчас, в рамках прямого подключения к FB через TCP/IP, в принципе можно сказать к какой версии FB мы подключаемся — на основе версии протокола, которая согласуется с сервером до подключения к базе данных. В ISC API, для аналогичного трюка, нужно разделить isc_attach_database на две функции — connect_to_server и attach_database. Первая подключается к серверу, вторая к базе данных. После подключения к серверу нужно разрешить выполнять isc_database_info для получения версии протокола.

А вообще хотелось бы, после подключения к серверу, получать данные для isc_info_firebird_version (id: 103).

В рамках этих мыслей провел два эксперимента с FB 2.5.x.

Первый.
Отправляем op_info_database до операции op_connect, которая согласует версию протокола. Смешно, но сервер ответил пакетом op_response с кодом ошибки 4. Это ошибка bad_db_handle в голом (неупакованном) виде.

Второй.
Отправляем op_info_database сразу после операции op_connect, которая согласует двенадцатую версию протокола. Сервер вернул op_response с кодом ошибки 335544324. Это ошибка bad_db_handle в упакованном виде.

Протокол этих двух экспериментов. В логе самого сервера следов не обнаружено.

То есть, пока сервер морально не готов сообщать о себе какую нибудь информацию до того как будет выполнено подключение к базе (op_attach).

Остается только ждать озарения и снисхождения.

—-
А в целом, созерцая серверный механизм обработки пакетов, я категорически соглашусь с мыслями Адриано. За одну структуру PACKET можно уже смело черенком от лопаты отлучать от церкви.

Еще раз — всех с пятницей!

2 комментария

dimitr  on 20 февраля, 2015

а через сервисы получить isc_info_svc_server_version не судьба?

Dmitry Kovalenko  on 21 февраля, 2015

Не, я лучше через версию протокола буду это делать. Все меньше телодвижений по сети.

Собственно говоря, мне это нужно для того, чтобы узнать какие параметры можно пихать в DPB, а какие нельзя.

Вот, кстати, мысль — в каком-нибудь новом протоколе имеет смысл расширить op_attach (+op_создать_БД) для получения сведений о базе данных и сервере. Чтобы получать эти сведения сразу, а не отдельным op_info_database…

Leave a Comment