Class: Arel::Visitors::MySQL

Inherits:
Object
  • Object
show all
Defined in:
lib/pluck_map/visitors/mysql.rb

Instance Method Summary collapse

Instance Method Details

#visit_PluckMap_BuildJsonArray(o, collector) ⇒ Object



12
13
14
15
16
# File 'lib/pluck_map/visitors/mysql.rb', line 12

def visit_PluckMap_BuildJsonArray(o, collector)
  collector << "json_array("
  visit o.args, collector
  collector << ")"
end

#visit_PluckMap_BuildJsonObject(o, collector) ⇒ Object



6
7
8
9
10
# File 'lib/pluck_map/visitors/mysql.rb', line 6

def visit_PluckMap_BuildJsonObject(o, collector)
  collector << "json_object("
  visit o.args, collector
  collector << ")"
end

#visit_PluckMap_JsonArrayAggregate(o, collector) ⇒ Object



18
19
20
21
22
# File 'lib/pluck_map/visitors/mysql.rb', line 18

def visit_PluckMap_JsonArrayAggregate(o, collector)
  collector << "json_arrayagg("
  visit o.arg, collector
  collector << ")"
end

#visit_PluckMap_JsonSubqueryAggregate(o, collector) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/pluck_map/visitors/mysql.rb', line 24

def visit_PluckMap_JsonSubqueryAggregate(o, collector)
  interior = compile(o.select)
  if o.scope.order_values.present?
    interior = "#{interior} ORDER BY #{compile(o.scope.order_values)}"
  end
  interior = "CAST(CONCAT('[',GROUP_CONCAT(#{interior}),']') AS JSON)"
  sql = o.scope.reorder(nil).select(Arel.sql(interior)).to_sql

  collector << "COALESCE((#{sql}), json_array())"
end