А может и третьего. Первым был Адриано.
Второй, наверное — разработчик Java клиента для FB, который затеял третью версию. Не говори гоп, пока не перепрыгнул.
Да, да. Всем привет! 🙂
Под вечер прочитал в рассылке, связанной с разработкой Firebird Net Client:
[1] Let’s face it, the code is crappy. Redesign would be nice. But I
don’t blame anybody, 5-10 years ago it was different story. .NET was
different (a lot) and we had different understanding of how it works
and should work (and how we should design code).
Как говорится — completely agree.
По-ехидничаю у себя в блоге — «он думает что сейчас уже (точно) знает как нужно проектировать код».
—-
Для полноты картины, осталось только про FB-ODBC чего нибудь подобное почитать.
—-
Хоть какое-то развлечение за сегодня. WiX таки вынес мне мозг сегодня. И, думаю, самое веселое еще впереди.
Привет всем.
1. Выложили новый релиз IBProvider-а. На этом будем считать, что работа над ошибками (см. серию релизов 3.16.x) завершена.
2. Выложен дистрибутив с допиленным .NET провайдером. Десерт был сожран съеден при свечах.
В ближайших планах — переработка инсталлятора .NET провайдера. Хотя от одной только мысли об WiX мой мозг содрогается …
3. На тестовом сервере уже четвертую неделю (с 16 октября) идет попытка #3 прогнать все тесты для IBProvider-а. Проехало 257 тысяч тестов (из 7млн). База опухла до террабайта (в запасе есть еще 2.5TB).
В целом, пока полет нормальный 🙂
Привет всем.
В новой сборке (#1552) реализован последний отсутствующий кирпичик ADO.NET провайдера — компонент поддержки безопасности: OleDbPermission.
Кроме того, были изменены настройки сборок с реализацией провайдера: lcpi.data.oledb.xxxxx.dll и lcpi.lib.xxxxx.dll. Теперь их можно загружать в домены с ограниченными правами.
Для всего этого добра были созданы тесты (.NET 3.5, 4.0, 4.5), которые можно поизучать самостоятельно (см. сборки lcpi.data.oledb.ntest.xxxxx.dll, пространство имен lcpi_data_oledb_tests.OleDbPermission).
Насколько я въехал в эту тему — все это предназначается для эксплуатации ADO.NET на хостингах (?).
—-
Процесс разработки ядра нашего ADO.NET провайдера подошел к своему логическому завершению. На десерт я оставил реализацию одного единственного метода — OleDbCommand.Cancel.
Обожаю эти моменты.
Привет всем.
На сайт загружен новый дистрибутив .Net провайдера (сборка 1524), в котором реализована компонента OleDbCommandBuilder.
Особенности реализации:
- Поддерживается генерация запросов для баз первого и третьего диалекта. Точнее — учитывается диалект подключения.
- Учитываются свойства инициализации IBProvider-a: named_param_prefix и named_param_rules.
- В случае OLEDB провайдера, отличного от IBProvider-a, в генерируемых запросах будут использоваться неименованные параметры.
- Метод DeriveParameters работает с любыми типами запросов. Не только с запросами для вызова хранимой процедуры.
- Как обычно, в случае проблем будут генерироваться исключения с максимально подробным описанием ошибок.
Для работы .Net провайдера требуется IBProvider с версией не ниже 3.17.0.15423. Дистрибутивы с триалом этой версии также были загружены на сайт. В случае использования более старых версий IBProvider-a, .NET провайдер будет генерировать исключение «отказ в обслуживании».
—
Формально, осталось реализовать относительно тривиальный класс OleDbPermission. И после этого функционал нашего .Net провайдера полностью перекроет System.Data.OleDb.
Вот так вот 🙂
Привет всем.
В этой короткой заметке, я проведу небольшое исследование использования IBProvider-a в качестве связанного сервера MSSQL. Основная цель — показать недостатки неявного управления транзакциями. Ну и, до кучи, узнаем что MSSQL хочет от IBProvider-а. (далее…)
Вот поезд наш едет, колеса стучат…
Привет всем.
На сайт загружен новый дистрибутив .NET провайдера (сборка 1473), в котором реализован новый компонент — OleDbDataAdapter.
Так же в дистрибутиве появился новый пример, который демонстрирует использование OleDbDataAdapter-а и запроса «INSERT RETURNING INTO» для получения автогенерируемых значений колонок.
Можно также посмотреть другой новый пример, который делает тоже самое, но только через компоненты System.Data.OleDb. В этом случае используются неименованные параметры (потому что именованные параметры не поддерживаются) — вместо одного IN-OUT параметра задействована пара IN и OUT параметров.
Всех удачных выходных! 🙂
Привет всем.
Интересно, кроме меня еще кто-нибудь когда-нибудь (грязно) ругался по поводу реализации DbDataAdapter.Dispose(disposing)?
override protected void Dispose(bool disposing) { // V1.0.3300, MDAC 69629
if (disposing) { // release mananged objects
IDbDataAdapter pthis = (IDbDataAdapter) this; // must cast to interface to obtain correct value
pthis.SelectCommand = null;
pthis.InsertCommand = null;
pthis.UpdateCommand = null;
pthis.DeleteCommand = null;
}
// release unmanaged objects
base.Dispose(disposing); // notify base classes
}
Казалось бы — безобидный код. Но здесь есть одно но — эти обнуления (pthis.xxx=null) вызывают виртуальные set-методы, переопределенные в (моем) производном классе. А объект этого производного класса уже перешел в состоянии «Я Disposed». И соответственно первый же pthis.SelectCommand=null выкидывает исключение ObjectDisposedException.
Так учит партия — выкидывать ObjectDisposedException при обращении к любому методу (кроме Dispose) «освобожденного» объекта.
Спрашивается — какого черта ты из Dispose вызываешь виртуальные методы?
Хочется взять и <censored> того, кто написал этот код.
—-
В этом DbDataAdapter вообще как-то через … голову построена установка/получение SelectCommand/InsertCommand/UpdateCommand/DeleteCommand. Прямо чувствуется как мечется мысль в башке создателя DbDataAdapter: «как, как мне замутить установку «правильных» команд в DbDataAdapter?». И погибает, убивая себя об стол, об который бился череп.
По этой причине производные классы (те же System.Data.OleDb.OleDbDataAdapter и System.Data.SqlClient.SqlDataAdapter) кладут на эту инфраструктуру и переопределяют её на своем уровне (заново наследуют IDbDataAdapter). Но DbDataAdapter.Dispose и туда гадит.
Хочу быть тупым, чтобы даже не сталкиваться с такими вещами.
Привет всем.
С сайта IBProvider-a можно скачать дистрибутив с обновленным .NET провайдером, в котором реализована поддержка схем метаданных.
(далее…)
Привет всем.
В FB3 был добавлен новый способ представления текстовых литералов в тексте запроса:
<alternate string literal> ::=
{ q | Q } <quote> <alternate start char> [ { <char> }… ] <alternate end char> <quote>
Author: Adriano dos Santos Fernandes
Перед тем как начинать добавлять поддержку этого представления в IBProvider, я пару часов морально готовился, созерцая картинки вида:

И как в воду глядел 🙂
(далее…)
Привет всем.
Новый рабочий год начинается тяжко начал с ревизии и доработки существующего кода :). А конкретнее:
— Натравил на код анализаторы.
— Немного оптимизировал работу с низкоуровневыми конструкциями, на которых базируется вся инфраструктура.
(далее…)