Class: ActiveRecord::ConnectionAdapters::Mysql2Adapter
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: |
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
|
| Defined in: | activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb |
Constant Summary
-
ADAPTER_NAME =
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 32'Mysql2'.freeze
-
MAX_INDEX_LENGTH_FOR_UTF8MB4 =
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 40191
::ActiveSupport::Callbacks - Included
AbstractAdapter - Inherited
AbstractMysqlAdapter - Inherited
INDEX_TYPES, INDEX_USINGS, LOST_CONNECTION_ERROR_MESSAGES, NATIVE_DATABASE_TYPES
Class Attribute Summary
AbstractMysqlAdapter - Inherited
Class Method Summary
AbstractMysqlAdapter - Inherited
| .new | FIXME: Make the first parameter more similar for the two adapters. |
AbstractAdapter - Inherited
::ActiveSupport::DescendantsTracker - Inherited
| clear, descendants, direct_descendants, | |
| store_inherited | This is the only method that is not thread safe, but is only ever called during the eager loading phase. |
Instance Attribute Summary
- #active? ⇒ Boolean readonly
- #supports_explain? ⇒ Boolean readonly
AbstractMysqlAdapter - Inherited
| #emulate_booleans, #emulate_booleans?, #strict_mode?, #supports_datetime_with_precision?, #supports_foreign_keys?, | |
| #supports_index_sort_order? | Technically MySQL allows to create indexes with the sort order syntax but at the moment (5.5) it doesn't yet implement them. |
| #supports_indexes_in_create?, | |
| #supports_migrations? | Returns true, since this connection adapter supports migrations. |
| #supports_primary_key?, | |
| #supports_transaction_isolation? | MySQL 4 technically support transaction isolation, but it is affected by a bug where the transaction level gets persisted for the whole session: |
| #supports_views? | |
AbstractAdapter - Inherited
| #active? | Checks whether the connection to the database is still active. |
| #in_use? | Alias for AbstractAdapter#owner. |
| #logger, #owner, #pool, #prepared_statements, | |
| #requires_reloading? | Returns true if its required to reload the connection between requests for development mode. |
| #schema_cache, #schema_cache=, #supports_bulk_alter?, | |
| #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_explain? | Does this adapter support explain? |
| #supports_extensions? | Does this adapter support database extensions? |
| #supports_foreign_keys? | Does this adapter support creating foreign key constraints? |
| #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_migrations? | Does this adapter support migrations? |
| #supports_partial_index? | Does this adapter support partial indices? |
| #supports_primary_key? | Can this adapter determine the primary key for tables not attached to an Active Record class, such as join tables? |
| #supports_savepoints? | Does this adapter support savepoints? |
| #supports_transaction_isolation? | Does this adapter support setting the isolation level for a transaction? |
| #supports_views? | Does this adapter support views? |
| #visitor | |
DatabaseStatements - Included
| #begin_transaction, #commit_transaction, #current_transaction, #open_transactions, #rollback_transaction, | |
| #supports_statement_cache? | Returns |
| #transaction_open?, #within_new_transaction | |
Instance Method Summary
-
#create(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
Alias for #insert_sql.
-
#disconnect!
Disconnects from the database if already connected.
- #error_number(exception)
- #exec_delete(sql, name, binds) (also: #exec_update)
- #exec_insert(sql, name, binds, pk = nil, sequence_name = nil)
- #exec_query(sql, name = 'SQL', binds = []) (also: #exec_without_stmt)
-
#exec_update(sql, name, binds)
Alias for #exec_delete.
-
#exec_without_stmt(sql, name = 'SQL', binds = [])
Alias for #exec_query.
-
#execute(sql, name = nil)
Executes the SQL statement in the context of this connection.
- #explain(arel, binds = [])
- #initialize_schema_migrations_table
- #insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) (also: #create)
- #last_inserted_id(result)
- #quote_string(string)
- #reconnect! (also: #reset!)
-
#reset!
Alias for #reconnect!.
-
#select_rows(sql, name = nil, binds = [])
Returns an array of arrays containing the field values.
AbstractMysqlAdapter - Inherited
AbstractAdapter - Inherited
| #adapter_name | Returns the human-readable name of the adapter. |
| #case_insensitive_comparison, #case_sensitive_comparison, #case_sensitive_modifier, | |
| #clear_cache! | Clear any caching the database adapter may be doing, for example clearing the prepared statement cache. |
| #close | Check the connection back in to the connection pool. |
| #collector, #create_savepoint, #current_savepoint_name, | |
| #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 |
| #disconnect! | Disconnects from the database if already connected. |
| #enable_extension | This is meant to be implemented by the adapters that support extensions. |
| #expire, | |
| #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, #new_column, | |
| #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. |
| #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. |
| #release_savepoint, | |
| #reset! | Reset the state of this connection, directing the DBMS to clear transactions and other connection-related server-side state. |
| #schema_creation, | |
| #substitute_at | Returns a bind substitution value given a bind |
| #unprepared_statement, #valid_type?, | |
| #verify! | Checks whether the connection to the database is still active (i.e. not stale). |
ColumnDumper - Included
| #column_spec, | |
| #migration_keys | Lists the valid migration options. |
| #prepare_column_options | This can be overridden on a Adapter level basis to support other extended datatypes (Example: Adding an array option in the PostgreSQLAdapter). |
::ActiveSupport::Callbacks - Included
| #run_callbacks | Runs the callbacks for the given event. |
::ActiveRecord::QueryCache - Included
DatabaseLimits - Included
| #allowed_index_name_length | Returns the maximum allowed length for an index name. |
| #column_name_length | Returns the maximum length of a column name. |
| #columns_per_multicolumn_index | Returns the maximum number of columns in a multicolumn index. |
| #columns_per_table | Returns the maximum number of columns per table. |
| #in_clause_length | Returns the maximum number of elements in an IN (x,y,z) clause. |
| #index_name_length | Returns the maximum length of an index name. |
| #indexes_per_table | Returns the maximum number of indexes per table. |
| #joins_per_query | Returns maximum number of joins in a single query. |
| #sql_query_length | Returns the maximum length of an SQL query. |
| #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, #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). |
| #default_sequence_name, | |
| #delete | Executes the delete statement and returns the number of rows affected. |
| #empty_insert_statement_value, | |
| #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. |
| #initialize, | |
| #insert | Returns the last auto-generated ID from the affected table. |
| #insert_fixture | Inserts the given fixture into the table. |
| #reset_sequence! | Set the sequence to the max value of the table's column. |
| #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 ::ActiveRecord::Result instance. |
| #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, #transaction_state, | |
| #truncate | Executes the truncate statement. |
| #update | Executes the update statement and returns the number of rows affected. |
SchemaStatements - Included
| #add_belongs_to | Alias for SchemaStatements#add_reference. |
| #add_column | Adds a new column to the named table. |
| #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, | |
| #change_column | Changes the column's definition according to the new options. |
| #change_column_default | Sets a new default value for a column: |
| #change_column_null | Sets or removes a NOT NULL constraint on a column. |
| #change_table | A block for changing columns in |
| #column_exists? | Checks to see if a column exists in a given table. |
| #columns | Returns an array of Column objects for the table specified by |
| #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 useable to back Active Record models. |
| #drop_join_table | Drops the join table specified by the given arguments. |
| #drop_table | Drops a table from the database. |
| #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. |
| #initialize_schema_migrations_table | Should not be called normally, but this operation is non-destructive. |
| #native_database_types | Returns a hash of mappings from the abstract data types to the native database types. |
| #remove_belongs_to | Alias for SchemaStatements#remove_reference. |
| #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_exists? | Checks to see if the table |
Constructor Details
.new(connection, logger, connection_options, config) ⇒ Mysql2Adapter
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 34
def initialize(connection, logger, , config) super @prepared_statements = false configure_connection end
Instance Attribute Details
#active? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 81
def active? @connection.ping end
#supports_explain? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 49
def supports_explain? true end
Instance Method Details
#create(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
Alias for #insert_sql.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 231
alias :create :insert_sql
#disconnect!
Disconnects from the database if already connected. Otherwise, this method does nothing.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 94
def disconnect! super @connection.close end
#error_number(exception)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 65
def error_number(exception) exception.error_number if exception.respond_to?(:error_number) end
#exec_delete(sql, name, binds) Also known as: #exec_update
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 237
def exec_delete(sql, name, binds) execute to_sql(sql, binds), name @connection.affected_rows end
#exec_insert(sql, name, binds, pk = nil, sequence_name = nil)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 233
def exec_insert(sql, name, binds, pk = nil, sequence_name = nil) execute to_sql(sql, binds), name end
#exec_query(sql, name = 'SQL', binds = []) Also known as: #exec_without_stmt
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 220
def exec_query(sql, name = 'SQL', binds = []) result = execute(sql, name) ActiveRecord::Result.new(result.fields, result.to_a) end
#exec_update(sql, name, binds)
Alias for #exec_delete.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 241
alias :exec_update :exec_delete
#exec_without_stmt(sql, name = 'SQL', binds = [])
Alias for #exec_query.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 225
alias exec_without_stmt exec_query
#execute(sql, name = nil)
Executes the SQL statement in the context of this connection.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 212
def execute(sql, name = nil) # make sure we carry over any changes to ActiveRecord::Base.default_timezone that have been # made since we established the connection @connection.[:database_timezone] = ActiveRecord::Base.default_timezone super end
#explain(arel, binds = [])
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 103
def explain(arel, binds = []) sql = "EXPLAIN #{to_sql(arel, binds.dup)}" start = Time.now result = exec_query(sql, 'EXPLAIN', binds) elapsed = Time.now - start ExplainPrettyPrinter.new.pp(result, elapsed) end
#initialize_schema_migrations_table
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 41
def initialize_schema_migrations_table if charset == 'utf8mb4' ActiveRecord::SchemaMigration.create_table(MAX_INDEX_LENGTH_FOR_UTF8MB4) else ActiveRecord::SchemaMigration.create_table end end
#insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) Also known as: #create
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 227
def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) super id_value || @connection.last_id end
#last_inserted_id(result)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 243
def last_inserted_id(result) @connection.last_id end
#quote_string(string)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 73
def quote_string(string) @connection.escape(string) end
#reconnect! Also known as: #reset!
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 85
def reconnect! super disconnect! connect end
#reset!
Alias for #reconnect!.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 90
alias :reset! :reconnect!
#select_rows(sql, name = nil, binds = [])
Returns an array of arrays containing the field values. Order is the same as that returned by columns.
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 207
def select_rows(sql, name = nil, binds = []) execute(sql, name).to_a end