exec_cache(sql, name, binds, async:, allow_retry:, materialize_transactions:) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 901
        def exec_cache(sql, name, binds, async,, allow_retry,, materialize_transactions))
          mark_transaction_written_if_write(sql)

          update_typemap_for_default_timezone

          with_raw_connection do |conn|
            stmt_key = prepare_statement(sql, binds, conn)
            type_casted_binds = type_casted_binds(binds)

            log(sql, name, binds, type_casted_binds, stmt_key, async: async) do
              result = conn.exec_prepared(stmt_key, type_casted_binds)
              verified!
              result
            end
          end
        rescue ActiveRecord::StatementInvalid => e
          raise unless is_cached_plan_failure?(e)

          # Nothing we can do if we are in a transaction because all commands
          # will raise InFailedSQLTransaction
          if in_transaction?
            raise ActiveRecord::PreparedStatementCacheExpired.new(e.cause.message)
          else
            @lock.synchronize do
              # outside of transactions we can simply flush this query and retry
              @statements.delete sql_key(sql)
            end
            retry
          end
        end
Register or log in to add new notes.