We've misused sqlite3_column_name
. The
SQLite documentation
states that the following:
The returned string pointer is valid until either the prepared statement
is destroyed by sqlite3_finalize() or until the statement is automatically
reprepared by the first call to sqlite3_step() for a particular
run or until the next call to sqlite3_column_name()
or sqlite3_column_name16() on the same column.
As part of our query_by_name
infrastructure we've first received all
field names for the prepared statement and stored them as string slices
for later use. After that we called sqlite3_step()
for the first time,
which invalids the pointer and therefore the stored string slice.