Method: Sequel::SQLite::Database#connect

Defined in:
lib/sequel/adapters/sqlite.rb

#connect(server) ⇒ Object

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).



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sequel/adapters/sqlite.rb', line 28

def connect(server)
  opts = server_opts(server)
  opts[:database] = ':memory:' if blank_object?(opts[:database])
  db = ::SQLite3::Database.new(opts[:database])
  db.busy_timeout(opts.fetch(:timeout, 5000))
  db.type_translation = true
  
  # Handle datetime's with Sequel.datetime_class
  prok = proc do |t,v|
    v = Time.at(v.to_i).iso8601 if UNIX_EPOCH_TIME_FORMAT.match(v)
    Sequel.string_to_datetime(v)
  end
  db.translator.add_translator("timestamp", &prok)
  db.translator.add_translator("datetime", &prok)
  
  # Handle numeric values with BigDecimal
  prok = proc{|t,v| BigDecimal.new(v) rescue v}
  db.translator.add_translator("numeric", &prok)
  db.translator.add_translator("decimal", &prok)
  db.translator.add_translator("money", &prok)
  
  # Handle floating point values with Float
  prok = proc{|t,v| Float(v) rescue v}
  db.translator.add_translator("float", &prok)
  db.translator.add_translator("real", &prok)
  db.translator.add_translator("double precision", &prok)
  
  # Handle blob values with Sequel::SQL::Blob
  db.translator.add_translator("blob"){|t,v| ::Sequel::SQL::Blob.new(v)}
  
  db
end