sqlite3_column_type() returns SQLITE_NULL even though it contains text

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

sqlite3_column_type() returns SQLITE_NULL even though it contains text

Stadin, Benjamin
Hi,

I was missing a few records in my program. After debugging further, I found that sqlite3_column_type () returns SQLITE_NULL for some objects (like 10 in 2000), even though these actually contain text data.

Is this normal? And how should I handle it properly (I mean, check if it’s proper 0 escaped text for example)?

Below is an example object returned by sqlite3_column_value() which is reported as SQLITE_NULL.

I’m using the latest SQLite 3.20.1.

Thanks
Ben

val sqlite3_value * 0x10201a618 0x000000010201a618
            u MemValue
            flags u16 1
            enc u8 '\x01'
            eSubtype u8 '\0'
            n int 6
            z char * "BB.999" 0x000000010201e340
            zMalloc char * "BB.999" 0x000000010201e340
            szMalloc int 1200
            uTemp u32 0
            db sqlite3 * 0x100406f10 0x0000000100406f10
            xDel void (*)(void *) NULL 0x0000000000000000

_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: sqlite3_column_type() returns SQLITE_NULL even though it contains text

Richard Hipp-3
On 9/13/17, Stadin, Benjamin <[hidden email]> wrote:
> Hi,
>
> I was missing a few records in my program. After debugging further, I found
> that sqlite3_column_type () returns SQLITE_NULL for some objects (like 10 in
> 2000), even though these actually contain text data.
>
> Is this normal? And how should I handle it properly (I mean, check if it’s
> proper 0 escaped text for example)?

This is normal.  The sqlite3_value object contains only a NULL, not
any text or numbers.  Internally, the sqlite3_value object caches some
things that helps SQLite to run faster, and some of those cached
buffers might be holding the remains of stale string values.  Ignore
all of that - it is junk at this point.  The only thing that matters
in your sqlite3_value dump below is the "flags" field, which has a
value of 0x0001, which indicates a NULL
(https://sqlite.org/src/artifact/1fe007701?ln=234)

Please note that all this is an implementation detail which often
changes from one release to the next.  The dump of the sqlite3_value
object shown below is valid only for the specific version of SQLite
you are debugging, and might be very different for other versions of
SQLite.

When you start digging down into the content of the sqlite3_value
object, you are looking into low-level implementation details of
SQLite.  This is something that application developers need not worry
with.  You are welcomed to poke around if you want, but please know
that it is not expected nor necessary and that very few
application-level developers get into that much detail, especially
considering that everything you learn will likely be different the
next time you upgrade your SQLite version.


>
> Below is an example object returned by sqlite3_column_value() which is
> reported as SQLITE_NULL.
>
> I’m using the latest SQLite 3.20.1.
>
> Thanks
> Ben
>
> val sqlite3_value * 0x10201a618 0x000000010201a618
>             u MemValue
>             flags u16 1
>             enc u8 '\x01'
>             eSubtype u8 '\0'
>             n int 6
>             z char * "BB.999" 0x000000010201e340
>             zMalloc char * "BB.999" 0x000000010201e340
>             szMalloc int 1200
>             uTemp u32 0
>             db sqlite3 * 0x100406f10 0x0000000100406f10
>             xDel void (*)(void *) NULL 0x0000000000000000
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>


--
D. Richard Hipp
[hidden email]
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users