presto-client 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 480d2fbe7a4abcd63537fa115b61973ee47d0660
4
- data.tar.gz: '04966bb7d6db3cc0b37522db481caf724b4c6ba7'
3
+ metadata.gz: ab5325ef43e73961c5e9736fe204f2a081e178c7
4
+ data.tar.gz: 6a168ca482d78e69760c032ebf2f92af37b1b18b
5
5
  SHA512:
6
- metadata.gz: da3d2da1dd78e71fb9e0faf05802866739ba176a0461e1743a8751dd9e3022a16b94640c22b2e4929e4836ffb1f2f3f155cf51d7ce856ce8f48895202eb97405
7
- data.tar.gz: aa9576c409fabe996231a8bfebf7d323647b0bdc25d224c74c82eb771057eb6607065642331abafbe9d9ea8dd9863590a891f681f8ba64d10ff4b877dc06f140
6
+ metadata.gz: 44eae00fff8f16da24337bb6b740b6e77e4212c8a28e62506146f15f0d2a2719f8703c81b3bccf6c932f3235cbf51e9a442686e835830db5bf57e4dcdf8d77b7
7
+ data.tar.gz: 79f2fd6d22e241de0ba42977eee74b669d90ccc419dd2d64bd593b723626735b419739bdab3da23f2c994f9fdd1cd3761f6167da123486b24d4f15692c35dd11
data/ChangeLog CHANGED
@@ -1,3 +1,6 @@
1
+ 2017-07-03 version 0.5.6:
2
+ * Added missing inner class models for version 0.178
3
+
1
4
  2017-06-28 version 0.5.5:
2
5
  * Added support for model version 0.178
3
6
 
@@ -180,97 +180,17 @@ module Presto::Client::ModelVersions
180
180
  end
181
181
  obj = allocate
182
182
  model_class = case hash["@type"]
183
- when "CreateHandle" then OutputTableHandle
184
- when "InsertHandle" then InsertTableHandle
185
- when "DeleteHandle" then TableHandle
183
+ when "CreateHandle" then CreateHandle
184
+ when "InsertHandle" then InsertHandle
185
+ when "DeleteHandle" then DeleteHandle
186
186
  end
187
- obj.send(:initialize_struct,
188
- hash["@type"],
189
- model_class.decode(hash['handle'])
190
- )
191
- obj
192
- end
193
- end
194
-
195
- class << DeleteHandle =
196
- Base.new(:handle)
197
- def decode(hash)
198
- unless hash.is_a?(Hash)
199
- raise TypeError, "Can't convert #{hash.class} to Hash"
187
+ if model_class
188
+ model_class.decode(hash)
200
189
  end
201
- obj = allocate
202
- obj.send(:initialize_struct,
203
- TableHandle.decode(hash['handle'])
204
- )
205
- obj
206
190
  end
207
191
  end
208
192
 
209
193
  # Inner classes
210
- class << Specification =
211
- Base.new(:partition_by, :order_by, :orderings, :frame, :pages_added)
212
- def decode(hash)
213
- unless hash.is_a?(Hash)
214
- raise TypeError, "Can't convert #{hash.class} to Hash"
215
- end
216
- obj = allocate
217
- obj.send(:initialize_struct,
218
- hash["partitionBy"],
219
- hash["orderBy"],
220
- hash["orderings"],
221
- hash["frame"],
222
- )
223
- obj
224
- end
225
- end
226
-
227
- class << ArgumentBinding =
228
- Base.new(:column, :constant)
229
- def decode(hash)
230
- unless hash.is_a?(Hash)
231
- raise TypeError, "Can't convert #{hash.class} to Hash"
232
- end
233
- obj = allocate
234
- obj.send(:initialize_struct,
235
- hash["column"],
236
- hash["constant"]
237
- )
238
- obj
239
- end
240
- end
241
-
242
- class << Aggregation =
243
- Base.new(:call, :signature, :mask)
244
- def decode(hash)
245
- unless hash.is_a?(Hash)
246
- raise TypeError, "Can't convert #{hash.class} to Hash"
247
- end
248
- obj = allocate
249
- obj.send(:initialize_struct,
250
- hash["call"],
251
- hash["signature"] && Signature.decode(hash["signature"]),
252
- hash["mask"]
253
- )
254
- obj
255
- end
256
- end
257
-
258
- class << Function =
259
- Base.new(:function_call, :signature, :frame)
260
- def decode(hash)
261
- unless hash.is_a?(Hash)
262
- raise TypeError, "Can't convert #{hash.class} to Hash"
263
- end
264
- obj = allocate
265
- obj.send(:initialize_struct,
266
- hash["function_call"],
267
- hash["signature"] && Signature.decode(hash["signature"]),
268
- hash["frame"] && Frame.decode(hash["frame"])
269
- )
270
- obj
271
- end
272
- end
273
-
274
194
  module OperatorInfo
