I use it very successfully.
In combination with sqlcipher and an application layer that ensures everything happens "just so"
All I said is the databases are temperamental. If you do anything "unexpected" it breaks. Numerous ways and often. Most of the bugs I've seen would be easily picked up with non deterministic testing. (Leaking result sets and prepared statements for example) - which is how I found them.
The testing codebase can only be that huge if they are all deterministic tests.
Trouble with deterministic tests is they miss all the edge cases and bugs persist for a long long time.
The transaction stuff is particularly bad. Gobbles memory without a care in the world till it either runs out and performance drops to near zero or fails and corrupts the database.
So everyone is forced to break transactions they would prefer to be atomic into multiple smaller ones.
These aren't things that should need a specific test case making in c, and many of the problems are horrific optimisation problems rather than show stoppers.
My point is. For all those kloc of testing, the sqlite code is definitely not what I would call robust.
How long has sqlite been reporting "out of memory" just because a database failed to open for some reason?
The biggest problem seems to be right here:
OOM testing is accomplished by simulating OOM errors.
I.e. not simulated in a real way.
Which is silly when it is so easy to generate them.