Class: ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
| Subclasses: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: | |
| Instance Chain: | |
| Inherits: | ActiveRecord::ConnectionAdapters::AbstractAdapter 
 | 
| Defined in: | activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 
Constant Summary
- 
    CR_SERVER_GONE_ERROR =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8262006
- 
    CR_SERVER_LOST =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8272013
- 
    EMULATE_BOOLEANS_TRUE =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 766{ emulate_booleans: true }.freeze
- 
    ER_CANNOT_ADD_FOREIGN =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8211215
- 
    ER_CANNOT_CREATE_TABLE =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8221005
- 
    ER_CLIENT_INTERACTION_TIMEOUT =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8304031
- 
    ER_CONNECTION_KILLED =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8251927
- 
    ER_DATA_TOO_LONG =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8181406
- 
    ER_DB_CREATE_EXISTS =
    
    # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 808    1007
- 
    ER_DO_NOT_HAVE_DEFAULT =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8151364
- 
    ER_DUP_ENTRY =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8101062
- 
    ER_FILSORT_ABORT =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8091028
- 
    ER_FK_INCOMPATIBLE_COLUMNS =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8293780
- 
    ER_LOCK_DEADLOCK =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8201213
- 
    ER_LOCK_WAIT_TIMEOUT =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8231205
- 
    ER_NOT_NULL_VIOLATION =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8121048
- 
    ER_NO_REFERENCED_ROW =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8131216
- 
    ER_NO_REFERENCED_ROW_2 =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8171452
- 
    ER_OUT_OF_RANGE =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8191264
- 
    ER_QUERY_INTERRUPTED =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8241317
- 
    ER_QUERY_TIMEOUT =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8283024
- 
    ER_ROW_IS_REFERENCED =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8141217
- 
    ER_ROW_IS_REFERENCED_2 =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8161451
- 
    ER_SERVER_SHUTDOWN =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 8111053
- 
    EXTENDED_TYPE_MAPS =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 765Concurrent::Map.new 
- 
    NATIVE_DATABASE_TYPES =
    
 # File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 31{ primary_key: "bigint auto_increment PRIMARY KEY", string: { name: "varchar", limit: 255 }, text: { name: "text" }, integer: { name: "int", limit: 4 }, bigint: { name: "bigint" }, float: { name: "float", limit: 24 }, decimal: { name: "decimal" }, datetime: { name: "datetime" }, timestamp: { name: "timestamp" }, time: { name: "time" }, date: { name: "date" }, binary: { name: "blob" }, blob: { name: "blob" }, boolean: { name: "tinyint", limit: 1 }, json: { name: "json" }, }
::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
- #emulate_booleans rw
- #emulate_booleans? ⇒ Boolean rw
- #strict_mode? ⇒ Boolean readonly
- #supports_advisory_locks? ⇒ Boolean readonly
- #supports_bulk_alter? ⇒ Boolean readonly
- #supports_check_constraints? ⇒ Boolean readonly
- #supports_common_table_expressions? ⇒ Boolean readonly
- #supports_datetime_with_precision? ⇒ Boolean readonly
- #supports_explain? ⇒ Boolean readonly
- #supports_expression_index? ⇒ Boolean readonly
- #supports_foreign_keys? ⇒ Boolean readonly
- #supports_index_sort_order? ⇒ Boolean readonly
- #supports_indexes_in_create? ⇒ Boolean readonly
- #supports_insert_on_duplicate_skip? ⇒ Boolean readonly
- #supports_insert_on_duplicate_update? ⇒ Boolean readonly
- #supports_insert_returning? ⇒ Boolean readonly
- 
    
      #supports_optimizer_hints?  ⇒ Boolean 
    
    readonly
    See dev.mysql.com/doc/refman/en/optimizer-hints.html for more details. 
- #supports_restart_db_transaction? ⇒ Boolean readonly
- #supports_transaction_isolation? ⇒ Boolean readonly
- #supports_views? ⇒ Boolean readonly
- #supports_virtual_columns? ⇒ Boolean readonly
AbstractAdapter - Inherited
| #__callbacks, #__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
- 
    
      #charset  
    
    Returns the database character set. 
- #check_constraints(table_name)
- 
    
      #collation  
    
    Returns the database collation strategy. 
- 
    
      #create_database(name, options = {})  
    
    Create a new MySQLdatabase with optional:charsetand:collation.
- #current_database
- 
    
      #drop_table(table_name, **options)  
    
    Drops a table from the database. 
- #foreign_keys(table_name)
- #index_algorithms
- #native_database_types
- 
    
      #quote_string(string)  
    
    Quotes strings for use in SQL input. 
- 
    
      #recreate_database(name, options = {})  
    
    Drops the database specified on the nameattribute and creates it again using the providedoptions.
