Class: Presto::Client::Query

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ Query

Returns a new instance of Query.



82
83
84
# File 'lib/presto/client/query.rb', line 82

def initialize(api)
  @api = api
end

Class Method Details

.resume(next_uri, options) ⇒ Object



28
29
30
# File 'lib/presto/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) ⇒ Object



24
25
26
# File 'lib/presto/client/query.rb', line 24

def self.start(query, options)
  new StatementClient.new(faraday_client(options), query, options)
end

Instance Method Details

#advanceObject



90
91
92
# File 'lib/presto/client/query.rb', line 90

def advance
  @api.advance
end

#cancelObject



153
154
155
# File 'lib/presto/client/query.rb', line 153

def cancel
  @api.cancel_leaf_stage
end

#closeObject



157
158
159
160
# File 'lib/presto/client/query.rb', line 157

def close
  @api.cancel_leaf_stage
  nil
end

#columnsObject



107
108
109
110
111
112
113
# File 'lib/presto/client/query.rb', line 107

def columns
  wait_for_columns

  raise_if_failed

  return @api.current_results.columns
end

#current_resultsObject



86
87
88
# File 'lib/presto/client/query.rb', line 86

def current_results
  @api.current_results
end

#each_row(&block) ⇒ Object



123
124
125
126
127
# File 'lib/presto/client/query.rb', line 123

def each_row(&block)
  each_row_chunk {|chunk|
    chunk.each(&block)
  }
end

#each_row_chunk(&block) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/presto/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_uriObject



149
150
151
# File 'lib/presto/client/query.rb', line 149

def next_uri
  @api.current_results.next_uri
end

#query_infoObject



145
146
147
# File 'lib/presto/client/query.rb', line 145

def query_info
  @api.query_info
end

#raise_if_failedObject



162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/presto/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

#rowsObject



115
116
117
118
119
120
121
# File 'lib/presto/client/query.rb', line 115

def rows
  rows = []
  each_row_chunk {|chunk|
    rows.concat(chunk)
  }
  return rows
end