On Fri, 9 May 2008 09:09:03 -0500, "Jay A. Kreibich" <[EMAIL PROTECTED]> said: > On Thu, May 08, 2008 at 11:39:17AM -0700, [EMAIL PROTECTED] scratched > on the wall: > > If I run the following code I get some unexpected results: > > > > sqlite3* db1_p = 0; > > const int open1Res = sqlite3_open16(L"test.db", &db1_p); > > sqlite3* db2_p = 0; > > const int open2Res = sqlite3_open16(L"test.db", &db2_p); > > > > sqlite3_stmt* stmt1_p; > > const int prep1Res = sqlite3_prepare16_v2(db1_p, L"SELECT > > * FROM test", -1, &stmt1_p, 0); > > sqlite3_stmt* stmt2_p; > > const int prep2Res = > > sqlite3_prepare16_v2(db2_p, L"INSERT INTO test VALUES > > (1, 1.1, 'q')", -2, &stmt2_p, 0); > > > > const int step1Res = sqlite3_step(stmt1_p); > > const int step2Res = sqlite3_step(stmt2_p); > > > > const int finalize2Res1 = sqlite3_finalize(stmt2_p); > > const int finalize2Res2 = sqlite3_finalize(stmt2_p); > > > > const int finalize1Res = sqlite3_finalize(stmt1_p); > > const int finalize2Res3 = sqlite3_finalize(stmt2_p); > > > > Everything works as expected up to the first call to sqlite3_finalize. > > I Get SQLITE_OK form the opens and prepares, SQLITE_ROW from the first > > step statement and SQLITE_BUSY form the second step statement. Then on > > the first call to finalize I get SQLITE_BUSY. I'm not sure if this > > means that the statement could not be finalized due to a database lock > > or that sqlite3_finalize is returning the result of executing the > > statement. The documentation confuses me a bit on this point. > > The documentation seems pretty clear to me: > > "If the most recent call to sqlite3_step(S) for the > prepared statement S returned an error, then > sqlite3_finalize(S) returns that same error." > > http://www.sqlite.org/c3ref/finalize.html > > So yes, sqlite3_finalize() is returning the result of executing the > statement.
That is much clearer, the 3.4 documentation is not as clear on that point. > > I'm leaning towards the latter since the subsequent calls to > > sqlite3_finalize for stmt2_p result in SQLITE_MISUSE. So I'm wondering > > if database locks can prevent sqlite3_finalize from running > > successfully, it seems strange if they do. > > sqlite3_finalize() always does its job. It can return different > error codes depending on what it had to do to finalize the statement, > but it will always finalize the statement. > > You're getting a MISUSE on the subsequent calls to _finalize() because > the statement is not valid after the first call to _finalize(). > > -j > > -- > Jay A. Kreibich < J A Y @ K R E I B I.C H > > > "'People who live in bamboo houses should not throw pandas.' Jesus said > that." > - "The Ninja", www.AskANinja.com, "Special Delivery 10: Pop!Tech 2006" > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users Thanks, that's what I figured was going on but wanted to be sure. -brett _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users