presto-client 0.5.14 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -29,7 +29,9 @@ module Presto::Client
29
29
  require 'presto/client/model_versions/0.173.rb'
30
30
  require 'presto/client/model_versions/0.178.rb'
31
31
  require 'presto/client/model_versions/0.205.rb'
32
+ require 'presto/client/model_versions/303.rb'
33
+ require 'presto/client/model_versions/316.rb'
32
34
 
33
- Models = ModelVersions::V0_205
35
+ Models = ModelVersions::V316
34
36
 
35
37
  end
@@ -125,7 +125,7 @@ module Presto::Client
125
125
  end
126
126
 
127
127
  def close
128
- @api.cancel_leaf_stage
128
+ @api.close
129
129
  nil
130
130
  end
131
131
 
@@ -241,21 +241,24 @@ module Presto::Client
241
241
  end
242
242
 
243
243
  def cancel_leaf_stage
244
- if uri = @results.next_uri
245
- response = @faraday.delete do |req|
244
+ if uri = @results.partial_cancel_uri
245
+ @faraday.delete do |req|
246
246
  req.url uri
247
247
  end
248
- return response.status / 100 == 2
249
248
  end
250
- return false
251
249
  end
252
250
 
253
251
  def close
254
252
  return if @closed
255
253
 
256
- # cancel running statement
257
- # TODO make async reqeust and ignore response?
258
- cancel_leaf_stage
254
+ begin
255
+ if uri = @results.next_uri
256
+ @faraday.delete do |req|
257
+ req.url uri
258
+ end
259
+ end
260
+ rescue => e
261
+ end
259
262
 
260
263
  @closed = true
261
264
  nil
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.5.14"
18
+ VERSION = "0.6.0"
19
19
  end
20
20
  end
@@ -131,6 +131,7 @@ module Presto::Client::ModelVersions
131
131
  when "apply" then ApplyNode
132
132
  when "assignUniqueId" then AssignUniqueId
133
133
  when "lateralJoin" then LateralJoinNode
134
+ when "statisticsWriterNode" then StatisticsWriterNode
134
135
  end
135
136
  if model_class
136
137
  node = model_class.decode(hash)
@@ -207,6 +208,22 @@ module Presto::Client::ModelVersions
207
208
  end
208
209
  end
209
210
 
211
+ class << WriteStatisticsTarget =
212
+ Base.new(:type, :handle)
213
+ def decode(hash)
214
+ unless hash.is_a?(Hash)
215
+ raise TypeError, "Can't convert #{hash.class} to Hash"
216
+ end
217
+ obj = allocate
218
+ model_class = case hash["@type"]
219
+ when "WriteStatisticsHandle" then WriteStatisticsHandle
220
+ end
221
+ if model_class
222
+ model_class.decode(hash)
223
+ end
224
+ end
225
+ end
226
+
210
227
  # Inner classes
211
228
  module OperatorInfo
212
229
  def self.decode(hash)
@@ -246,6 +263,13 @@ module Presto::Client::ModelVersions
246
263
  end
247
264
  end
248
265
 
266
+ class ResourceGroupId < Array
267
+ def initialize(array)
268
+ super()
269
+ concat(array)
270
+ end
271
+ end
272
+
249
273
  ##
250
274
  # Those model classes are automatically generated
251
275
  #
data/modelgen/modelgen.rb CHANGED
@@ -13,13 +13,13 @@ erb = ERB.new(File.read(template_path))
13
13
 
14
14
  source_path = source_dir
15
15
 
16
- predefined_simple_classes = %w[StageId TaskId Lifespan ConnectorSession]
17
- predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget OperatorInfo HashCollisionsInfo]
16
+ predefined_simple_classes = %w[StageId TaskId Lifespan ConnectorSession ResourceGroupId]
17
+ predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget WriteStatisticsTarget OperatorInfo HashCollisionsInfo]
18
18
 
19
- assume_primitive = %w[Object Type Long Symbol QueryId PlanNodeId PlanFragmentId MemoryPoolId TransactionId URI Duration DataSize DateTime ColumnHandle ConnectorTableHandle ConnectorOutputTableHandle ConnectorIndexHandle ConnectorColumnHandle ConnectorInsertTableHandle ConnectorTableLayoutHandle Expression FunctionCall TimeZoneKey Locale TypeSignature Frame TupleDomain<ColumnHandle> SerializableNativeValue ConnectorTransactionHandle OutputBufferId ConnectorPartitioningHandle NullableValue ConnectorId HostAddress JsonNode Node]
20
- enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder BufferState NullPartitioning BlockedReason ParameterKind FunctionKind PartitionFunctionHandle Scope ErrorType DistributionType PipelineExecutionStrategy JoinType]
19
+ assume_primitive = %w[Object Type Long Symbol QueryId PlanNodeId PlanFragmentId MemoryPoolId TransactionId URI Duration DataSize DateTime ColumnHandle ConnectorTableHandle ConnectorOutputTableHandle ConnectorIndexHandle ConnectorColumnHandle ConnectorInsertTableHandle ConnectorTableLayoutHandle Expression FunctionCall TimeZoneKey Locale TypeSignature Frame TupleDomain<ColumnHandle> SerializableNativeValue ConnectorTransactionHandle OutputBufferId ConnectorPartitioningHandle NullableValue ConnectorId HostAddress JsonNode Node CatalogName QualifiedObjectName]
20
+ enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder BufferState NullPartitioning BlockedReason ParameterKind FunctionKind PartitionFunctionHandle Scope ErrorType DistributionType PipelineExecutionStrategy JoinType ExchangeNode.Type ColumnStatisticType TableStatisticType StageExecutionStrategy SemanticErrorCode]
21
21
 
