Class: DatabaseCore::V1::QueryRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/database-core/v1/query_runner.rb

Class Method Summary collapse

Class Method Details

.query(tables_query) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/database-core/v1/query_runner.rb', line 5

def self.query tables_query

  tables_values = QueryRunner.tables_query tables_query

  tables_values.each do |table, values|

    query = tables_query[table]
    next if query.nil?

    QueryRunner.values_remove_keys values, query
  end

  tables_values
end

.setup_has_many(values, tables_query) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/database-core/v1/query_runner.rb', line 91

def self.setup_has_many values, tables_query

  return if values.empty?

  tables_query.each do |_, query|

    has_many_key = query["has_many_key"]

    next if has_many_key.nil?

    unless query["in_value"].nil?
      if query["in_value"].key? has_many_key
        query["in_value"][has_many_key] << values.map{ |value| value["id"] }.compact.uniq
      end
    end

    if query["in_value"].nil?
      query["in_value"] = {}
      query["in_value"][has_many_key] = values.map{ |value| value["id"] }.compact.uniq
    end
  end
end

.setup_has_one(values, tables_query) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/database-core/v1/query_runner.rb', line 114

def self.setup_has_one values, tables_query

  return if values.empty?

  tables_query.each do |_, query|

    has_one_key = query["has_one_key"]

    next if has_one_key.nil?

    unless query["in_value"].nil?
      if query["in_value"].key? "id"
        query["in_value"]["id"] << values.map{ |value| value[has_one_key] }.compact.uniq
      end
    end

    if query["in_value"].nil?
      query["in_value"] = {}
      query["in_value"]["id"] = values.map{ |value| value[has_one_key] }.compact.uniq
    end
  end
end

.tables_has_many(parents, query) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/database-core/v1/query_runner.rb', line 39

def self.tables_has_many parents, query

  has_many = query["has_many"]
  return if has_many.nil?

  QueryRunner.setup_has_many parents, has_many
  tables_values = QueryRunner.tables_query has_many

  parents.each do |parent|

    tables_values.each do |table, values|

      query = has_many[table]
      next if query.nil?
      has_many_key = query["has_many_key"]
      next if has_many_key.nil?
      key_value = parent["id"]
      next if key_value.nil?

      values = values.deep_dup.select{ |value| value[has_many_key] == key_value }
      QueryRunner.values_remove_keys values, query
      parent[table] = values
    end
  end
end

.tables_has_one(parents, query) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/database-core/v1/query_runner.rb', line 65

def self.tables_has_one parents, query

  has_one = query["has_one"]
  return if has_one.nil?

  QueryRunner.setup_has_one parents, has_one
  tables_values = QueryRunner.tables_query has_one

  parents.each do |parent|

    tables_values.each do |table, values|

      query = has_one[table]
      next if query.nil?
      has_one_key = query["has_one_key"]
      next if has_one_key.nil?
      key_value = parent[has_one_key]
      next if key_value.nil?

      values = values.deep_dup.select{ |value| value["id"] == key_value }
      QueryRunner.values_remove_keys values, query
      parent[table] = values[0]
    end
  end
end

.tables_query(tables_query) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/database-core/v1/query_runner.rb', line 20

def self.tables_query tables_query

  tables_values = {}

  tables_query.each do |table, query|

    sql = Query.build table, query

    values = ActiveRecord::Base.connection.exec_query(sql).map(&:as_json)

    QueryRunner.tables_has_many values, query
    QueryRunner.tables_has_one values, query

    tables_values[table] = values
  end

  tables_values
end

.values_remove_keys(values, query) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/database-core/v1/query_runner.rb', line 137

def self.values_remove_keys values, query

  columns = query["columns"]
  return if columns.nil?

  keys = []

  Query.build_keys keys, query

  keys.each do |key|
    unless columns.include? key
      values.each do |value|
        value.delete key
      end
    end
  end
end