Уже дважды прогонял тесты, позволяющий выпустить релиз 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» даже и не мечталось.
Создал новый консольный проект в свежей 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. Уже даже не сильно хочется ругаться на то, что скайп глючит и банкомат зажевал деньги.
Секрет — в миллионах тестов. Их полное выполнение может занимать от 20 до 30 часов (при этом выполняются они распределенно на тестовом кластере из 100-200 серверов).
Добавлю сюда ссылку на эту статью с хабра — Жизнь С++
Чтобы потом её снова найти и 🙂
UPD
Я мечтал, чтобы компьютеры стали такими же простыми в использовании, как телефоны. Недавно моя мечта сбылась: я не смог разобраться с моим новым телефоном. (Бьёрн Страуструп)
В 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 секунд. За сколько секунд он пройдет мимо пассажира встречной электрички, если скорость обеих электричек одинаковая.
Объяснение решения заняло обратную сторону конверта, который валялся на столе.
Потом, задумался. Если верить Клэнси, Тому Клэнси, есть люди, которые на обратной стороне конверта способны спроектировать атомный реактор…