Sha256: 901d2677ef95791b4fe5a3d2cb67a6643ae862aed239ca7808c0260ffd1635eb

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require_relative 'adapter/database_statements'
require_relative 'adapter/oid'
require_relative 'adapter/quoting'
require_relative 'adapter/schema_creation'
require_relative 'adapter/schema_definitions'
require_relative 'adapter/schema_dumper'
require_relative 'adapter/schema_statements'

module Torque
  module PostgreSQL
    module Adapter
      include Quoting
      include DatabaseStatements
      include SchemaStatements

      INJECT_WHERE_REGEX = /(DO UPDATE SET.*excluded\.[^ ]+) RETURNING/.freeze

      # Get the current PostgreSQL version as a Gem Version.
      def version
        @version ||= Gem::Version.new(
          select_value('SELECT version()').match(/#{Adapter::ADAPTER_NAME} ([\d\.]+)/)[1]
        )
      end

      # Add `inherits` to the list of extracted table options
      def extract_table_options!(options)
        super.merge(options.extract!(:inherits))
      end

      # Allow filtered bulk insert by adding the where clause. This method is only used by
      # +InsertAll+, so it somewhat safe to override it
      def build_insert_sql(insert)
        super.tap do |sql|
          if insert.update_duplicates? && insert.where_condition?
            if insert.returning
              sql.gsub!(INJECT_WHERE_REGEX, "\\1 WHERE #{insert.where} RETURNING")
            else
              sql << " WHERE #{insert.where}"
            end
          end
        end
      end
    end

    ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend Adapter
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
torque-postgresql-2.1.3 lib/torque/postgresql/adapter.rb
torque-postgresql-2.1.2 lib/torque/postgresql/adapter.rb
torque-postgresql-2.1.1 lib/torque/postgresql/adapter.rb
torque-postgresql-2.1.0 lib/torque/postgresql/adapter.rb