| Class | ActiveRecord::ConnectionAdapters::MysqlAdapter |
| In: |
vendor/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/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 83
83: def initialize(connection, logger, connection_options=nil)
84: super(connection, logger)
85: @connection_options = connection_options
86: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 88
88: def adapter_name
89: 'MySQL'
90: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 136
136: def begin_db_transaction
137: begin
138: execute "BEGIN"
139: rescue Exception
140: # Transactions aren't supported
141: end
142: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 102
102: def columns(table_name, name = nil)
103: sql = "SHOW FIELDS FROM #{table_name}"
104: columns = []
105: execute(sql, name).each { |field| columns << Column.new(field[0], field[4], field[1]) }
106: columns
107: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 144
144: def commit_db_transaction
145: begin
146: execute "COMMIT"
147: rescue Exception
148: # Transactions aren't supported
149: end
150: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 185
185: def create_database(name)
186: execute "CREATE DATABASE #{name}"
187: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 181
181: def drop_database(name)
182: execute "DROP DATABASE IF EXISTS #{name}"
183: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 114
114: def execute(sql, name = nil)
115: begin
116: return log(sql, name, @connection) { |connection| connection.query(sql) }
117: rescue ActiveRecord::StatementInvalid => exception
118: if LOST_CONNECTION_ERROR_MESSAGES.any? { |msg| exception.message.split(":").first =~ /^#{msg}/ }
119: @connection.real_connect(*@connection_options)
120: @logger.info("Retrying invalid statement with reopened connection") if @logger
121: return log(sql, name, @connection) { |connection| connection.query(sql) }
122: else
123: raise
124: end
125: end
126: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 109
109: def insert(sql, name = nil, pk = nil, id_value = nil)
110: execute(sql, name = nil)
111: return id_value || @connection.insert_id
112: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 67
67: def native_database_types
68: {
69: :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY",
70: :string => "varchar(255)",
71: :text => "text",
72: :integer => "int(11)",
73: :float => "float",
74: :datetime => "datetime",
75: :timestamp => "datetime",
76: :time => "datetime",
77: :date => "date",
78: :binary => "blob",
79: :boolean => "tinyint(1)"
80: }
81: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 161
161: def quote_column_name(name)
162: return "`#{name}`"
163: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 165
165: def quote_string(s)
166: Mysql::quote(s)
167: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 176
176: def recreate_database(name)
177: drop_database(name)
178: create_database(name)
179: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 152
152: def rollback_db_transaction
153: begin
154: execute "ROLLBACK"
155: rescue Exception
156: # Transactions aren't supported
157: end
158: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 93
93: def select_all(sql, name = nil)
94: select(sql, name)
95: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 97
97: def select_one(sql, name = nil)
98: result = select(sql, name)
99: result.nil? ? nil : result.first
100: end
# File vendor/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 170
170: def structure_dump
171: select_all("SHOW TABLES").inject("") do |structure, table|
172: structure += select_one("SHOW CREATE TABLE #{table.to_a.first.last}")["Create Table"] + ";\n\n"
173: end
174: end