sqlite.h


Obtención de valores de los parámetros de función SQL

const void *sqlite3_value_blob(sqlite3_value*);
int sqlite3_value_bytes(sqlite3_value*);
int sqlite3_value_bytes16(sqlite3_value*);
double sqlite3_value_double(sqlite3_value*);
int sqlite3_value_int(sqlite3_value*);
sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
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_type(sqlite3_value*);
int sqlite3_value_numeric_type(sqlite3_value*);

La implementación C de las funciones y agregados SQL usa este conjunto de rutinas para acceder a los valores de los parámetros de la función o agregado.

Los parámetros xFunc (para funciones escalares) o xStep (para agregados) de sqlite3_create_function() y sqlite3_create_function16() definen retrollamadas que implementan las funciones o agregados SQL. El tercer parámetro para esas retrollamadas es un array de punteros a objetos sqlite3_value protegidos. Hay un objeto sqlite3_value para cada parámetro de la función SQL. Estas rutinas se usan para extraer valores desde objetos sqlite3_value.

Estas funciones sólo funcionan con objetos sqlite3_value protegidos. Cualquier intento de usarlas con un objeto sqlite3_value no protegido producirá un comportamiento indefinido.

Estas rutinas funcionan como las correspondientes funciones de acceso a columna excepto que estas toman un puntero a un objeto protegido sqlite3_value en lugar de un puntero a un sqlite3_stmt* y un número de columna entero.

La función sqlite3_value_text16() extráe una cadena UTF-16 en el orden de bytes nativo de la máquina anfitriona. Las funciones sqlite3_value_text16be() y sqlite3_value_text16le() extraen cadenas UTF-16 en big-endian y little-endian respectivamente.

La función sqlite3_value_numeric_type() intenta aplicar afinidad numérica al valor. Esto significa que se hace un intento de convertir el valor a un entero o a un punto flotante. Si esa conversión es posible sin pérdida de información (en otras palabras, si el valor es una cadena que contiene un número) la conversión se realiza. En caso contrario no hay conversión. Se devuelve el tipo de dato después de la conversión.

Prestár una atención particular al hecho de que el puntero devuelto por sqlite3_value_blob(), sqlite3_value_text() o sqlite3_value_text16() puede ser invalidado por una llamada posterior a sqlite3_value_bytes(), sqlite3_value_bytes16(), sqlite3_value_text() o sqlite3_value_text16().

Estas rutinas deben ser invocadas desde el mismo hilo en que la función SQL ha suministrado los parámetros sqlite3_value*.