Class: SqlGenius::Core::Connection::ActiveRecordAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/sql_genius/core/connection/active_record_adapter.rb

Overview

Wraps an ActiveRecord::Base.connection and implements the Core::Connection contract.

Instance Method Summary collapse

Constructor Details

#initialize(ar_connection) ⇒ ActiveRecordAdapter

Returns a new instance of ActiveRecordAdapter.



11
12
13
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 11

def initialize(ar_connection)
  @ar = ar_connection
end

Instance Method Details

#closeObject



69
70
71
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 69

def close
  nil
end

#columns_for(table) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 45

def columns_for(table)
  pk = @ar.primary_key(table)
  @ar.columns(table).map do |c|
    Core::ColumnDefinition.new(
      name: c.name,
      type: c.type,
      sql_type: c.sql_type,
      null: c.null,
      default: c.default,
      primary_key: c.name == pk,
    )
  end
end

#current_databaseObject



29
30
31
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 29

def current_database
  @ar.current_database
end

#exec_query(sql, binds: []) ⇒ Object



15
16
17
18
19
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 15

def exec_query(sql, binds: [])
  _ = binds
  ar_result = @ar.exec_query(sql)
  Core::Result.new(columns: ar_result.columns, rows: ar_result.rows)
end

#indexes_for(table) ⇒ Object



59
60
61
62
63
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 59

def indexes_for(table)
  @ar.indexes(table).map do |idx|
    Core::IndexDefinition.new(name: idx.name, columns: idx.columns, unique: idx.unique)
  end
end

#primary_key(table) ⇒ Object



65
66
67
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 65

def primary_key(table)
  @ar.primary_key(table)
end

#quote(value) ⇒ Object



33
34
35
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 33

def quote(value)
  @ar.quote(value)
end

#quote_table_name(name) ⇒ Object



37
38
39
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 37

def quote_table_name(name)
  @ar.quote_table_name(name)
end

#select_value(sql) ⇒ Object



21
22
23
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 21

def select_value(sql)
  @ar.select_value(sql)
end

#server_versionObject



25
26
27
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 25

def server_version
  @server_version ||= Core::ServerInfo.parse(@ar.select_value("SELECT VERSION()").to_s)
end

#tablesObject



41
42
43
# File 'lib/sql_genius/core/connection/active_record_adapter.rb', line 41

def tables
  @ar.tables
end