method
perform_query
v8.0.0 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements
perform_query(raw_connection, sql, binds, type_casted_binds, prepare:, notification_payload:, batch: false)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 135
def perform_query(raw_connection, sql, binds, type_casted_binds, prepare,, notification_payload,, batch: false)
update_typemap_for_default_timezone
result = if prepare
begin
stmt_key = prepare_statement(sql, binds, raw_connection)
notification_payload[:statement_name] = stmt_key
raw_connection.exec_prepared(stmt_key, type_casted_binds)
rescue PG::FeatureNotSupported => error
if is_cached_plan_failure?(error)
# Nothing we can do if we are in a transaction because all commands
# will raise InFailedSQLTransaction
if in_transaction?
raise PreparedStatementCacheExpired.new(error.message, connection_pool: @pool)
else
@lock.synchronize do
# outside of transactions we can simply flush this query and retry
@statements.delete sql_key(sql)
end
retry
end
end
raise
end
elsif binds.nil? || binds.empty?
raw_connection.async_exec(sql)
else
raw_connection.exec_params(sql, type_casted_binds)
end
verified!
handle_warnings(result)
notification_payload[:row_count] = result.count
result
end