SQLite experts:
The xBestIndex method of the SQLite virtual table interface implemented by the
VT module returns an output to the core by setting idxNum member var of struct
sqlite3_index_info to a value that is meaningful to the VT module. Assume that
a memory resource was created in conjunction with the chosen index that will
hold information passed by xFilter.
The question is: How can VT module tell when it is safe to release that
resource? I'm thinking, it's when the associated statement is finalized. But
how does the VT module know that? I have found that xClose() call is not the
answer because I have stumbled on a test sequence that shows this to be unsafe:
do_test update-1.0 {
execsql {DELETE FROM t1}
execsql {insert into t1 values(1,2,3)}
execsql {SELECT * FROM t1 }
execsql {UPDATE t1 SET y=3 WHERE x=1}
execsql {SELECT * FROM t1 }
} {1 2 3 1 3 3}
After execution of the UPDATE, the VT module call sequence for the next SELECT
does not include xBestIndex as I was expecting. It calls xFilter with the
idxNum that the previous SELECT created (I think). I crash and burn because I
released the index resource in the xClose call for the first SELECT.
I'd be most appreciative if an expert could steer me in the right direction.
Mark
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users