I am always getting back SQLITE_OK from this routine.  It
is immaterial if I have open sqlite3* or even a currently
running statement (eg a "select .." sitting at SQLITE_ROW).
I am seeing this with both Windows and Linux.

The code is running in the Python environment.  This is all
in the main thread.  I am doing the following:

 sqlite3_open("testdb")
 prepare/step/finalize("create table foo(x)")
 enable_shared_cache(1)  # I expect this to fail according to docs
 prepare/step/finalize("insert into foo values(?)", randomintegers(1))
 prepare/step("select * from foo")
 enable_shared_cache(0)
 step previous statement
 enable_shared_cache(1)
 finalize previous statement
 sqlite3_close
 enable_shared_cache(1)

I even put printfs() in the C code.  This is what I see, with
setting being the parameter passed to enable_shared_cache and
res being the result:

 Setting=1 res=0
 Setting=0 res=0
 Setting=1 res=0
 Setting=1 res=0

This is the C code for reference.

static PyObject *
enablesharedcache(PyObject *self, PyObject *args)
{
 int setting,res;
 if(!PyArg_ParseTuple(args, "i:enablesharedcache(boolean)", &setting))
   return NULL;

 res=sqlite3_enable_shared_cache(setting);
 fprintf(stderr, "\nSetting=%d res=%d\n", setting, res);
 SET_EXC(NULL, res);

 if(res!=SQLITE_OK)
   return NULL;

 return Py_BuildValue("");
}

Any ideas?  (I have also tried having two open sqlite3 handles and that didn't
make any difference)

Roger

Reply via email to