IBProvider v1.7.4.289
В этой версии
- Устранены все известные на текущий момент ошибки и неточности, связанные с конвертированием типов данных.
- Улучшена поддержка Client Cursor Engine.
Поддержка NUMERIC
В предыдущих версиях при подготовке параметров с типом DBTYPE_NUMERIC (adNumeric) использовалось промежуточное преобразование в double. При этом могли теряться значащие цифры. Сейчас используется прямое конвертирование в InterBase представление NUMERIC (целое+масштаб) с учетом текущего диалекта подключения. Преобразование в double используется, только если DBTYPE_NUMERIC содержит число, которое нельзя представить в виде целое+масштаб с использованием INT32 (первый диалект) или INT64 (третий диалект).
Исправления распространяются как на обычные NUMERIC параметры, так и на параметры, содержащие NUMERIC-массивы.
Потеря точности NUMERIC-данных при чтении была исключена с самого начала (см. версию 1.6.1).
Примите во внимание, что DBTYPE_NUMERIC не является VARIANT-совместимым типом данных. Поэтому, возможно, для ADODB полностью исключить потерю значащих цифр можно только использованием текстового представления числа.
Поддержка бинарного представления и storage-объектов
Теперь получать и устанавливать в виде DBTYPE_BYTES и storage-объектов с интерфейсом ISequentialStream можно любые данные. В том числе и элементы массивов. Ранее ISequentialStream поддерживался только для BLOB полей.
В частности, Client Cursor Engine читает/устанавливает VARCHAR(32000) как storage-объект.
Эта поддержка доступна и в клиентской библиотеке классов С++ для работы с OLE DB.
Управление параметрами запроса
Добавлены новые свойства инициализации источника данных и команды.
Свойство auto_param_describe. Если при выполнении параметризованного запроса не были установлены описания параметров, то провайдер сформирует их автоматически. Значение по умолчанию — true. Если вы хотите проверить корректность работы вашего программного обеспечения, то эту поддержку можно отключить.
Свойство force_param_describe. Принудительное получение описания параметров. Обеспечивает передачу значений параметров в том формате, который требует сервер. При этом вся нагрузка ложится на конвертор типов провайдера. Ранее неявное получение описания параметров проводилось только для массивов. Значение по умолчанию — true.
В результате, например, можно не заботиться о корректной установке описания текстовых BLOB полей, а работать с ними как с обычными текстовыми полями. Если в вашей базе данных произошла смена типа с VARCHAR на BLOB или наоборот, то провайдер самостоятельно скорректирует принцип установки данных. Заметьте, что пока сам сервер баз данных может только писать VARCHAR в BLOB, но не наоборот.
Поддержку такого рода требует Client Cursor Engine, который интерпретирует текстовые поля типа VARCHAR(32000) как MEMO.
Если вы формируете корректные описания параметров, то вы можете установить это свойство в false. Это исключает одно лишнее обращение к серверу при первом (!) выполнении параметризированного запроса.
Свойство clear_param_info. При установке нового текста запроса провайдер очищает список описаний параметров. Однако, если клиент сначала устанавливает описания параметров, а потом текст запроса, то информация о параметрах теряется и провайдер запрашивает описания с сервера (см. auto_param_describe). Это приводит к лишнему вызову IB API и возможности неправильной интерпретации данных, представленных в виде BYTES / storage-объектов. Значение по умолчанию — true.
Определить последовательность установки текста запроса и описания параметров можно с помощью специальной трассировочной версии провайдера.
Потеря пользовательской установки описания параметров наблюдалась при работе с ADO.NET.
Принцип выполнения SP
В предыдущих версиях провайдера было добавлено новое свойство инициализации источника данных и команды — std_exec_sp. Это свойство определяет, каким образом нужно интерпретировать запрос «exec SP» / «execute SP».
Следует иметь в виду, что описание хранимых процедур в schema rowset описывает SP с OUT-параметрами независимо от значения std_exec_sp в строке инициализации источника.
Schema Rowset
Исправлены незначительные ошибки в генерации наборов данных. Обеспечена возможность чтения данных с использованием флага DBMEMOWNER_PROVIDEROWNED, что уменьшает трафик перемещения данных между клиентом и провайдером до минимума.
Множество, возвращаемое IColumnsRowset
Добавлена поддержка DBMEMOWNER_PROVIDEROWNED.
В итоге
На этом основную работу над ошибками можно считать законченной. Тем не менее, если эксплуатация выявит серьезные недостатки, то перед версией 1.8 будет выпущен промежуточный билд.