275
195
  def self.decode(hash)
276
196
  unless hash.is_a?(Hash)
@@ -290,41 +210,42 @@ module Presto::Client::ModelVersions
290
210
  end
291
211
  end
292
212
 
293
- class << PartitionedOutputInfo =
294
- Base.new(:rows_added, :pages_added)
213
+ class << HashCollisionsInfo =
214
+ Base.new(:weighted_hash_collisions, :weighted_sum_squared_hash_collisions, :weighted_expectedHash_collisions)
295
215
  def decode(hash)
296
216
  unless hash.is_a?(Hash)
297
217
  raise TypeError, "Can't convert #{hash.class} to Hash"
298
218
  end
299
219
  obj = allocate
300
220
  obj.send(:initialize_struct,
301
- hash["rows_added"],
302
- hash["pages_added"],
221
+ hash["weighted_hash_collisions"],
222
+ hash["weighted_sum_squared_hash_collisions"],
223
+ hash["weighted_expectedHash_collisions"]
303
224
  )
304
225
  obj
305
226
  end
306
227
  end
307
228
 
308
- class << HashCollisionsInfo =
309
- Base.new(:weighted_hash_collisions, :weighted_sum_squared_hash_collisions, :weighted_expectedHash_collisions)
229
+ ##
230
+ # Those model classes are automatically generated
231
+ #
232
+
233
+ class << Aggregation =
234
+ Base.new(:call, :signature, :mask)
310
235
  def decode(hash)
311
236
  unless hash.is_a?(Hash)
312
237
  raise TypeError, "Can't convert #{hash.class} to Hash"
313
238
  end
314
239
  obj = allocate
315
240
  obj.send(:initialize_struct,
316
- hash["weighted_hash_collisions"],
317
- hash["weighted_sum_squared_hash_collisions"],
318
- hash["weighted_expectedHash_collisions"]
241
+ hash["call"],
242
+ hash["signature"] && Signature.decode(hash["signature"]),
243
+ hash["mask"],
319
244
  )
320
245
  obj
321
246
  end
322
247
  end
323
248
 
324
- ##
325
- # Those model classes are automatically generated
326
- #
327
-
328
249
  class << AggregationNode =
329
250
  Base.new(:id, :source, :assignments, :grouping_sets, :step, :hash_symbol, :group_id_symbol)
330
251
  def decode(hash)
@@ -363,6 +284,21 @@ module Presto::Client::ModelVersions
363
284
  end
364
285
  end
365
286
 
287
+ class << ArgumentBinding =
288
+ Base.new(:column, :constant)
289
+ def decode(hash)
290
+ unless hash.is_a?(Hash)
291
+ raise TypeError, "Can't convert #{hash.class} to Hash"
292
+ end
293
+ obj = allocate
294
+ obj.send(:initialize_struct,
295
+ hash["column"],
296
+ hash["constant"],
297
+ )
298
+ obj
299
+ end
300
+ end
301
+
366
302
  class << AssignUniqueId =
367
303
  Base.new(:id, :source, :id_column)
368
304
  def decode(hash)
@@ -501,6 +437,36 @@ module Presto::Client::ModelVersions
501
437
  end
