I rebuilt an old project with the (almost) latest lazarus 3.2/fpc 3.2.2, windows 32 bits.
Just one connection to an sqlite3 database with tiNone transaction and AutoCommit, an extension and a bunch of TZQuery/TZReadOnlyQuery to show the data in TDBGrids.
Foreign keys are enabled.
I realized that when I use zeos 7.2.12, the database is locked (I cannot insert/delete/edit from another program and the sqlite console).
I tried to build it using 7.1.4 and I don't have this problem.
I checked the differences and I see nothing relevant in the sqlite transaction management between the two versions (there are no transactions since I'm using tiNone).
I tried removing my extension, no change, disabling foreign keys, same.
I added "writeln" to the following methods to see the queries sent to sqlite (I couldn't get the whole picture using TZSQLMonitor) and I see no difference (only a couple of different pragmas, which, once removed from 7.2.12, made no change at all).
- TZSQLiteBaseDriver.Execute
- TZSQLiteBaseDriver.Prepare
- TZSQLiteBaseDriver.Prepare_v2
- TZSQLiteBaseDriver.Prepare16
Now, you'll say I should upgrade to 8.0.0, I tried it but it shows the same problem (though I didn't yet add the writeln to it to see the queries).
The sqlite3.dll is quite old (3.21.0) but I prefer to stick to a known good version for my application (besides, it's the same one for7.1.4, 7.2.12 and 8.0.0).
I could just build this project with 7.1.4 and forget about it, but I'd like to find why one version works and the other two don't.