Вести с полей

В новой тестовой сборке IBProvider (v3.55.1.29284) исправлена очень древняя ошибка, связанная с непониманием различия между состоянием источника данным и состоянием подключения.

Как следствие, вместо проверки состояния источника данных (здесь достаточно определить сам факт перехода в инициализированное состояние) проверялось состояние подключения (в общем случае это приводит к дерганью сервера).

Проверка состояния источника данных выполняется в методах IDBProperties, которые могут вызываться относительно часто.

По идее, это исправление делает ненужным свойство инициализации check_cn_status.

Не прошло и двадцати лет. Только девятнадцать.

VS2010 и VS2012

Уже очень хочется от них избавиться.

И начать писать по-настоящему интересные программы с «enum class» и «variadic templates».

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

Наверное уже можно поздравить всех, кто сюда заглядывает, с наступающим Новым 2019-ым Годом!

И это, простите меня, если что 🙂

Мысль …

… пришла в больную голову. ОРЗ или что-то вроде того, блин.

Я тут как-то тут писал что в сетевых пакетах (гоняемых между сервером и клиентом) первым делом нужно указывать их длину.

Ну, чтобы его можно было целиком выбирать пакет из потока без анализа его данных.

Сейчас этого (в FB) нет, и как результат плохо работает отмена выполнения операции (op_cancel).

Еще можно в пакеты включать последовательно генерируемый ID, для более точного управления. Но это так. Мысль не про это.

Мысль про то, что в последнем байте нужно засылать флаг подтверждения завершения отправки пакета. Какие могут быть варианты значений этого флага:

— Ноль, если все ok и пакет таки надо обработать.
— Единица, если пакет нужно выкинуть. К примеру, в процессе его отправки клиент передумал и решил его отменить.

Не знаю, хорошая эта мысль или плохая. Но зафиксировать её стоит.

Вести с полей

На сайт загружена новая тестовая сборка IBProvider — v3.55.0.29115.

В неё, в том числе, вошли результаты борьбы с предупреждениями PVS-Studio.

95% это замена assert на assert_hint.

//-V:assert_hint:779, 547
#define assert_hint(cond) assert(cond);

Из этих 95% большая часть — в моей переработанной версии libtommath, которую перед тем как затащить в проект пришлось перетряхнуть и нафаршировать ассертами.

Для остальных 5% пришлось напрячься. (далее…)

assert_hint

Созерцая предупреждение PVS-Studio для код вида:

HRESULT hr=S_OK;

try
{
 //.... много страшного кода, которые может кидать исключения, но таки не трогает hr.

 assert(hr==S_OK); //PVS-Studio warning: V547 Expression 'hr == ((HRESULT) 0L)' is always true.
}
catch //....

… задумался.

У меня таких декларативных отладочных проверок — даже не вагон и маленькая тележка. Тут их эшелон(ы).

И наверное уже пора добавить в свою в инструментальную библиотеку макрос assert_hint.

Пешите тесты

С добрым утром.

В процессе обкладывания тестами нового кода IBProvider, обнаружил интересную проблему у плюсового компилятора VS2017 (v15.9.4):

#include <iostream>

void TEST_FUNC(int)
{
 std::cout<<"TEST_FUNC(int)"<<std::endl;
}//TEST_FUNC(int)

void TEST_FUNC(short)
{
 std::cout<<"TEST_FUNC(short)"<<std::endl;
}//TEST_FUNC(short)

int main()
{
 TEST_FUNC(-1i16);
 TEST_FUNC((short)-1i16);
 TEST_FUNC(1i16);

 return 0;
}//main

На выходе видим:

TEST_FUNC(int)
TEST_FUNC(short)
TEST_FUNC(short)

Хотя ожидается:

TEST_FUNC(short)
TEST_FUNC(short)
TEST_FUNC(short)

-1i16 — это же вроде short, а не int.

Вот так вот расслабишься, а оно тебе ключом по голове.

IBProvider v4. Мысль вслух

Я вот думаю, что если эта версия когда и появится, то её основным отличием от v3 будет модульность. В том смысле, что будет набор DLL.

Эта мысль уже неоднократно приходила в мою бестолковую голову, и надо бы её как-то уже задокументировать.

Первым кандидатом на оформление в виде в виде отдельной DLL является менеджер потоков и задач, который продублирован в «LCPI OLE DB Services». Будет интересно посмотреть как эта пара независимых, но работающих совместно, наборов компонент будут разделять общие системные ресурсы.

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

16 декабря

Каждый год, 16 декабря, мы с друзьями я себе напоминаю, что не надо обещать сделать то, что уже не готово процентов на 90%. А лучше на все 110%.

И если пообещал, то лучше сделать.

Чтобы потом не было грустно.


Вообще, три года назад был интересный месяц — в IBProvider был запилен собственный клиент для Firebird.

Сейчас тоже ничего, но это осознается через пару лет 🙂

IBProvider v3.54

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

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

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

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

UPD [2018-12-15].

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

Отсюда