Разработчикам СУБД посвящается

Безумие и успех кода Oracle Database

Краткая аннотация: обкладывайте гуанокод тестами.

… 25 миллионов строк на языке C …

Это жесть. Просто жесть.

Секрет — в миллионах тестов. Их полное выполнение может занимать от 20 до 30 часов (при этом выполняются они распределенно на тестовом кластере из 100-200 серверов).

Просто оставлю здесь вот эту ссылку.

Про плюсы :)

Добавлю сюда ссылку на эту статью с хабра — Жизнь С++

Чтобы потом её снова найти и 🙂

UPD

Я мечтал, чтобы компьютеры стали такими же простыми в использовании, как телефоны. Недавно моя мечта сбылась: я не смог разобраться с моим новым телефоном. (Бьёрн Страуструп)

Это про меня и мой телефон.

Вести с полей

Сегодня начал писать новый код для адаптера EntityFrameworkCore. Попытался начать 🙂

Нужно соорудить транслятор System.DateTime.AddDays(double) в SQL.

Сначала надо посмотреть как Firebird переварит double значение:

… а переваривает он его не так как ожидалось 🙂


По-моему в IBProvider уже есть транслятор в DATEADD. Из какой-то ODBC-функции.

И сдается мне, в тот раз (это было 11 лет назад) мы прошляпили эту засаду с округлением.

Вести с полей

Сегодня попытался начать работать…

Как выглядят костыли в коде

В ADO.NET есть стандартная схема метаданных DataSourceInformation, в которой определена колонка ParameterMarkerFormat:

A format string that represents how to format a parameter.

If named parameters are supported by the data source, the first placeholder in this string should be where the parameter name should be formatted.

(1) For example, if the data source expects parameters to be named and prefixed with an ‘:’ this would be «:{0}». When formatting this with a parameter name of «p1» the resulting string is «:p1».

(2) If the data source expects parameters to be prefixed with the ‘@’, but the names already include them, this would be ‘{0}’, and the result of formatting a parameter named «@p1» would simply be «@p1».

Провайдер данных MSSQL попадает под вторую категорию — в имена параметров включается префикс. Ну, наверное, вы такое уже видели, что в ADODB, что в ADO.NET. Под него косит халявный ADO.NET провайдер для Firebird. То есть, ParameterMarkerFormat у MSSQL провайдера содержит «{0}».

IBProvider может работать и так и сяк, в зависимости от настройки строки подключения named_param_rules.

В первом случае (режим по-умолчанию) named_param_rules=0. Во втором случае: named_param_rules=1.

Теперь перейдем к костылям, которые я обещал показать.

(далее…)

Поезд-экспресс …

… проходит мимо пассажира, стоящего на перроне за 5 секунд. Мимо пассажира встречной электрички за 15 секунд. За сколько секунд он пройдет мимо пассажира встречной электрички, если скорость обеих электричек одинаковая.

Объяснение решения заняло обратную сторону конверта, который валялся на столе.

Потом, задумался. Если верить Клэнси, Тому Клэнси, есть люди, которые на обратной стороне конверта способны спроектировать атомный реактор…

Но я думаю — тут все дело в конвертах…

InterBase v13.2.0.322

Осознав, что я уже очень долго не интересовался судьбой предка Firebird, решил посмотреть его текущее состояние.

Оказывается весной 2018-го вышло обновление — InterBase 2017 Update 2.

На WinXP SP2 поставился без проблем.

Из исправлений улыбнуло «COMMIT RETAIN does not release a named SAVEPOINT» — IBP-66. Проверил — действительно исправили. Хотя тикет не закрыт.

Теперь можно им закинуть что-нибудь еще. Потом, когда-нибудь.

На ночь глядя

Once again looking forward to a great relationship — you guys are awesome and I’ve been using your IBProvider for over 10 years now. When every other single Interbase/Firebird ODBC driver failed, IBProvider was the perfect solution for us. We have used IBprovider to successfully integrate Firebird with every type of application, including order and consignment management of over 1 million connotes nationally per year, and it never skips a beat. Well done Dmitry – you’ve got an awesome, mature product that makes working with Firebird a breeze!

Пойду спать со спокойной совестью.

Про абстракции

Все нетривиальные абстракции в какой-то степени дырявые.
— Джоэл Спольски (Joel Spolsky)

Нашел здесь.

Улыбнуло.

Тестирование .Net провайдера

В качестве развлечения, выстроил все запущенные процессы на экране и «сфоткал» 🙂

FW3.5, FW4.0, FW4.5, FW4.5.1, FW4.6, FW4.6.2, FW4.7.2

Есть еще пара сборок под .NET Standart 2.0, но они тестируются другим «запускателем». Тесты там те же самые.

Красненькое — это привет от Firebird, с которым неохота разбираться:

[Firebird] lock conflict on no wait transaction
Acquire lock for relation (NUM) failed

Код ошибки COM: E_FAIL. SQL State: «40001». Код ошибки DBMS: 335544345.