Class: Sequel::SQLite::Database
- 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::TRANSACTION_MODE, Sequel::SQLite::DatabaseMethods::VIEWS_FILTER
Constants inherited from Database
Database::ADAPTERS, Database::AUTOINCREMENT, Database::COLUMN_DEFINITION_ORDER, Database::COLUMN_SCHEMA_DATETIME_TYPES, Database::COLUMN_SCHEMA_STRING_TYPES, Database::COMBINABLE_ALTER_TABLE_OPS, Database::COMMA_SEPARATOR, Database::CURRENT_TIMESTAMP_RE, Database::DEFAULT_JOIN_TABLE_COLUMN_OPTIONS, Database::DEFAULT_STRING_COLUMN_SIZE, Database::EXTENSIONS, Database::NOT_NULL, Database::NULL, Database::PRIMARY_KEY, 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
-
#conversion_procs ⇒ Object
readonly
The conversion procs to use for this database.
Attributes included from DatabaseMethods
#integer_booleans, #use_timestamp_timezones
Attributes inherited from Database
#cache_schema, #dataset_class, #default_schema, #default_string_column_size, #log_warn_duration, #loggers, #opts, #pool, #prepared_statements, #sql_log_level, #timezone, #transaction_isolation_level
Instance Method Summary collapse
-
#connect(server) ⇒ Object
Connect to the database.
-
#disconnect_connection(c) ⇒ Object
Disconnect given connections from the database.
-
#execute(sql, opts = {}, &block) ⇒ Object
Run the given SQL with the given arguments and yield each row.
-
#execute_ddl(sql, opts = {}) ⇒ Object
Drop any prepared statements on the connection when executing DDL.
-
#execute_dui(sql, opts = {}) ⇒ Object
Run the given SQL with the given arguments and return the number of changed rows.
-
#execute_insert(sql, opts = {}) ⇒ Object
Run the given SQL with the given arguments and return the last inserted row id.
-
#initialize(opts = {}) ⇒ Database
constructor
A new instance of Database.
-
#to_application_timestamp(s) ⇒ Object
Handle Integer and Float arguments, since SQLite can store timestamps as integers and floats.
Methods included from DatabaseMethods
#auto_vacuum, #auto_vacuum=, #case_sensitive_like=, #database_type, #foreign_key_list, #foreign_keys, #foreign_keys=, #indexes, #pragma_get, #pragma_set, #set_integer_booleans, #sqlite_version, #supports_create_table_if_not_exists?, #supports_deferrable_foreign_key_constraints?, #supports_savepoints?, #synchronous, #synchronous=, #tables, #temp_store, #temp_store=, #transaction_mode, #transaction_mode=, #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, #alter_table_generator, #call, #cast_type_literal, connect, #create_join_table, #create_or_replace_view, #create_table, #create_table!, #create_table?, #create_table_generator, #create_view, #database_type, #dataset, #disconnect, #drop_column, #drop_index, #drop_join_table, #drop_table, #drop_table?, #drop_view, #dump_foreign_key_migration, #dump_indexes_migration, #dump_schema_cache, #dump_schema_cache?, #dump_schema_migration, #dump_table_schema, #each_server, #extend_datasets, #extension, #fetch, #foreign_key_list, #from, #from_application_timestamp, #get, #global_index_namespace?, #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, #load_schema_cache, #load_schema_cache?, #log_exception, #log_info, #log_yield, #logger=, #prepared_statement, #query, #quote_identifiers=, quote_identifiers=, #quote_identifiers?, register_extension, #remove_servers, #rename_column, #rename_table, #run, #schema, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, single_threaded=, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_prepared_transactions?, #supports_savepoints?, #supports_savepoints_in_prepared_transactions?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #synchronize, #table_exists?, #tables, #test_connection, #transaction, #typecast_value, #uri, #url, #valid_connection?, #views
Methods included from Metaprogramming
Constructor Details
#initialize(opts = {}) ⇒ Database
Returns a new instance of Database.
94 95 96 97 98 99 |
# File 'lib/sequel/adapters/sqlite.rb', line 94 def initialize(opts={}) super @conversion_procs = SQLITE_TYPES.dup @conversion_procs['datetime'] = @conversion_procs['timestamp'] = method(:to_application_timestamp) set_integer_booleans end |
Instance Attribute Details
#conversion_procs ⇒ Object (readonly)
The conversion procs to use for this database
92 93 94 |
# File 'lib/sequel/adapters/sqlite.rb', line 92 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).
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/sequel/adapters/sqlite.rb', line 105 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 |
#disconnect_connection(c) ⇒ Object
Disconnect given connections from the database.
122 123 124 125 |
# File 'lib/sequel/adapters/sqlite.rb', line 122 def disconnect_connection(c) c.prepared_statements.each_value{|v| v.first.close} c.close end |
#execute(sql, opts = {}, &block) ⇒ Object
Run the given SQL with the given arguments and yield each row.
128 129 130 |
# File 'lib/sequel/adapters/sqlite.rb', line 128 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.
140 141 142 143 144 145 146 |
# File 'lib/sequel/adapters/sqlite.rb', line 140 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.
133 134 135 |
# File 'lib/sequel/adapters/sqlite.rb', line 133 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.
149 150 151 |
# File 'lib/sequel/adapters/sqlite.rb', line 149 def execute_insert(sql, opts={}) _execute(:insert, sql, opts) end |
#to_application_timestamp(s) ⇒ Object
Handle Integer and Float arguments, since SQLite can store timestamps as integers and floats.
154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/sequel/adapters/sqlite.rb', line 154 def (s) case s when String super when Integer super(Time.at(s).to_s) when Float super(DateTime.jd(s).to_s) else raise Sequel::Error, "unhandled type when converting to : #{s.inspect} (#{s.class.inspect})" end end |