It is atomic per statement (not per transaction), as demonstrated by this experiment: ``` $ strace -c sqlite3 :memory: \ "SELECT date('now'),time('now')" 2020-09-07|18:23:18 % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.20 0.000020 20 1 gettimeofday ------ ----------- ----------- --------- --------- ---------------- 100.00 0.010088 282 5 total $ strace -c sqlite3 :memory: \ "SELECT date('now'),time('now')" \ "SELECT date('now'),time('now')" 2020-09-07|18:24:43 2020-09-07|18:24:43 % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.54 0.000052 26 2 gettimeofday ------ ----------- ----------- --------- --------- ---------------- 100.00 0.009686 284 5 total $ strace -c sqlite3 :memory: \ "BEGIN TRANSACTION" \ "SELECT date('now'),time('now')" \ "SELECT date('now'),time('now')" \ "COMMIT" 2020-09-07|18:32:26 2020-09-07|18:32:26 % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.94 0.000052 26 2 gettimeofday ------ ----------- ----------- --------- --------- ---------------- 100.00 0.005525 284 5 total ``` Note: counts of other function calls removed for brevity. ~~~ -- Regards, Kees Nuyt ~~~