Class: Trino::Client::Query

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ Query

Returns a new instance of Query.



63
64
65
# File 'lib/trino/client/query.rb', line 63

def initialize(api)
  @api = api
end

Instance Attribute Details

#scalar_parserObject

Returns the value of attribute scalar_parser.



61
62
63
# File 'lib/trino/client/query.rb', line 61

def scalar_parser
  @scalar_parser
end

Class Method Details

.faraday_client(options) ⇒ Object



44
45
46
# File 'lib/trino/client/query.rb', line 44

def self.faraday_client(options)
  Trino::Client.faraday_client(options)
end

.kill(query_id, options) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/trino/client/query.rb', line 36

def self.kill(query_id, options)
  faraday = faraday_client(options)
  response = faraday.delete do |req|
    req.url "/v1/query/#{query_id}"
  end
  return response.status / 100 == 2
end

.resume(next_uri, options) ⇒ Object



32
33
34
# File 'lib/trino/client/query.rb', line 32

def self.resume(next_uri, options)
  new StatementClient.new(faraday_client(options), nil, options, next_uri)
end

.start(query, options) ⇒ Object



28
29
30
# File 'lib/trino/client/query.rb', line 28

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

.transform_row(column_value_parsers, row) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/trino/client/query.rb', line 48

def self.transform_row(column_value_parsers, row)
  row_object = {}

  row.each_with_index do |element, i|
    column = column_value_parsers[i]
    value = column.value(element)

    row_object[column.name] = value
  end

  row_object
end

Instance Method Details

#advanceObject



75
76
77
# File 'lib/trino/client/query.rb', line 75

def advance
  @api.advance
end

#cancelObject



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

def cancel
  @api.cancel_leaf_stage
end

#closeObject



161
162
163
164
# File 'lib/trino/client/query.rb', line 161

def close
  @api.close
  nil
end

#column_value_parsersObject



105
106
107
108
109
110
# File 'lib/trino/client/query.rb', line 105

def column_value_parsers
  @column_value_parsers ||= {}
  @column_value_parsers[scalar_parser] ||= columns.map {|column|
    ColumnValueParser.new(column, scalar_parser)
  }
end

#columnsObject



99
100
101
102
103
# File 'lib/trino/client/query.rb', line 99

def columns
  wait_for_columns

  return @api.current_results.columns
end

#current_resultsObject



67
68
69
# File 'lib/trino/client/query.rb', line 67

def current_results
  @api.current_results
end

#current_results_headersObject



71
72
73
# File 'lib/trino/client/query.rb', line 71

def current_results_headers
  @api.current_results_headers
end

#each_row(&block) ⇒ Object



128
129
130
131
132
# File 'lib/trino/client/query.rb', line 128

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

#each_row_chunk(&block) ⇒ Object



134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/trino/client/query.rb', line 134

def each_row_chunk(&block)
  wait_for_data

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

  loop do
    if data = @api.current_results.data
      block.call(data)
    end
    break unless advance_and_raise
  end
end

#next_uriObject



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

def next_uri
  @api.current_results.next_uri
end

#query_infoObject



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

def query_info
  @api.query_info
end

#raise_if_failedObject



166
167
168
169
170
171
172
173
174
# File 'lib/trino/client/query.rb', line 166

def raise_if_failed
  if @api.client_aborted?
    raise TrinoClientError, "Query aborted by user"
  elsif @api.query_failed?
    results = @api.current_results
    error = results.error
    raise TrinoQueryError.new("Query #{results.id} failed: #{error.message}", results.id, error.error_code, error.error_name, error.error_type, error.error_location, error.failure_info)
  end
end

#rowsObject



120
121
122
123
124
125
126
# File 'lib/trino/client/query.rb', line 120

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

#transform_row(row) ⇒ Object



116
117
118
# File 'lib/trino/client/query.rb', line 116

def transform_row(row)
  self.class.transform_row(column_value_parsers, row)
end

#transform_rowsObject



112
113
114
# File 'lib/trino/client/query.rb', line 112

def transform_rows
  rows.map { |row| transform_row(row) }
end