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:
LOST_CONNECTION_ERROR_MESSAGES | = | [ "Server shutdown in progress", "Broken pipe", "Lost connection to MySQL server during query", "MySQL server has gone away" |
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 87 87: def initialize(connection, logger, connection_options=nil) 88: super(connection, logger) 89: @connection_options = connection_options 90: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 92 92: def adapter_name 93: 'MySQL' 94: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 181 181: def add_limit_offset!(sql, options) 182: if options[:limit] 183: if options[:offset].blank? 184: sql << " LIMIT #{options[:limit]}" 185: else 186: sql << " LIMIT #{options[:offset]}, #{options[:limit]}" 187: end 188: end 189: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 147 147: def begin_db_transaction 148: execute "BEGIN" 149: rescue Exception 150: # Transactions aren't supported 151: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 210 210: def change_column(table_name, column_name, type, options = {}) 211: options[:default] ||= select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"] 212: 213: change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit])}" 214: add_column_options!(change_column_sql, options) 215: execute(change_column_sql) 216: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 204 204: def change_column_default(table_name, column_name, default) 205: current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"] 206: 207: change_column(table_name, column_name, current_type, { :default => default }) 208: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 105 105: def columns(table_name, name = nil) 106: sql = "SHOW FIELDS FROM #{table_name}" 107: columns = [] 108: execute(sql, name).each { |field| columns << Column.new(field[0], field[4], field[1]) } 109: columns 110: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 153 153: def commit_db_transaction 154: execute "COMMIT" 155: rescue Exception 156: # Transactions aren't supported 157: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 200 200: def create_database(name) 201: execute "CREATE DATABASE #{name}" 202: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 223 223: def create_table(name, options = {}) 224: super(name, {:options => "ENGINE=InnoDB"}.merge(options)) 225: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 196 196: def drop_database(name) 197: execute "DROP DATABASE IF EXISTS #{name}" 198: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 117 117: def execute(sql, name = nil, retries = 2) 118: unless @logger 119: @connection.query(sql) 120: else 121: log(sql, name) { @connection.query(sql) } 122: end 123: rescue ActiveRecord::StatementInvalid => exception 124: if LOST_CONNECTION_ERROR_MESSAGES.any? { |msg| exception.message.split(":").first =~ /^#{msg}/ } 125: @connection.real_connect(*@connection_options) 126: unless @logger 127: @connection.query(sql) 128: else 129: @logger.info "Retrying invalid statement with reopened connection" 130: log(sql, name) { @connection.query(sql) } 131: end 132: elsif exception.message.split(":").first =~ /Packets out of order/ 133: raise ActiveRecord::StatementInvalid, "'Packets out of order' error was received from the database. Please update your mysql bindings (gem update mysql) and read http://dev.mysql.com/doc/mysql/en/password-hashing.html for more information." 134: else 135: raise 136: end 137: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 112 112: def insert(sql, name = nil, pk = nil, id_value = nil) 113: execute(sql, name = nil) 114: id_value || @connection.insert_id 115: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 71 71: def native_database_types 72: { 73: :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY", 74: :string => { :name => "varchar", :limit => 255 }, 75: :text => { :name => "text" }, 76: :integer => { :name => "int", :limit => 11 }, 77: :float => { :name => "float" }, 78: :datetime => { :name => "datetime" }, 79: :timestamp => { :name => "datetime" }, 80: :time => { :name => "datetime" }, 81: :date => { :name => "date" }, 82: :binary => { :name => "blob" }, 83: :boolean => { :name => "tinyint", :limit => 1 } 84: } 85: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 166 166: def quote_column_name(name) 167: "`#{name}`" 168: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 170 170: def quote_string(string) 171: Mysql::quote(string) 172: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 191 191: def recreate_database(name) 192: drop_database(name) 193: create_database(name) 194: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 218 218: def rename_column(table_name, column_name, new_column_name) 219: current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"] 220: execute "ALTER TABLE #{table_name} CHANGE #{column_name} #{new_column_name} #{current_type}" 221: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 159 159: def rollback_db_transaction 160: execute "ROLLBACK" 161: rescue Exception 162: # Transactions aren't supported 163: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 96 96: def select_all(sql, name = nil) 97: select(sql, name) 98: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 100 100: def select_one(sql, name = nil) 101: result = select(sql, name) 102: result.nil? ? nil : result.first 103: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 175 175: def structure_dump 176: select_all("SHOW TABLES").inject("") do |structure, table| 177: structure += select_one("SHOW CREATE TABLE #{table.to_a.first.last}")["Create Table"] + ";\n\n" 178: end 179: end
# File vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 67 67: def supports_migrations? 68: true 69: end