Class: Sequel::SQLite::Database

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

Overview

Database class for SQLite databases used with Sequel and the ruby-sqlite3 driver.

Constant Summary collapse

DatasetClass =
self

Constants included from DatabaseMethods

Sequel::SQLite::DatabaseMethods::AUTO_VACUUM, Sequel::SQLite::DatabaseMethods::PRIMARY_KEY_INDEX_RE, Sequel::SQLite::DatabaseMethods::SYNCHRONOUS, Sequel::SQLite::DatabaseMethods::TABLES_FILTER, Sequel::SQLite::DatabaseMethods::TEMP_STORE, Sequel::SQLite::DatabaseMethods::VIEWS_FILTER

Constants inherited from Database

Database::ADAPTERS, Database::AUTOINCREMENT, Database::CASCADE, Database::COLUMN_DEFINITION_ORDER, Database::COMMA_SEPARATOR, Database::MSSQL_DEFAULT_RE, Database::MYSQL_TIMESTAMP_RE, Database::NOT_NULL, Database::NO_ACTION, Database::NULL, Database::POSTGRES_DEFAULT_RE, Database::PRIMARY_KEY, Database::RESTRICT, Database::SET_DEFAULT, Database::SET_NULL, Database::SQL_BEGIN, Database::SQL_COMMIT, Database::SQL_RELEASE_SAVEPOINT, Database::SQL_ROLLBACK, Database::SQL_ROLLBACK_TO_SAVEPOINT, Database::SQL_SAVEPOINT, Database::STRING_DEFAULT_RE, Database::TEMPORARY, Database::TRANSACTION_BEGIN, Database::TRANSACTION_COMMIT, Database::TRANSACTION_ISOLATION_LEVELS, Database::TRANSACTION_ROLLBACK, Database::UNDERSCORE, Database::UNIQUE, Database::UNSIGNED

Instance Attribute Summary collapse

Attributes included from DatabaseMethods

#use_timestamp_timezones

Attributes inherited from Database

#dataset_class, #default_schema, #log_warn_duration, #loggers, #opts, #pool, #prepared_statements, #sql_log_level, #timezone, #transaction_isolation_level

Instance Method Summary collapse

Methods included from DatabaseMethods

#auto_vacuum, #auto_vacuum=, #case_sensitive_like, #case_sensitive_like=, #database_type, #foreign_keys, #foreign_keys=, #indexes, #pragma_get, #pragma_set, #sqlite_version, #supports_create_table_if_not_exists?, #supports_savepoints?, #synchronous, #synchronous=, #tables, #temp_store, #temp_store=, #use_timestamp_timezones?, #views

Methods inherited from Database

#<<, #[], adapter_class, adapter_scheme, #adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, #after_rollback, #alter_table, #call, #cast_type_literal, connect, #create_or_replace_view, #create_table, #create_table!, #create_table?, #create_view, #database_type, #dataset, #disconnect, #drop_column, #drop_index, #drop_table, #drop_view, #dump_indexes_migration, #dump_schema_migration, #dump_table_schema, #each_server, #extend_datasets, #fetch, #from, #from_application_timestamp, #get, #identifier_input_method, identifier_input_method, #identifier_input_method=, identifier_input_method=, #identifier_output_method, identifier_output_method, identifier_output_method=, #identifier_output_method=, #in_transaction?, #indexes, #inspect, #literal, #log_info, #log_yield, #logger=, #query, #quote_identifiers=, quote_identifiers=, #quote_identifiers?, #remove_servers, #rename_column, #rename_table, #run, #schema, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, single_threaded=, #single_threaded?, #supports_create_table_if_not_exists?, #supports_prepared_transactions?, #supports_savepoints?, #supports_transaction_isolation_levels?, #synchronize, #table_exists?, #tables, #test_connection, #to_application_timestamp, #transaction, #typecast_value, #uri, #url, #views

Methods included from Metaprogramming

#meta_def

Constructor Details

#initialize(opts = {}) ⇒ Database

Returns a new instance of Database.



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

def initialize(opts={})
  super
  @conversion_procs = SQLITE_TYPES.dup
  @conversion_procs['timestamp'] = method(:to_application_timestamp)
  @conversion_procs['datetime'] = method(:to_application_timestamp)
end

Instance Attribute Details

#conversion_procsObject (readonly)

The conversion procs to use for this database



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

def conversion_procs
  @conversion_procs
end

Instance Method Details

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



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/sequel/adapters/sqlite.rb', line 64

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))
  
  connection_pragmas.each{|s| log_yield(s){db.execute_batch(s)}}
  
  class << db
    attr_reader :prepared_statements
  end
  db.instance_variable_set(:@prepared_statements, {})
  
  db
end

#execute(sql, opts = {}, &block) ⇒ Object

Run the given SQL with the given arguments and yield each row.



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

def execute(sql, opts={}, &block)
  _execute(:select, sql, opts, &block)
end

#execute_ddl(sql, opts = {}) ⇒ Object

Drop any prepared statements on the connection when executing DDL. This is because prepared statements lock the table in such a way that you can’t drop or alter the table while a prepared statement that references it still exists.



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

def execute_ddl(sql, opts={})
  synchronize(opts[:server]) do |conn|
    conn.prepared_statements.values.each{|cps, s| cps.close}
    conn.prepared_statements.clear
    super
  end
end

#execute_dui(sql, opts = {}) ⇒ Object

Run the given SQL with the given arguments and return the number of changed rows.



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

def execute_dui(sql, opts={})
  _execute(:update, sql, opts)
end

#execute_insert(sql, opts = {}) ⇒ Object

Run the given SQL with the given arguments and return the last inserted row id.



102
103
104
# File 'lib/sequel/adapters/sqlite.rb', line 102

def execute_insert(sql, opts={})
  _execute(:insert, sql, opts)
end

#single_value(sql, opts = {}) ⇒ Object

Run the given SQL with the given arguments and return the first value of the first row.



107
108
109
# File 'lib/sequel/adapters/sqlite.rb', line 107

def single_value(sql, opts={})
  _execute(:single_value, sql, opts)
end