Несмотря на то, что я закончил факультет «прикладной математики», где даже была кафедра программирования (меня там не было), знания о промышленном программировании и управлении процессом пришлось добывать самому. Преимущественно через человекожопочасы.
Хотя нет. Мой Старик говорил мне в школе — «старайся делать хорошо, плохо само получится».
Тем забавнее сравнивать собственные правила и внешними. Например, оформление кода. Документирование. Создание тестов. Создание дополнительных инструментов. Не ломиться исправлять баги, а понять причину их появления. Ну и так далее…
В процессе создания третьей версии IBProvider-a, я понял что четвертой уже не будет. Потому что в тройку было вбухано столько, сколько хватит если не на десяток, то на четыре среднестатистических набора компонент доступа — точно. Меня уже просто не хватит на такой «четвертый» подвиг. Да и смысла — никакого. Проще сделать нечто поверх IBProvider, чем пытаться повторить его функционал «с нуля». При необходимости, допиливая OLEDB провайдер. Что и продемонстрировано на примере ADO.NET провайдера.
Вместо четвертой версии был создан целый состав непрерывных исправлений и улучшений. Версионность как таковая конечно есть, но она используется только для идентификации сборки. Не более.
Помню через некоторое время, после этого решения «застрять» на v3, я прочитал что Nokia собирается перейти на аналогичную схему в отношении своей телефонной операционной системы. Успела она перейти или нет — это уже не важно. Но все равно — сам этот факт меня позабавил.
А вот с Windows все гораздо интереснее. Лично я — только за 🙂
Firebird 2.5.4.
Задача — соорудить запрос с 2000 параметров. Нужно протестировать аналог isc_dsql_describe_bind.
Недолго думая, соорудил запроса вида «select * from MYTABLE where COL=? OR COL=? …»;
Подготавливаю этот запрос через своего сетевого клиента — «Ошибка чтения данных из порта подключения.». Локализация однако.
Подготавливаю через fbclient.dll — «Unable to complete network request to host «localhost». Error reading data from the connection.»
Какого черта?
Подключился к серверу отладчиком:

