Class: QueueryClient::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/queuery_client/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Client

Returns a new instance of Client.



3
4
5
# File 'lib/queuery_client/client.rb', line 3

def initialize(options = {})
  @options = options
end

Instance Method Details

#default_optionsObject



69
70
71
# File 'lib/queuery_client/client.rb', line 69

def default_options
  QueueryClient.configuration
end

#execute_query(select_stmt, values, query_options) ⇒ Object Also known as: start_query



7
8
9
# File 'lib/queuery_client/client.rb', line 7

def execute_query(select_stmt, values, query_options)
  garage_client.post("/v1/queries", q: select_stmt, values: values, enable_metadata: query_options[:enable_cast])
end

#garage_clientObject



54
55
56
57
58
59
60
61
62
63
# File 'lib/queuery_client/client.rb', line 54

def garage_client
  @garage_client ||= BasicAuthGarageClient.new(
    endpoint: options.endpoint,
    path_prefix: '/',
    login: options.token,
    password: options.token_secret
  ).tap do |client|
    client.headers['Host'] = options.host_header if options.host_header
  end
end

#get_query(id, query_options) ⇒ Object



12
13
14
15
# File 'lib/queuery_client/client.rb', line 12

def get_query(id, query_options)
  query_option_fields = build_query_option_fields(query_options)
  garage_client.get("/v1/queries/#{id}", fields: '__default__,s3_prefix' + query_option_fields)
end

#optionsObject



65
66
67
# File 'lib/queuery_client/client.rb', line 65

def options
  default_options.merge(@options)
end

#poll_result(id) ⇒ Object

poll_result returns the results only if the query has already successed.



49
50
51
52
# File 'lib/queuery_client/client.rb', line 49

def poll_result(id)
  query = get_query(id)
  get_query_result(query)
end

#query(select_stmt, values, **query_options) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/queuery_client/client.rb', line 33

def query(select_stmt, values, **query_options)
  query = query_and_wait(select_stmt, values, query_options)
  manifest_file_url = query.manifest_file_url if query_options[:enable_cast]
  case query.status
  when 'success'
    UrlDataFileBundle.new(
      query.data_file_urls,
      manifest_file_url,
      s3_prefix: query.s3_prefix,
    )
  when 'failed'
    raise QueryError.new(query.error)
  end
end

#query_and_wait(select_stmt, values, query_options) ⇒ Object



28
29
30
31
# File 'lib/queuery_client/client.rb', line 28

def query_and_wait(select_stmt, values, query_options)
  query = execute_query(select_stmt, values, query_options)
  wait_for(query.id, query_options)
end

#wait_for(id, query_options) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/queuery_client/client.rb', line 17

def wait_for(id, query_options)
  loop do
    query = get_query(id, query_options)
    case query.status
    when 'success', 'failed'
      return query
    end
    sleep 3
  end
end