<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -308,6 +308,7 @@ module ActiveRecord
         rows
       end
 
+      # Executes a 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:
         log(sql, name) { @connection.query(sql) }
       rescue ActiveRecord::StatementInvalid =&gt; exception
@@ -414,7 +415,9 @@ module ActiveRecord
 
       def tables(name = nil) #:nodoc:
         tables = []
-        execute(&quot;SHOW TABLES&quot;, name).each { |field| tables &lt;&lt; field[0] }
+        result = execute(&quot;SHOW TABLES&quot;, name)
+        result.each { |field| tables &lt;&lt; field[0] }
+        result.free
         tables
       end
 
@@ -425,7 +428,8 @@ module ActiveRecord
       def indexes(table_name, name = nil)#:nodoc:
         indexes = []
         current_index = nil
-        execute(&quot;SHOW KEYS FROM #{quote_table_name(table_name)}&quot;, name).each do |row|
+        result = execute(&quot;SHOW KEYS FROM #{quote_table_name(table_name)}&quot;, name)
+        result.each do |row|
           if current_index != row[2]
             next if row[2] == &quot;PRIMARY&quot; # skip the primary key
             current_index = row[2]
@@ -434,13 +438,16 @@ module ActiveRecord
 
           indexes.last.columns &lt;&lt; row[4]
         end
+        result.free
         indexes
       end
 
       def columns(table_name, name = nil)#:nodoc:
         sql = &quot;SHOW FIELDS FROM #{quote_table_name(table_name)}&quot;
         columns = []
-        execute(sql, name).each { |field| columns &lt;&lt; MysqlColumn.new(field[0], field[4], field[1], field[2] == &quot;YES&quot;) }
+        result = execute(sql, name)
+        result.each { |field| columns &lt;&lt; MysqlColumn.new(field[0], field[4], field[1], field[2] == &quot;YES&quot;) }
+        result.free
         columns
       end
 
@@ -521,9 +528,11 @@ module ActiveRecord
       # Returns a table's primary key and belonging sequence.
       def pk_and_sequence_for(table) #:nodoc:
         keys = []
-        execute(&quot;describe #{quote_table_name(table)}&quot;).each_hash do |h|
+        result = execute(&quot;describe #{quote_table_name(table)}&quot;)
+        result.each_hash do |h|
           keys &lt;&lt; h[&quot;Field&quot;]if h[&quot;Key&quot;] == &quot;PRI&quot;
         end
+        result.free
         keys.length == 1 ? [keys.first, nil] : nil
       end
 </diff>
      <filename>activerecord/lib/active_record/connection_adapters/mysql_adapter.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9c7fe7c6729bbdde4a22f58e7279463092390330</id>
    </parent>
  </parents>
  <author>
    <name>Manfred Stienstra</name>
    <email>manfred@fngtps.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/8326b95169ae6af3b81f5596107fef9db4bcbbb0</url>
  <id>8326b95169ae6af3b81f5596107fef9db4bcbbb0</id>
  <committed-date>2008-12-18T11:19:36-08:00</committed-date>
  <authored-date>2008-11-19T06:17:40-08:00</authored-date>
  <message>Free MySQL::Result objects after a call to execute [#1416 state:resolved]

No freeing Result objects causes the MySQL driver to free result sets
at undefined times, this can lead to erratic performance in your
application.

Signed-off-by: Frederick Cheung &lt;frederick.cheung@gmail.com&gt;</message>
  <tree>269f82deb7a37eb5bf2ea9efc7b9942a832c18ff</tree>
  <committer>
    <name>Pratik Naik</name>
    <email>pratiknaik@gmail.com</email>
  </committer>
</commit>
