Hi,

Documentation says that:

"The only exception is that if SQLite is unable to allocate memory to hold
the sqlite3 object, a NULL will be written into *ppDb instead of a pointer
to the sqlite3 object"

but I see it's not entirely true. This example below stores NULL in *ppDb
even when (I think) no memory allocation problems occurs:

void TestOpenMisuse(void)
{
  sqlite3 *ppDb;
  int err = sqlite3_open_v2("whatever", &ppDb, SQLITE_OPEN_CREATE , 0);
  if (ppDb == NULL)
  {
    printf("ppDb==NULL, but err==%d, sqlite3_errmsg(ppDb)==%s",
err, sqlite3_errmsg(ppDb));
  }
}


Error code in this case will be err==21 (SQLITE_MISUSE) because
flag SQLITE_OPEN_CREATE cannot be there without SQLITE_OPEN_READWRITE -
which is docummented.
But sqlite3_errmsg(ppDb) will return "out of memory" (because ppDb==NULL),
which can be sometimes little misleading (for me as a SQLite newbie it was
;).

SQLite 3.7.8 (amalgamation)

-- 
Best regards,
Krystian Bigaj
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to