Вау!

Оказывается я пропустил весьма занятную новость.

Announcing the new release of OLE DB Driver for SQL Server

Previously, Microsoft announced deprecation of the Microsoft OLE DB Provider for SQL Server, part of the SQL Server Native Client (SNAC). At the time, this decision was made to try to provide more simplicity for the developer story around Windows native software development as we moved into the cloud era with Azure SQL Database, and to try to leverage the similarities of JDBC and ODBC for developers. However, during subsequent reviews it was determined that deprecation was a mistake because substantial scenarios within SQL Server still depend on OLE DB and changing those would break some existing customer scenarios.

With this in mind, we have decided to undeprecate OLE DB and release a new version by the first quarter of calendar year 2018 March 2018

С++ для чайников

Под новый год забрел в книжный магазин и унес с собой сабжевую книженцию. Ностальгия и все такое. У меня была первая редакция этой книги 🙂

Иногда полистываю, на ночь глядя.

Ближе к концу книги есть хороший совет:

Всегда инициализируйте указатели в конструкторах и всегда обнуляйте указатель после освобождения памяти, на которую он указывает. Эти действия лишними не бывают.

Вспомнились баги Firebird 2.5, в котором этим правилом пренебрегали.

Спокойных вам кошмаров снов.

DBTYPE_EMPTY и DBTYPE_NULL

Привет всем.

Через 18 лет (радует что не 20) сформировалось полное понимание назначения типов данных DBTYPE_EMPTY и DBTYPE_NULL.

DBTYPE_EMPTY обозначает отсутствие значения как такового. Указание данных с типом DBTYPE_EMPTY — это сигнал использовать значения по умолчанию. Это же самое что указать статус данных DBSTATUS_S_DEFAULT.

DBTYPE_NULL обозначает NULL-состояние данных. Это же самое что указать статус данных DBSTATUS_S_ISNULL.

Зачем нужно дублирование DBTYPE_EMPTY/DBTYPE_NULL и DBSTATUS_S_DEFAULT/DBSTATUS_S_ISNULL?

Типы используются в языках вроде VB/C# с доступом к провайдеру через ADODB/ADO.NET. Там есть предопределенные значения empty/null (VB) и null/DBNull.Value (C#). Просто присваиваете эти значения и провайдер получит сигнал использовать DEFAULT или NULL значение для параметра/колонки.

А статусы используются при работе с провайдером напрямую — вы подготавливаете многократно используемый «буфер для обмена данных» с указанием «нормальных» типов данных параметров/колонок, а потом, в зависимости от ситуации, выставляете статусы DBSTATUS_S_OK/DBSTATUS_S_ISNULL/DBSTATUS_S_DEFAULT передаваемым значениям.

С парой DBTYPE_NULL/DBSTATUS_S_ISNULL IBProvider нормально работает уже давно.

А вот с DBTYPE_EMPTY/DBSTATUS_S_DEFAULT — пока полный косяк.

18 лет

Привет всем.

Сегодня стукнуло 18 лет с начала разработки IBProvider. Можно порадоваться, а можно и ужаснуться.

Грубый анализ состояния проекта с помощью SourceMonitor-а, показывает следующий цифры:

Project Name                        IBProvider
Checkpoint Name                     Checkpoint1
Created On                          17 Jan 2018, 22:34:18
Files                               4881
Lines                               631 930*
Statements                          225 503
Percent Branch Statements           12,0
Percent Lines with Comments         32,6
Classes Defined                     2 336
Methods Implemented per Class       7,29
Average Statements per Method       7,9
Line Number of Most Complex Method  {undefined}
Name of Most Complex Method         RemoteFB__P13__XSQLDA_Utilities::Helper__Parse_XSQLDA_MSG_DATA
Maximum Complexity                  71
Line Number of Deepest Block        {undefined}
Maximum Block Depth                 9+
Average Block Depth                 1,26
Average Complexity                  2,53
Functions                           2 920

Самой первой подсистемой этого проекта был конвертер OLE DB типов. Как сейчас помню — гигантский файл под две тысячи строчек.

В 2008 году этот конвертер был переписан — это первое что было обновлено, когда IBProvider стал основным проектом. Кстати, новая архитектура конвертера оказалось очень удачной.

На днях исходный код этого конвертера был еще раз реорганизован.

Исходя из этого, можно сделать осторожный вывод, что одна итерация разработки IBProvider составляет ~9 лет 🙂

Вести с полей

Привет всем.

1. Сегодня обновил сборки IBProvider (3.47.0.27224), которые крутились под тестами с 7 ноября прошлого (2017) года. Больше двух месяцев. Даже стало интересно сколько этот релиз IBProvider наработал процессорного времени под тестами. Получилось 154 дня. Пять месяцев, Карл.

2. В течении прошедших двух месяцев возился с провайдером для linq2db. Очень увлекательное занятие. Соорудил прототип, который объективно отрабатывает тесты лучше встроенного провайдера для FB. Но для завершения работы нужно подождать пока родители linq2db доведут до ума интерфейс инициализации внешних дата-провайдеров.

С Наступающим Новым Годом!

Привет всем!

Хотел вчера эту заметку написать, но все закончилось тем, что полдня приводил в порядок код этого блога 🙂

На днях получил письмо от одного пользователя с такой фразой:

«Here in our company we use a small management and sales system that used the Firebird database. For years I’ve been trying to use it with Microsoft’s SSRS (Reporting Services) using ODBC, but I’m getting tired of the limitations of this feature, especially for using IN operator and multi-parameter selection.
I tried the trial product of you, I created a liked server of Sql Server 2014 for Firebird and after that I was able to use the IN operator and the multi selection of parameters. I really was delighted by the product and I was very interested in buying.»

Так что я желаю всем поменьше мучаться. Живем один раз и нет никакого смысла тратить свое время и нервы на испуганные поделки. Если, конечно, это не специфический способ получения удовольствия. Тогда «ой» 🙂


Ну а сам я, пожалуй, пожелаю чтобы у Firebird появилась хотя бы пара СВЕЖИХ разработчиков, которые бы немного расшевелили этот проект. Одного мало — он там погибнет 🙂

ADO.NET провайдер v1.4

Привет всем.

Сегодня решил выпустить в свет небольшое обновление .NET провайдера — v1.4.

Основным и главным изменением является разделение NUGET-пакета на две части. В одном пакете находится сам ADO.NET провайдер (lcpi.data.oledb). Во втором пакете находится вспомогательная (инструментальная) библиотека (lcpi.lib).

We really love our work and our customers :)

Вот так сидишь, ласково матерясь, возводишь инфраструктуру нового модуля, а тебе приходит письмо от клиента:

Your devs seem to be the only ones in the world to be able to get 3rd party Interbase connectivity to work as advertised. Great work!

MonteNegro мне на сердце.

Про улучшения

Как гласит народное предание, первыми словами обезьяны, когда она слезла с дерева, были — «раньше было лучше».

Созерцая глюки «Google Analytics», не могу с ней не согласиться.

Картинка дня

Подготовка нового релиза