From d4b0bcb88e058a642b193b9e008b43a32fd64d64 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 13 Oct 2010 11:09:21 -0700 Subject: all mysql tests are passing --- .../active_record/connection_adapters/mysql_adapter.rb | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index c31326d891..a4cd2cd964 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -315,11 +315,11 @@ module ActiveRecord def exec(sql, name = 'SQL', bind_values = []) log(sql, name) do + result = nil stmt = @connection.prepare(sql) stmt.execute(*bind_values.map { |col, val| col ? col.type_cast(val) : val }) - result = nil if metadata = stmt.result_metadata cols = metadata.fetch_fields.map { |field| field.name } values = [] @@ -331,6 +331,19 @@ module ActiveRecord end end + def exec_without_stmt(sql, name = 'SQL') # :nodoc: + # Some queries, like SHOW CREATE TABLE don't work through the prepared + # statement API. For those queries, we need to use this method. :'( + log(sql, name) do + result = @connection.query(sql) + cols = result.fetch_fields.map { |field| field.name } + values = [] + result.each { |row| values << row } + result.free + ActiveRecord::Result.new(cols, values) + end + end + # Executes an SQL query and returns a MySQL::Result object. Note that you have to free # the Result object after you're done using it. def execute(sql, name = nil) #:nodoc: @@ -411,7 +424,8 @@ module ActiveRecord select_all(sql).map do |table| table.delete('Table_type') - select_one("SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}")["Create Table"] + ";\n\n" + sql = "SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}" + exec_without_stmt(sql).first['Create Table'] + ";\n\n" end.join("") end -- cgit v1.2.3