Пользовательские функции в SQLite

Как писать функции на чистом SQL с помощью расширения define.

SQLite не поддерживает пользовательские функции. Да, можно написать кусочек кода на С или Python, и зарегистрировать в SQLite как функцию. Но определить функцию прямо из SQL не получится.

К счастью, SQLite поддерживает расширения. Одно их них — define — как раз позволяет писать функции на чистом SQL.

С define несложно определить собственную функцию:

select define('sumn', ':n * (:n + 1) / 2');

А затем использовать, как будто встроенную:

select sumn(5);
-- 15

Пользовательские функции могут принимать несколько параметров и вызывать другие функции.

Сгенерировать случайное N, такое что a ≤ N ≤ b:

select define('randint', ':a + abs(random()) % (:b - :a + 1)');
select randint(10, 99);
-- 42
select randint(10, 99);
-- 17
select randint(10, 99);
-- 29

Показать все пользовательские функции:

select * from sqlean_define;

Удалить функцию:

select undefine('sumn');

Можно даже задать функцию, которая возвращает несколько значений!

Подробности в документации

Подписывайтесь на канал, чтобы не пропустить новые заметки 🚀