Objeto de valor tipado dinámicamente
typedef struct Mem sqlite3_value;
SQLite usa el objeto sqlite3_value para representar todos los valores que pueden ser almacenados en una tabla de base de datos. SQLite usa tipado dinámico para los valores que almacena. Los valores almacenados en objetos sqlite3_value pueden ser enteros, valores en coma flotante, cadenas, BLOBs o NULL.
Un objeto sqlite3_value puede ser tanto "protected" o "unprotected". Algunos interfaces requieren un sqlite3_value protegido. Otros interfaces aceptarán tanto un objeto sqlite3_value protegido como no protegido. Todos los interfaces que aceptan argumentos sqlite3_value especifican si requieren un objeto sqlite3_value protegido o no.
Los términos "protected" y "unprotected" se refieren a si se mantiene o no un mutex. Se mantiene un mutex interno para un objeto sqlite3_value protegido pero no para uno no protegido. Si SQLite está compilado para no ser multihilo (con SQLITE_THREADSAFE=0 y con sqlite3_threadsafe() retornando 0) o si SQLite se está ejecutando en uno de los modos de mutex reducido SQLITE_CONFIG_SINGLETHREAD o SQLITE_CONFIG_MULTITHREAD entonces no hay distinción entre objetos sqlite3_value protegidos y no protegidos y se pueden usar indistintamente. Sin embargo, para una portabilidad de código máxima se recomienda que la aplicación siga haciendo distinciones entre objetos sqlite3_value protegidos y no protegidos aunque no esté requerido estrictamente.
Los objetos sqlite3_value que son pasados como parámetros dentro de la implementación de funciones SQL definidas por la aplicación son protegidos. El objeto sqlite3_value retornado por sqlite3_column_value() es no protegido. Los objetos sqlite3_value no protegidos sólo pueden ser usados con sqlite3_result_value() y sqlite3_bind_value(). La familia de interfaces sqlite3_value_type() requieren objetos sqlite3_value protegidos.