502
438
  end
503
439
 
440
+ class << CreateHandle =
441
+ Base.new(:handle, :schema_table_name)
442
+ def decode(hash)
443
+ unless hash.is_a?(Hash)
444
+ raise TypeError, "Can't convert #{hash.class} to Hash"
445
+ end
446
+ obj = allocate
447
+ obj.send(:initialize_struct,
448
+ hash["handle"] && OutputTableHandle.decode(hash["handle"]),
449
+ hash["schemaTableName"] && SchemaTableName.decode(hash["schemaTableName"]),
450
+ )
451
+ obj
452
+ end
453
+ end
454
+
455
+ class << DeleteHandle =
456
+ Base.new(:handle, :schema_table_name)
457
+ def decode(hash)
458
+ unless hash.is_a?(Hash)
459
+ raise TypeError, "Can't convert #{hash.class} to Hash"
460
+ end
461
+ obj = allocate
462
+ obj.send(:initialize_struct,
463
+ hash["handle"] && TableHandle.decode(hash["handle"]),
464
+ hash["schemaTableName"] && SchemaTableName.decode(hash["schemaTableName"]),
465
+ )
466
+ obj
467
+ end
468
+ end
469
+
504
470
  class << DeleteNode =
505
471
  Base.new(:id, :source, :target, :row_id, :outputs)
506
472
  def decode(hash)
@@ -730,6 +696,22 @@ module Presto::Client::ModelVersions
730
696
  end
731
697
  end
732
698
 
699
+ class << Function =
700
+ Base.new(:function_call, :signature, :frame)
701
+ def decode(hash)
702
+ unless hash.is_a?(Hash)
703
+ raise TypeError, "Can't convert #{hash.class} to Hash"
704
+ end
705
+ obj = allocate
706
+ obj.send(:initialize_struct,
707
+ hash["functionCall"],
708
+ hash["signature"] && Signature.decode(hash["signature"]),
709
+ hash["frame"],
710
+ )
711
+ obj
712
+ end
713
+ end
714
+
733
715
  class << GroupIdNode =
734
716
  Base.new(:id, :source, :grouping_sets, :grouping_set_mappings, :argument_mappings, :group_id_symbol)
735
717
  def decode(hash)
@@ -824,6 +806,21 @@ module Presto::Client::ModelVersions
824
806
  end
825
807
  end
826
808
 
809
+ class << InsertHandle =
810
+ Base.new(:handle, :schema_table_name)
811
+ def decode(hash)
812
+ unless hash.is_a?(Hash)
813
+ raise TypeError, "Can't convert #{hash.class} to Hash"
814
+ end
815
+ obj = allocate
816
+ obj.send(:initialize_struct,
817
+ hash["handle"] && InsertTableHandle.decode(hash["handle"]),
818
+ hash["schemaTableName"] && SchemaTableName.decode(hash["schemaTableName"]),
819
+ )
820
+ obj
821
+ end
822
+ end
823
+
827
824
  class << InsertTableHandle =
828
825
  Base.new(:connector_id, :transaction_handle, :connector_handle)
829
826
  def decode(hash)
@@ -912,6 +909,21 @@ module Presto::Client::ModelVersions
912
909
  end
913
910
  end
914
911
 
912
+ class << LongVariableConstraint =
913
+ Base.new(:name, :expression)
914
+ def decode(hash)
915
+ unless hash.is_a?(Hash)
916
+ raise TypeError, "Can't convert #{hash.class} to Hash"
917
+ end
918
+ obj = allocate
919
+ obj.send(:initialize_struct,
920
+ hash["name"],
921
+ hash["expression"],
922
+ )
923
+ obj
924
+ end
925
+ end
926
+
915
927
  class << MarkDistinctNode =
916
928
  Base.new(:id, :source, :marker_symbol, :distinct_symbols, :hash_symbol)
917
929
  def decode(hash)
@@ -1249,7 +1261,7 @@ module Presto::Client::ModelVersions
1249
1261
  end