- #rename_index(table_name, old_name, new_name)
- 
    
      #rename_table(table_name, new_name, **options)  
    
    Renames a table. 
- 
    
      #show_variable(name)  
    
    SHOW VARIABLES LIKE ‘name’. 
MySQL::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). | 
| #verify_timeout, #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_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 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. | 
Class Attribute Details
.emulate_booleans (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 29
class_attribute :emulate_booleans, default: true
    .emulate_booleans?  ⇒ Boolean  (rw)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 29
class_attribute :emulate_booleans, default: true
Class Method Details
.dbconsole(config, options = {})
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 57
def dbconsole(config, = {}) mysql_config = config.configuration_hash args = { host: "--host", port: "--port", socket: "--socket", username: "--user", encoding: "--default-character-set", sslca: "--ssl-ca", sslcert: "--ssl-cert", sslcapath: "--ssl-capath", sslcipher: "--ssl-cipher", sslkey: "--ssl-key", ssl_mode: "--ssl-mode" }.filter_map { |opt, arg| "#{arg}=#{mysql_config[opt]}" if mysql_config[opt] } if mysql_config[:password] && [:include_password] args << "--password=#{mysql_config[:password]}" elsif mysql_config[:password] && !mysql_config[:password].to_s.empty? args << "-p" end args << config.database find_cmd_and_exec(["mysql", "mysql5"], *args) end
Instance Attribute Details
#emulate_booleans (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 29
class_attribute :emulate_booleans, default: true
    #emulate_booleans?  ⇒ Boolean  (rw)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 29
class_attribute :emulate_booleans, default: true
    #strict_mode?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 641
def strict_mode? self.class.type_cast_config_to_boolean(@config.fetch(:strict, true)) end
    #supports_advisory_locks?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 161
def supports_advisory_locks? true end
    #supports_bulk_alter?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 96
def supports_bulk_alter? true end
    #supports_check_constraints?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 128
def supports_check_constraints? if mariadb? database_version >= "10.3.10" || (database_version < "10.3" && database_version >= "10.2.22") else database_version >= "8.0.16" end end
    #supports_common_table_expressions?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 153
def supports_common_table_expressions? if mariadb? database_version >= "10.2.1" else database_version >= "8.0.1" end end
    #supports_datetime_with_precision?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 140
def supports_datetime_with_precision? mariadb? || database_version >= "5.6.4" end
    #supports_explain?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 116
def supports_explain? true end
    #supports_expression_index?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 104
def supports_expression_index? !mariadb? && database_version >= "8.0.13" end
    #supports_foreign_keys?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 124
def supports_foreign_keys? true end
    #supports_index_sort_order?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 100
def supports_index_sort_order? !mariadb? && database_version >= "8.0.1" end
    #supports_indexes_in_create?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 120
def supports_indexes_in_create? true end
    #supports_insert_on_duplicate_skip?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 165
def supports_insert_on_duplicate_skip? true end
    #supports_insert_on_duplicate_update?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 169
def supports_insert_on_duplicate_update? true end
    #supports_insert_returning?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 173
def supports_insert_returning? mariadb? && database_version >= "10.5.0" end
    #supports_optimizer_hints?  ⇒ Boolean  (readonly)
  
See dev.mysql.com/doc/refman/en/optimizer-hints.html for more details.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 149
def supports_optimizer_hints? !mariadb? && database_version >= "5.7.7" end
    #supports_restart_db_transaction?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 112
def supports_restart_db_transaction? true end
    #supports_transaction_isolation?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 108
def supports_transaction_isolation? true end
    #supports_views?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 136
def supports_views? true end
    #supports_virtual_columns?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 144
def supports_virtual_columns? mariadb? || database_version >= "5.7.5" end
Instance Method Details
#charset
Returns the database character set.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 312
def charset show_variable "character_set_database" end
#check_constraints(table_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 521
def check_constraints(table_name) if supports_check_constraints? scope = quoted_scope(table_name) sql = <<~SQL SELECT cc.constraint_name AS 'name', cc.check_clause AS 'expression' FROM information_schema.check_constraints cc JOIN information_schema.table_constraints tc USING (constraint_schema, constraint_name) WHERE tc.table_schema = #{scope[:schema]} AND tc.table_name = #{scope[:name]} AND cc.constraint_schema = #{scope[:schema]} SQL sql += " AND cc.table_name = #{scope[:name]}" if mariadb? chk_info = internal_exec_query(sql, "SCHEMA") chk_info.map do |row| = { name: row["name"] } expression = row["expression"] expression = expression[1..-2] if expression.start_with?("(") && expression.end_with?(")") expression = strip_whitespace_characters(expression) unless mariadb? # MySQL returns check constraints expression in an already escaped form. # This leads to duplicate escaping later (e.g. when the expression is used in the SchemaDumper). expression = expression.gsub("\\'", "'") end CheckConstraintDefinition.new(table_name, expression, ) end else raise NotImplementedError end end
#collation
Returns the database collation strategy.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 317
def collation show_variable "collation_database" end
#create_database(name, options = {})
Create a new MySQL database with optional :charset and :collation. Charset defaults to utf8mb4.
Example:
create_database 'charset_test', charset: 'latin1', collation: 'latin1_bin'
create_database 'matt_development'
create_database 'matt_development', charset: :big5# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 287
def create_database(name, = {}) if [:collation] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT COLLATE #{quote_table_name([:collation])}" elsif [:charset] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET #{quote_table_name([:charset])}" elsif row_format_dynamic_by_default? execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET `utf8mb4`" else raise "Configure a supported :charset and ensure innodb_large_prefix is enabled to support indexes on varchar(255) string columns." end end
#current_database
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 307
def current_database query_value("SELECT database()", "SCHEMA") end
#drop_table(table_name, **options)
Drops a table from the database.
- :force
- 
Set to :cascadeto drop dependent objects as well. Defaults to false.
- :if_exists
- 
Set to trueto only drop the table if it exists. Defaults to false.
- :temporary
- 
Set to trueto drop temporary table. Defaults to false.
Although this command ignores most options and the block if one is given, it can be helpful to provide these in a migration’s change method so it can be reverted. In that case, options and the block will be used by create_table.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 365
def drop_table(table_name, **) schema_cache.clear_data_source_cache!(table_name.to_s) execute "DROP#{' TEMPORARY' if [:temporary]} TABLE#{' IF EXISTS' if [:if_exists]} #{quote_table_name(table_name)}#{' CASCADE' if [:force] == :cascade}" end
#foreign_keys(table_name)
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 476
def foreign_keys(table_name) raise ArgumentError unless table_name.present? scope = quoted_scope(table_name) # MySQL returns 1 row for each column of composite foreign keys. fk_info = internal_exec_query(<<~SQL, "SCHEMA") SELECT fk.referenced_table_name AS 'to_table', fk.referenced_column_name AS 'primary_key', fk.column_name AS 'column', fk.constraint_name AS 'name', fk.ordinal_position AS 'position', rc.update_rule AS 'on_update', rc.delete_rule AS 'on_delete' FROM information_schema.referential_constraints rc JOIN information_schema.key_column_usage fk USING (constraint_schema, constraint_name) WHERE fk.referenced_column_name IS NOT NULL AND fk.table_schema = #{scope[:schema]} AND fk.table_name = #{scope[:name]} AND rc.constraint_schema = #{scope[:schema]} AND rc.table_name = #{scope[:name]} SQL grouped_fk = fk_info.group_by { |row| row["name"] }.values.each { |group| group.sort_by! { |row| row["position"] } } grouped_fk.map do |group| row = group.first = { name: row["name"], on_update: extract_foreign_key_action(row["on_update"]), on_delete: extract_foreign_key_action(row["on_delete"]) } if group.one? [:column] = unquote_identifier(row["column"]) [:primary_key] = row["primary_key"] else [:column] = group.map { |row| unquote_identifier(row["column"]) } [:primary_key] = group.map { |row| row["primary_key"] } end ForeignKeyDefinition.new(table_name, unquote_identifier(row["to_table"]), ) end end
#index_algorithms
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 193
def index_algorithms { default: "ALGORITHM = DEFAULT", copy: "ALGORITHM = COPY", inplace: "ALGORITHM = INPLACE", instant: "ALGORITHM = INSTANT", } end
#native_database_types
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 189
def native_database_types NATIVE_DATABASE_TYPES end
#quote_string(string)
Quotes strings for use in SQL input.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 706
def quote_string(string) with_raw_connection(allow_retry: true, materialize_transactions: false) do |connection| connection.escape(string) end end
#recreate_database(name, options = {})
Drops the database specified on the name attribute and creates it again using the provided options.
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 273
def recreate_database(name, = {}) drop_database(name) sql = create_database(name, ) reconnect! sql end
#rename_index(table_name, old_name, new_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 370
def rename_index(table_name, old_name, new_name) if supports_rename_index? validate_index_length!(table_name, new_name) execute "ALTER TABLE #{quote_table_name(table_name)} RENAME INDEX #{quote_table_name(old_name)} TO #{quote_table_name(new_name)}" else super end end
#rename_table(table_name, new_name, **options)
Renames a table.
Example:
rename_table('octopuses', 'octopi')# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 342
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) execute "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}" rename_table_indexes(table_name, new_name, **) end
#show_variable(name)
SHOW VARIABLES LIKE ‘name’
# File 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb', line 590
def show_variable(name) query_value("SELECT @@#{name}", "SCHEMA") rescue ActiveRecord::StatementInvalid nil end