- C
- D
- E
- F
- I
- L
- Q
- R
- S
-
- show_variable,
- strict_mode?,
- supports_advisory_locks?,
- supports_bulk_alter?,
- supports_check_constraints?,
- supports_common_table_expressions?,
- supports_datetime_with_precision?,
- supports_disabling_indexes?,
- supports_explain?,
- supports_expression_index?,
- supports_foreign_keys?,
- supports_index_sort_order?,
- supports_indexes_in_create?,
- supports_insert_on_duplicate_skip?,
- supports_insert_on_duplicate_update?,
- supports_insert_returning?,
- supports_optimizer_hints?,
- supports_restart_db_transaction?,
- supports_transaction_isolation?,
- supports_views?,
- supports_virtual_columns?
Constants
| CR_SERVER_GONE_ERROR | = | 2006 |
| CR_SERVER_LOST | = | 2013 |
| EMULATE_BOOLEANS_TRUE | = | { emulate_booleans: true }.freeze |
| ER_CANNOT_ADD_FOREIGN | = | 1215 |
| ER_CANNOT_CREATE_TABLE | = | 1005 |
| ER_CHECK_CONSTRAINT_VIOLATED | = | 3819 |
| ER_CLIENT_INTERACTION_TIMEOUT | = | 4031 |
| ER_CONNECTION_KILLED | = | 1927 |
| ER_CONSTRAINT_FAILED | = | 4025 |
| ER_DATA_TOO_LONG | = | 1406 |
| ER_DB_CREATE_EXISTS | = | 1007 |
See dev.mysql.com/doc/mysql-errors/en/server-error-reference.html |
||
| ER_DO_NOT_HAVE_DEFAULT | = | 1364 |
| ER_DUP_ENTRY | = | 1062 |
| ER_FILSORT_ABORT | = | 1028 |
| ER_FK_INCOMPATIBLE_COLUMNS | = | 3780 |
| ER_LOCK_DEADLOCK | = | 1213 |
| ER_LOCK_WAIT_TIMEOUT | = | 1205 |
| ER_NOT_NULL_VIOLATION | = | 1048 |
| ER_NO_DB_ERROR | = | 1046 |
| ER_NO_REFERENCED_ROW | = | 1216 |
| ER_NO_REFERENCED_ROW_2 | = | 1452 |
| ER_OUT_OF_RANGE | = | 1264 |
| ER_QUERY_INTERRUPTED | = | 1317 |
| ER_QUERY_TIMEOUT | = | 3024 |
| ER_ROW_IS_REFERENCED | = | 1217 |
| ER_ROW_IS_REFERENCED_2 | = | 1451 |
| ER_SERVER_SHUTDOWN | = | 1053 |
| EXTENDED_TYPE_MAPS | = | Concurrent::Map.new |
| NATIVE_DATABASE_TYPES | = | { # rubocop:disable Style/MutableConstant 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: "boolean" }, json: { name: "json" }, } |
Class Public methods
dbconsole(config, options = {}) Link
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 57 def dbconsole(config, options = {}) 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] && options[: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(ActiveRecord.database_cli[:mysql], *args) end
emulate_booleans Link
By default, the Mysql2Adapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation you can add the following line to your application.rb file:
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = false
Instance Public methods
charset() Link
Returns the database character set.
check_constraints(table_name) Link
collation() Link
Returns the database collation strategy.
create_database(name, options = {}) Link
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 319 def create_database(name, options = {}) if options[:collation] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT COLLATE #{quote_table_name(options[:collation])}" elsif options[:charset] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET #{quote_table_name(options[: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() Link
drop_table(*table_names, **options) Link
Drops a table or tables 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 except if you provide more than one table which is not supported.
foreign_keys(table_name) Link
index_algorithms() Link
lock_options() Link
Returns the available lock options for MySQL DDL operations.
MySQL supports the following lock modes:
-
:default- LetMySQLdecide the lock level. -
:none- Allow concurrent reads and writes (online DDL). -
:shared- Allow concurrent reads but block writes. -
:exclusive- Block all concurrent reads and writes.
quote_string(string) Link
Quotes strings for use in SQL input.
recreate_database(name, options = {}) Link
Drops the database specified on the name attribute and creates it again using the provided options.
rename_index(table_name, old_name, new_name) Link
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 407 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) Link
Renames a table.
Example:
rename_table('octopuses', 'octopi')
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 379 def rename_table(table_name, new_name, **options) validate_table_length!(new_name) unless options[:_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, **options) end
show_variable(name) Link
SHOW VARIABLES LIKE ‘name’
strict_mode?() Link
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 594 def strict_mode? if @config.key?(:strict) && !@strict_mode_deprecation_warned @strict_mode_deprecation_warned = true ActiveRecord.deprecator.warn(<<~MSG.squish) The `strict` option in database configurations is deprecated and will be removed in Rails 9.0. Use `variables: { sql_mode: "..." }` to configure sql_mode directly instead. MSG end self.class.type_cast_config_to_boolean(@config.fetch(:strict, true)) end
supports_advisory_locks?() Link
supports_bulk_alter?() Link
supports_check_constraints?() Link
supports_common_table_expressions?() Link
supports_datetime_with_precision?() Link
supports_disabling_indexes?() Link
See dev.mysql.com/doc/refman/8.0/en/invisible-indexes.html for more details on MySQL feature. See mariadb.com/kb/en/ignored-indexes/ for more details on the MariaDB feature.
supports_explain?() Link
supports_expression_index?() Link
supports_foreign_keys?() Link
supports_index_sort_order?() Link
supports_indexes_in_create?() Link
supports_insert_on_duplicate_skip?() Link
supports_insert_on_duplicate_update?() Link
supports_insert_returning?() Link
supports_optimizer_hints?() Link
See dev.mysql.com/doc/refman/en/optimizer-hints.html for more details.