Tipo de datos declarado de un resultado de consulta
const char *sqlite3_column_decltype(sqlite3_stmt*,int); const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
El primer parámetro es una sentencia preparada. Si esta sentencia es una sentencia SELECT y la columna N del conjunto de resultados devuelto por ese SELECT es una columna de tabla (no una expresión o una subconsulta) entonces se devuelve el tipo declarado de la columna de la tabla. Si la columna N del conjunto de resultados es una expresión o subconsulta, entonces se devuelve un puntero NULL. La cadena devuelta está siempre codificada en UTF-8.
Por ejemplo, dado un esquema de base de datos:
CREATE TABLE t1(c1 VARIANT);
y la siguente sentencia para ser compilada:
SELECT c1 + 1, c1 FROM t1;
esta función devolverá la cadena "VARIANT" para la segunda columna de resultados (i==1), y el puntero NULL para la primera (i==0).
SQLite usa asignación de tipo dinámica en tiempo de ejecución. Así que sólo porque una columna haya sido declarada para que contenga un tipo particular no significa que los datos almancenados en esa columna sean del tipo declarado. SQLite está fuertemente tipificado, pero el tipificado es dinámico, no estático. Los tipos son asociados con valores individuales, no con los contenedores usados para almacenar esos valores.