Class: DatabaseCore::V2::QueryRunner
- Inherits:
-
Object
- Object
- DatabaseCore::V2::QueryRunner
- Defined in:
- lib/database-core/v2/query_runner.rb
Class Method Summary collapse
- .query(models_query) ⇒ Object
- .serialize(target) ⇒ Object
- .setup_relation(parents, models_query, relation) ⇒ Object
- .setup_relation_query(parents, models_query, relation) ⇒ Object
- .setup_relation_value(parents, models_query, relation) ⇒ Object
Class Method Details
.query(models_query) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/database-core/v2/query_runner.rb', line 5 def self.query models_query models_values = {} models_query.each do |model, query| sql = Query.build(model, query) values = ActiveRecord::Base.connection.exec_query(sql).map(&:as_json) if values.present? setup_relation values, query["has_one"], true setup_relation values, query["has_many"], false end models_values[model] = values end serialize(models_values) end |
.serialize(target) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/database-core/v2/query_runner.rb', line 81 def self.serialize(target) case target when Integer target > 2**32 ? target.to_s : target when String encodings = [Encoding::US_ASCII, Encoding::UTF_8] encodings.include?(target.encoding) ? target : target.bytes.to_a when Array target.map { |value| serialize(value) } when Hash target.transform_values { |value| serialize(value) } else target end end |
.setup_relation(parents, models_query, relation) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/database-core/v2/query_runner.rb', line 27 def self.setup_relation parents, models_query, relation return unless models_query.present? setup_relation_query(parents, models_query, relation) setup_relation_value(parents, models_query, relation) end |
.setup_relation_query(parents, models_query, relation) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/database-core/v2/query_runner.rb', line 35 def self.setup_relation_query parents, models_query, relation models_query.each do |model, query| next if query["has_one_key"].nil? && relation == true next if query["has_many_key"].nil? && relation == false foreign_key = relation ? "id" : query["has_many_key"] primary_key = relation ? query["has_one_key"] : "id" keys = parents.map{ |parent| parent[primary_key] }.uniq.compact next if keys.empty? query["in_value"] = {} if query["in_value"].nil? if query["in_value"][foreign_key] query["in_value"][foreign_key] << keys query["in_value"][foreign_key].flatten else query["in_value"][foreign_key] = keys end end end |
.setup_relation_value(parents, models_query, relation) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/database-core/v2/query_runner.rb', line 60 def self.setup_relation_value parents, models_query, relation models_values = query(models_query) parents.each do |parent| models_query.each do |model, query| next if query["has_one_key"].nil? && relation == true next if query["has_many_key"].nil? && relation == false foreign_key = relation ? "id" : query["has_many_key"] primary_key = relation ? query["has_one_key"] : "id" values = models_values[model].select{ |value| value[foreign_key] == parent[primary_key] } parent[model] = relation ? values.first : values end end end |