Class: Arel::Sql::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/arel/engines/sql/engine.rb

Instance Method Summary collapse

Constructor Details

#initialize(ar = nil) ⇒ Engine

Returns a new instance of Engine.



4
5
6
# File 'lib/arel/engines/sql/engine.rb', line 4

def initialize(ar = nil)
  @ar = ar
end

Instance Method Details

#adapter_nameObject



12
13
14
15
16
17
18
19
20
# File 'lib/arel/engines/sql/engine.rb', line 12

def adapter_name
  @adapter_name ||= case (name = connection.adapter_name)
  # map OracleEnanced adapter to Oracle
  when /Oracle/
    'Oracle'
  else
    name
  end
end

#connectionObject



8
9
10
# File 'lib/arel/engines/sql/engine.rb', line 8

def connection
  @ar && @ar.connection
end

#create(relation) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/arel/engines/sql/engine.rb', line 22

def create(relation)
  primary_key_value = if relation.primary_key.blank?
    nil
  elsif relation.record.is_a?(Hash)
    attribute = relation.record.detect { |attr, _| attr.name.to_s == relation.primary_key.to_s }
    attribute && attribute.last.value
  end

  connection.insert(relation.to_sql(false), nil, relation.primary_key, primary_key_value)
end

#delete(relation) ⇒ Object



42
43
44
# File 'lib/arel/engines/sql/engine.rb', line 42

def delete(relation)
  connection.delete(relation.to_sql)
end

#read(relation) ⇒ Object



33
34
35
36
# File 'lib/arel/engines/sql/engine.rb', line 33

def read(relation)
  rows = connection.select_rows(relation.to_sql)
  Array.new(rows, relation.attributes)
end

#update(relation) ⇒ Object



38
39
40
# File 'lib/arel/engines/sql/engine.rb', line 38

def update(relation)
  connection.update(relation.to_sql)
end