# module ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements

### Public Instance Methods

begin_db_transaction() click to toggle source

Begins a transaction.

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 130
    def begin_db_transaction
      execute "BEGIN"
    end

begin_isolated_db_transaction(isolation) click to toggle source

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 134
    def begin_isolated_db_transaction(isolation)
      begin_db_transaction
      execute "SET TRANSACTION ISOLATION LEVEL #{transaction_isolation_levels.fetch(isolation)}"
    end

commit_db_transaction() click to toggle source

Commits a transaction.

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 140
    def commit_db_transaction
      execute "COMMIT"
    end

exec_delete(sql, name = nil, binds = []) click to toggle source

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 91
    def exec_delete(sql, name = nil, binds = [])
      execute_and_clear(sql, name, binds) { |result| result.cmd_tuples }
    end

Also aliased as: exec_update
exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil) click to toggle source
Calls superclass method

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 111
    def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)
      if use_insert_returning? || pk == false
        super
      else
        result = exec_query(sql, name, binds)
        unless sequence_name
          table_ref = extract_table_ref_from_insert_sql(sql)
          if table_ref
            pk = primary_key(table_ref) if pk.nil?
            pk = suppress_composite_primary_key(pk)
            sequence_name = default_sequence_name(table_ref, pk)
          end
          return result unless sequence_name
        end
        last_insert_id_result(sequence_name)
      end
    end

exec_query(sql, name = "SQL", binds = [], prepare: false) click to toggle source

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 78
    def exec_query(sql, name = "SQL", binds = [], prepare: false)
      execute_and_clear(sql, name, binds, prepare: prepare) do |result|
        types = {}
        fields = result.fields
        fields.each_with_index do |fname, i|
          ftype = result.ftype i
          fmod  = result.fmod i
          types[fname] = get_oid_type(ftype, fmod, fname)
        end
        ActiveRecord::Result.new(fields, result.values, types)
      end
    end

exec_rollback_db_transaction() click to toggle source

Aborts a transaction.

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 145
    def exec_rollback_db_transaction
      execute "ROLLBACK"
    end

exec_update(sql, name = nil, binds = [])
Alias for: exec_delete
execute(sql, name = nil) click to toggle source

Executes an SQL statement, returning a PG::Result object on success or raising a PG::Error exception otherwise. Note: the PG::Result object is manually memory managed; if you don't need it specifically, you may want consider the `exec_query` wrapper.

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 70
    def execute(sql, name = nil)
      log(sql, name) do
        ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
          @connection.async_exec(sql)
        end
      end
    end

explain(arel, binds = []) click to toggle source

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 5
    def explain(arel, binds = [])
      sql = "EXPLAIN #{to_sql(arel, binds)}"
      PostgreSQL::ExplainPrettyPrinter.new.pp(exec_query(sql, "EXPLAIN", binds))
    end

### Private Instance Methods

suppress_composite_primary_key(pk) click to toggle source

    # File lib/active_record/connection_adapters/postgresql/database_statements.rb, line 151
    def suppress_composite_primary_key(pk)
      pk unless pk.is_a?(Array)
    end