instance method exec_stmt

Ruby on Rails 4.2.9

Since v3.1.12 Last seen in v4.2.9 Private

Available in: v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9

Signature

exec_stmt(sql, name, binds)

No documentation comment.

Parameters

sql req
name req
binds req
Source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 396
      def exec_stmt(sql, name, binds)
        cache = {}
        type_casted_binds = binds.map { |col, val|
          [col, type_cast(val, col)]
        }

        log(sql, name, type_casted_binds) do
          if binds.empty?
            stmt = @connection.prepare(sql)
          else
            cache = @statements[sql] ||= {
              :stmt => @connection.prepare(sql)
            }
            stmt = cache[:stmt]
          end

          begin
            stmt.execute(*type_casted_binds.map { |_, val| val })
          rescue Mysql::Error => e
            # Older versions of MySQL leave the prepared statement in a bad
            # place when an error occurs. To support older MySQL versions, we
            # need to close the statement and delete the statement from the
            # cache.
            stmt.close
            @statements.delete sql
            raise e
          end

          cols = nil
          if metadata = stmt.result_metadata
            cols = cache[:cols] ||= metadata.fetch_fields.map { |field|
              field.name
            }
            metadata.free
          end

          result_set = ActiveRecord::Result.new(cols, stmt.to_a) if cols
          affected_rows = stmt.affected_rows

          stmt.free_result
          stmt.close if binds.empty?

          [result_set, affected_rows]
        end
      end

Defined in activerecord/lib/active_record/connection_adapters/mysql_adapter.rb line 396 · View on GitHub · Improve this page · Find usages on GitHub

Defined in Mysql::Stmt::ActiveRecord::ConnectionAdapters::MysqlAdapter

Type at least 2 characters to search.

↑↓ navigate · open · esc close