![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Это используется отзывами xFunc или xFinal,
которые осуществляют функции SQL и совокупности. См.
sqlite3_create_function() и
sqlite3_create_function16(). Эти функции работают аналогично функциям
привязки параметров, используемых, чтобы обязать значения принимать
параметры в подготовленных запросах.
Обратитесь к документации здесь. sqlite3_result_blob() устанавливает результат определенной приложением
функции в BLOB, на содержание которого указывает второй параметр и который
является N байтами, где N это третий параметр. sqlite3_result_zeroblob(C,N) и sqlite3_result_zeroblob64(C,N)
устанавливают результат определенной применением функции в BLOB, содержащий
все нулевые байты и N байт в размере. sqlite3_result_double() устанавливает результат определенной применением
функции в значение с плавающей точкой, определенное его 2-м аргументом. sqlite3_result_error() и sqlite3_result_error16()
заставляют осуществленную функцию SQL бросать исключение.
SQLite использует последовательность, на которую указывает 2-й параметр
sqlite3_result_error() или sqlite3_result_error16()
как текст сообщения об ошибке. SQLite интерпретирует последовательность
сообщения об ошибке от sqlite3_result_error() как UTF-8. SQLite
интерпретирует последовательность от sqlite3_result_error16() как UTF-16
с использованием тех же самых
правил определения порядка байтов как
sqlite3_bind_text16().
Если третий параметр sqlite3_result_error() или sqlite3_result_error16()
отрицателен, SQLite берет в качестве сообщения об ошибке весь текст до
первого нулевого символа. Если третий параметр sqlite3_result_error() или
sqlite3_result_error16() неотрицательный,
SQLite берет это число байтов (не знаков) от 2-го параметра как сообщение
об ошибке. sqlite3_result_error() и sqlite3_result_error16()
делает частную копию текста сообщения об ошибке, прежде чем они возвратятся.
Следовательно, функция запроса может освободить или изменить текст после
того, как они возвратятся без вреда. Функция sqlite3_result_error_code()
изменяет код ошибки, возвращенный SQLite в результате ошибки в функции.
По умолчанию код ошибки SQLITE_ERROR. Последующий запрос
sqlite3_result_error() или sqlite3_result_error16()
перезагружает код ошибки к SQLITE_ERROR. sqlite3_result_error_toobig() заставляет SQLite бросать ошибку при
указании, что последовательность или BLOB слишком длинные. sqlite3_result_error_nomem()
заставляет SQLite бросать ошибку при указании, что выделение
памяти потерпело неудачу. sqlite3_result_int() устанавливает возвращаемое значение определенной
применением функции в 32-bit signed integer, данном во 2-м аргументе.
sqlite3_result_int64() устанавливает возвращаемое значение определенной
применением функции в 64-bit signed integer, данном во 2-м аргументе. sqlite3_result_null() устанавливает возвращаемое значение определенной
применением функции в NULL. sqlite3_result_text(), sqlite3_result_text16(),
sqlite3_result_text16le() и sqlite3_result_text16be()
устанавливают возвращаемое значение определенной применением функции в
текстовую строку, которая представляется как UTF-8, родной порядок байтов
UTF-16, прямой порядок байтов UTF-16 или обратный порядок байтов UTF-16,
соответственно. sqlite3_result_text64()
устанавливает возвращаемое значение определенной применением функции в
текстовую строку в кодировании, определенном пятым (и последним) параметром,
который должен быть одним из SQLITE_UTF8,
SQLITE_UTF16,
SQLITE_UTF16BE или
SQLITE_UTF16LE.
SQLite берет текстовый результат из второго параметра sqlite3_result_text*.
Если 3-й параметр к какому-либо из sqlite3_result_text*, кроме
sqlite3_result_text64(), отрицательный, то SQLite вычисляет длину строки, ища
во 2-й параметре первый нулевой символ. Если 3-й параметр
sqlite3_result_text* неотрицательный, то соответствующее число байтов (не
знаков) текста, на который указывает 2-й параметр, взяты в качестве
определенного применением результата функции.
Если 3-й параметр неотрицательный, то это должно быть байтовое смещение в
последовательность, где терминатор NUL появится, если строка заканчивается
NUL. Если какие-либо знаки NUL есть в последовательности при байтовом
смещении, которое меньше, чем значение 3-го параметра, то получившаяся строка
будет содержать включенный NUL,
и результат выражений, воздействующих на последовательности с вложенным NUL,
не определен. Если 4-й параметр sqlite3_result_text* или
sqlite3_result_blob не NULL, SQLite вызывает ту функцию как деструктор на
тексте или результате BLOB, когда это закончило использовать тот результат.
Если 4-й параметр sqlite3_result_text* или sqlite3_result_blob
является специальным постоянным SQLITE_STATIC, SQLite
предполагает, что результат текста или BLOB находится в постоянном месте
и не копирует содержание параметра, а также не вызывает деструктор на
содержании, когда это закончило использовать результат. Если 4-й параметр
sqlite3_result_text* или sqlite3_result_blob является константой
SQLITE_TRANSIENT, SQLite делает копию результата в место, получнное из
sqlite3_malloc(). Для sqlite3_result_text16(), sqlite3_result_text16le() и
sqlite3_result_text16be() и для sqlite3_result_text64(), когда кодирование не
UTF8, если вход UTF16 начинается с отметки порядка байтов
(BOM, U+FEFF), BOM удален из последовательности, и остальная часть
последовательности интерпретируется согласно порядку байтов, определенному
BOM. Порядок байтов, определенный BOM в начале текста, отвергает порядок
байтов, определенный интерфейсной процедурой. Так, например, если
sqlite3_result_text16le() вызван с текстом, который начинается с байтов 0xfe,
0xff (отметка обратного порядка байтов), тогда первые два байта входа
пропускаются, и остающийся вход интерпретируется как текст UTF16BE. Для входного текста UTF16 в sqlite3_result_text16(),
sqlite3_result_text16be(), sqlite3_result_text16le() и
sqlite3_result_text64(), если текст содержит недействительные знаки UTF16,
недопустимые символы могли бы быть преобразованы в
unicode-символ замены, U+FFFD. sqlite3_result_value() устанавливает результат определенной
применением функции в копию объекта unprotected
sqlite3_value, определенного 2-м параметром.
sqlite3_result_value() делает копию
sqlite3_value так, чтобы
sqlite3_value, определенный в параметре, мог
измениться или быть освобожден после возврата sqlite3_result_value().
Объект protected sqlite3_value
может всегда использоваться, где нужен объект
unprotected sqlite3_value,
таким образом, любой вид объекта sqlite3_value
может использоваться с этим интерфейсом. sqlite3_result_pointer(C,P,T,D) устанавливает результат в SQL NULL,
точно так же, как
sqlite3_result_null(C), за исключением того, что это также связывает
указатель базового языка P или тип T с NULL таким образом, что указатель
может быть получен в определенной функции SQL
через sqlite3_value_pointer().
Если D не NULL, то это указатель на деструктор для параметра P.
SQLite вызывает D с P как его единственный аргумент, когда SQLite закончит с
P. Параметр T должен быть статической последовательностью и предпочтительно
строковым литералом. sqlite3_result_pointer() является частью
интерфейса прохождения указателя, добавленного в
SQLite 3.20.0. Если эта хранимая процедура вызвана из другого потока, чем
содержащий определенную применением функцию, которая получила указатель
sqlite3_context,
результаты не определены.
Choose any three.
SQLite C Interface
Урегулирование результата функции SQL
void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
void sqlite3_result_blob64(sqlite3_context*,const void*,
sqlite3_uint64,void(*)(void*));
void sqlite3_result_double(sqlite3_context*, double);
void sqlite3_result_error(sqlite3_context*, const char*, int);
void sqlite3_result_error16(sqlite3_context*, const void*, int);
void sqlite3_result_error_toobig(sqlite3_context*);
void sqlite3_result_error_nomem(sqlite3_context*);
void sqlite3_result_error_code(sqlite3_context*, int);
void sqlite3_result_int(sqlite3_context*, int);
void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
void sqlite3_result_null(sqlite3_context*);
void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
void(*)(void*), unsigned char encoding);
void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
void sqlite3_result_zeroblob(sqlite3_context*, int n);
int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);