Class | Sequel::SQLite::Database |
In: |
lib/sequel/adapters/sqlite.rb
|
Parent: | Sequel::Database |
UNIX_EPOCH_TIME_FORMAT | = | /\A\d+\z/.freeze |
Connect to the database. Since SQLite is a file based database, the only options available are :database (to specify the database name), and :timeout, to specify how long to wait for the database to be available if it is locked, given in milliseconds (default is 5000).
# File lib/sequel/adapters/sqlite.rb, line 28 28: def connect(server) 29: opts = server_opts(server) 30: opts[:database] = ':memory:' if blank_object?(opts[:database]) 31: db = ::SQLite3::Database.new(opts[:database]) 32: db.busy_timeout(opts.fetch(:timeout, 5000)) 33: db.type_translation = true 34: 35: # Handle datetime's with Sequel.datetime_class 36: prok = proc do |t,v| 37: v = Time.at(v.to_i).iso8601 if UNIX_EPOCH_TIME_FORMAT.match(v) 38: Sequel.string_to_datetime(v) 39: end 40: db.translator.add_translator("timestamp", &prok) 41: db.translator.add_translator("datetime", &prok) 42: 43: # Handle numeric values with BigDecimal 44: prok = proc{|t,v| BigDecimal.new(v) rescue v} 45: db.translator.add_translator("numeric", &prok) 46: db.translator.add_translator("decimal", &prok) 47: db.translator.add_translator("money", &prok) 48: 49: # Handle floating point values with Float 50: prok = proc{|t,v| Float(v) rescue v} 51: db.translator.add_translator("float", &prok) 52: db.translator.add_translator("real", &prok) 53: db.translator.add_translator("double precision", &prok) 54: 55: # Handle blob values with Sequel::SQL::Blob 56: db.translator.add_translator("blob"){|t,v| ::Sequel::SQL::Blob.new(v)} 57: 58: db 59: end
Return instance of Sequel::SQLite::Dataset with the given options.
# File lib/sequel/adapters/sqlite.rb, line 62 62: def dataset(opts = nil) 63: SQLite::Dataset.new(self, opts) 64: end
Use the native driver transaction method if there isn‘t already a transaction in progress on the connection, always yielding a connection inside a transaction transaction.
# File lib/sequel/adapters/sqlite.rb, line 89 89: def transaction(opts={}) 90: unless opts.is_a?(Hash) 91: Deprecation.deprecate('Passing an argument other than a Hash to Database#transaction', "Use DB.transaction(:server=>#{opts.inspect})") 92: opts = {:server=>opts} 93: end 94: synchronize(opts[:server]) do |conn| 95: return yield(conn) if conn.transaction_active? 96: begin 97: result = nil 98: log_info('Transaction.begin') 99: conn.transaction{result = yield(conn)} 100: result 101: rescue ::Exception => e 102: log_info('Transaction.rollback') 103: transaction_error(e, SQLite3::Exception) 104: ensure 105: log_info('Transaction.commit') unless e 106: end 107: end 108: end