Дата публикации: 04.07.2009

В новой версии 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«.


Дата публикации: 04.07.2009. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.