Решил добавить свежей воды в болото памяти под названием «Firebird и InterBase». В виде обновленного Free IBProvider, в который добавлена поддержка всех текущих версий FB/IB. В том числе для FB3 и IB XE7.
Сказано — сделано.
Медленно и печально продолжаю пилить собственную реализацию сетевого клиента к Firebird.
На днях реализовал выполнение запросов с IN-параметрами. Чертыхнулся, но сумел реализовать отправку пакета (op_execute) опираясь только на собственные данные пакета. В оригинале (fbclient.dll) при отправке этого пакета внезапно начинают лезть к объекту запроса. :facepalm: да и только.
Начал реализацию поддержки запросов с OUT-параметрами… Пока только начал. Но уже появилась мысль:
«Если меня вдруг угораздит проектировать подобные конструкции для обмена данными, то пакет будет включать информацию о своем размере. А еще лучше — размер будет находиться в самом начале пакета.»
Потому что глубинный смысл идеи «мы вот сейчас начнем отправлять пакет в порт подключения, а принимающая сторона сама должна определить момент когда он закончился» ускользает от меня. И в результате хочется ругаться.
Соорудил небольшой тест, сравнивающий производительность асинхронной и синхронной загрузки. Для разнообразия, в цикле выборки данных реализована модификация результирующего множества.
Конфигурация:
— Серверная машина: Q6600, 8GB, RAID0 из 4HDD, FB 2.5.4 SuperClassic
— Клиентская машина: Core i7, 16GB, SSD.
— Гигабитная сеть.
Тестировался 64-битный IBProvider.
Сразу озвучу результат — наблюдались устойчивые тридцать процентов ускорения работы.
(далее…)
Несмотря на то, что я закончил факультет «прикладной математики», где даже была кафедра программирования (меня там не было), знания о промышленном программировании и управлении процессом пришлось добывать самому. Преимущественно через человекожопочасы.
Хотя нет. Мой Старик говорил мне в школе — «старайся делать хорошо, плохо само получится».
Тем забавнее сравнивать собственные правила и внешними. Например, оформление кода. Документирование. Создание тестов. Создание дополнительных инструментов. Не ломиться исправлять баги, а понять причину их появления. Ну и так далее…
В процессе создания третьей версии 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. Уже, честно говоря, прям хочется поскорее перевернуть эту страницу и заняться «по-настоящему интересными вещами».