1250
1262
 
1251
1263
  class << QueryInfo =
1252
- Base.new(:query_id, :session, :state, :memory_pool, :scheduled, :self, :field_names, :query, :query_stats, :set_session_properties, :reset_session_properties, :added_prepared_statements, :deallocated_prepared_statements, :started_transaction_id, :clear_transaction_id, :update_type, :output_stage, :failure_info, :error_code, :inputs, :output, :complete_info, :resource_group_name)
1264
+ Base.new(:query_id, :session, :state, :memory_pool, :scheduled, :self, :field_names, :query, :query_stats, :set_session_properties, :reset_session_properties, :added_prepared_statements, :deallocated_prepared_statements, :started_transaction_id, :clear_transaction_id, :update_type, :output_stage, :failure_info, :error_code, :inputs, :output, :complete_info, :resource_group_name, :final_query_info)
1253
1265
  def decode(hash)
1254
1266
  unless hash.is_a?(Hash)
1255
1267
  raise TypeError, "Can't convert #{hash.class} to Hash"
@@ -1279,6 +1291,7 @@ module Presto::Client::ModelVersions
1279
1291
  hash["output"] && Output.decode(hash["output"]),
1280
1292
  hash["completeInfo"],
1281
1293
  hash["resourceGroupName"],
1294
+ hash["finalQueryInfo"],
1282
1295
  )
1283
1296
  obj
1284
1297
  end
@@ -1407,6 +1420,21 @@ module Presto::Client::ModelVersions
1407
1420
  end
1408
1421
  end
1409
1422
 
1423
+ class << SchemaTableName =
1424
+ Base.new(:schema, :table)
1425
+ def decode(hash)
1426
+ unless hash.is_a?(Hash)
1427
+ raise TypeError, "Can't convert #{hash.class} to Hash"
1428
+ end
1429
+ obj = allocate
1430
+ obj.send(:initialize_struct,
1431
+ hash["schema"],
1432
+ hash["table"],
1433
+ )
1434
+ obj
1435
+ end
1436
+ end
1437
+
1410
1438
  class << SemiJoinNode =
1411
1439
  Base.new(:id, :source, :filtering_source, :source_join_symbol, :filtering_source_join_symbol, :semi_join_output, :source_hash_symbol, :filtering_source_hash_symbol, :distribution_type)
1412
1440
  def decode(hash)
@@ -1459,6 +1487,26 @@ module Presto::Client::ModelVersions
1459
1487
  end
1460
1488
  end
1461
1489
 
1490
+ class << Signature =
1491
+ Base.new(:name, :kind, :type_variable_constraints, :long_variable_constraints, :return_type, :argument_types, :variable_arity)
1492
+ def decode(hash)
1493
+ unless hash.is_a?(Hash)
1494
+ raise TypeError, "Can't convert #{hash.class} to Hash"
1495
+ end
1496
+ obj = allocate
1497
+ obj.send(:initialize_struct,
1498
+ hash["name"],
1499
+ hash["kind"] && hash["kind"].downcase.to_sym,
1500
+ hash["typeVariableConstraints"] && hash["typeVariableConstraints"].map {|h| TypeVariableConstraint.decode(h) },
1501
+ hash["longVariableConstraints"] && hash["longVariableConstraints"].map {|h| LongVariableConstraint.decode(h) },
1502
+ hash["returnType"],
1503
+ hash["argumentTypes"],
1504
+ hash["variableArity"],
1505
+ )
1506
+ obj
1507
+ end
1508
+ end
1509
+
1462
1510
  class << SortNode =
1463
1511
  Base.new(:id, :source, :order_by, :orderings)
1464
1512
  def decode(hash)
@@ -1476,6 +1524,22 @@ module Presto::Client::ModelVersions
1476
1524
  end
1477
1525
  end
1478
1526
 
