| 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:
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
| LOST_CONNECTION_ERROR_MESSAGES | = | [ "Server shutdown in progress", "Broken pipe", "Lost connection to MySQL server during query", "MySQL server has gone away" ] |
| QUOTED_FALSE | = | '1', '0' |
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 181
181: def initialize(connection, logger, connection_options, config)
182: super(connection, logger)
183: @connection_options, @config = connection_options, config
184: @quoted_column_names, @quoted_table_names = {}, {}
185: connect
186: end
CONNECTION MANAGEMENT ====================================
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 262
262: def active?
263: if @connection.respond_to?(:stat)
264: @connection.stat
265: else
266: @connection.query 'select 1'
267: end
268:
269: # mysql-ruby doesn't raise an exception when stat fails.
270: if @connection.respond_to?(:errno)
271: @connection.errno.zero?
272: else
273: true
274: end
275: rescue Mysql::Error
276: false
277: end
Returns the database character set.
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 395
395: def charset
396: show_variable 'character_set_database'
397: end
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 vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 378
378: def create_database(name, options = {})
379: if options[:collation]
380: execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}` COLLATE `#{options[:collation]}`"
381: else
382: execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}`"
383: end
384: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 390
390: def current_database
391: select_value 'SELECT DATABASE() as db'
392: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 284
284: def disconnect!
285: @connection.close rescue nil
286: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 410
410: def drop_table(table_name, options = {})
411: super(table_name, options)
412: end
QUOTING ==================================================
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 216
216: def quote(value, column = nil)
217: if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary)
218: s = column.class.string_to_binary(value).unpack("H*")[0]
219: "x'#{s}'"
220: elsif value.kind_of?(BigDecimal)
221: "'#{value.to_s("F")}'"
222: else
223: super
224: end
225: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 243
243: def quoted_false
244: QUOTED_FALSE
245: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 239
239: def quoted_true
240: QUOTED_TRUE
241: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 279
279: def reconnect!
280: disconnect!
281: connect
282: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 440
440: def rename_table(table_name, new_name)
441: execute "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
442: end
DATABASE STATEMENTS ======================================
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 291
291: def select_rows(sql, name = nil)
292: @connection.query_with_result = true
293: result = execute(sql, name)
294: rows = []
295: result.each { |row| rows << row }
296: result.free
297: rows
298: end
SHOW VARIABLES LIKE ‘name‘
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 487
487: def show_variable(name)
488: variables = select_all("SHOW VARIABLES LIKE '#{name}'")
489: variables.first['Value'] unless variables.empty?
490: end
Maps logical Rails types to MySQL-specific data types.
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 470
470: def type_to_sql(type, limit = nil, precision = nil, scale = nil)
471: return super unless type.to_s == 'integer'
472:
473: case limit
474: when 0..3
475: "smallint(#{limit})"
476: when 4..8
477: "int(#{limit})"
478: when 9..20
479: "bigint(#{limit})"
480: else
481: 'int(11)'
482: end
483: end