- It opens every database (without creating it) and sets the timeout to ten seconds. (In case that another process is busy with the database.)
- It tries to execute a BEGIN IMMEDIATE.
- If this goes wrong because the database is locked: print it.
- If something goes wrong for any other reason the program is terminated.
- If the BEGIN IMMEDIATE was successful do a ROLLBACK.
- Close the database.
#!/usr/bin/env tclsh package require sqlite3 set timeout [expr {10 * 1000}] foreach database $argv { sqlite db $database -create False db timeout $timeout if {[catch {db eval "BEGIN IMMEDIATE"} SQLError]} { if {$SQLError ne "database is locked"} { error "UNEXPECTED ERROR: $SQLError" } puts "The database $database is locked." } else { db eval ROLLBACK } db close }
As always: comments, tips and questions are appreciated.
Category SQLite | [Category System Maintenance] | Category Utilities |