Class: DatabaseCore::V3::QueryModel

Inherits:
Object
  • Object
show all
Defined in:
lib/database-core/v3/query_model.rb

Class Method Summary collapse

Class Method Details

.build(model, query) ⇒ Object



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

def self.build model, query

  model = Sanitize.target(model)

  columns = build_columns(query)

  output = ["SELECT #{columns} FROM `#{model}`"]

  WhereModel.build(output, query)

  build_order(output, query)
  build_limit(output, query)
  build_offset(output, query)

  output.join(" ")
end

.build_children(model, query) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/database-core/v3/query_model.rb', line 33

def self.build_children model, query

  children = query["children"]

  return unless children.present?

  children.each do |_model, value|

    value["key"] = "#{model.singularize}_id" if value["key"].nil?

    value["keys"] = [] if value["keys"].nil?

    value["keys"] << value["key"] unless value["keys"].include? value["key"]
  end

  query["keys"] = [] if query["keys"].nil?

  query["keys"] << "id" unless query["keys"].include? "id"
end

.build_columns(query) ⇒ Object



73
74
75
76
77
78
79
80
# File 'lib/database-core/v3/query_model.rb', line 73

def self.build_columns query

  columns = query["columns"].to_a + query["keys"].to_a

  columns = columns.uniq.map{ |column| column.is_a?(Hash) ? build_function(column) : "`#{column}`" }.join(",")

  columns.present? ? columns : "*"
end

.build_count(model, query) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/database-core/v3/query_model.rb', line 22

def self.build_count model, query

  model = Sanitize.target(model)

  output = ["SELECT COUNT(id) AS `#{model}` FROM `#{model}`"]

  WhereModel.build(output, query)

  output.join(" ")
end

.build_function(function) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/database-core/v3/query_model.rb', line 82

def self.build_function function

  function_name = function["function"].upcase

  params = function["params"].map{ |param| param.is_a?(Hash) ? build_function(param) : "`#{param}`" }.join(", ")

  function_call = "#{function_name}(#{params})"

  function["alias"] ? "#{function_call} AS `#{function['alias']}`" : function_call
end

.build_limit(output, query) ⇒ Object



106
107
108
109
110
111
112
113
# File 'lib/database-core/v3/query_model.rb', line 106

def self.build_limit output, query

  limit = query["limit"].to_i

  return if limit.zero?

  output << "LIMIT #{limit}"
end

.build_offset(output, query) ⇒ Object



115
116
117
118
119
120
121
122
# File 'lib/database-core/v3/query_model.rb', line 115

def self.build_offset output, query

  offset = query["offset"].to_i

  return if offset.zero?

  output << "OFFSET #{offset}"
end

.build_order(output, query) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/database-core/v3/query_model.rb', line 93

def self.build_order output, query

  order = query["order"]

  return unless order.present?

  order = order.map{ |key, value| "`#{key}` #{value}" }.join(",")

  return unless order.present?

  output << "ORDER BY #{order}"
end

.build_parents(_model, query) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/database-core/v3/query_model.rb', line 53

def self.build_parents _model, query

  parents = query["parents"]

  return unless parents.present?

  parents.each do |model, value|

    value["key"] = "#{model.singularize}_id" if value["key"].nil?

    query["keys"] = [] if query["keys"].nil?

    query["keys"] << value["key"] unless query["keys"].include? value["key"]

    value["keys"] = [] if value["keys"].nil?

    value["keys"] << "id" unless value["keys"].include? "id"
  end
end