Class: Arel::Visitors::Clickhouse
- Inherits:
-
ToSql
- Object
- ToSql
- Arel::Visitors::Clickhouse
- Defined in:
- lib/arel/visitors/clickhouse.rb
Instance Method Summary collapse
- #aggregate(name, o, collector) ⇒ Object
- #sanitize_as_setting_name(value) ⇒ Object
- #sanitize_as_setting_value(value) ⇒ Object
-
#visit_Arel_Attributes_Attribute(o, collector) ⇒ Object
clickhouse.com/docs/en/sql-reference/statements/delete DELETE and UPDATE in ClickHouse working only without table name.
- #visit_Arel_Nodes_DoesNotMatch(o, collector) ⇒ Object
- #visit_Arel_Nodes_Final(o, collector) ⇒ Object
- #visit_Arel_Nodes_Matches(o, collector) ⇒ Object
- #visit_Arel_Nodes_SelectOptions(o, collector) ⇒ Object
- #visit_Arel_Nodes_Settings(o, collector) ⇒ Object
- #visit_Arel_Nodes_UpdateStatement(o, collector) ⇒ Object
- #visit_Arel_Nodes_Using(o, collector) ⇒ Object
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
81 82 83 84 |
# File 'lib/arel/visitors/clickhouse.rb', line 81 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
73 74 75 76 77 78 79 |
# File 'lib/arel/visitors/clickhouse.rb', line 73 def sanitize_as_setting_value(value) if value == :default 'DEFAULT' else quote(value) end end |
#visit_Arel_Attributes_Attribute(o, collector) ⇒ Object
clickhouse.com/docs/en/sql-reference/statements/delete DELETE and UPDATE in ClickHouse working only without table name
18 19 20 21 |
# File 'lib/arel/visitors/clickhouse.rb', line 18 def visit_Arel_Attributes_Attribute(o, collector) collector << quote_table_name(o.relation.table_alias || o.relation.name) << '.' unless collector.value.start_with?('DELETE FROM ') || collector.value.include?(' UPDATE ') collector << quote_column_name(o.name) end |
#visit_Arel_Nodes_DoesNotMatch(o, collector) ⇒ Object
68 69 70 71 |
# File 'lib/arel/visitors/clickhouse.rb', line 68 def visit_Arel_Nodes_DoesNotMatch(o, collector) op = o.case_sensitive ? " NOT LIKE " : " NOT ILIKE " infix_value o, collector, op end |
#visit_Arel_Nodes_Final(o, collector) ⇒ Object
38 39 40 41 42 |
# File 'lib/arel/visitors/clickhouse.rb', line 38 def visit_Arel_Nodes_Final(o, collector) visit o.expr, collector collector << ' FINAL' collector end |
#visit_Arel_Nodes_Matches(o, collector) ⇒ Object
63 64 65 66 |
# File 'lib/arel/visitors/clickhouse.rb', line 63 def visit_Arel_Nodes_Matches(o, collector) op = o.case_sensitive ? " LIKE " : " ILIKE " infix_value o, collector, op end |
#visit_Arel_Nodes_SelectOptions(o, collector) ⇒ Object
23 24 25 |
# File 'lib/arel/visitors/clickhouse.rb', line 23 def visit_Arel_Nodes_SelectOptions(o, collector) maybe_visit o.settings, super end |
#visit_Arel_Nodes_Settings(o, collector) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/arel/visitors/clickhouse.rb', line 44 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_Nodes_UpdateStatement(o, collector) ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/arel/visitors/clickhouse.rb', line 27 def visit_Arel_Nodes_UpdateStatement(o, collector) o = prepare_update_statement(o) collector << 'ALTER TABLE ' collector = visit o.relation, collector collect_nodes_for o.values, collector, ' UPDATE ' collect_nodes_for o.wheres, collector, ' WHERE ', ' AND ' collect_nodes_for o.orders, collector, ' ORDER BY ' maybe_visit o.limit, collector end |
#visit_Arel_Nodes_Using(o, collector) ⇒ Object
57 58 59 60 61 |
# File 'lib/arel/visitors/clickhouse.rb', line 57 def visit_Arel_Nodes_Using o, collector collector << "USING " visit o.expr, collector collector end |