Class: DatabaseCore::V3::QueryModel
- Inherits:
-
Object
- Object
- DatabaseCore::V3::QueryModel
- Defined in:
- lib/database-core/v3/query_model.rb
Class Method Summary collapse
- .build(model, query) ⇒ Object
- .build_children(model, query) ⇒ Object
- .build_columns(query) ⇒ Object
- .build_count(model, query) ⇒ Object
- .build_function(function) ⇒ Object
- .build_limit(output, query) ⇒ Object
- .build_offset(output, query) ⇒ Object
- .build_order(output, query) ⇒ Object
- .build_parents(_model, query) ⇒ Object
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 |