Class: Arel::Visitors::Clickhouse

Inherits:
ToSql
  • Object
show all
Defined in:
lib/arel/visitors/clickhouse.rb

Instance Method Summary collapse

Instance Method Details

#aggregate(name, o, collector) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/arel/visitors/clickhouse.rb', line 7

def aggregate(name, o, collector)
  # replacing function name for materialized view
  if o.expressions.first && o.expressions.first != '*' && !o.expressions.first.is_a?(String) && o.expressions.first.relation&.is_view
    super("#{name.downcase}Merge", o, collector)
  else
    super
  end
end

#sanitize_as_setting_name(value) ⇒ Object



47
48
49
50
# File 'lib/arel/visitors/clickhouse.rb', line 47

def sanitize_as_setting_name(value)
  return value if Arel::Nodes::SqlLiteral === value
  @connection.sanitize_as_setting_name(value)
end

#sanitize_as_setting_value(value) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/arel/visitors/clickhouse.rb', line 39

def sanitize_as_setting_value(value)
  if value == :default
    'DEFAULT'
  else
    quote(value)
  end
end

#visit_Arel_Nodes_SelectOptions(o, collector) ⇒ Object



22
23
24
# File 'lib/arel/visitors/clickhouse.rb', line 22

def visit_Arel_Nodes_SelectOptions(o, collector)
  maybe_visit o.settings, super
end

#visit_Arel_Nodes_Settings(o, collector) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/arel/visitors/clickhouse.rb', line 26

def visit_Arel_Nodes_Settings(o, collector)
  return collector if o.expr.empty?

  collector << "SETTINGS "
  o.expr.each_with_index do |(key, value), i|
    collector << ", " if i > 0
    collector << key.to_s.gsub(/\W+/, "")
    collector << " = "
    collector << sanitize_as_setting_value(value)
  end
  collector
end

#visit_Arel_Table(o, collector) ⇒ Object



16
17
18
19
20
# File 'lib/arel/visitors/clickhouse.rb', line 16

def visit_Arel_Table o, collector
  collector = super
  collector << ' FINAL ' if o.final
  collector
end