Module: YADM::Adapters::CommonSQL

Included in:
MySQL, PostgreSQL, Sqlite
Defined in:
lib/yadm/adapters/common_sql.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.sequelize(node, arguments) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/yadm/adapters/common_sql.rb', line 91

def sequelize(node, arguments)
  case node
  when Criteria::Expression
    operator  = sequelize_operator(node.method_name)
    receiver  = sequelize(node.receiver, arguments)
    arguments = node.arguments.map { |arg| sequelize(arg, arguments) }
    
    Sequel::SQL::ComplexExpression.new(operator, receiver, *arguments)
  when Criteria::Attribute
    Sequel::SQL::Identifier.new(node.name)
  when Criteria::Argument
    node.fetch_from(arguments)
  else
    node
  end
end

Instance Method Details

#add(table_name, new_attributes) ⇒ Object



13
14
15
16
17
# File 'lib/yadm/adapters/common_sql.rb', line 13

def add(table_name, new_attributes)
  new_attributes = new_attributes.dup
  new_attributes.delete(:id)
  connection[table_name].insert(new_attributes)
end

#change(table_name, id, new_attributes) ⇒ Object



19
20
21
# File 'lib/yadm/adapters/common_sql.rb', line 19

def change(table_name, id, new_attributes)
  connection[table_name].where(id: id).update(new_attributes)
end

#count(table_name) ⇒ Object



27
28
29
# File 'lib/yadm/adapters/common_sql.rb', line 27

def count(table_name)
  connection[table_name].count
end

#filter(dataset, condition, arguments) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/yadm/adapters/common_sql.rb', line 43

def filter(dataset, condition, arguments)
  if condition.nil?
    dataset
  else
    sequel_expression = sequelize(condition.expression, arguments)
    dataset.where(sequel_expression)
  end
end

#from(table_name) ⇒ Object



39
40
41
# File 'lib/yadm/adapters/common_sql.rb', line 39

def from(table_name)
  connection[table_name]
end

#get(table_name, id) ⇒ Object



9
10
11
# File 'lib/yadm/adapters/common_sql.rb', line 9

def get(table_name, id)
  connection[table_name][id: id]
end

#limit(dataset, limit, arguments) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/yadm/adapters/common_sql.rb', line 63

def limit(dataset, limit, arguments)
  if limit.nil? || limit.limit.nil?
    dataset
  else
    take(dataset, limit.limit, arguments)
  end
end

#migrate(block) ⇒ Object



71
72
73
# File 'lib/yadm/adapters/common_sql.rb', line 71

def migrate(block)
  block.call(connection)
end

#order(dataset, order, arguments) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/yadm/adapters/common_sql.rb', line 52

def order(dataset, order, arguments)
  if order.nil?
    dataset
  else
    order.clauses.inject(dataset) do |dataset, clause|
      sequel_expression = sequelize(clause.expression, arguments)
      dataset.order_more(sequel_expression.send(clause.type))
    end
  end
end

#remove(table_name, id) ⇒ Object



23
24
25
# File 'lib/yadm/adapters/common_sql.rb', line 23

def remove(table_name, id)
  connection[table_name].where(id: id).delete
end

#send_query(table_name, query) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/yadm/adapters/common_sql.rb', line 31

def send_query(table_name, query)
  result = filter(from(table_name), query.criteria.condition, query.arguments)
  result = order(result, query.criteria.order, query.arguments)
  result = limit(result, query.criteria.limit, query.arguments)
  
  result.to_a
end