Module: Clickhouse::Connection::PostQuery

Included in:
Clickhouse::Connection
Defined in:
lib/clickhouse/connection/post_query.rb

Overview

By default Clickhouse uses GET request for query, but it has limitation for length on server side. So we will allow to use POST request with query in a body.

Instance Method Summary collapse

Instance Method Details

#post_query(query) ⇒ Object



7
8
9
10
11
# File 'lib/clickhouse/connection/post_query.rb', line 7

def post_query(query)
  query = Utils.extract_format(query)[0]
  query += ' FORMAT JSONCompact'
  parse_data post(nil, query)
end

#request(method, query, body = nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/clickhouse/connection/post_query.rb', line 17

def request(method, query, body = nil)
  raise ArgumentError, 'when query is omitted body must be passed' if query.nil? && body.nil?

  connect!
  body = body.strip unless body.nil?
  query = query.strip unless query.nil?

  start = Time.now

  headers = { 'Content-Type' => 'text/plain' }
  response = client.send(method, path(query), body, headers)
  status = response.status
  duration = Time.now - start
  if query.nil?
    query, format = Utils.extract_format(body)
  else
    query, format = Utils.extract_format(query)
  end
  response = parse_body(format, response.body)
  stats = parse_stats(response)

  write_log duration, query, stats
  raise QueryError, "Got status #{status} (expected 200): #{response}" unless status == 200
  response
rescue Faraday::Error => e
  raise ConnectionError, e.message
end

#select_rows(options) ⇒ Object



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

def select_rows(options)
  post_query to_select_query(options)
end