Class: ActiveRecord::ConnectionAdapters::MysqlAdapter
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: |
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
|
Defined in: | activerecord/lib/active_record/connection_adapters/mysql_adapter.rb |
Overview
The MySQL adapter will work with both Ruby/MySQL, which is a Ruby-based MySQL adapter that comes bundled with Active Record, and with the faster C-based MySQL/Ruby adapter (available both as a gem and from www.tmtm.org/en/mysql/ruby/).
Options:
-
:host
- Defaults to “localhost”. -
:port
- Defaults to 3306. -
:socket
- Defaults to “/tmp/mysql.sock”. -
:username
- Defaults to “root” -
:password
- Defaults to nothing. -
:database
- The name of the database. No default, must be provided. -
:encoding
- (Optional) Sets the client encoding by executing “SET NAMES <encoding>” after connection. -
:reconnect
- Defaults to false (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html). -
:strict
- Defaults to true. Enable STRICT_ALL_TABLES. (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/sql-mode.html) -
:variables
- (Optional) A hash session variables to send asSET @@SESSION.key = value
on each database connection. Use the value:default
to set a variable to its DEFAULT value. (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/set-statement.html). -
:sslca
- Necessary to use MySQL with an SSL connection. -
:sslkey
- Necessary to use MySQL with an SSL connection. -
:sslcert
- Necessary to use MySQL with an SSL connection. -
:sslcapath
- Necessary to use MySQL with an SSL connection. -
:sslcipher
- Necessary to use MySQL with an SSL connection.
Constant Summary
-
ADAPTER_NAME =
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 69'MySQL'.freeze
-
ENCODINGS =
Taken from here: github.com/tmtm/ruby-mysql/blob/master/lib/mysql/charset.rb Author: TOMITA Masahiro <tommy@tmtm.org>
{ "armscii8" => nil, "ascii" => Encoding::US_ASCII, "big5" => Encoding::Big5, "binary" => Encoding::ASCII_8BIT, "cp1250" => Encoding::Windows_1250, "cp1251" => Encoding::Windows_1251, "cp1256" => Encoding::Windows_1256, "cp1257" => Encoding::Windows_1257, "cp850" => Encoding::CP850, "cp852" => Encoding::CP852, "cp866" => Encoding::IBM866, "cp932" => Encoding::Windows_31J, "dec8" => nil, "eucjpms" => Encoding::EucJP_ms, "euckr" => Encoding::EUC_KR, "gb2312" => Encoding::EUC_CN, "gbk" => Encoding::GBK, "geostd8" => nil, "greek" => Encoding::ISO_8859_7, "hebrew" => Encoding::ISO_8859_8, "hp8" => nil, "keybcs2" => nil, "koi8r" => Encoding::KOI8_R, "koi8u" => Encoding::KOI8_U, "latin1" => Encoding::ISO_8859_1, "latin2" => Encoding::ISO_8859_2, "latin5" => Encoding::ISO_8859_9, "latin7" => Encoding::ISO_8859_13, "macce" => Encoding::MacCentEuro, "macroman" => Encoding::MacRoman, "sjis" => Encoding::SHIFT_JIS, "swe7" => nil, "tis620" => Encoding::TIS_620, "ucs2" => Encoding::UTF_16BE, "ujis" => Encoding::EucJP_ms, "utf8" => Encoding::UTF_8, "utf8mb4" => Encoding::UTF_8, }
::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_statement_cache? ⇒ Boolean
readonly
Returns true, since this connection adapter supports prepared statement caching.
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
-
#clear_cache!
Clears the prepared statements cache.
-
#client_encoding
Get the client encoding for this database.
-
#create(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
Alias for #insert_sql.
-
#disconnect!
Disconnects from the database if already connected.
- #exec_query(sql, name = 'SQL', binds = []) {|affected_rows| ... }
-
#exec_update(sql, name, binds)
Alias for #exec_delete.
- #last_inserted_id(result)
- #reconnect!
- #reset!
- #select_rows(sql, name = nil, binds = [])
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) ⇒ MysqlAdapter
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 103
def initialize(connection, logger, , config) super @statements = StatementPool.new(@connection, self.class.type_cast_config_to_integer(config.fetch(:statement_limit) { 1000 })) @client_encoding = nil connect end
Instance Attribute Details
#active? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 144
def active? if @connection.respond_to?(:stat) @connection.stat else @connection.query 'select 1' end # mysql-ruby doesn't raise an exception when stat fails. if @connection.respond_to?(:errno) @connection.errno.zero? else true end rescue Mysql::Error false end
#supports_statement_cache? ⇒ Boolean
(readonly)
Returns true, since this connection adapter supports prepared statement caching.
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 113
def supports_statement_cache? true end
Instance Method Details
#clear_cache!
Clears the prepared statements cache.
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 195
def clear_cache! super @statements.clear end
#client_encoding
Get the client encoding for this database
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 244
def client_encoding return @client_encoding if @client_encoding result = exec_query( "select @@character_set_client", 'SCHEMA') @client_encoding = ENCODINGS[result.rows.last.last] end
#create(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
Alias for #insert_sql.
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 384
alias :create :insert_sql
#disconnect!
Disconnects from the database if already connected. Otherwise, this method does nothing.
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 169
def disconnect! super @connection.close rescue nil end
#exec_query(sql, name = 'SQL', binds = []) {|affected_rows| ... }
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 253
def exec_query(sql, name = 'SQL', binds = []) if without_prepared_statement?(binds) result_set, affected_rows = exec_without_stmt(sql, name) else result_set, affected_rows = exec_stmt(sql, name, binds) end yield affected_rows if block_given? result_set end
#exec_update(sql, name, binds)
Alias for #exec_delete.
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 395
alias :exec_update :exec_delete
#last_inserted_id(result)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 265
def last_inserted_id(result) @connection.insert_id end
#reconnect!
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 161
def reconnect! super disconnect! connect end
#reset!
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 174
def reset! if @connection.respond_to?(:change_user) # See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to # reset the connection is to change the user to the same user. @connection.change_user(@config[:username], @config[:password], @config[:database]) configure_connection end end
#select_rows(sql, name = nil, binds = [])
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 187
def select_rows(sql, name = nil, binds = []) @connection.query_with_result = true rows = exec_query(sql, name, binds).rows @connection.more_results && @connection.next_result # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped rows end