1527
+ class << Specification =
1528
+ Base.new(:partition_by, :order_by, :orderings)
1529
+ def decode(hash)
1530
+ unless hash.is_a?(Hash)
1531
+ raise TypeError, "Can't convert #{hash.class} to Hash"
1532
+ end
1533
+ obj = allocate
1534
+ obj.send(:initialize_struct,
1535
+ hash["partitionBy"],
1536
+ hash["orderBy"],
1537
+ hash["orderings"] && Hash[hash["orderings"].to_a.map! {|k,v| [k, v.downcase.to_sym] }],
1538
+ )
1539
+ obj
1540
+ end
1541
+ end
1542
+
1479
1543
  class << SplitOperatorInfo =
1480
1544
  Base.new(:split_info)
1481
1545
  def decode(hash)
@@ -1807,6 +1871,23 @@ module Presto::Client::ModelVersions
1807
1871
  end
1808
1872
  end
1809
1873
 
1874
+ class << TypeVariableConstraint =
1875
+ Base.new(:name, :comparable_required, :orderable_required, :variadic_bound)
1876
+ def decode(hash)
1877
+ unless hash.is_a?(Hash)
1878
+ raise TypeError, "Can't convert #{hash.class} to Hash"
1879
+ end
1880
+ obj = allocate
1881
+ obj.send(:initialize_struct,
1882
+ hash["name"],
1883
+ hash["comparableRequired"],
1884
+ hash["orderableRequired"],
1885
+ hash["variadicBound"],
1886
+ )
1887
+ obj
1888
+ end
1889
+ end
1890
+
1810
1891
  class << UnionNode =
1811
1892
  Base.new(:id, :sources, :output_to_inputs, :outputs)
1812
1893
  def decode(hash)
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.5.5"
18
+ VERSION = "0.5.6"
19
19
  end
20
20
  end
@@ -180,97 +180,17 @@ module Presto::Client::ModelVersions
180
180
  end
181
181
  obj = allocate
182
182
  model_class = case hash["@type"]
183
- when "CreateHandle" then OutputTableHandle
184
- when "InsertHandle" then InsertTableHandle
185
- when "DeleteHandle" then TableHandle
183
+ when "CreateHandle" then CreateHandle
184
+ when "InsertHandle" then InsertHandle
185
+ when "DeleteHandle" then DeleteHandle
186
186
  end
187
- obj.send(:initialize_struct,
188
- hash["@type"],
189
- model_class.decode(hash['handle'])
190
- )
191
- obj
192
- end
193
- end
194
-
195
- class << DeleteHandle =
196
- Base.new(:handle)
197
- def decode(hash)
198
- unless hash.is_a?(Hash)
199
- raise TypeError, "Can't convert #{hash.class} to Hash"
187
+ if model_class
188
+ model_class.decode(hash)
200
189
  end
201
- obj = allocate
202
- obj.send(:initialize_struct,
203
- TableHandle.decode(hash['handle'])
204
- )
205
- obj
206
190
  end
207
191
  end
208
192
 
209
193
  # Inner classes
210
- class << Specification =
211
- Base.new(:partition_by, :order_by, :orderings, :frame, :pages_added)
212
- def decode(hash)
213
- unless hash.is_a?(Hash)
214
- raise TypeError, "Can't convert #{hash.class} to Hash"
215
- end
216
- obj = allocate
217
- obj.send(:initialize_struct,
218
- hash["partitionBy"],
219
- hash["orderBy"],
220
- hash["orderings"],
221
- hash["frame"],
222
- )
223
- obj
224
- end
225
- end
226
-
227
- class << ArgumentBinding =
228
- Base.new(:column, :constant)
229
- def decode(hash)
230
- unless hash.is_a?(Hash)
231
- raise TypeError, "Can't convert #{hash.class} to Hash"
232
- end
233
- obj = allocate
234
- obj.send(:initialize_struct,
235
- hash["column"],
236
- hash["constant"]
237
- )
238
- obj
239
- end
240
- end
241
-
242
- class << Aggregation =
243
- Base.new(:call, :signature, :mask)
244
- def decode(hash)
245
- unless hash.is_a?(Hash)
246
- raise TypeError, "Can't convert #{hash.class} to Hash"
247
- end
248
- obj = allocate
249
- obj.send(:initialize_struct,
250
- hash["call"],
251
- hash["signature"] && Signature.decode(hash["signature"]),
252
- hash["mask"]
253
- )
254
- obj
255
- end
256
- end
257
-
258
- class << Function =
259
- Base.new(:function_call, :signature, :frame)
260
- def decode(hash)
261
- unless hash.is_a?(Hash)
262
- raise TypeError, "Can't convert #{hash.class} to Hash"
263
- end
264
- obj = allocate
265
- obj.send(:initialize_struct,
266
- hash["function_call"],
267
- hash["signature"] && Signature.decode(hash["signature"]),
268
- hash["frame"] && Frame.decode(hash["frame"])
269
- )
270
- obj
271
- end
272
- end
273
-
274
194
  module OperatorInfo