Рекурсивная реализация функции CMP_pass1.
Привет всем.
В дистрибутив .NET провайдера добавлен пример #23, в котором продемонстрирована работа с IBProvider-ом без регистрации в системе из .NET приложения, откомпилированного для AnyCPU платформы.
(далее…)
Не напрягайтесь. Все нормально. Хуже не стало.
Хотел написать чуть больше, но внезапно передумал. Лучше работу лишние 10 минут поработать.
PS. Сервер модифицирован.
В детстве любил читать компьютерру. Вообще я тогда много чего любил…
Недавно вспомнил про нее и обнаружил, что она до сих пор жива.
Покопавшись (ну что я еще могу копать?) обнаружил вот это (20 апреля 2010 года):
В итоге мы спокойно перевели проект к себе, заменили некоторые куски кода, например, выкинули базу данных Firebird, которую уже никто практически не развивает, и заменили на MySQL.
Понятно, что товарищЪ не в теме. Но, в целом, забавная точка зрения.
PS. Лет 10 назад я бы уже бесновался 🙂
С пятницей.
Хабр: Про интерфейсы.
Понравилась мысль:
Однако вышеописанное происходит только в мире, где программисты хотя бы примерно представляют, что они производят.
Все остальное — так себе.
С сайта IBProvider-a можно скачать инсталлятор релизных сборок ADO.NET провайдера.
Официальный релиз будет в ближайшее время.
К этому моменту, инсталлятор, возможно, будет перестроен.
Но сами сборки — вряд ли.
NUGET-пакет пока не выкладывал.
PS. Уже, честно говоря, прям хочется поскорее перевернуть эту страницу и заняться «по-настоящему интересными вещами».
Привет всем.
На сайт IBProvider-а выложен новый пример на C#, с демонстрацией взаимодействия трех технологий: ADO.NET, ADODB, OLEDB. Достаточно короткий и простой:
Проект этого примера можно найти в дистрибутиве ADO.NET провайдера.
using(var oledbCn=new OleDbConnection(c_cn_str))
{
oledbCn.Open(); /*1*/
dynamic adodbCn=com_lib.object_utils.CreateInstance
("ADODB.Connection",
com_lib.ClsCtxCode.CLSCTX_INPROC_SERVER).GetObject();
adodb_lib.AdoDbConstructor.attach_adodb_cn_to_oledb_session
(adodbCn,
oledbCn.GetNativeSession()); /*2*/
adodbCn.BeginTrans(); /*3*/
dynamic genMng=com_lib.object_utils.CreateInstance
("LCPI.IBP.Samples.IBGenManager.1",
com_lib.ClsCtxCode.CLSCTX_INPROC_SERVER).GetObject();
genMng.Connection=adodbCn; /*4*/
Console.WriteLine("[GenMng] Generate ID: {0}",
genMng.GenID("CUST_NO_GEN")); /*5*/
adodbCn.CommitTrans(); /*6*/
}//using oledbCn
- ADO.NET провайдер создает подключение к базе данных
- Подключаем ADODB к ADO.NET
- ADODB инициирует транзакцию в этом подключении
- Создаем компонент IBGenManager и подключаем его к ADODB
- IBGenManager запрашивает и возвращает новый идентификатор
- ADODB завершает транзакцию
IBGenManager — это простенький ActiveX компонент для работы с генераторами базы данных. Он написан на C++ и работает с OLEDB провайдером через библиотеку на C++. От ADODB-подключения ему нужен только указатель на низкоуровневый OLEDB-объект (сессию).
Исходный код и готовые модули этой компоненты есть в дистрибутивах IBProvider-a — см. каталог «Program Files\LCPI\IBProvider.3\Samples\oledb\sample_com_object».
Собственно говоря, подобный компонент можно написать на чем угодно — хоть на Delphi, хоть на Visual Basic. Или на C#.
У меня была еще мысль создавать и выполнять IBGenManager внутри VB-скрипта (я даже готовый компонент на nuget.org нашел — ActiveScriptEngine), но решил что это будет уже перебор. Кстати, IBGenManager можно было написать на VBScript и вызывать его из C#.
В целом, конечно, это повторение пройденного — подобные вещи (за исключением ADO.NET) были доступны (и активно эксплуатировались) еще в 2001 году. Во времена Firebird 0.9.4, если мне не изменяет память.
Сейчас же все это (включая ADO.NET провайдер) всего лишь (с особым цинизмом) доведенные до ума идеи тех лет — «написанное однажды будет работать везде и всегда». На Windows, разумеется 🙂
Привет всем.
В ADO.NET провайдер (сборка 2465) добавлена пара методов, ради которых его проект и затевался:
- OleDbConnection.GetNativeSession
- OleDbConnection.AttachToNativeSession
Первый метод (GetNativeSession) возвращает указатель на COM-объект OLEDB-сессии подключения. Этот объект, к примеру, можно использовать для создания инициализированного ADODB подключения (см. интерфейсы ADOConnectionConstruction15, ADOConnectionConstruction).
Второй метод (AttachToNativeSession) подключает OleDbConnection к COM-объекту OLEDB-сессии. Это если у вас есть указатель на OLEDB-сессию, то можно подключить к нему ADO.NET провайдер и работать с этой сессией из .NET кода. Ранее обозначенные Construction-интерфейсы ADODB позволяют получать указатель на OLEDB-сессию ADODB-подключения.
OLEDB-сессия — это COM-объект для работы с транзакцией и создания команд с запросами.
Одним из сценариев, где все это может пригодится, является использование VBSсript из .NET приложений.
Вот, собственно говоря, и все. Не прошло и 10 лет… Хотя нет, прошло.
Всем привет.
Вспоминая фразу агента Смита — «уставать я начал сильно, на трех работах кручусь», решил довести .NET провайдер до ума релиза.
Одним из самых эффективных способов оценить общее состояние продукта — это накатать небольшое руководство по эксплуатации.
Хотя я и боюсь не люблю это делать. Это же садомазохизм чистой воды.
Надо заметить, что я отделался малой кровью. Всего пара изменений в .NET провайдере и ни одного в IBProvider-е. Негативных эмоций практически не возникло …
Даже один раз подумал — «ну надо же!».
—
PS. Баг с VARCHAR массивами уже просто задолбал. Полтора часа угробил, пока понял и вспомнил.