Class: Sequel::SQLite::Database

Inherits:
Database show all
Defined in:
lib/sequel/adapters/sqlite.rb

Constant Summary collapse

TABLES_FILTER =
"type = 'table' AND NOT name = 'sqlite_sequence'"
AUTO_VACUUM =
{'0' => :none, '1' => :full, '2' => :incremental}.freeze
SYNCHRONOUS =
{'0' => :off, '1' => :normal, '2' => :full}.freeze
TEMP_STORE =
{'0' => :default, '1' => :file, '2' => :memory}.freeze

Constants inherited from Database

Database::SQL_BEGIN, Database::SQL_COMMIT, Database::SQL_ROLLBACK

Constants included from Sequel::Schema::SQL

Sequel::Schema::SQL::AUTOINCREMENT, Sequel::Schema::SQL::CASCADE, Sequel::Schema::SQL::COMMA_SEPARATOR, Sequel::Schema::SQL::NOT_NULL, Sequel::Schema::SQL::NO_ACTION, Sequel::Schema::SQL::PRIMARY_KEY, Sequel::Schema::SQL::RESTRICT, Sequel::Schema::SQL::SET_DEFAULT, Sequel::Schema::SQL::SET_NULL, Sequel::Schema::SQL::TYPES, Sequel::Schema::SQL::UNDERSCORE, Sequel::Schema::SQL::UNIQUE

Instance Attribute Summary

Attributes inherited from Database

#logger, #opts, #pool

Instance Method Summary collapse

Methods inherited from Database

#<<, #[], adapter_class, adapter_scheme, #add_column, #add_index, #alter_table, connect, #create_or_replace_view, #create_table, #create_table!, #create_view, #drop_column, #drop_index, #drop_table, #drop_view, #fetch, #from, #initialize, #multi_threaded?, #query, #rename_column, #rename_table, #select, set_adapter_scheme, #set_column_default, #set_column_type, single_threaded=, #single_threaded?, #synchronize, #table_exists?, #test_connection, #uri, uri_to_options

Methods included from Sequel::Schema::SQL

#alter_table_sql_list, #auto_increment_sql, #column_definition_sql, #column_list_sql, #create_table_sql_list, #default_index_name, #drop_table_sql, #index_definition_sql, #index_list_sql_list, #literal, #on_delete_clause, #rename_table_sql, #schema_utility_dataset

Constructor Details

This class inherits a constructor from Sequel::Database

Instance Method Details

#alter_table_sql(table, op) ⇒ Object



100
101
102
103
104
105
106
107
# File 'lib/sequel/adapters/sqlite.rb', line 100

def alter_table_sql(table, op)
  case op[:op]
  when :add_column
    "ALTER TABLE #{table} ADD #{column_definition_sql(op)}"
  else
    raise Error, "Unsupported ALTER TABLE operation"
  end
end

#auto_vacuumObject



69
70
71
# File 'lib/sequel/adapters/sqlite.rb', line 69

def auto_vacuum
  AUTO_VACUUM[pragma_get(:auto_vacuum)]
end

#auto_vacuum=(value) ⇒ Object



73
74
75
76
# File 'lib/sequel/adapters/sqlite.rb', line 73

def auto_vacuum=(value)
  value = AUTO_VACUUM.index(value) || (raise Error, "Invalid value for auto_vacuum option. Please specify one of :none, :full, :incremental.")
  pragma_set(:auto_vacuum, value)
end

#connectObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sequel/adapters/sqlite.rb', line 12

def connect
  if @opts[:database].nil? || @opts[:database].empty?
    @opts[:database] = ':memory:'
  end
  db = ::SQLite3::Database.new(@opts[:database])
  db.type_translation = true
  # fix for timestamp translation
  db.translator.add_translator("timestamp") do |t, v|
    v =~ /^\d+$/ ? Time.at(v.to_i) : Time.parse(v) 
  end 
  db
end

#dataset(opts = nil) ⇒ Object



29
30
31
# File 'lib/sequel/adapters/sqlite.rb', line 29

def dataset(opts = nil)
  SQLite::Dataset.new(self, opts)
end

#disconnectObject



25
26
27
# File 'lib/sequel/adapters/sqlite.rb', line 25

def disconnect
  @pool.disconnect {|c| c.close}
end

#execute(sql) ⇒ Object



39
40
41
42
# File 'lib/sequel/adapters/sqlite.rb', line 39

def execute(sql)
  @logger.info(sql) if @logger
  @pool.hold {|conn| conn.execute_batch(sql); conn.changes}
end

#execute_insert(sql) ⇒ Object



44
45
46
47
# File 'lib/sequel/adapters/sqlite.rb', line 44

def execute_insert(sql)
  @logger.info(sql) if @logger
  @pool.hold {|conn| conn.execute(sql); conn.last_insert_row_id}
end

#execute_select(sql, &block) ⇒ Object



54
55
56
57
# File 'lib/sequel/adapters/sqlite.rb', line 54

def execute_select(sql, &block)
  @logger.info(sql) if @logger
  @pool.hold {|conn| conn.query(sql, &block)}
end

#pragma_get(name) ⇒ Object



59
60
61
# File 'lib/sequel/adapters/sqlite.rb', line 59

def pragma_get(name)
  single_value("PRAGMA #{name}")
end

#pragma_set(name, value) ⇒ Object



63
64
65
# File 'lib/sequel/adapters/sqlite.rb', line 63

def pragma_set(name, value)
  execute("PRAGMA #{name} = #{value}")
end

#serial_primary_key_optionsObject



8
9
10
# File 'lib/sequel/adapters/sqlite.rb', line 8

def serial_primary_key_options
  {:primary_key => true, :type => :integer, :auto_increment => true}
end

#single_value(sql) ⇒ Object



49
50
51
52
# File 'lib/sequel/adapters/sqlite.rb', line 49

def single_value(sql)
  @logger.info(sql) if @logger
  @pool.hold {|conn| conn.get_first_value(sql)}
end

#synchronousObject



80
81
82
# File 'lib/sequel/adapters/sqlite.rb', line 80

def synchronous
  SYNCHRONOUS[pragma_get(:synchronous)]
end

#synchronous=(value) ⇒ Object



84
85
86
87
# File 'lib/sequel/adapters/sqlite.rb', line 84

def synchronous=(value)
  value = SYNCHRONOUS.index(value) || (raise Error, "Invalid value for synchronous option. Please specify one of :off, :normal, :full.")
  pragma_set(:synchronous, value)
end

#tablesObject



35
36
37
# File 'lib/sequel/adapters/sqlite.rb', line 35

def tables
  self[:sqlite_master].filter(TABLES_FILTER).map {|r| r[:name].to_sym}
end

#temp_storeObject



91
92
93
# File 'lib/sequel/adapters/sqlite.rb', line 91

def temp_store
  TEMP_STORE[pragma_get(:temp_store)]
end

#temp_store=(value) ⇒ Object



95
96
97
98
# File 'lib/sequel/adapters/sqlite.rb', line 95

def temp_store=(value)
  value = TEMP_STORE.index(value) || (raise Error, "Invalid value for temp_store option. Please specify one of :default, :file, :memory.")
  pragma_set(:temp_store, value)
end

#transaction(&block) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/sequel/adapters/sqlite.rb', line 109

def transaction(&block)
  @pool.hold do |conn|
    if conn.transaction_active?
      return yield(conn)
    end
    begin
      result = nil
      conn.transaction {result = yield(conn)}
      result
    rescue => e
      raise e unless Error::Rollback === e
    end
  end
end