Class: ClickHouse::Connection

Constant Summary

Constants included from Extend::ConnectionExplaining

Extend::ConnectionExplaining::EXPLAIN, Extend::ConnectionExplaining::EXPLAIN_RE

Constants included from Extend::ConnectionInserting

Extend::ConnectionInserting::EMPTY_INSERT

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Extend::ConnectionExplaining

#explain

Methods included from Extend::ConnectionAltering

#add_column, #add_index, #alter_table, #clear_column, #drop_column, #drop_index, #modify_column

Methods included from Extend::ConnectionInserting

#insert

Methods included from Extend::ConnectionSelective

#select_all, #select_one, #select_value

Methods included from Extend::ConnectionTable

#create_table, #describe_table, #drop_table, #rename_table, #table_exists?, #tables, #truncate_table, #truncate_tables

Methods included from Extend::ConnectionDatabase

#create_database, #databases, #drop_database

Methods included from Extend::ConnectionHealthy

#ping, #replicas_status

Constructor Details

#initialize(config) ⇒ Connection

Returns a new instance of Connection.

Parameters:



16
17
18
# File 'lib/click_house/connection.rb', line 16

def initialize(config)
  @config = config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



13
14
15
# File 'lib/click_house/connection.rb', line 13

def config
  @config
end

Instance Method Details

#compose(path, query = {}) ⇒ Object



47
48
49
50
# File 'lib/click_house/connection.rb', line 47

def compose(path, query = {})
  # without <query.compact> "DB::Exception: Empty query" error will occur
  "#{path}?#{URI.encode_www_form({ send_progress_in_http_headers: 1 }.merge(query).compact)}"
end

#execute(query, body = nil, database: config.database) ⇒ Object



20
21
22
# File 'lib/click_house/connection.rb', line 20

def execute(query, body = nil, database: config.database)
  post(body, query: { query: query }, database: database)
end

#get(path = '/', query: {}, database: config.database) ⇒ Object



24
25
26
# File 'lib/click_house/connection.rb', line 24

def get(path = '/', query: {}, database: config.database)
  transport.get(compose(path, query.merge(database: database)))
end

#post(body = nil, query: {}, database: config.database) ⇒ Object



28
29
30
# File 'lib/click_house/connection.rb', line 28

def post(body = nil, query: {}, database: config.database)
  transport.post(compose('/', query.merge(database: database)), body)
end

#transportObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/click_house/connection.rb', line 32

def transport
  @transport ||= Faraday.new(config.url!) do |conn|
    conn.options.timeout = config.timeout
    conn.options.open_timeout = config.open_timeout
    conn.headers = config.headers
    conn.ssl.verify = config.ssl_verify
    conn.basic_auth(config.username, config.password) if config.auth?
    conn.response Middleware::Logging, logger: config.logger!
    conn.response Middleware::RaiseError
    conn.response :json, content_type: %r{application/json}
    conn.response Middleware::ParseCsv, content_type: %r{text/csv}
    conn.adapter config.adapter
  end
end