sqlite3\_exec will only automatically re-prepare the statement if it was originally prepared using sqlite3\_prepare\_v2 or sqlite3\_prepare\_v3. Statements prepared using sqlite3\_prepare interface do not store the statement text and therefore cannot be automatically re-prepared. sqlite3\_exec may still return a schema changed error if it is unable to re-prepare the statement within the number of re-tries that have been configured. <https://sqlite.org/c3ref/prepare.html> Nevertheless, the reprepare operation will be logged in the log even if it is carried out transparently and no error is returned to the user -- and I think this is the complaint -- the log is logging that a re-prepare was required even though no error was presented to the application. This is logged to the sqlite log even if it was handled internally because the purpose of the log is to facilitate debugging. And there are cases where knowing that the database engine did a re-prepare of a statement even though no schema changes occurred my be a useful debugging aid. If a schema change did occur then one should expect to see this message.