Spec-Zone.ru › SQLite

Получение значений 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 value 


sqlite3_value_double
→
REAL value 


sqlite3_value_int
→
32-bit INTEGER value 


sqlite3_value_int64
→
64-bit INTEGER value 


sqlite3_value_pointer
→
Pointer value 


sqlite3_value_text
→
UTF-8 TEXT value 


sqlite3_value_text16
→
UTF-16 TEXT value in the native byteorder 


sqlite3_value_text16be
→
UTF-16be TEXT value 


sqlite3_value_text16le
→
UTF-16le TEXT value 


 
 
 


sqlite3_value_bytes
→
Size of a BLOB or a UTF-8 TEXT in bytes 



sqlite3_value_bytes16  
→ 
Size of UTF-16 TEXT in bytes 


sqlite3_value_type
→
Default datatype of the value 



sqlite3_value_numeric_type  
→ 
Best numeric datatype of the value 



sqlite3_value_nochange  
→ 
True if the column is unchanged in an UPDATE against a virtual table. 



sqlite3_value_frombind  
→ 
True if value originated from a bound parameter 

Подробности:

Эти функции извлекают информацию о типе, размере и содержимом из объектов sqlite3_value. Защищенные объекты sqlite3_value используются для передачи информации о параметрах в функции, реализующие пользовательские SQL-функции и виртуальные таблицы.

Эти функции работают только с защищенными объектами sqlite3_value. Любая попытка использовать эти функции с незащищенными объектами sqlite3_value небезопасна в многопоточной среде.

Эти функции работают так же, как и соответствующие функции доступа к столбцам, за исключением того, что эти функции принимают указатель на единственный защищенный объект sqlite3_value, а не указатель sqlite3_stmt* и целочисленный номер столбца.

Интерфейс sqlite3_value_text16() извлекает строку UTF-16 в родном порядке байтов целевой машины. Интерфейсы sqlite3_value_text16be() и sqlite3_value_text16le() извлекают строки UTF-16 соответственно в формате big-endian и little-endian.

Если объект 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() пытается применить числовую аффинность к значению. Это означает, что делается попытка преобразовать значение в целое число или число с плавающей запятой. Если такое преобразование возможно без потери информации (например, если значение является строкой, похожей на число), то преобразование выполняется. В противном случае преобразование не выполняется. Возвращается тип данных после преобразования.

В методе xUpdate виртуальной таблицы, интерфейс sqlite3_value_nochange(X) возвращает true только в том случае, если столбец, соответствующий X, не изменился операцией UPDATE, для реализации которой был вызван метод xUpdate, и если предыдущий вызов метода xColumn, который был вызван для извлечения значения для этого столбца, возвратил значение без установки результата (вероятно, потому, что он запросил sqlite3_vtab_nochange() и обнаружил, что столбец неизменный). В методе xUpdate любое значение, для которого sqlite3_value_nochange(X) истинно, во всех других отношениях будет выглядеть как значение NULL. Если sqlite3_value_nochange(X) вызывается в любом месте, кроме метода xUpdate для оператора UPDATE, то возвращаемое значение произвольное и бессмысленное.

Интерфейс sqlite3_value_frombind(X) возвращает ненулевое значение, если значение X произошло от одного из интерфейсов sqlite3_bind(). Если X происходит от значения SQL-литерала, столбца таблицы или выражения, то sqlite3_value_frombind(X) возвращает ноль.

Обратите особое внимание на то, что указатель, возвращаемый функциями sqlite3_value_blob(), sqlite3_value_text() или sqlite3_value_text16(), может стать недействительным после вызова sqlite3_value_bytes(), sqlite3_value_bytes16(), sqlite3_value_text() или sqlite3_value_text16().

Эти функции должны вызываться из того же потока, что и SQL-функция, которая предоставила параметры sqlite3_value*.

До тех пор, пока входной параметр корректен, эти функции могут завершиться неудачей только в случае возникновения ошибки «недостаточно памяти» во время преобразования формата. Только следующие подмножества интерфейсов могут завершиться ошибкой «недостаточно памяти»:

  • sqlite3_value_blob()
  • sqlite3_value_text()
  • sqlite3_value_text16()
  • sqlite3_value_text16le()
  • sqlite3_value_text16be()
  • sqlite3_value_bytes()
  • sqlite3_value_bytes16()

Если возникает ошибка «недостаточно памяти», то возвращаемое значение этих функций такое же, как если бы столбец содержал SQL-значение NULL. Действительные SQL-значения NULL можно отличить от ошибок «недостаточно памяти», вызвав sqlite3_errcode() сразу после получения подозрительного возвращаемого значения и перед вызовом любого другого интерфейса SQLite для того же соединения с базой данных.

См. также списки объектов, констант и функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/value_blob.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API