Пользовательская функция сортировки
#include <qdb/qdb.h>
struct qdb_collation {
char *name;
int encoding;
void *arg;
int (*compare)( void *, int, const void *, int, const void * );
int (*setup)( void *, const void *, int, char ** );
};
Структура хранит сведения о пользовательской функции сортировки и включает следующие поля:
- name
- Имя этой функции, которое используется в операторах SQL. Максимальная длина имени составляет 255 символов без учета нулевого символа на конце; имя не может содержать специальные маркеры и начинаться с цифры. При попытке создать функцию с некорректным именем возникает ошибка
SQLITE_ERROR
. - encoding
- Символьная кодировка строк, передаваемых в функцию. Поддерживаются следующие кодировки:
- SQLITE_UTF8
- SQLITE_UTF16
- SQLITE_UTF16BE
- SQLITE_UTF16LE
- arg
- Произвольный указатель на пользовательские данные, который передается в функцию в качестве первого аргумента при каждом вызове. Этот указатель можно считывать с помощью функции sqlite_user_data().
- compare
- Указатель на функцию сортировки.
- setup
- Указатель на функцию динамической настройки порядка сортировки в процессе выполнения. Функция setup имеет следующий вид
int (*setup)( void *arg, const void *data, int nbytes, char **errmsg );
и параметры:
- arg
- Указатель контекста, который аналогичен аргументу arg функции compare и считывается из поля arg структуры
struct qdb_collation
. - data
- nbytes
- Настройки сортировки. При вызове функции на этапе запуска эти аргументы равны
NULL
и 0
, а на этапе выполнения в них содержатся данные, которые переданы в функцию qdb_collation(). QDB никак не учитывает их формат; для обмена данными определенного формата между динамической библиотекой и программой, которая вызывает функцию qdb_collation(), необходимо согласовывать этот формат между ними. - errmsg
- Указатель на строку с сообщением об ошибке, которую возвращает функция qdb_geterrmsg() (при возникновении ошибки на этапе запуска QDB и на этапе выполнения в функции qdb_collation() указанная строка считывается посредством вызова qdb_geterrmsg()).
Эта функция должна возвращать значение errno в соответствии с POSIX или код EOK
.
ЗОСРВ «Нейтрино»
Предыдущий раздел: перейти