Returns just a table’s primary key
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 578 def primary_key(table) pk_and_sequence = pk_and_sequence_for(table) pk_and_sequence && pk_and_sequence.first end
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 “/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).
: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.
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
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 171 cattr_accessor :emulate_booleans
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 199 def initialize(connection, logger, connection_options, config) super(connection, logger) @connection_options, @config = connection_options, config @quoted_column_names, @quoted_table_names = {}, {} connect end
CONNECTION MANAGEMENT ====================================
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 275 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
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 485 def add_column(table_name, column_name, type, options = {}) add_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ADD #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}" add_column_options!(add_column_sql, options) add_column_position!(add_column_sql, options) execute(add_column_sql) end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 552 def add_column_position!(sql, options) if options[:first] sql << " FIRST" elsif options[:after] sql << " AFTER #{quote_column_name(options[:after])}" end end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 583 def case_sensitive_equality_operator "= BINARY" end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 497 def change_column_null(table_name, column_name, null, default = nil) column = column_for(table_name, column_name) unless null || default.nil? execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL") end change_column table_name, column_name, column.sql_type, :null => null end
Returns the database character set.
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 429 def charset show_variable 'character_set_database' end
Returns the database collation strategy.
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 434 def collation show_variable 'collation_database' 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 lib/active_record/connection_adapters/mysql_adapter.rb, line 412 def create_database(name, options = {}) if options[:collation] execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}` COLLATE `#{options[:collation]}`" else execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}`" end end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 361 def create_savepoint execute("SAVEPOINT #{current_savepoint_name}") end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 424 def current_database select_value 'SELECT DATABASE() as db' end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 297 def disconnect! @connection.close rescue nil end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 446 def drop_table(table_name, options = {}) super(table_name, options) end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 587 def limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) where_sql end
Returns just a table’s primary key
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 578 def primary_key(table) pk_and_sequence = pk_and_sequence_for(table) pk_and_sequence && pk_and_sequence.first end
QUOTING ==================================================
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 229 def quote(value, column = nil) if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary) s = column.class.string_to_binary(value).unpack("H*")[0] "x'#{s}'" elsif value.kind_of?(BigDecimal) value.to_s("F") else super end end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 256 def quoted_false QUOTED_FALSE end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 252 def quoted_true QUOTED_TRUE end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 292 def reconnect! disconnect! connect end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 369 def release_savepoint execute("RELEASE SAVEPOINT #{current_savepoint_name}") end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 481 def rename_table(table_name, new_name) execute "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}" end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 301 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
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 365 def rollback_to_savepoint execute("ROLLBACK TO SAVEPOINT #{current_savepoint_name}") end
DATABASE STATEMENTS ======================================
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 312 def select_rows(sql, name = nil) @connection.query_with_result = true result = execute(sql, name) rows = [] result.each { |row| rows << row } result.free @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
SHOW VARIABLES LIKE ‘name’
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 561 def show_variable(name) variables = select_all("SHOW VARIABLES LIKE '#{name}'") variables.first['Value'] unless variables.empty? end
Maps logical Rails types to MySQL-specific data types.
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 539 def type_to_sql(type, limit = nil, precision = nil, scale = nil) return super unless type.to_s == 'integer' case limit when 1; 'tinyint' when 2; 'smallint' when 3; 'mediumint' when nil, 4, 11; 'int(11)' # compatibility with MySQL default when 5..8; 'bigint' else raise(ActiveRecordError, "No integer type has byte size #{limit}") end end
# File lib/active_record/connection_adapters/mysql_adapter.rb, line 592 def quoted_columns_for_index(column_names, options = {}) length = options[:length] if options.is_a?(Hash) quoted_column_names = case length when Hash column_names.map {|name| length[name] ? "#{quote_column_name(name)}(#{length[name]})" : quote_column_name(name) } when Fixnum column_names.map {|name| "#{quote_column_name(name)}(#{length})"} else column_names.map {|name| quote_column_name(name) } end end
Generated with the Darkfish Rdoc Generator 2.