![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Обзор:
Детали: Это извлекает тип, размер и информацию о содержании из объектов
protected sqlite3_value. Они используются, чтобы
передать информацию о параметре в функции, которые осуществляют
функции SQL и
виртуальные таблицы. Это работает только с объектами
protected sqlite3_value. Любая попытка использовать это на
unprotected sqlite3_value
не ориентирована на многопоточное исполнение. Это работает точно так же, как соответствующие
функции доступа колонки
за исключением того, что эта хранимая процедура берет один объект
protected sqlite3_value вместо указателя
sqlite3_stmt* и номер столбца целого числа. sqlite3_value_text16() извлекает последовательность UTF-16 в родном
порядке байтов хост-машины. sqlite3_value_text16be() и
sqlite3_value_text16le() извлекают последовательности UTF-16 как в прямом
порядке байтов, так и в обратном соответственно. Если объект sqlite3_value V
был инициализирован, используя
sqlite3_bind_pointer(S,I,P,X,D) или
sqlite3_result_pointer(C,P,X,D) и если
X и Y это последовательности, которые выдерживают сравнение равенства через
strcmp(X,Y), sqlite3_value_pointer(V,Y) вернет указатель P.
Иначе sqlite3_value_pointer(V,Y) вернет NULL. sqlite3_bind_pointer()
является частью интерфейса прохождения указателя,
добавленного в SQLite 3.20.0. sqlite3_value_type(V) возвращает
код типа данных для начального типа данных объекта
sqlite3_value V.
Возвращенное значение одно из
SQLITE_INTEGER,
SQLITE_FLOAT,
SQLITE_TEXT,
SQLITE_BLOB или
SQLITE_NULL.
Другие интерфейсы могли бы изменить тип данных для объекта sqlite3_value.
Например, если тип данных первоначально SQLITE_INTEGER и
sqlite3_value_text(V) вызывают, чтобы извлечь текстовое значение для того
целого числа, то последующие sqlite3_value_type(V) могут вернуть
SQLITE_TEXT. Происходит ли постоянное внутреннее преобразование типа данных,
не определено и может измениться от одного выпуска SQLite к следующему. sqlite3_value_numeric_type() пытается применить числовую близость к
значению. Это означает, что попытка предпринята, чтобы преобразовать значение
в целое число или число с плавающей точкой. Если такое преобразование
возможно без потери информации (другими словами, если значение это
последовательность, которая похожа на число),
преобразование выполняется. Иначе никакое преобразование не происходит.
datatype после преобразования возвращен. В методе xUpdate
виртуальной таблицы
sqlite3_value_nochange(X) вернет true если и только если колонка,
соответствующая X, неизменна операцией UPDATE, которую вызов метода xUpdate
был вызван осуществить и если предшествующий вызов метода
xColumn, который был вызван для извлечения
значения для той колонки, не установил результат (вероятно, потому что это
запросило sqlite3_vtab_nochange()
и нашло, что колонка была неизменна).
В рамках метода xUpdate
любое значение, для которого sqlite3_value_nochange(X) = true,
во всех других отношениях NULL. Если sqlite3_value_nochange(X)
вызван где-нибудь кроме xUpdate, то
возвращаемое значение произвольно и бессмысленно. sqlite3_value_frombind(X) вернет не 0, если значение X порождено
из одного из sqlite3_bind().
Если X прибывает из литерального значения SQL, столбца таблицы
или выражения, то sqlite3_value_frombind(X) вернет 0. Пожалуйста, обратите особое внимание на то, что указатель, возвращенный из
sqlite3_value_blob(),
sqlite3_value_text() или
sqlite3_value_text16(),
может быть лишен законной силы последующим запросом
sqlite3_value_bytes(),
sqlite3_value_bytes16(),
sqlite3_value_text() или
sqlite3_value_text16(). Это нужно вызвать от того же самого потока, как функция SQL,
которая поставляла параметры
sqlite3_value*. Пока входной параметр правилен, эта хранимая процедура может потерпеть
неудачу только если ошибка памяти происходит во время преобразования формата.
Только следующее подмножество интерфейсов подвергается ошибкам памяти: Если ошибка памяти происходит, то возвращаемое значение
совпадает с тем, как если бы колонка содержала SQL NULL.
Настоящий SQL NULL можно отличить от ошибок памяти, вызвав
sqlite3_errcode()
немедленно после того, как подозрительное возвращаемое значение получено
и прежде чем любой другой интерфейс SQLite вызовут на том же самом
соединении с базой данных.
Choose any three.
SQLite C Interface
Получение значения SQL
const void *sqlite3_value_blob(sqlite3_value*);
double sqlite3_value_double(sqlite3_value*);
int sqlite3_value_int(sqlite3_value*);
sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
void *sqlite3_value_pointer(sqlite3_value*, const char*);
const unsigned char *sqlite3_value_text(sqlite3_value*);
const void *sqlite3_value_text16(sqlite3_value*);
const void *sqlite3_value_text16le(sqlite3_value*);
const void *sqlite3_value_text16be(sqlite3_value*);
int sqlite3_value_bytes(sqlite3_value*);
int sqlite3_value_bytes16(sqlite3_value*);
int sqlite3_value_type(sqlite3_value*);
int sqlite3_value_numeric_type(sqlite3_value*);
int sqlite3_value_nochange(sqlite3_value*);
int sqlite3_value_frombind(sqlite3_value*);
sqlite3_value_blob → BLOB
sqlite3_value_double → REAL
sqlite3_value_int → 32-bit INTEGER
sqlite3_value_int64 → 64-bit INTEGER
sqlite3_value_pointer → Указатель
sqlite3_value_text → UTF-8 TEXT
sqlite3_value_text16 → UTF-16 TEXT
в нативном порядке байт
sqlite3_value_text16be → UTF-16be TEXT
sqlite3_value_text16le → UTF-16le TEXT
sqlite3_value_bytes → Размер BLOB
или текста UTF-8 TEXT в байтах
sqlite3_value_bytes16
→ Размер UTF-16 TEXT в байтах
sqlite3_value_type → Значение по умолчанию для
этого типа данных
sqlite3_value_numeric_type
→ Лучше всего подходящий значению числовой тип данных
sqlite3_value_nochange
→ True, если колонка неизменна в UPDATE
для виртуальной таблицы.
sqlite3_value_frombind
→ True, если значение порождено из
связанного параметра