Тема для этого поста была подсказана вопросами пользователей, которые интересовались, можно ли создавать UDF для СУБД InterBase в Delphi 10.2. Вместе с ведущим экспертом по InterBase Дмитрием Кузьменко, мы решили выяснить детали этого и составить рекомендации для наших пользователей.
Популярная реляционная СУБД Embarcadero InterBase имеет ограниченное число встроенных функций для использования в SQL-запросах, однако с самых первых версий отличалась наличием возможности у пользователей создавать двоичные модули, загружать их на сервер и применять содержащиеся в них функции в точности, как "родные" из поставки InterBase. Пользователи имеют возможность реализовывать функции, выполняющие нужную им обработку данных в соответствии с необходимой логикой любой изощренной сложности и переносить эту обработку непосредственно на центральный сервер БД - упрощая управление и администрирование таких функций и обеспечивая максимально возможное быстродействие в условиях одновременной работы множества клиентов. До появления Delphi 10.2 код UDF можно было писать на Delphi только для платформ Windows, на Linux-сервера (наиболее часто используемые в реальной работе) приходилось писать UDF на языке C.
В этой статье мы рассмотрим процесс создания UDF для InterBase 2017 на платформах Linux (64 бит) и Windows 64 с помощью Delphi 10.2 Tokyo – проверим, как передаются и возвращаются параметры, и рассмотрим некоторые особенности компиляции и переноса модулей на сервер. Это критически важно для успешного одновременного использования UDF многими пользователями. Здесь я воспользовался примерами Д.Кузьменко из статьи "Правила написания thread-safe UDF" с этого же сайта.
Подробная документация и руководство по написанию UDF (на английском языке) содержится в Embarcadro docwiki.
Мы выполняли тестирование на основе несколько устаревшей, но зато простой и понятной статьи "Как научиться писать UDF на Delphi за 21 минуту?" с сайта iBase.ru, где также приведены отличия для создания UDF для СУБД Firebird.
Итак, приступим!