Class: Drill

Inherits:
Object
  • Object
show all
Defined in:
lib/drill.rb,
lib/drill/version.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

HEADERS =
{
  "Content-Type" => "application/json",
  "Accept" => "application/json"
}
VERSION =
"0.1.1"

Instance Method Summary collapse

Constructor Details

#initialize(url: nil) ⇒ Drill

Returns a new instance of Drill.



13
14
15
16
17
18
# File 'lib/drill.rb', line 13

def initialize(url: nil)
  url ||= ENV["DRILL_URL"] || "http://localhost:8047"
  # strip trailing slash if exists
  @uri = URI.parse("#{url.sub(/\/\z/, "")}/query.json")
  @http = Net::HTTP.new(@uri.host, @uri.port)
end

Instance Method Details

#query(statement) ⇒ Object



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

def query(statement)
  data = {
    queryType: "sql",
    query: statement
  }

  begin
    response = @http.post(@uri.request_uri, data.to_json, HEADERS)
  rescue Errno::ECONNREFUSED => e
    raise Drill::Error, e.message
  end

  body = JSON.parse(response.body)
  if body["errorMessage"]
    raise Drill::Error, body["errorMessage"].split("\n")[0]
  end

  # return columns in order
  result = []
  columns = body["columns"]
  body["rows"].each do |row|
    result << columns.each_with_object({}) { |c, memo| memo[c] = row[c] }
  end
  result
end