Новый триал IBProvider [сборка 25055]
В новый триал (v3.38.0.25055) внесены следующие изменения и исправления:
1. Реализован контроль длин названий объектов в XSQLVAR (relname_length, sqlname_length, aliasname_length). До этого было обрезание при превышении максимального значения (32 или 68 байт) и обнуление отрицательного значения. Так что если серверный клиент вернет в этих полях некорректное значение, то теперь провайдер будет ругаться.
2. Внутренние изменения. Проведена ревизия AVL-дерева — это наш велосипед для замены std::map и std::set. Достаточно забавная штука, написанная в далеком 2004 году. Главная особенность этого контейнера — наличие шаблонных методов insert, find и erase. Но, как и у всех велосипедов, была еще одна «фича» — «оптимизированные» итераторы, которые перечисляли элементы так: «вершина, левый элемент, правый элемент». Вместо упорядоченного перечисления — «левый элемент, вершина, правый элемент». Эта «фича» окончательно задолбала — и итераторы обновленного дерева теперь работают предсказуемым образом. Наружу эти изменения вылезли в изменившимся порядке перечисления схем метаданных, возвращаемых IDBSchemaRowset::GetSchemas.
Ну и до кучи — предпринята очередная попытка сформировать нормальный framework для тестовых систем на C++. Нормальность определяется следующими требованиями:
- Многопоточное выполнение тестов
- Ведение логов
- Минимальные усилия для подключения
Результат работы был задействован в обновленной тестовой системе для вышеупомянутого AVL-дерева, которую можно найти в каталоге «c:\Program Files\LCPI\IBProvider.3\TestCode\lib\structure\t_tree».
«Источником вдохновления» служила основная тестовая система для IBProvider — «c:\Program Files\LCPI\IBProvider.3\TestCode\ActiveX\IBP\oledb_test».