275
195
  def self.decode(hash)
276
196
  unless hash.is_a?(Hash)
@@ -290,21 +210,6 @@ module Presto::Client::ModelVersions
290
210
  end
291
211
  end
292
212
 
293
- class << PartitionedOutputInfo =
294
- Base.new(:rows_added, :pages_added)
295
- def decode(hash)
296
- unless hash.is_a?(Hash)
297
- raise TypeError, "Can't convert #{hash.class} to Hash"
298
- end
299
- obj = allocate
300
- obj.send(:initialize_struct,
301
- hash["rows_added"],
302
- hash["pages_added"],
303
- )
304
- obj
305
- end
306
- end
307
-
308
213
  class << HashCollisionsInfo =
309
214
  Base.new(:weighted_hash_collisions, :weighted_sum_squared_hash_collisions, :weighted_expectedHash_collisions)
310
215
  def decode(hash)
data/modelgen/modelgen.rb CHANGED
@@ -14,7 +14,7 @@ erb = ERB.new(File.read(template_path))
14
14
  source_path = source_dir
15
15
 
16
16
  predefined_simple_classes = %w[StageId TaskId ConnectorSession]
17
- predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget DeleteHandle Specification ArgumentBinding Aggregation Function OperatorInfo PartitionedOutputInfo HashCollisionsInfo]
17
+ predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget OperatorInfo HashCollisionsInfo]
18
18
 
19
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]
20
20
  enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder BufferState NullPartitioning BlockedReason ParameterKind FunctionKind PartitionFunctionHandle Scope ErrorType DistributionType]
@@ -53,7 +53,6 @@ GroupIdNode
53
53
  ExplainAnalyzeNode
54
54
  ApplyNode
55
55
  AssignUniqueId
56
- ] + %w[InsertTableHandle OutputTableHandle TableHandle
57
56
  ] + %w[ExchangeClientStatus LocalExchangeBufferInfo TableFinishInfo SplitOperatorInfo]
58
57
 
59
58
  name_mapping = Hash[*%w[
@@ -70,11 +69,17 @@ QueryStats presto-main/src/main/java/com/facebook/presto/execution/QueryStats.ja
70
69
  StageStats presto-main/src/main/java/com/facebook/presto/execution/StageStats.java
71
70
  ].map.with_index { |v,i| i % 2 == 0 ? v : (source_path + "/" + v) }]
72
71
 
72
+ # model => [ [key,nullable,type], ... ]
73
+ extra_fields = {
74
+ 'QueryInfo' => [['finalQueryInfo', nil, 'boolean']]
75
+ }
76
+
73
77
  analyzer = PrestoModels::ModelAnalyzer.new(
74
78
  source_path,
75
79
  skip_models: predefined_models + predefined_simple_classes + assume_primitive + enum_types,
76
80
  path_mapping: path_mapping,
77
- name_mapping: name_mapping
81
+ name_mapping: name_mapping,
82
+ extra_fields: extra_fields
78
83
  )
79
84
  analyzer.analyze(root_models)
80
85
  models = analyzer.models
