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::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_DATABASE_ERROR_REGEXPS, Database::DEFAULT_JOIN_TABLE_COLUMN_OPTIONS, Database::DEFAULT_STRING_COLUMN_SIZE, Database::EXTENSIONS, Database::NOT_NULL, Database::NULL, Database::OPTS, Database::PRIMARY_KEY, Database::SCHEMA_TYPE_CLASSES, 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

#integer_booleans, #transaction_mode, #use_timestamp_timezones

Attributes inherited from Database

#cache_schema, #dataset_class, #default_string_column_size, #log_connection_info, #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=, #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_partial_indexes?, #supports_savepoints?, #synchronous, #synchronous=, #tables, #temp_store, #temp_store=, #use_timestamp_timezones?, #values, #views

Methods inherited from Database

#<<, #[], adapter_class, #adapter_scheme, adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, after_initialize, #after_rollback, #alter_table, #alter_table_generator, #call, #cast_type_literal, connect, #create_join_table, #create_join_table!, #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, #each_server, #extend_datasets, #extension, extension, #fetch, #from, #from_application_timestamp, #get, #global_index_namespace?, #in_transaction?, #initialize, #initialize_copy, #inspect, #literal, #literal_symbol, #literal_symbol_set, load_adapter, #log_connection_yield, #log_exception, #log_info, #log_yield, #logger=, #prepared_statement, #quote_identifier, register_extension, #remove_servers, #rename_column, #rename_table, #rollback_checker, #run, run_after_initialize, #schema, #schema_type_class, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, set_shared_adapter_scheme, #sharded?, single_threaded, single_threaded=, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_foreign_key_parsing?, #supports_index_parsing?, #supports_partial_indexes?, #supports_prepared_transactions?, #supports_savepoints?, #supports_savepoints_in_prepared_transactions?, #supports_schema_parsing?, #supports_table_listing?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #supports_view_listing?, #supports_views_with_check_option?, #supports_views_with_local_check_option?, #synchronize, #table_exists?, #test_connection, #transaction, #typecast_value, #uri, #url, #valid_connection?

Methods included from Metaprogramming

#meta_def

Constructor Details

This class inherits a constructor from Sequel::Database

Instance Attribute Details

#conversion_procsObject (readonly)

The conversion procs to use for this database



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

def conversion_procs
  @conversion_procs
end

Instance Method Details

#connect(server) ⇒ Object

Connect to the database. Since SQLite is a file based database, available options are limited:

:database

database name (filename or ‘:memory:’ or file: URI)

:readonly

open database in read-only mode; useful for reading static data that you do not want to modify

:timeout

how long to wait for the database to be available if it is locked, given in milliseconds (default is 5000)



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

def connect(server)
  opts = server_opts(server)
  opts[:database] = ':memory:' if blank_object?(opts[:database])
  sqlite3_opts = {}
  sqlite3_opts[:readonly] = typecast_value_boolean(opts[:readonly]) if opts.has_key?(:readonly)
  db = ::SQLite3::Database.new(opts[:database].to_s, sqlite3_opts)
  db.busy_timeout(opts.fetch(:timeout, 5000))
  
  connection_pragmas.each{|s| log_connection_yield(s, db){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.



126
127
128
129
# File 'lib/sequel/adapters/sqlite.rb', line 126

def disconnect_connection(c)
  c.prepared_statements.each_value{|v| v.first.close}
  c.close
end

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

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



132
133
134
# File 'lib/sequel/adapters/sqlite.rb', line 132

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

#execute_ddl(sql, opts = 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.



144
145
146
147
148
149
150
# File 'lib/sequel/adapters/sqlite.rb', line 144

def execute_ddl(sql, opts=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 = OPTS) ⇒ Object

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



137
138
139
# File 'lib/sequel/adapters/sqlite.rb', line 137

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

#execute_insert(sql, opts = OPTS) ⇒ Object

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



153
154
155
# File 'lib/sequel/adapters/sqlite.rb', line 153

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

#freezeObject



157
158
159
160
# File 'lib/sequel/adapters/sqlite.rb', line 157

def freeze
  @conversion_procs.freeze
  super
end

#to_application_timestamp(s) ⇒ Object

Handle Integer and Float arguments, since SQLite can store timestamps as integers and floats.



163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/sequel/adapters/sqlite.rb', line 163

def to_application_timestamp(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