class PrestoLegacy::Client::Query

Public Class Methods

new(api) click to toggle source
# File lib/presto_legacy/client/query.rb, line 82
def initialize(api)
  @api = api
end
resume(next_uri, options) click to toggle source
# File lib/presto_legacy/client/query.rb, line 28
def self.resume(next_uri, options)
  new StatementClient.new(faraday_client(options), nil, options, next_uri)
end
start(query, options) click to toggle source
# File lib/presto_legacy/client/query.rb, line 24
def self.start(query, options)
  new StatementClient.new(faraday_client(options), query, options)
end

Private Class Methods

faraday_client(options) click to toggle source
# File lib/presto_legacy/client/query.rb, line 32
def self.faraday_client(options)
  server = options[:server]
  unless server
    raise ArgumentError, ":server option is required"
  end

  ssl = faraday_ssl_options(options)

  url = "#{ssl ? "https" : "http"}://#{server}"
  proxy = options[:http_proxy] || options[:proxy]  # :proxy is obsoleted

  faraday = Faraday.new(url: url, proxy: "#{proxy}", ssl: ssl) do |faraday|
    #faraday.request :url_encoded
    faraday.response :logger if options[:http_debug]
    faraday.adapter Faraday.default_adapter
  end

  return faraday
end
faraday_ssl_options(options) click to toggle source
# File lib/presto_legacy/client/query.rb, line 52
def self.faraday_ssl_options(options)
  ssl = options[:ssl]

  case ssl
  when true
    ssl = {verify: true}

  when Hash
    verify = ssl.fetch(:verify, true)
    case verify
    when true
      # detailed SSL options. pass through to faraday
    when nil, false
      ssl = {verify: false}
    else
      raise ArgumentError, "Can't convert #{verify.class} of :verify option of :ssl option to true or false"
    end

  when nil, false
    ssl = false

  else
    raise ArgumentError, "Can't convert #{ssl.class} of :ssl option to true, false, or Hash"
  end

  return ssl
end

Public Instance Methods

advance() click to toggle source
# File lib/presto_legacy/client/query.rb, line 90
def advance
  @api.advance
end
cancel() click to toggle source
# File lib/presto_legacy/client/query.rb, line 153
def cancel
  @api.cancel_leaf_stage
end
close() click to toggle source
# File lib/presto_legacy/client/query.rb, line 157
def close
  @api.cancel_leaf_stage
  nil
end
columns() click to toggle source
# File lib/presto_legacy/client/query.rb, line 107
def columns
  wait_for_columns

  raise_if_failed

  return @api.current_results.columns
end
current_results() click to toggle source
# File lib/presto_legacy/client/query.rb, line 86
def current_results
  @api.current_results
end
each_row(&block) click to toggle source
# File lib/presto_legacy/client/query.rb, line 123
def each_row(&block)
  each_row_chunk {|chunk|
    chunk.each(&block)
  }
end
each_row_chunk(&block) click to toggle source
# File lib/presto_legacy/client/query.rb, line 129
def each_row_chunk(&block)
  wait_for_data

  raise_if_failed

  if self.columns == nil
    raise PrestoError, "Query #{@api.current_results.id} has no columns"
  end

  begin
    if data = @api.current_results.data
      block.call(data)
    end
  end while @api.advance
end
next_uri() click to toggle source
# File lib/presto_legacy/client/query.rb, line 149
def next_uri
  @api.current_results.next_uri
end
query_info() click to toggle source
# File lib/presto_legacy/client/query.rb, line 145
def query_info
  @api.query_info
end
raise_if_failed() click to toggle source
# File lib/presto_legacy/client/query.rb, line 162
def raise_if_failed
  if @api.closed?
    raise PrestoClientError, "Query aborted by user"
  elsif @api.exception?
    # query is gone
    raise @api.exception
  elsif @api.query_failed?
    results = @api.current_results
    error = results.error
    raise PrestoQueryError.new("Query #{results.id} failed: #{error.message}", results.id, error.error_code, error.failure_info)
  end
end
rows() click to toggle source
# File lib/presto_legacy/client/query.rb, line 115
def rows
  rows = []
  each_row_chunk {|chunk|
    rows.concat(chunk)
  }
  return rows
end

Private Instance Methods

wait_for_columns() click to toggle source
# File lib/presto_legacy/client/query.rb, line 94
def wait_for_columns
  while @api.current_results.columns == nil && @api.advance
  end
end
wait_for_data() click to toggle source
# File lib/presto_legacy/client/query.rb, line 99
def wait_for_data
  while @api.current_results.data == nil && @api.advance
  end
end