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_Rows(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
93 94 95 96 |
# File 'lib/arel/visitors/clickhouse.rb', line 93 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
85 86 87 88 89 90 91 |
# File 'lib/arel/visitors/clickhouse.rb', line 85 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 22 23 24 25 |
# File 'lib/arel/visitors/clickhouse.rb', line 18 def visit_Arel_Attributes_Attribute(o, collector) if collector.value.is_a?(String) 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) else super end end |
#visit_Arel_Nodes_DoesNotMatch(o, collector) ⇒ Object
72 73 74 75 |
# File 'lib/arel/visitors/clickhouse.rb', line 72 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
42 43 44 45 46 |
# File 'lib/arel/visitors/clickhouse.rb', line 42 def visit_Arel_Nodes_Final(o, collector) visit o.expr, collector collector << ' FINAL' collector end |
#visit_Arel_Nodes_Matches(o, collector) ⇒ Object
67 68 69 70 |
# File 'lib/arel/visitors/clickhouse.rb', line 67 def visit_Arel_Nodes_Matches(o, collector) op = o.case_sensitive ? " LIKE " : " ILIKE " infix_value o, collector, op end |
#visit_Arel_Nodes_Rows(o, collector) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/arel/visitors/clickhouse.rb', line 77 def visit_Arel_Nodes_Rows(o, collector) if o.expr.is_a?(String) collector << "ROWS #{o.expr}" else super end end |
#visit_Arel_Nodes_SelectOptions(o, collector) ⇒ Object
27 28 29 |
# File 'lib/arel/visitors/clickhouse.rb', line 27 def visit_Arel_Nodes_SelectOptions(o, collector) maybe_visit o.settings, super end |
#visit_Arel_Nodes_Settings(o, collector) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/arel/visitors/clickhouse.rb', line 48 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
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/arel/visitors/clickhouse.rb', line 31 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
61 62 63 64 65 |
# File 'lib/arel/visitors/clickhouse.rb', line 61 def visit_Arel_Nodes_Using o, collector collector << "USING " visit o.expr, collector collector end |