22
- root_models = %w[QueryResults QueryInfo] + %w[
22
+ root_models = %w[QueryResults QueryInfo BasicQueryInfo] + %w[
23
23
  OutputNode
24
24
  ProjectNode
25
25
  TableScanNode
@@ -42,7 +42,6 @@ IndexJoinNode
42
42
  IndexSourceNode
43
43
  TableWriterNode
44
44
  DeleteNode
45
- MetadataDeleteNode
46
45
  TableFinishNode
47
46
  UnnestNode
48
47
  ExchangeNode
@@ -54,6 +53,7 @@ ExplainAnalyzeNode
54
53
  ApplyNode
55
54
  AssignUniqueId
56
55
  LateralJoinNode
56
+ StatisticsWriterNode
57
57
  ] + %w[
58
58
  ExchangeClientStatus
59
59
  LocalExchangeBufferInfo
@@ -62,7 +62,8 @@ SplitOperatorInfo
62
62
  PartitionedOutputInfo
63
63
  JoinOperatorInfo
64
64
  WindowInfo
65
- TableWriterInfo]
65
+ TableWriterInfo
66
+ ]
66
67
 
67
68
  name_mapping = Hash[*%w[
68
69
  StatementStats StageStats ClientStageStats
@@ -71,13 +72,14 @@ QueryResults Column ClientColumn
71
72
  ].each_slice(3).map { |x, y, z| [[x,y], z] }.flatten(1)]
72
73
 
73
74
  path_mapping = Hash[*%w[
74
- ClientColumn presto-client/src/main/java/com/facebook/presto/client/Column.java
75
- ClientStageStats presto-client/src/main/java/com/facebook/presto/client/StageStats.java
76
- Column presto-main/src/main/java/com/facebook/presto/execution/Column.java
77
- QueryStats presto-main/src/main/java/com/facebook/presto/execution/QueryStats.java
78
- StageStats presto-main/src/main/java/com/facebook/presto/execution/StageStats.java
79
- PartitionedOutputInfo presto-main/src/main/java/com/facebook/presto/operator/PartitionedOutputOperator.java
80
- TableWriterInfo presto-main/src/main/java/com/facebook/presto/operator/TableWriterOperator.java
75
+ ClientColumn presto-client/src/main/java/io/prestosql/client/Column.java
76
+ ClientStageStats presto-client/src/main/java/io/prestosql/client/StageStats.java
77
+ Column presto-main/src/main/java/io/prestosql/execution/Column.java
78
+ QueryStats presto-main/src/main/java/io/prestosql/execution/QueryStats.java
79
+ StageStats presto-main/src/main/java/io/prestosql/execution/StageStats.java
80
+ PartitionedOutputInfo presto-main/src/main/java/io/prestosql/operator/PartitionedOutputOperator.java
81
+ TableWriterInfo presto-main/src/main/java/io/prestosql/operator/TableWriterOperator.java
82
+ TableInfo presto-main/src/main/java/io/prestosql/execution/TableInfo.java
81
83
  ].map.with_index { |v,i| i % 2 == 0 ? v : (source_path + "/" + v) }]
82
84
 
83
85
  # model => [ [key,nullable,type], ... ]
@@ -3,13 +3,13 @@ module PrestoModels
3
3
  require 'find'
4
4
  require 'stringio'
5
5
 
6
- PRIMITIVE_TYPES = %w[String boolean long int short byte double float Integer]
6
+ PRIMITIVE_TYPES = %w[String boolean long int short byte double float Integer Double Boolean]
7
7
  ARRAY_PRIMITIVE_TYPES = PRIMITIVE_TYPES.map { |t| "#{t}[]" }
8
8
 
9
9
  class Model < Struct.new(:name, :fields)
10
10
  end
11
11
 
12
- class Field < Struct.new(:key, :nullable, :array, :map, :type, :base_type, :map_value_base_type)
12
+ class Field < Struct.new(:key, :nullable, :array, :map, :type, :base_type, :map_value_base_type, :base_type_alias)
13
13
  alias_method :nullable?, :nullable
14
14
  alias_method :array?, :array
15
15
  alias_method :map?, :map
@@ -47,10 +47,12 @@ module PrestoModels
47
47
 
48
48
  private
49
49
 
