В новой версии IBProvider реализована эмуляция типов BOOLEAN и GUID при работе с Firebird и InterBase
Суть проблемы:
- Тип GUID на текущий момент не поддерживается ни одним сервером Firebird и InterBase, но нередко используется различными клиентами (к примеру, в ADO Entity Framework).
- Тип Boolean поддерживается в InterBase начиная с 7-й версии и не поддерживается сервером Firebird. IBProvider умеет работать с этим типом, но не хватает поддержки со стороны остальных серверов.
В новой версии IBProvider поддержка типов Guid и Boolean была реализована на уровне драйвера, и теперь вы можете свободно использовать эти типы в своих приложениях независимо от версии сервера Firebird и InterBase.
Данные хранятся в типах, которые поддерживаются сервером. IBProvider просматривает домены данных и если обнаруживается домен, подходящий по маске, он выставляет колонке соответствующий тип Boolean или Guid.
Домены должны удовлетворять следующим условиям:
- для типа BOOLEAN домен базируется на типе SMALLINT.
- для типа GUID домен базируется на типе CHAR(16) с кодовой страницей OCTETS.
Новые свойства для включения эмуляции типов
Для того чтобы указать провайдеру какие данные следует интерпретировать как Boolean или Guid, в IBProvider добавлены два новых свойства инициализации: «user_type_boolean«, «user_type_guid«. В них определяется маска домена, который представляет эмулируемый тип. В маске поддерживаются символы «*» и «?». Маска чувствительна к регистру.
При несоблюдении этих условий, провайдер игнорирует имя домена и не пытается выполнять подмену типа.
Эмуляция работает для:
- Колонок с простым типом;
- Колонок с массивами;
- OUT-параметров с простым типом;
- OUT-параметров с массивами;
- IN-параметров с массивами.
Ограничения эмуляции типов
Из-за ограничений ISC API (IB/FB), при использовании простых типов для входящих параметров команд, необходимо явно указывать тип параметра. Для колонок с массивами поддерживается автоматическое формирование описания параметра.
Эмуляция типов в метаданных
Эмуляция типов распространяется и на схемы метаданных. Провайдер обеспечивает согласованность типов, которые читаются при выполнении запросов и типов, которые отображаются в схемах COLUMNS, PROCEDURE_PARAMETERS, PROCEDURE_COLUMNS.
Решена проблема с настройкой подключения через диалог DataLink (v1,v2,v3)
Устранено зависание при использовании DataLink из программы, инициализирующей COM для работы с «Free Threaded» объектами.
Оптимизация объектов провайдера для «Free Threaded» модели COM (v1,v2,v3)
Все объекты провайдера, с которыми может взаимодействовать пользователь, предоставляют интерфейс IMarshal, оптимизированный для «Free Threaded» COM-приложений.
Таким образом, теперь IBProvider предоставляет максимально полную поддержку для многопоточных клиентов. Не зависимо от наличия такой поддержки со стороны gds32.dll/fbclient.dll
Хорошим примером многопоточного клиента является C++ тестовая система IBProvider, которая задействует все доступные ядра и процессоры компьютера для прогона полумиллиона тестов провайдера.
Исходные тексты тестовой системы находятся в каталоге «TestCode\ActiveX\IBP\oledb_test».
Новые примеры и дистрибутив:
Примеры использования эмуляции типов на .Net Framework: «Эмуляция Boolean и Guid в Firebird and InterBase«.