Class: Nquery::DataSources::PostgresqlAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/nquery/data_sources/postgresql_adapter.rb

Direct Known Subclasses

MysqlAdapter, SqliteAdapter

Instance Method Summary collapse

Methods inherited from Adapter

for, #initialize

Constructor Details

This class inherits a constructor from Nquery::DataSources::Adapter

Instance Method Details

#columns(table_name) ⇒ Object



10
11
12
13
14
# File 'lib/nquery/data_sources/postgresql_adapter.rb', line 10

def columns(table_name)
  with_connection do |conn|
    conn.columns(table_name).map { |c| { name: c.name, type: c.type.to_s } }
  end
end

#execute_readonly(statement, timeout: 15, row_limit: 10_000) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/nquery/data_sources/postgresql_adapter.rb', line 16

def execute_readonly(statement, timeout: 15, row_limit: 10_000)
  with_connection do |conn|
    rows = []
    columns = []
    duration = Benchmark.realtime do
      conn.transaction do
        conn.execute("SET TRANSACTION READ ONLY")
        conn.execute("SET statement_timeout = '#{timeout.to_i}s'")
        result = conn.exec_query("#{statement.strip.sub(/;\s*\z/, '')} LIMIT #{row_limit.to_i}")
        columns = result.columns
        rows = result.rows
        raise ActiveRecord::Rollback
      end
    end
    { columns: columns, rows: rows, row_count: rows.size, duration_ms: (duration * 1000).round }
  end
end

#tablesObject



6
7
8
# File 'lib/nquery/data_sources/postgresql_adapter.rb', line 6

def tables
  with_connection { |conn| conn.tables }
end