Class: ClickHouse::SQL::Query
- Inherits:
-
Object
- Object
- ClickHouse::SQL::Query
- Includes:
- Part
- Defined in:
- lib/clickhouse/sql/query.rb
Instance Attribute Summary collapse
-
#placeholder_types ⇒ Hash{Symbol=>String}
readonly
Returns ClickHouse placeholder types used by this query.
-
#placeholders ⇒ Hash{Symbol=>Object}
readonly
Returns typed placeholder values used by this query.
Class Method Summary collapse
-
.redacted_bind_index_manager ⇒ #next_bind_str
Builds a bind index manager for compiled redacted SQL templates.
Instance Method Summary collapse
-
#initialize(sql:, redacted_sql:, placeholders:, placeholder_types:) ⇒ ClickHouse::SQL::Query
constructor
Builds an immutable query object satisfying the client query protocol (#to_sql and #placeholders) accepted by ClickHouse::HTTPClient.
-
#to_redacted_sql(bind_index_manager = ClickHouse::SQL::BindIndexManager.new) ⇒ String
Renders the final SQL with typed placeholders replaced by bind markers.
-
#to_sql ⇒ String
Renders the final SQL with ClickHouse typed placeholders intact.
Constructor Details
#initialize(sql:, redacted_sql:, placeholders:, placeholder_types:) ⇒ ClickHouse::SQL::Query
Builds an immutable query object satisfying the client query protocol (#to_sql and #placeholders) accepted by ClickHouse::HTTPClient.
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/clickhouse/sql/query.rb', line 36 def initialize(sql:, redacted_sql:, placeholders:, placeholder_types:) raise Error, "Empty SQL query given" if ValueNormalization.blank_string?(sql) raise Error, "Empty redacted SQL query given" if ValueNormalization.blank_string?(redacted_sql) @sql = sql.to_s.dup.freeze @redacted_sql = redacted_sql.to_s.dup.freeze @placeholders = immutable_symbolized_hash(placeholders) @placeholder_types = immutable_symbolized_hash(placeholder_types) validate_nil_placeholders! freeze end |
Instance Attribute Details
#placeholder_types ⇒ Hash{Symbol=>String} (readonly)
Returns ClickHouse placeholder types used by this query.
78 79 80 |
# File 'lib/clickhouse/sql/query.rb', line 78 def placeholder_types @placeholder_types end |
#placeholders ⇒ Hash{Symbol=>Object} (readonly)
Returns typed placeholder values used by this query.
73 74 75 |
# File 'lib/clickhouse/sql/query.rb', line 73 def placeholders @placeholders end |
Class Method Details
.redacted_bind_index_manager ⇒ #next_bind_str
Builds a bind index manager for compiled redacted SQL templates.
24 25 26 |
# File 'lib/clickhouse/sql/query.rb', line 24 def self.redacted_bind_index_manager RedactedBindIndexManager.new end |
Instance Method Details
#to_redacted_sql(bind_index_manager = ClickHouse::SQL::BindIndexManager.new) ⇒ String
Renders the final SQL with typed placeholders replaced by bind markers.
60 61 62 63 64 65 66 67 68 |
# File 'lib/clickhouse/sql/query.rb', line 60 def to_redacted_sql(bind_index_manager = ClickHouse::SQL::BindIndexManager.new) parts = @redacted_sql.split(REDACTED_BIND_TOKEN, -1) return @redacted_sql if parts.length == 1 parts.each_with_index.with_object(+"") do |(part, index), rendered| rendered << part rendered << bind_index_manager.next_bind_str unless index == parts.length - 1 end end |
#to_sql ⇒ String
Renders the final SQL with ClickHouse typed placeholders intact.
52 53 54 |
# File 'lib/clickhouse/sql/query.rb', line 52 def to_sql @sql end |