Class: SolidObjects::DatabaseAdapters::Postgresql
- Inherits:
-
SolidObjects::DatabaseAdapter
- Object
- SolidObjects::DatabaseAdapter
- SolidObjects::DatabaseAdapters::Postgresql
- Defined in:
- lib/solid_objects/database_adapters/postgresql.rb,
sig/generated/lib/solid_objects/database_adapters/postgresql.rbs
Constant Summary
Constants inherited from SolidObjects::DatabaseAdapter
SolidObjects::DatabaseAdapter::FAMILIES, SolidObjects::DatabaseAdapter::TRANSACTION_CLOCK, SolidObjects::DatabaseAdapter::TRANSACTION_CLOCK_SCOPE
Instance Attribute Summary
Attributes inherited from SolidObjects::DatabaseAdapter
#connection_pool, #fixed_connection
Instance Method Summary collapse
- #claim_lock ⇒ String
- #configure_transaction_deadline(connection) ⇒ void
- #deadline_error?(error) ⇒ Boolean
- #minimum_server_version ⇒ Gem::Version?
-
#server_version ⇒ Gem::Version
PostgreSQL reports a packed integer, 170010 for 17.10, so comparing it directly would make every server look newer than any minimum.
- #supports_skip_locked? ⇒ Boolean
Methods inherited from SolidObjects::DatabaseAdapter
#additional_server_reasons, #current_time_expression, #database_now, family, for, #initialize, #lock_candidates, #read_database_now, #transaction, #unsupported_server_reasons, #with_connection, #with_lock_probe, #with_lock_retry, #with_transaction_clock, #with_transaction_deadline
Constructor Details
This class inherits a constructor from SolidObjects::DatabaseAdapter
Instance Method Details
#claim_lock ⇒ String
27 28 29 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 27 def claim_lock "FOR UPDATE SKIP LOCKED" end |
#configure_transaction_deadline(connection) ⇒ void
This method returns an undefined value.
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 34 def configure_transaction_deadline(connection) return unless SyncDeadline.active? connection.execute( "SET LOCAL lock_timeout = #{SyncDeadline.remaining_milliseconds}" ) connection.execute( "SET LOCAL statement_timeout = #{SyncDeadline.remaining_milliseconds}" ) end |
#deadline_error?(error) ⇒ Boolean
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 46 def deadline_error?(error) return false unless SyncDeadline.active? return true if error.is_a?(ActiveRecord::LockWaitTimeout) cause = error while cause result = cause.respond_to?(:result) ? cause.result : nil return true if result&.error_field(PG::Result::PG_DIAG_SQLSTATE) == "57014" cause = cause.cause end false end |
#minimum_server_version ⇒ Gem::Version?
7 8 9 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 7 def minimum_server_version Gem::Version.new("13") end |
#server_version ⇒ Gem::Version
PostgreSQL reports a packed integer, 170010 for 17.10, so comparing it directly would make every server look newer than any minimum.
14 15 16 17 18 19 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 14 def server_version packed = with_connection { |connection| connection.database_version.to_i } return super unless packed.positive? Gem::Version.new("#{packed / 10_000}.#{packed % 10_000}") end |
#supports_skip_locked? ⇒ Boolean
22 23 24 |
# File 'lib/solid_objects/database_adapters/postgresql.rb', line 22 def supports_skip_locked? true end |