- MODULE ActiveRecord::ConnectionAdapters::ColumnDumper
- MODULE ActiveRecord::ConnectionAdapters::ColumnMethods
- MODULE ActiveRecord::ConnectionAdapters::DatabaseLimits
- MODULE ActiveRecord::ConnectionAdapters::DatabaseStatements
- MODULE ActiveRecord::ConnectionAdapters::DetermineIfPreparableVisitor
- MODULE ActiveRecord::ConnectionAdapters::MySQL
- MODULE ActiveRecord::ConnectionAdapters::PostgreSQL
- MODULE ActiveRecord::ConnectionAdapters::QueryCache
- MODULE ActiveRecord::ConnectionAdapters::Quoting
- MODULE ActiveRecord::ConnectionAdapters::SQLite3
- MODULE ActiveRecord::ConnectionAdapters::Savepoints
- MODULE ActiveRecord::ConnectionAdapters::SchemaStatements
- MODULE ActiveRecord::ConnectionAdapters::Type
- CLASS ActiveRecord::ConnectionAdapters::AbstractAdapter
- CLASS ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
- CLASS ActiveRecord::ConnectionAdapters::Column
- CLASS ActiveRecord::ConnectionAdapters::ConnectionHandler
- CLASS ActiveRecord::ConnectionAdapters::ConnectionPool
- CLASS ActiveRecord::ConnectionAdapters::Mysql2Adapter
- CLASS ActiveRecord::ConnectionAdapters::NullColumn
- CLASS ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
- CLASS ActiveRecord::ConnectionAdapters::PostgreSQLTypeMetadata
- CLASS ActiveRecord::ConnectionAdapters::RealTransaction
- CLASS ActiveRecord::ConnectionAdapters::SQLite3Adapter
- CLASS ActiveRecord::ConnectionAdapters::SavepointTransaction
- CLASS ActiveRecord::ConnectionAdapters::SchemaCache
- CLASS ActiveRecord::ConnectionAdapters::SqlTypeMetadata
- CLASS ActiveRecord::ConnectionAdapters::Table
- CLASS ActiveRecord::ConnectionAdapters::TableDefinition
- CLASS ActiveRecord::ConnectionAdapters::TransactionState
- B
- C
- D
- E
- F
- I
- N
- R
- S
- T
ER_DUP_ENTRY | = | 1062 |
See dev.mysql.com/doc/refman/5.7/en/error-messages-server.html |
||
ER_NOT_NULL_VIOLATION | = | 1048 |
ER_DO_NOT_HAVE_DEFAULT | = | 1364 |
ER_NO_REFERENCED_ROW_2 | = | 1452 |
ER_DATA_TOO_LONG | = | 1406 |
ER_OUT_OF_RANGE | = | 1264 |
ER_LOCK_DEADLOCK | = | 1213 |
ER_CANNOT_ADD_FOREIGN | = | 1215 |
ER_CANNOT_CREATE_TABLE | = | 1005 |
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 68 def initialize(connection, logger, connection_options, config) super(connection, logger, config) @statements = StatementPool.new(self.class.type_cast_config_to_integer(config[:statement_limit])) if version < "5.1.10" raise "Your version of MySQL (#{full_version.match(/^\d+\.\d+\.\d+/)[0]}) is too old. Active Record supports MySQL >= 5.1.10." end end
Returns the database character set.
Clears the prepared statements cache.
Returns the database collation strategy.
Create a new MySQL database
with optional :charset
and :collation
. Charset
defaults to utf8.
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 277 def create_database(name, options = {}) if options[:collation] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET #{quote_table_name(options[:charset] || 'utf8')} COLLATE #{quote_table_name(options[:collation])}" else execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET #{quote_table_name(options[:charset] || 'utf8')}" end end
Drops a table from the database.
- :force
-
Set to
:cascade
to drop dependent objects as well. Defaults to false. :if_exists
-
Set to
true
to only drop the table if it exists. Defaults to false. :temporary
-
Set to
true
to 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 405 def drop_table(table_name, options = {}) execute "DROP#{' TEMPORARY' if options[:temporary]} TABLE#{' IF EXISTS' if options[:if_exists]} #{quote_table_name(table_name)}#{' CASCADE' if options[:force] == :cascade}" end
Executes the SQL statement in the context of this connection.
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 201 def explain(arel, binds = []) sql = "EXPLAIN #{to_sql(arel, binds)}" start = Time.now result = exec_query(sql, "EXPLAIN", binds) elapsed = Time.now - start MySQL::ExplainPrettyPrinter.new.pp(result, elapsed) end
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 455 def foreign_keys(table_name) raise ArgumentError unless table_name.present? scope = quoted_scope(table_name) fk_info = select_all(" 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', rc.update_rule AS 'on_update', rc.delete_rule AS 'on_delete' FROM information_schema.key_column_usage fk JOIN information_schema.referential_constraints rc 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.table_name = #{scope[:name]} ".strip_heredoc, "SCHEMA") fk_info.map do |row| options = { column: row["column"], name: row["name"], primary_key: row["primary_key"] } options[:on_update] = extract_foreign_key_action(row["on_update"]) options[:on_delete] = extract_foreign_key_action(row["on_delete"]) ForeignKeyDefinition.new(table_name, row["to_table"], options) end end
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 409 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
Renames a table.
Example:
rename_table('octopuses', 'octopi')
SHOW VARIABLES LIKE 'name'
Technically MySQL allows to create indexes with the sort order syntax but at the moment (5.5) it doesn't yet implement them
Returns true, since this connection adapter supports prepared statement caching.