I recently ran into this as well. NULL is not the same as “”, and it took me a
really long time of debugging before I realized it was the sqlite3
documentation at fault.
> On Mar 13, 2019, at 6:03 PM, Alex Alabuzhev wrote:
>> If there is no attached database N on the database connection D, or if
> database N is a temporary or in-memory database, then a NULL pointer is
> However, when called for :memory: db the function actually returns "".
> Looking at the code:
> ** Return the full pathname of the database file.
> ** Except, if the pager is in-memory only, then return an empty string if
> ** nullIfMemDb is true. This routine is called with nullIfMemDb==1 when
> ** used to report the filename to the user, for compatibility with legacy
> ** behavior. But when the Btree needs to know the filename for matching to
> ** shared cache, it uses nullIfMemDb==0 so that in-memory databases can
> ** participate in shared-cache.
> SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager, int
> return (nullIfMemDb && pPager->memDb) ? "" : pPager->zFilename;
> - as the comment says, it returns an empty string in case of in-memory mode
> (although "nullIfMemDb" confusingly implies null).
> I have no idea who is correct here - the code or the documentation - but
> one of them should probably be corrected?
> Best regards,
> sqlite-users mailing list
sqlite-users mailing list