Class: ActiveRecord::ConnectionAdapters::SQLite3Adapter
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: |
ActiveRecord::ConnectionAdapters::AbstractAdapter
|
Defined in: | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb |
Overview
Active Record SQLite3 Adapter
The SQLite3 adapter works with the sqlite3-ruby drivers (available as gem from rubygems.org/gems/sqlite3).
Options:
-
:database
- Path to the database file.
Constant Summary
-
ADAPTER_NAME =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 31"SQLite"
-
COLLATE_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 707/.*"(\w)".*collate\s"(\w+)".*/i
-
DEFAULT_PRAGMAS =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 84{ "foreign_keys" => true, "journal_mode" => :wal, "synchronous" => :normal, "mmap_size" => 134217728, # 128 megabytes "journal_size_limit" => 67108864, # 64 megabytes "cache_size" => 2000 }
-
DEFERRABLE_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 411/DEFERRABLE INITIALLY (\w+)/
-
EXTENDED_TYPE_MAPS =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 501Concurrent::Map.new
-
FINAL_CLOSE_PARENS_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 750/\);*\z/
-
FK_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 410/.*FOREIGN KEY\s\("(\w)"\)\sREFERENCES\s"(\w)"\s\("(\w+)"\)/
-
GENERATED_ALWAYS_AS_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 709/.*"(\w)".GENERATED ALWAYS AS \((.+)\) (?:STORED|VIRTUAL)/i
-
NATIVE_DATABASE_TYPES =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 69{ primary_key: "integer PRIMARY KEY AUTOINCREMENT NOT NULL", string: { name: "varchar" }, text: { name: "text" }, integer: { name: "integer" }, float: { name: "float" }, decimal: { name: "decimal" }, datetime: { name: "datetime" }, time: { name: "time" }, date: { name: "date" }, binary: { name: "blob" }, boolean: { name: "boolean" }, json: { name: "json" }, }
-
PRIMARY_KEY_AUTOINCREMENT_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 708/.*"(\w)".PRIMARY KEY AUTOINCREMENT/i
-
TYPE_MAP =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 500Type::TypeMap.new.tap { |m| initialize_type_map(m) }
-
UNQUOTED_OPEN_PARENS_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 749/\((?![^'"]*['"][^'"]*$)/
-
VIRTUAL_TABLE_REGEX =
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 289/USING\s(\w)\s*\((.+)\)/i
::ActiveSupport::Callbacks
- Included
DatabaseStatements
- Included
DEFAULT_INSERT_VALUE
AbstractAdapter
- Inherited
ADAPTER_NAME, COMMENT_REGEX, EXTENDED_TYPE_MAPS, SIMPLE_INT, TYPE_MAP
Class Attribute Summary
AbstractAdapter
- Inherited
Class Method Summary
AbstractAdapter
- Inherited
.database_exists? | Does the database for this adapter exist? |
.dbconsole | Opens a database console session. |
.find_cmd_and_exec, .type_cast_config_to_boolean, .type_cast_config_to_integer, .validate_default_timezone |
::ActiveSupport::DescendantsTracker
- Inherited
Instance Attribute Summary
-
#active?
readonly
Alias for #connected?.
- #connected? ⇒ Boolean (also: #active?) readonly
- #database_exists? ⇒ Boolean readonly
- #requires_reloading? ⇒ Boolean readonly
- #strict_strings_by_default rw
- #strict_strings_by_default? ⇒ Boolean rw
- #supports_check_constraints? ⇒ Boolean readonly
- #supports_common_table_expressions? ⇒ Boolean readonly
- #supports_concurrent_connections? ⇒ Boolean readonly
- #supports_datetime_with_precision? ⇒ Boolean readonly
- #supports_ddl_transactions? ⇒ Boolean readonly
- #supports_deferrable_constraints? ⇒ Boolean readonly
- #supports_explain? ⇒ Boolean readonly
- #supports_expression_index? ⇒ Boolean readonly
- #supports_foreign_keys? ⇒ Boolean readonly
- #supports_index_sort_order? ⇒ Boolean readonly
-
#supports_insert_conflict_target?
readonly
Alias for #supports_insert_on_conflict?.
- #supports_insert_on_conflict? ⇒ Boolean (also: #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_conflict_target?) readonly
-
#supports_insert_on_duplicate_skip?
readonly
Alias for #supports_insert_on_conflict?.
-
#supports_insert_on_duplicate_update?
readonly
Alias for #supports_insert_on_conflict?.
- #supports_insert_returning? ⇒ Boolean readonly
- #supports_json? ⇒ Boolean readonly
- #supports_lazy_transactions? ⇒ Boolean readonly
- #supports_partial_index? ⇒ Boolean readonly
- #supports_savepoints? ⇒ Boolean readonly
- #supports_transaction_isolation? ⇒ Boolean readonly
- #supports_views? ⇒ Boolean readonly
- #supports_virtual_columns? ⇒ Boolean readonly
AbstractAdapter
- Inherited
#__callbacks, | |
#active? | Checks whether the connection to the database is still active. |
#connected? | Checks whether the connection to the database was established. |
#database_exists?, | |
#in_use? | Alias for AbstractAdapter#owner. |
#lock, #logger, #owner, #pool, #pool=, | |
#prepared_statements | Alias for AbstractAdapter#prepared_statements?. |
#preventing_writes? | Determines whether writes are currently being prevented. |
#replica?, | |
#requires_reloading? | Returns true if its required to reload the connection between requests for development mode. |
#savepoint_errors_invalidate_transactions? | Do TransactionRollbackErrors on savepoints affect the parent transaction? |
#supports_advisory_locks? | Does this adapter support application-enforced advisory locking? |
#supports_bulk_alter?, | |
#supports_check_constraints? | Does this adapter support creating check constraints? |
#supports_comments? | Does this adapter support metadata comments on database objects (tables, columns, indexes)? |
#supports_comments_in_create? | Can comments for tables, columns, and indexes be specified in create/alter table statements? |
#supports_common_table_expressions?, #supports_concurrent_connections?, | |
#supports_datetime_with_precision? | Does this adapter support datetime with precision? |
#supports_ddl_transactions? | Does this adapter support DDL rollbacks in transactions? That is, would CREATE TABLE or ALTER TABLE get rolled back by a transaction? |
#supports_deferrable_constraints? | Does this adapter support creating deferrable constraints? |
#supports_exclusion_constraints? | Does this adapter support creating exclusion constraints? |
#supports_explain? | Does this adapter support explain? |
#supports_expression_index? | Does this adapter support expression indices? |
#supports_extensions? | Does this adapter support database extensions? |
#supports_foreign_keys? | Does this adapter support creating foreign key constraints? |
#supports_foreign_tables? | Does this adapter support foreign/external tables? |
#supports_index_include? | Does this adapter support including non-key columns? |
#supports_index_sort_order? | Does this adapter support index sort order? |
#supports_indexes_in_create? | Does this adapter support creating indexes in the same statement as creating the table? |
#supports_insert_conflict_target?, #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_returning?, | |
#supports_json? | Does this adapter support JSON data type? |
#supports_lazy_transactions?, | |
#supports_materialized_views? | Does this adapter support materialized views? |
#supports_nulls_not_distinct?, | |
#supports_optimizer_hints? | Does this adapter support optimizer hints? |
#supports_partial_index? | Does this adapter support partial indices? |
#supports_partitioned_indexes?, #supports_restart_db_transaction?, | |
#supports_savepoints? | Does this adapter support savepoints? |
#supports_transaction_isolation? | Does this adapter support setting the isolation level for a transaction? |
#supports_unique_constraints? | Does this adapter support creating unique constraints? |
#supports_validate_constraints? | Does this adapter support creating invalid constraints? |
#supports_views? | Does this adapter support views? |
#supports_virtual_columns? | Does this adapter support virtual columns? |
#visitor |
DatabaseStatements
- Included
SchemaStatements
- Included
Instance Method Summary
-
#add_belongs_to(table_name, ref_name, **options)
Alias for #add_reference.
- #add_timestamps(table_name, **options)
-
#create_virtual_table(table_name, module_name, values)
Creates a virtual table.
-
#disconnect!
Disconnects from the database if already connected.
-
#drop_virtual_table(table_name, module_name, values, **options)
Drops a virtual table.
-
#encoding
Returns the current database encoding format as a string, e.g.
- #foreign_keys(table_name)
-
#rename_table(table_name, new_name, **options)
Renames a table.
- #reset!
-
#virtual_tables
Returns a list of defined virtual tables.
SQLite3::DatabaseStatements
- Included
AbstractAdapter
- Inherited
#adapter_name | Returns the human-readable name of the adapter. |
#check_all_foreign_keys_valid! | Override to check all foreign key constraints in a database. |
#clear_cache! | Clear any caching the database adapter may be doing. |
#close | Check the connection back in to the connection pool. |
#connect!, #connection_retries, #default_timezone, | |
#disable_extension | This is meant to be implemented by the adapters that support extensions. |
#disable_referential_integrity | Override to turn off referential integrity while executing |
#discard! | Immediately forget this connection ever existed. |
#disconnect! | Disconnects from the database if already connected. |
#enable_extension | This is meant to be implemented by the adapters that support extensions. |
#expire | this method must only be called while holding connection pool’s mutex. |
#extensions | A list of extensions, to be filled in by adapters that support them. |
#index_algorithms | A list of index algorithms, to be filled by adapters that support them. |
#lease | this method must only be called while holding connection pool’s mutex. |
#prefetch_primary_key? | Should primary key values be selected from their corresponding sequence before the insert statement? If true, next_sequence_value is called before each insert to set the record’s primary key. |
#prepared_statements?, | |
#raw_connection | Provides access to the underlying database driver for this adapter. |
#reconnect! | Disconnects from the database if already connected, and establishes a new connection with the database. |
#reset! | Reset the state of this connection, directing the DBMS to clear transactions and other connection-related server-side state. |
#retry_deadline, | |
#role | The role (e.g. |
#schema_cache, | |
#schema_version | Returns the version identifier of the schema currently available in the database. |
#shard | The shard (e.g. |
#throw_away! | Removes the connection from the pool and disconnect it. |
#unprepared_statement, | |
#verify! | Checks whether the connection to the database is still active (i.e. not stale). |
#log |
Savepoints
- Included
DatabaseLimits
- Included
#index_name_length | Returns the maximum length of an index name. |
#table_alias_length | Returns the maximum length of a table alias. |
#table_name_length | Returns the maximum length of a table name. |
Quoting
- Included
#quote | Quotes the column value to help prevent SQL injection attacks. |
#quote_column_name | Quotes the column name. |
#quote_string | Quotes a string, escaping any ‘ (single quote) and \ (backslash) characters. |
#quote_table_name | Quotes the table name. |
#quote_table_name_for_assignment | Override to return the quoted table name for assignment. |
#quoted_date | Quote date/time values for use in SQL input. |
#quoted_false, #quoted_true, | |
#type_cast | Cast a |
#unquoted_false, #unquoted_true |
DatabaseStatements
- Included
#add_transaction_record | Register a record with the current transaction so that its after_commit and after_rollback callbacks can be called. |
#begin_db_transaction | Begins the transaction (and turns off auto-committing). |
#begin_isolated_db_transaction | Begins the transaction with the isolation level set. |
#commit_db_transaction | Commits the transaction (and turns on auto-committing). |
#create | Alias for DatabaseStatements#insert. |
#default_sequence_name, | |
#delete | Executes the delete statement and returns the number of rows affected. |
#disable_lazy_transactions!, #empty_insert_statement_value, #enable_lazy_transactions!, | |
#exec_delete | Executes delete |
#exec_insert | Executes insert |
#exec_query | Executes |
#exec_update | Executes update |
#execute | Executes the SQL statement in the context of this connection and returns the raw result from the connection adapter. |
#high_precision_current_timestamp | Returns an |
#initialize, | |
#insert | Executes an INSERT query and returns the new record’s ID. |
#insert_fixture | Inserts the given fixture into the table. |
#insert_fixtures_set, | |
#reset_isolation_level | Hook point called after an isolated DB transaction is committed or rolled back. |
#reset_sequence! | Set the sequence to the max value of the table’s column. |
#restart_db_transaction, | |
#rollback_db_transaction | Rolls back the transaction (and turns on auto-committing). |
#rollback_to_savepoint, | |
#sanitize_limit | Sanitizes the given LIMIT parameter in order to prevent SQL injection. |
#select_all | Returns an |
#select_one | Returns a record hash with the column names as keys and column values as values. |
#select_rows | Returns an array of arrays containing the field values. |
#select_value | Returns a single value from a record. |
#select_values | Returns an array of the values of the first column in a select: |
#to_sql | Converts an arel AST to SQL. |
#transaction | Runs the given block in a database transaction, and returns the result of the block. |
#transaction_isolation_levels, | |
#truncate | Executes the truncate statement. |
#update | Executes the update statement and returns the number of rows affected. |
#write_query? | Determines whether the SQL statement is a write query. |
SchemaStatements
- Included
#add_belongs_to | Alias for SchemaStatements#add_reference. |
#add_check_constraint | Adds a new check constraint to the table. |
#add_column | Add a new |
#add_foreign_key | Adds a new foreign key. |
#add_index | Adds a new index to the table. |
#add_reference | Adds a reference. |
#add_timestamps | Adds timestamps ( |
#assume_migrated_upto_version, | |
#build_create_table_definition | Returns a |
#change_column | Changes the column’s definition according to the new options. |
#change_column_comment | Changes the comment for a column or removes it if |
#change_column_default | Sets a new default value for a column: |
#change_column_null | Sets or removes a |
#change_table | A block for changing columns in |
#change_table_comment | Changes the comment for a table or removes it if |
#check_constraint_exists? | Checks to see if a check constraint exists on a table for a given check constraint definition. |
#check_constraints | Returns an array of check constraints for the given table. |
#column_exists? | Checks to see if a column exists in a given table. |
#columns | Returns an array of |
#create_join_table | Creates a new join table with the name created using the lexical order of the first two arguments. |
#create_table | Creates a new table with the name |
#data_source_exists? | Checks to see if the data source |
#data_sources | Returns the relation names usable to back Active Record models. |
#drop_join_table | Drops the join table specified by the given arguments. |
#drop_table | Drops a table or tables from the database. |
#foreign_key_exists? | Checks to see if a foreign key exists on a table for a given foreign key definition. |
#foreign_keys | Returns an array of foreign keys for the given table. |
#index_exists? | Checks to see if an index exists on a table for a given index definition. |
#index_name_exists? | Verifies the existence of an index with a given name. |
#indexes | Returns an array of indexes for the given table. |
#max_index_name_size | Returns the maximum length of an index name in bytes. |
#native_database_types | Returns a hash of mappings from the abstract data types to the native database types. |
#options_include_default?, | |
#primary_key | Returns just a table’s primary key. |
#remove_belongs_to | Alias for SchemaStatements#remove_reference. |
#remove_check_constraint | Removes the given check constraint from the table. |
#remove_column | Removes the column from the table definition. |
#remove_columns | Removes the given columns from the table definition. |
#remove_foreign_key | Removes the given foreign key from the table. |
#remove_index | Removes the given index from the table. |
#remove_reference | Removes the reference(s). |
#remove_timestamps | Removes the timestamp columns ( |
#rename_column | Renames a column. |
#rename_index | Renames an index. |
#rename_table | Renames a table. |
#table_alias_for | Truncates a table alias according to the limits of the current adapter. |
#table_comment | Returns the table comment that’s stored in database metadata. |
#table_exists? | Checks to see if the table |
#table_options, | |
#tables | Returns an array of table names defined in the database. |
#view_exists? | Checks to see if the view |
#views | Returns an array of view names defined in the database. |
::ActiveSupport::Callbacks
- Included
#run_callbacks | Runs the callbacks for the given event. |
Constructor Details
.new ⇒ SQLite3Adapter
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 102
def initialize(...) super @memory_database = false case @config[:database].to_s when "" raise ArgumentError, "No database file specified. Missing argument: database" when ":memory:" @memory_database = true when /\Afile:/ else # Otherwise we have a path relative to Rails.root @config[:database] = File. (@config[:database], Rails.root) if defined?(Rails.root) dirname = File.dirname(@config[:database]) unless File.directory?(dirname) begin FileUtils.mkdir_p(dirname) rescue SystemCallError raise ActiveRecord::NoDatabaseError.new(connection_pool: @pool) end end end @last_affected_rows = nil @previous_read_uncommitted = nil @config[:strict] = ConnectionAdapters::SQLite3Adapter.strict_strings_by_default unless @config.key?(:strict) @connection_parameters = @config.merge( database: @config[:database].to_s, results_as_hash: true, default_transaction_mode: :immediate, ) end
Class Attribute Details
.strict_strings_by_default (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 67
class_attribute :strict_strings_by_default, default: false
.strict_strings_by_default? ⇒ Boolean
(rw)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 67
class_attribute :strict_strings_by_default, default: false
Class Method Details
.dbconsole(config, options = {})
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 44
def dbconsole(config, = {}) args = [] args << "-#{ [:mode]}" if [:mode] args << "-header" if [:header] args << File. (config.database, Rails.respond_to?(:root) ? Rails.root : nil) find_cmd_and_exec(ActiveRecord.database_cli[:sqlite], *args) end
.new_client(config)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 34
def new_client(config) ::SQLite3::Database.new(config[:database].to_s, config) rescue Errno::ENOENT => error if error. .include?("No such file or directory") raise ActiveRecord::NoDatabaseError else raise end end
Instance Attribute Details
#active? (readonly)
Alias for #connected?.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 210
alias_method :active?, :connected?
#connected? ⇒ Boolean
(readonly)
Also known as: #active?
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 206
def connected? !(@raw_connection.nil? || @raw_connection.closed?) end
#database_exists? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 135
def database_exists? @config[:database] == ":memory:" || File.exist?(@config[:database].to_s) end
#requires_reloading? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 159
def requires_reloading? true end
#strict_strings_by_default (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 67
class_attribute :strict_strings_by_default, default: false
#strict_strings_by_default? ⇒ Boolean
(rw)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 67
class_attribute :strict_strings_by_default, default: false
#supports_check_constraints? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 167
def supports_check_constraints? true end
#supports_common_table_expressions? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 183
def supports_common_table_expressions? database_version >= "3.8.3" end
#supports_concurrent_connections? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 198
def supports_concurrent_connections? !@memory_database end
#supports_datetime_with_precision? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 175
def supports_datetime_with_precision? true end
#supports_ddl_transactions? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 139
def supports_ddl_transactions? true end
#supports_deferrable_constraints? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 244
def supports_deferrable_constraints? true end
#supports_explain? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 236
def supports_explain? true end
#supports_expression_index? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 155
def supports_expression_index? database_version >= "3.9.0" end
#supports_foreign_keys? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 163
def supports_foreign_keys? true end
#supports_index_sort_order? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 223
def supports_index_sort_order? true end
#supports_insert_conflict_target? (readonly)
Alias for #supports_insert_on_conflict?.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 196
alias supports_insert_conflict_target? supports_insert_on_conflict?
#supports_insert_on_conflict? ⇒ Boolean
(readonly)
Also known as: #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_conflict_target?
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 191
def supports_insert_on_conflict? database_version >= "3.24.0" end
#supports_insert_on_duplicate_skip? (readonly)
Alias for #supports_insert_on_conflict?.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 194
alias supports_insert_on_duplicate_skip? supports_insert_on_conflict?
#supports_insert_on_duplicate_update? (readonly)
Alias for #supports_insert_on_conflict?.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 195
alias supports_insert_on_duplicate_update? supports_insert_on_conflict?
#supports_insert_returning? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 187
def supports_insert_returning? database_version >= "3.35.0" end
#supports_json? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 179
def supports_json? true end
#supports_lazy_transactions? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 240
def supports_lazy_transactions? true end
#supports_partial_index? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 151
def supports_partial_index? true end
#supports_savepoints? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 143
def supports_savepoints? true end
#supports_transaction_isolation? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 147
def supports_transaction_isolation? true end
#supports_views? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 171
def supports_views? true end
#supports_virtual_columns? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 202
def supports_virtual_columns? database_version >= "3.31.0" end
Instance Method Details
#add_belongs_to(table_name, ref_name, **options)
Alias for #add_reference.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 408
alias :add_belongs_to :add_reference
#add_timestamps(table_name, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 392
def (table_name, ** ) [:null] = false if [:null].nil? if ! .key?(:precision) [:precision] = 6 end alter_table(table_name) do |definition| definition.column :created_at, :datetime, ** definition.column :updated_at, :datetime, ** end end
#create_virtual_table(table_name, module_name, values)
Creates a virtual table
Example:
create_virtual_table :emails, :fts5, ['sender', 'title',' body']
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 308
def create_virtual_table(table_name, module_name, values) exec_query "CREATE VIRTUAL TABLE IF NOT EXISTS #{table_name} USING #{module_name} (#{values.join(", ")})" end
#disconnect!
Disconnects from the database if already connected. Otherwise, this method does nothing.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 216
def disconnect! super @raw_connection&.close rescue nil @raw_connection = nil end
#drop_virtual_table(table_name, module_name, values, **options)
Drops a virtual table
Although this command ignores module_name
and values
, it can be helpful to provide these in a migration’s change
method so it can be reverted. In that case, module_name
, values
and options
will be used by #create_virtual_table.
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 317
def drop_virtual_table(table_name, module_name, values, ** ) drop_table(table_name) end
#encoding
Returns the current database encoding format as a string, e.g. ‘UTF-8’
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 232
def encoding any_raw_connection.encoding.to_s end
#foreign_keys(table_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 412
def foreign_keys(table_name) # SQLite returns 1 row for each column of composite foreign keys. fk_info = internal_exec_query("PRAGMA foreign_key_list(#{quote(table_name)})", "SCHEMA") # Deferred or immediate foreign keys can only be seen in the CREATE TABLE sql fk_defs = table_structure_sql(table_name) .select do |column_string| column_string.start_with?("CONSTRAINT") && column_string.include?("FOREIGN KEY") end .to_h do |fk_string| _, from, table, to = fk_string.match(FK_REGEX).to_a _, mode = fk_string.match(DEFERRABLE_REGEX).to_a deferred = mode&.downcase&.to_sym || false [[table, from, to], deferred] end grouped_fk = fk_info.group_by { |row| row["id"] }.values.each { |group| group.sort_by! { |row| row["seq"] } } grouped_fk.map do |group| row = group.first = { on_delete: extract_foreign_key_action(row["on_delete"]), on_update: extract_foreign_key_action(row["on_update"]), deferrable: fk_defs[[row["table"], row["from"], row["to"]]] } if group.one? [:column] = row["from"] [:primary_key] = row["to"] else [:column] = group.map { |row| row["from"] } [:primary_key] = group.map { |row| row["to"] } end ForeignKeyDefinition.new(table_name, row["table"], ) end end
#rename_table(table_name, new_name, **options)
Renames a table.
Example:
rename_table('octopuses', 'octopi')
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 325
def rename_table(table_name, new_name, ** ) validate_table_length!(new_name) unless [:_uses_legacy_table_name] schema_cache.clear_data_source_cache!(table_name.to_s) schema_cache.clear_data_source_cache!(new_name.to_s) exec_query "ALTER TABLE #{quote_table_name(table_name)} RENAME TO #{quote_table_name(new_name)}" rename_table_indexes(table_name, new_name, ** ) end
#reset!
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 212
alias :reset! :reconnect!
#virtual_tables
Returns a list of defined virtual tables
# File 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb', line 292
def virtual_tables query = <<~SQL SELECT name, sql FROM sqlite_master WHERE sql LIKE 'CREATE VIRTUAL %'; SQL exec_query(query, "SCHEMA").cast_values.each_with_object({}) do |row, memo| table_name, sql = row[0], row[1] _, module_name, arguments = sql.match(VIRTUAL_TABLE_REGEX).to_a memo[table_name] = [module_name, arguments] end.to_a end