instance method exec_stmt

Ruby on Rails 3.1.12

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 903
      def exec_stmt(sql, name, binds)
        cache = {}
        if binds.empty?
          stmt = @connection.prepare(sql)
        else
          cache = @statements[sql] ||= {
            :stmt => @connection.prepare(sql)
          }
          stmt = cache[:stmt]
        end


        begin
          stmt.execute(*binds.map { |col, val| type_cast(val, col) })
        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
          }
        end

        result = yield [cols, stmt]

        stmt.result_metadata.free if cols
        stmt.free_result
        stmt.close if binds.empty?

        result
      end

Defined in activerecord/lib/active_record/connection_adapters/mysql_adapter.rb line 903 · 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