Class: Sequel::SQLite::Database
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
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
#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
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_vacuum ⇒ Object
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
|
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
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
|
#disconnect ⇒ Object
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_options ⇒ Object
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
|
#synchronous ⇒ Object
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
|
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_store ⇒ Object
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
|