IBProvider v3.54

Сборки IBProvider v3.54.0.29017 доступы для скачивания из личных кабинетов.

Основные изменения
1. Улучшена устойчивость кода к OUTOFMEMORY.
2. Изменена обработка строки подключения. Дубли и ошибки в структуре списка параметров теперь обрабатываются как критические ситуации и провайдер выкидывает сообщения об ошибках.

До кучи обновлены «LCPI OLEDB Services» — v1.6. Изменения в этих компонентах так же связаны с обработкой строки подключения.

В следующем выпуске IBProvider запланирован переезд на новые конструкции управления OLE DB свойствами. Об старые, которые последний раз обновлялись лет семь назад, начал спотыкаться мозг.

UPD [2018-12-15].

… а к плохим мальчикам и девочкам ночью приходит черный ООМ и убивает все процессы направо и налево

Отсюда

Firebird 3.0.5.33083

Утром посмотрел состояние сервера после нагрузочного тестирования IBProvider. Что-то как-то много у него дескрипторов осталось незакрытых. 280 штук.

Вроде это уже чинилось и он (сервер) начал нормально себя вести. В частности, после «большого тестирования FB3.0.4.33047» у него оставалось всего 228 дескриптора.

В голову приходят такие мысли:

1. В 3.0.5 что-то сломали?
2. Два из шести проходов нагрузочного тестирования были выполнены с участием 64-битной fbclient.dll. Надо будет её подумать подольше.
3. Да забей. У IBProvider с ресурсами все тип-топ (стучу по столу) и ладно.

Новый триал IBProvider 3.54.0.29017

Уже дважды прогонял тесты, позволяющий выпустить релиз IBProvider 3.54, но опять решил немного доработать код 🙂

На днях осознал «variadic templates», и не смог не заюзать их для обновления одной штуки, написанной в далеком 2001 году — это конструкция для хранения указателя на метод объекта. Аналог event’ов из Delphi и C++ Builder.

Код радикально сократился и теперь может переваривать методы с любым количеством параметров. Немного расстроило то, что поддержка variadic template появилась только в 2013 студии. Поэтому новый код работает только в сборках vc12xp, vc14xp и vc15. Сборки vc10, vc11xp используют старые конструкции (хотя я их тоже доработал для поддержки rvalue references). В триал включены сборки vc12xp.

Если кому интересно — исходный код обозначенных конструкций можно посмотреть в каталоге «c:\Program Files (x86)\LCPI\IBProvider.3\lib\structure\closure».

Вообще, современные плюсы немного «сдвигают» сознание. Каких-то десять лет назад о такой штуке как «variadic templates» даже и не мечталось.

Пятничное

— У тебя есть мечта?
— Да, все переписать.
— Ну так перепиши!
— А как я без мечты буду жить?!

Hello World

Создал новый консольный проект в свежей 2017-ой студии.

Долго смотрел на болванку, которую он создал:

// test_for_oledb_property_v2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <iostream>

int main()
{
    std::cout << "Hello World!\n"; 
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file

Вот как можно накосячить в такой программе?

PS. Уже даже не сильно хочется ругаться на то, что скайп глючит и банкомат зажевал деньги.

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

Безумие и успех кода 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.

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

(далее…)