Эксперименты с подключением к 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 можно уже смело черенком от лопаты отлучать от церкви.
Еще раз — всех с пятницей!
dimitr on 20 февраля, 2015
а через сервисы получить isc_info_svc_server_version не судьба?