Class ActiveRecord::ConnectionAdapters::MysqlAdapter
In: vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
Parent: AbstractAdapter

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 /var/run/mysqld/mysqld.sock
  • :username — Defaults to root
  • :password — Defaults to nothing
  • :database — The name of the database. No default, must be provided.
  • :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

By default, the MysqlAdapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation (which was the default behavior in versions 0.13.1 and earlier) you can add the following line to your environment.rb file:

  ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans = false

Methods

Constants

LOST_CONNECTION_ERROR_MESSAGES = [ "Server shutdown in progress", "Broken pipe", "Lost connection to MySQL server during query", "MySQL server has gone away"

External Aliases

update -> delete

Public Class methods

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 83
83:       def initialize(connection, logger, connection_options, config)
84:         super(connection, logger)
85:         @connection_options, @config = connection_options, config
86:         @null_values_in_each_hash = Mysql.const_defined?(:VERSION)
87:         connect
88:       end

Public Instance methods

CONNECTION MANAGEMENT ====================================

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 145
145:       def active?
146:         if @connection.respond_to?(:stat)
147:           @connection.stat
148:         else
149:           @connection.query 'select 1'
150:         end
151: 
152:         # mysql-ruby doesn't raise an exception when stat fails.
153:         if @connection.respond_to?(:errno)
154:           @connection.errno.zero?
155:         else
156:           true
157:         end
158:       rescue Mysql::Error
159:         false
160:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 225
225:       def add_limit_offset!(sql, options) #:nodoc
226:         if limit = options[:limit]
227:           unless offset = options[:offset]
228:             sql << " LIMIT #{limit}"
229:           else
230:             sql << " LIMIT #{offset}, #{limit}"
231:           end
232:         end
233:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 264
264:       def current_database
265:         select_one("SELECT DATABASE() as db")["db"]
266:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 167
167:       def disconnect!
168:         @connection.close rescue nil
169:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 98
 98:       def native_database_types #:nodoc
 99:         {
100:           :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY",
101:           :string      => { :name => "varchar", :limit => 255 },
102:           :text        => { :name => "text" },
103:           :integer     => { :name => "int", :limit => 11 },
104:           :float       => { :name => "float" },
105:           :datetime    => { :name => "datetime" },
106:           :timestamp   => { :name => "datetime" },
107:           :time        => { :name => "time" },
108:           :date        => { :name => "date" },
109:           :binary      => { :name => "blob" },
110:           :boolean     => { :name => "tinyint", :limit => 1 }
111:         }
112:       end

QUOTING ==================================================

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 117
117:       def quote(value, column = nil)
118:         if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary)
119:           s = column.class.string_to_binary(value).unpack("H*")[0]
120:           "x'#{s}'"
121:         else
122:           super
123:         end
124:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 138
138:       def quoted_false
139:         "0"
140:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 134
134:       def quoted_true
135:         "1"
136:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 162
162:       def reconnect!
163:         disconnect!
164:         connect
165:       end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 300
300:       def rename_table(name, new_name)
301:         execute "RENAME TABLE #{name} TO #{new_name}"
302:       end

[Validate]