50
- PROPERTY_PATTERN = /@JsonProperty\(\"(\w+)\"\)\s+(@Nullable\s+)?([\w\<\>\[\]\,\s]+)\s+\w+/
50
+ PROPERTY_PATTERN = /@JsonProperty\(\"(\w+)\"\)\s+(@Nullable\s+)?([\w\<\>\[\]\,\s\.]+)\s+\w+/
51
51
  CREATOR_PATTERN = /@JsonCreator[\s]+public[\s]+(static\s+)?(\w+)[\w\s]*\((?:\s*#{PROPERTY_PATTERN}\s*,?)+\)/
52
+ GENERIC_PATTERN = /(\w+)\<(\w+)\>/
52
53
 
53
- def analyze_fields(model_name, creator_block)
54
+ def analyze_fields(model_name, creator_block, generic: nil)
55
+ model_name = "#{model_name}_#{generic}" if generic
54
56
  extra = @extra_fields[model_name] || []
55
57
  fields = creator_block.scan(PROPERTY_PATTERN).concat(extra).map do |key,nullable,type|
56
58
  map = false
@@ -63,7 +65,7 @@ module PrestoModels
63
65
  base_type = m[1]
64
66
  map_value_base_type = m[2]
65
67
  map = true
66
- elsif m = /Optional<([\w\[\]]+)>/.match(type)
68
+ elsif m = /Optional<([\w\[\]\<\>]+)>/.match(type)
67
69
  base_type = m[1]
68
70
  nullable = true
69
71
  elsif m = /OptionalInt/.match(type)
@@ -72,6 +74,9 @@ module PrestoModels
72
74
  elsif m = /OptionalLong/.match(type)
73
75
  base_type = 'Long'
74
76
  nullable = true
77
+ elsif m = /OptionalDouble/.match(type)
78
+ base_type = 'Double'
79
+ nullable = true
75
80
  elsif type =~ /\w+/
76
81
  base_type = type
77
82
  else
@@ -79,7 +84,16 @@ module PrestoModels
79
84
  end
80
85
  base_type = @name_mapping[[model_name, base_type]] || base_type
81
86
  map_value_base_type = @name_mapping[[model_name, map_value_base_type]] || map_value_base_type
82
- Field.new(key, !!nullable, array, map, type, base_type, map_value_base_type)
87
+
88
+ if generic
89
+ base_type = generic if base_type == 'T'
90
+ map_value_base_type = generic if map_value_base_type == 'T'
91
+ end
92
+ if m = GENERIC_PATTERN.match(base_type)
93
+ base_type_alias = "#{m[1]}_#{m[2]}"
94
+ end
95
+
96
+ Field.new(key, !!nullable, array, map, type, base_type, map_value_base_type, base_type_alias)
83
97
  end
84
98
 
85
99
  @models[model_name] = Model.new(model_name, fields)
@@ -92,9 +106,15 @@ module PrestoModels
92
106
  return fields
93
107
  end
94
108
 
95
- def analyze_model(model_name, parent_model = nil)
109
+ def analyze_model(model_name, parent_model= nil, generic: nil)
96
110
  return if @models[model_name] || @ignore_types.include?(model_name)
97
111
 
112
+ if m = GENERIC_PATTERN.match(model_name)
113
+ analyze_model(m[1], generic: m[2])
114
+ analyze_model(m[2])
115
+ return
116
+ end
117
+
98
118
  path = find_class_file(model_name, parent_model)
99
119
  java = File.read(path)
100
120
 
@@ -114,7 +134,7 @@ module PrestoModels
114
134
  fields = analyze_fields(inner_model_name, m[0])
115
135
  end
116
136
 
117
- fields = analyze_fields(model_name, body)
137
+ fields = analyze_fields(model_name, body, generic: generic)
118
138
 
119
139
  rescue => e
120
140
  puts "Skipping model #{parent_model}/#{model_name}: #{e}"
@@ -214,7 +234,7 @@ module PrestoModels
214
234
  elem_expr = convert_expression(field.base_type, field.base_type, "h")
215
235
  expr << "hash[\"#{field.key}\"].map {|h| #{elem_expr} }"
216
236
  else
217
- expr << convert_expression(field.type, field.base_type, "hash[\"#{field.key}\"]")
237
+ expr << convert_expression(field.type, field.base_type_alias || field.base_type, "hash[\"#{field.key}\"]")
218
238
  end
219
239
  end
220
240
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.14
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-30 00:00:00.000000000 Z
11
+ date: 2019-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -137,6 +137,8 @@ files:
137
137
  - lib/presto/client/model_versions/0.173.rb
138
138
  - lib/presto/client/model_versions/0.178.rb
139
139
  - lib/presto/client/model_versions/0.205.rb
140
+ - lib/presto/client/model_versions/303.rb
141
+ - lib/presto/client/model_versions/316.rb
140
142
  - lib/presto/client/models.rb
141
143
  - lib/presto/client/query.rb
142
144
  - lib/presto/client/statement_client.rb
@@ -170,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
172
  version: '0'
171
173
  requirements: []
172
174
  rubyforge_project:
173
- rubygems_version: 2.6.13
175
+ rubygems_version: 2.5.1
174
176
  signing_key:
175
177
  specification_version: 4
176
178
  summary: Presto client library