SQLite3 wrapper for MiGA.
Options hash
Database absolute path
Default parsing options. Supported opts
keys:
:busy_attempts
: Number of times to retry when database is busy
(default: 3)
# File lib/miga/sqlite.rb, line 14 def default_opts(opts = {}) opts[:busy_attempts] ||= 3 opts end
Create MiGA::SQLite with database in
path
(without opening a connection) and options
opts
(see .default_opts
)
# File lib/miga/sqlite.rb, line 31 def initialize(path, opts = {}) @opts = MiGA::SQLite.default_opts(opts) @path = File.absolute_path(path) MiGA::MiGA.DEBUG("Accessing database: #{path}") end
Executes cmd
and returns the result. Alternatively, if a block
is passed, the commands are ignored and the block is executed with a single
parameter of the database connection
# File lib/miga/sqlite.rb, line 41 def run(*cmd) if block_given? run_block { |conn| yield(conn) } else y = nil run_block { |conn| y = conn.execute(*cmd) } y end end
Executes blk
that accepts a single parameter for the database
connection
# File lib/miga/sqlite.rb, line 54 def run_block(&blk) busy_attempts ||= 0 io_attempts ||= 0 SQLite3::Database.new(path) { |conn| blk[conn] } rescue SQLite3::BusyException => e busy_attempts += 1 raise "Database busy #{path}: #{e.message}" if busy_attempts >= 3 sleep(1) retry rescue SQLite3::IOException => e io_attempts += 1 raise "Database I/O error #{path}: #{e.message}" if io_attempts >= 3 sleep(1) retry end