Hello ! After seem several emails from a user asking about how to use sqlite3 through shell scripts, I remember my experiences with sqlite3 but didn't mind to report it, but now I think that it's worth mention it because it'll hurt several users.
The bug/problem is that the sqlite3 command line when feed with a sql script with commands wrapped by a transaction if there is any error in the middle of it sqlite3 reports the error but do not stop/abort the transaction and the database end up in a dirty state. ______example to show the bug/problem BEGIN; DROP TABLE IF EXISTS a; --to allow run more than once CREATE TABLE a(b); --after the next line error this should be rolled back INSERT INTO a(c) VALUES(3); -- intentional error and no stop/rollback INSERT INTO a(b) values(4); COMMIT; ______ ______blank database after been feed by the above sql script PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE a(b); INSERT INTO "a" VALUES(4); COMMIT; ______ Cheers !