Class: ClickHouse::Client::Query
- Defined in:
- lib/click_house/client/query.rb
Constant Summary collapse
- SUBQUERY_PLACEHOLDER_REGEX =
example: var:Subquery, special “internal” type for subqueries
/{\w+:Subquery}/
- PLACEHOLDER_REGEX =
example: var:UInt8 or var:Array(UInt8)
/{\w+:(\w|[()])+}/
- PLACEHOLDER_NAME_REGEX =
example: var:UInt8 => var
/{(\w+):/
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(raw_query:, placeholders: {}) ⇒ Query
constructor
A new instance of Query.
-
#prepared_placeholders ⇒ Object
List of placeholders to be sent to ClickHouse for replacement.
- #to_redacted_sql(bind_index_manager = BindIndexManager.new) ⇒ Object
-
#to_sql ⇒ Object
Placeholder replacement is handled by ClickHouse, only subquery placeholders will be replaced.
Constructor Details
#initialize(raw_query:, placeholders: {}) ⇒ Query
Returns a new instance of Query.
16 17 18 19 20 21 |
# File 'lib/click_house/client/query.rb', line 16 def initialize(raw_query:, placeholders: {}) raise QueryError, 'Empty query string given' if raw_query.blank? @raw_query = raw_query @placeholders = placeholders || {} end |
Class Method Details
.build(query) ⇒ Object
10 11 12 13 14 |
# File 'lib/click_house/client/query.rb', line 10 def self.build(query) return query if query.is_a?(ClickHouse::Client::QueryLike) new(raw_query: query) end |
Instance Method Details
#prepared_placeholders ⇒ Object
List of placeholders to be sent to ClickHouse for replacement. If there are subqueries, merge their placeholders as well.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/click_house/client/query.rb', line 25 def prepared_placeholders all_placeholders = placeholders.select { |_, v| !v.is_a?(QueryLike) } all_placeholders.transform_values! { |v| prepared_placeholder_value(v) } placeholders.each_value do |value| next unless value.is_a?(QueryLike) all_placeholders.merge!(value.prepared_placeholders) do |key, a, b| raise QueryError, "mismatching values for the '#{key}' placeholder: #{a} vs #{b}" end end all_placeholders end |
#to_redacted_sql(bind_index_manager = BindIndexManager.new) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/click_house/client/query.rb', line 54 def to_redacted_sql(bind_index_manager = BindIndexManager.new) raw_query.gsub(PLACEHOLDER_REGEX) do |placeholder_in_query| value = placeholder_value(placeholder_in_query) if value.is_a?(QueryLike) value.to_redacted_sql(bind_index_manager) else bind_index_manager.next_bind_str end end end |
#to_sql ⇒ Object
Placeholder replacement is handled by ClickHouse, only subquery placeholders will be replaced.
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/click_house/client/query.rb', line 42 def to_sql raw_query.gsub(SUBQUERY_PLACEHOLDER_REGEX) do |placeholder_in_query| value = placeholder_value(placeholder_in_query) if value.is_a?(QueryLike) value.to_sql else placeholder_in_query end end end |