@@ -28,6 +28,7 @@ module PrestoModels
28
28
  @ignore_types = PRIMITIVE_TYPES + ARRAY_PRIMITIVE_TYPES + (options[:skip_models] || [])
29
29
  @path_mapping = options[:path_mapping] || {}
30
30
  @name_mapping = options[:name_mapping] || {}
31
+ @extra_fields = options[:extra_fields] || {}
31
32
  @models = {}
32
33
  @skipped_models = []
33
34
  end
@@ -46,21 +47,12 @@ module PrestoModels
46
47
 
47
48
  private
48
49
 
49
- PROPERTY_PATTERN = /@JsonProperty\(\"(\w+)\"\)\s+(@Nullable\s+)?([\w\<\>\[\]\,\s]+)\s+(\w+)/
50
- CREATOR_PATTERN = /@JsonCreator[\w\s]+\((?:\s*#{PROPERTY_PATTERN}\s*,?)+\)/
50
+ PROPERTY_PATTERN = /@JsonProperty\(\"(\w+)\"\)\s+(@Nullable\s+)?([\w\<\>\[\]\,\s]+)\s+\w+/
51
+ CREATOR_PATTERN = /@JsonCreator[\s]+public[\s]+(static\s+)?(\w+)[\w\s]*\((?:\s*#{PROPERTY_PATTERN}\s*,?)+\)/
51
52
 
52
- def analyze_model(model_name, parent_model = nil)
53
- return if @models[model_name] || @ignore_types.include?(model_name)
54
-
55
- path = find_class_file(model_name, parent_model)
56
- java = File.read(path)
57
-
58
- m = CREATOR_PATTERN.match(java)
59
- unless m
60
- raise ModelAnalysisError, "Can't find JsonCreator of a model class #{model_name} of #{parent_model} at #{path}"
61
- end
62
-
63
- fields = m[0].scan(PROPERTY_PATTERN).map do |key,nullable,type,field|
53
+ def analyze_fields(model_name, creator_block)
54
+ extra = @extra_fields[model_name] || []
55
+ fields = creator_block.scan(PROPERTY_PATTERN).concat(extra).map do |key,nullable,type|
64
56
  map = false
65
57
  array = false
66
58
  nullable = !!nullable
@@ -91,13 +83,39 @@ module PrestoModels
91
83
  end
92
84
 
93
85
  @models[model_name] = Model.new(model_name, fields)
94
-
95
86
  # recursive call
96
87
  fields.each do |field|
97
88
  analyze_model(field.base_type, model_name)
98
89
  analyze_model(field.map_value_base_type, model_name) if field.map_value_base_type
99
90
  end
100
91
 
92
+ return fields
93
+ end
94
+
95
+ def analyze_model(model_name, parent_model = nil)
96
+ return if @models[model_name] || @ignore_types.include?(model_name)
97
+
98
+ path = find_class_file(model_name, parent_model)
99
+ java = File.read(path)
100
+
101
+ m = CREATOR_PATTERN.match(java)
102
+ unless m
103
+ raise ModelAnalysisError, "Can't find JsonCreator of a model class #{model_name} of #{parent_model} at #{path}"
104
+ end
105
+
106
+ body = m[0]
107
+ # check inner class first
108
+ while true
109
+ offset = m.end(0)
110
+ m = CREATOR_PATTERN.match(java, offset)
111
+ break unless m
112
+ inner_model_name = m[2]
113
+ next if @models[inner_model_name] || @ignore_types.include?(inner_model_name)
114
+ fields = analyze_fields(inner_model_name, m[0])
115
+ end
116
+
117
+ fields = analyze_fields(model_name, body)
118
+
101
119
  rescue => e
102
120
  puts "Skipping model #{parent_model}/#{model_name}: #{e}"
103
121
  @skipped_models << model_name
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.5
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2017-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  requirements: []
184
184
  rubyforge_project:
185
- rubygems_version: 2.6.11
185
+ rubygems_version: 2.6.10
186
186
  signing_key:
187
187
  specification_version: 4
188
188
  summary: Presto client library