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