#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
функцию.
Пример функции, которая перегружает оператор РЕГУЛЯРНОГО выражения