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

#sqlite #callback

#sqlite #обратный вызов

Вопрос:

Какие значения может возвращать пользовательская функция SQLite3?

Уместным примером является добавление функции для regexp — какие значения она вернет, чтобы указать на совпадение или несоответствие? Или это должно быть недействительным?

Ответ №1:

Результаты выводятся из функций SQLite3 (на уровне интерфейса C) с использованием sqlite3_result_int функции (и ее аналогов, если возвращаются другие типы).

 void sqlite3_result_int(sqlite3_context*, int);
  

Сообщите false, используя 0 для второго аргумента, и true, используя 1 (или другое ненулевое значение).

Комментарии:

1. Спасибо за это. Дополнительные вопросы — 1. существуют ли какие-либо другие возвращаемые значения? например. 2? -1? Кроме того, 2. Резервирует ли SQLite постоянное имя для возврата 0 или 1 здесь? [например. Если бы это был возврат ошибки, 0 было бы SQLITE_OK.]

2. @SK9: Я не думаю, что там есть что-то особенное; SQLite просто использует обычную интерпретацию C для boolean. Вы также можете передать обратно любое целочисленное значение, например, количество мест в строке, где совпадают RE, может быть разумным для возврата (если на практике вычислять немного дороже).

Ответ №2:

В этом репозитории ископаемых данных (который регулярно извлекается из репозитория ископаемых данных SQLite) у вас есть несколько примеров расширений SQLite3, включая дополнения, которые перегружают MATCH функцию.

Пример функции, которая перегружает оператор РЕГУЛЯРНОГО выражения