presto-client 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjgzOWE1ZjExOWQzMWUxZmFiZTgwODcyYzMyZTMyNzcyZDkyYWI4Nw==
5
- data.tar.gz: !binary |-
6
- NmU2YzJlZDBmN2ZmYzAxNzJhMmY4N2I1NGMyNGE5N2U4MzQzYzkxYg==
2
+ SHA1:
3
+ metadata.gz: c6de2a573aa133bee0d1d9401b019c1740152625
4
+ data.tar.gz: f956e6bbf6bdb2692b2da104aaccb67a0fcb01e8
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- N2U2ZTNkOWVjZmEyZWZjOGVhMTA4M2FhYWU2YTBkZGY1ZDE5Yjg0YTU4Njc3
10
- ZWMzOWU2NjQzODViYjhiOGFkZGY0MmY4YjI1ZTk4MmY3ZmE5NmM1ZDQyZjAz
11
- MjY1Mjc2MGVlN2M2ZDE5OWI2YzIxNzQwMGU3OTE0MGQ2M2FhY2M=
12
- data.tar.gz: !binary |-
13
- OTAzNjk1ZDEyNDc0NTljZjNkMWM0ZGJkYzk1N2JmOTRmZDcwZGQ5MTQ2YWQw
14
- MjQ5NDA3MTc0MDZjNjJkMGIxNWNmYWU5ZGFiYTY0NTk4MzkxNTEyMWRmYTdh
15
- OTAxYzJiNTNiNDFkYjQ5MGUxNGVkMDY1ZmRiZjQ4M2RiN2QyMzA=
6
+ metadata.gz: 08efdcb4b4da96bfeeb0f52886c8290645233ff58dde635ff8a82a14ce0b13e57879612ca413ea4a5333b7e174519fafe0720d4204a58a357d23fa22b8750d70
7
+ data.tar.gz: 2fcdfcf3f3ad2f627b6a2577864f61c7d0f2d9c0801d5d5bd2286f95da8a3c3f976f9028b5bf6ea01bedf9f3cc18c1e5bfaac780a14ef08157dca2191a509708
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  task :default => [:spec, :build]
14
14
 
15
- GEN_MODELS_VERSION = "0.99"
15
+ GEN_MODELS_VERSION = "0.113"
16
16
 
17
17
  task :modelgen do
18
18
  unless Dir.exists?("presto-#{GEN_MODELS_VERSION}")
@@ -77,6 +77,9 @@ module Presto::Client
77
77
  class PlanFragmentId < String
78
78
  end
79
79
 
80
+ class MemoryPoolId < String
81
+ end
82
+
80
83
  class ConnectorSession < Hash
81
84
  def initialize(hash)
82
85
  super()
@@ -167,6 +170,22 @@ module Presto::Client
167
170
  end
168
171
  end
169
172
 
173
+ # A missing JsonCreator in Presto
174
+ class << PageBufferInfo =
175
+ Base.new(:partition, :buffered_pages, :queued_pages, :buffered_bytes, :pages_added)
176
+ def decode(hash)
177
+ obj = allocate
178
+ obj.send(:initialize_struct,
179
+ hash["partition"],
180
+ hash["bufferedPages"],
181
+ hash["queuedPages"],
182
+ hash["bufferedBytes"],
183
+ hash["pagesAdded"],
184
+ )
185
+ obj
186
+ end
187
+ end
188
+
170
189
  ##
171
190
  # Those model classes are automatically generated
172
191
  #
@@ -192,7 +211,7 @@ module Presto::Client
192
211
  end
193
212
 
194
213
  class << BufferInfo =
195
- Base.new(:buffer_id, :finished, :buffered_pages, :pages_sent)
214
+ Base.new(:buffer_id, :finished, :buffered_pages, :pages_sent, :page_buffer_info)
196
215
  def decode(hash)
197
216
  obj = allocate
198
217
  obj.send(:initialize_struct,
@@ -200,44 +219,70 @@ module Presto::Client
200
219
  hash["finished"],
201
220
  hash["bufferedPages"],
202
221
  hash["pagesSent"],
222
+ hash["pageBufferInfo"] && PageBufferInfo.decode(hash["pageBufferInfo"]),
203
223
  )
204
224
  obj
205
225
  end
206
226
  end
207
227
 
208
- class << ClientTypeSignature =
209
- Base.new(:raw_type, :type_arguments, :literal_arguments)
228
+ class << ClientColumn =
229
+ Base.new(:name, :type, :type_signature)
210
230
  def decode(hash)
211
231
  obj = allocate
212
232
  obj.send(:initialize_struct,
213
- hash["rawType"],
214
- hash["typeArguments"] && hash["typeArguments"].map {|h| ClientTypeSignature.decode(h) },
215
- hash["literalArguments"],
233
+ hash["name"],
234
+ hash["type"],
235
+ hash["typeSignature"] && ClientTypeSignature.decode(hash["typeSignature"]),
216
236
  )
217
237
  obj
218
238
  end
219
239
  end
220
240
 
221
- class << Column =
222
- Base.new(:name, :type, :type_signature)
241
+ class << ClientStageStats =
242
+ Base.new(:stage_id, :state, :done, :nodes, :total_splits, :queued_splits, :running_splits, :completed_splits, :user_time_millis, :cpu_time_millis, :wall_time_millis, :processed_rows, :processed_bytes, :sub_stages)
223
243
  def decode(hash)
224
244
  obj = allocate
225
245
  obj.send(:initialize_struct,
226
- hash["name"],
227
- hash["type"],
228
- hash["typeSignature"] && ClientTypeSignature.decode(hash["typeSignature"]),
246
+ hash["stageId"],
247
+ hash["state"],
248
+ hash["done"],
249
+ hash["nodes"],
250
+ hash["totalSplits"],
251
+ hash["queuedSplits"],
252
+ hash["runningSplits"],
253
+ hash["completedSplits"],
254
+ hash["userTimeMillis"],
255
+ hash["cpuTimeMillis"],
256
+ hash["wallTimeMillis"],
257
+ hash["processedRows"],
258
+ hash["processedBytes"],
259
+ hash["subStages"] && hash["subStages"].map {|h| ClientStageStats.decode(h) },
229
260
  )
230
261
  obj
231
262
  end
232
263
  end
233
264
 
234
- class << ColumnHandle =
235
- Base.new(:connector_id, :connector_handle)
265
+ class << ClientTypeSignature =
266
+ Base.new(:raw_type, :type_arguments, :literal_arguments)
236
267
  def decode(hash)
237
268
  obj = allocate
238
269
  obj.send(:initialize_struct,
239
- hash["connectorId"],
240
- hash["connectorHandle"],
270
+ hash["rawType"],
271
+ hash["typeArguments"] && hash["typeArguments"].map {|h| ClientTypeSignature.decode(h) },
272
+ hash["literalArguments"],
273
+ )
274
+ obj
275
+ end
276
+ end
277
+
278
+ class << Column =
279
+ Base.new(:name, :type, :domain)
280
+ def decode(hash)
281
+ obj = allocate
282
+ obj.send(:initialize_struct,
283
+ hash["name"],
284
+ hash["type"],
285
+ hash["domain"] && SimpleDomain.decode(hash["domain"]),
241
286
  )
242
287
  obj
243
288
  end
@@ -258,7 +303,7 @@ module Presto::Client
258
303
  end
259
304
 
260
305
  class << DriverStats =
261
- Base.new(:create_time, :start_time, :end_time, :queued_time, :elapsed_time, :memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :raw_input_data_size, :raw_input_positions, :raw_input_read_time, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :operator_stats)
306
+ Base.new(:create_time, :start_time, :end_time, :queued_time, :elapsed_time, :memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :fully_blocked, :blocked_reasons, :raw_input_data_size, :raw_input_positions, :raw_input_read_time, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :operator_stats)
262
307
  def decode(hash)
263
308
  obj = allocate
264
309
  obj.send(:initialize_struct,
@@ -272,6 +317,8 @@ module Presto::Client
272
317
  hash["totalCpuTime"],
273
318
  hash["totalUserTime"],
274
319
  hash["totalBlockedTime"],
320
+ hash["fullyBlocked"],
321
+ hash["blockedReasons"] && hash["blockedReasons"].map {|h| h.downcase.to_sym },
275
322
  hash["rawInputDataSize"],
276
323
  hash["rawInputPositions"],
277
324
  hash["rawInputReadTime"],
@@ -411,7 +458,8 @@ module Presto::Client
411
458
  hash["tableHandle"] && TableHandle.decode(hash["tableHandle"]),
412
459
  hash["lookupSymbols"],
413
460
  hash["outputSymbols"],
414
- hash["assignments"] && Hash[hash["assignments"].to_a.map! {|k,v| [k, ColumnHandle.decode(v)] }],
461
+ hash["assignments"],
462
+ hash["effectiveTupleDomain"],
415
463
  )
416
464
  obj
417
465
  end
@@ -489,7 +537,7 @@ module Presto::Client
489
537
  end
490
538
 
491
539
  class << OperatorStats =
492
- Base.new(:operator_id, :operator_type, :add_input_calls, :add_input_wall, :add_input_cpu, :add_input_user, :input_data_size, :input_positions, :get_output_calls, :get_output_wall, :get_output_cpu, :get_output_user, :output_data_size, :output_positions, :blocked_wall, :finish_calls, :finish_wall, :finish_cpu, :finish_user, :memory_reservation, :info)
540
+ Base.new(:operator_id, :operator_type, :add_input_calls, :add_input_wall, :add_input_cpu, :add_input_user, :input_data_size, :input_positions, :get_output_calls, :get_output_wall, :get_output_cpu, :get_output_user, :output_data_size, :output_positions, :blocked_wall, :finish_calls, :finish_wall, :finish_cpu, :finish_user, :memory_reservation, :blocked_reason, :info)
493
541
  def decode(hash)
494
542
  obj = allocate
495
543
  obj.send(:initialize_struct,
@@ -513,6 +561,7 @@ module Presto::Client
513
561
  hash["finishCpu"],
514
562
  hash["finishUser"],
515
563
  hash["memoryReservation"],
564
+ hash["blockedReason"] && BlockedReason.decode(hash["blockedReason"]),
516
565
  hash["info"],
517
566
  )
518
567
  obj
@@ -546,7 +595,7 @@ module Presto::Client
546
595
  end
547
596
 
548
597
  class << PipelineStats =
549
- Base.new(:input_pipeline, :output_pipeline, :total_drivers, :queued_drivers, :queued_partitioned_drivers, :running_drivers, :running_partitioned_drivers, :completed_drivers, :memory_reservation, :queued_time, :elapsed_time, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :operator_summaries, :drivers)
598
+ Base.new(:input_pipeline, :output_pipeline, :total_drivers, :queued_drivers, :queued_partitioned_drivers, :running_drivers, :running_partitioned_drivers, :completed_drivers, :memory_reservation, :queued_time, :elapsed_time, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :fully_blocked, :blocked_reasons, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :operator_summaries, :drivers)
550
599
  def decode(hash)
551
600
  obj = allocate
552
601
  obj.send(:initialize_struct,
@@ -565,6 +614,8 @@ module Presto::Client
565
614
  hash["totalCpuTime"],
566
615
  hash["totalUserTime"],
567
616
  hash["totalBlockedTime"],
617
+ hash["fullyBlocked"],
618
+ hash["blockedReasons"] && hash["blockedReasons"].map {|h| h.downcase.to_sym },
568
619
  hash["rawInputDataSize"],
569
620
  hash["rawInputPositions"],
570
621
  hash["processedInputDataSize"],
@@ -579,7 +630,7 @@ module Presto::Client
579
630
  end
580
631
 
581
632
  class << PlanFragment =
582
- Base.new(:id, :root, :symbols, :output_layout, :distribution, :partitioned_source, :output_partitioning, :partition_by, :hash)
633
+ Base.new(:id, :root, :symbols, :output_layout, :distribution, :partitioned_source, :output_partitioning, :partition_by, :null_partition_policy, :hash)
583
634
  def decode(hash)
584
635
  obj = allocate
585
636
  obj.send(:initialize_struct,
@@ -591,6 +642,7 @@ module Presto::Client
591
642
  hash["partitionedSource"] && PlanNodeId.new(hash["partitionedSource"]),
592
643
  hash["outputPartitioning"] && hash["outputPartitioning"].downcase.to_sym,
593
644
  hash["partitionBy"],
645
+ hash["nullPartitionPolicy"] && NullPartitioning.decode(hash["nullPartitionPolicy"]),
594
646
  hash["hash"],
595
647
  )
596
648
  obj
@@ -611,13 +663,15 @@ module Presto::Client
611
663
  end
612
664
 
613
665
  class << QueryError =
614
- Base.new(:message, :sql_state, :error_code, :error_location, :failure_info)
666
+ Base.new(:message, :sql_state, :error_code, :error_name, :error_type, :error_location, :failure_info)
615
667
  def decode(hash)
616
668
  obj = allocate
617
669
  obj.send(:initialize_struct,
618
670
  hash["message"],
619
671
  hash["sqlState"],
620
672
  hash["errorCode"],
673
+ hash["errorName"],
674
+ hash["errorType"],
621
675
  hash["errorLocation"] && ErrorLocation.decode(hash["errorLocation"]),
622
676
  hash["failureInfo"] && FailureInfo.decode(hash["failureInfo"]),
623
677
  )
@@ -626,13 +680,14 @@ module Presto::Client
626
680
  end
627
681
 
628
682
  class << QueryInfo =
629
- Base.new(:query_id, :session, :state, :scheduled, :self, :field_names, :query, :query_stats, :set_session_properties, :reset_session_properties, :update_type, :output_stage, :failure_info, :error_code, :inputs)
683
+ Base.new(:query_id, :session, :state, :memory_pool, :scheduled, :self, :field_names, :query, :query_stats, :set_session_properties, :reset_session_properties, :update_type, :output_stage, :failure_info, :error_code, :inputs)
630
684
  def decode(hash)
631
685
  obj = allocate
632
686
  obj.send(:initialize_struct,
633
687
  hash["queryId"] && QueryId.new(hash["queryId"]),
634
- hash["session"] && Session.decode(hash["session"]),
688
+ hash["session"] && SessionRepresentation.decode(hash["session"]),
635
689
  hash["state"] && hash["state"].downcase.to_sym,
690
+ hash["memoryPool"] && MemoryPoolId.new(hash["memoryPool"]),
636
691
  hash["scheduled"],
637
692
  hash["self"],
638
693
  hash["fieldNames"],
@@ -659,7 +714,7 @@ module Presto::Client
659
714
  hash["infoUri"],
660
715
  hash["partialCancelUri"],
661
716
  hash["nextUri"],
662
- hash["columns"] && hash["columns"].map {|h| Column.decode(h) },
717
+ hash["columns"] && hash["columns"].map {|h| ClientColumn.decode(h) },
663
718
  hash["data"],
664
719
  hash["stats"] && StatementStats.decode(hash["stats"]),
665
720
  hash["error"] && QueryError.decode(hash["error"]),
@@ -671,7 +726,7 @@ module Presto::Client
671
726
  end
672
727
 
673
728
  class << QueryStats =
674
- Base.new(:create_time, :execution_start_time, :last_heartbeat, :end_time, :elapsed_time, :queued_time, :analysis_time, :distributed_planning_time, :total_planning_time, :total_tasks, :running_tasks, :completed_tasks, :total_drivers, :queued_drivers, :running_drivers, :completed_drivers, :total_memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions)
729
+ Base.new(:create_time, :execution_start_time, :last_heartbeat, :end_time, :elapsed_time, :queued_time, :analysis_time, :distributed_planning_time, :total_planning_time, :total_tasks, :running_tasks, :completed_tasks, :total_drivers, :queued_drivers, :running_drivers, :completed_drivers, :total_memory_reservation, :peak_memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :fully_blocked, :blocked_reasons, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions)
675
730
  def decode(hash)
676
731
  obj = allocate
677
732
  obj.send(:initialize_struct,
@@ -692,10 +747,13 @@ module Presto::Client
692
747
  hash["runningDrivers"],
693
748
  hash["completedDrivers"],
694
749
  hash["totalMemoryReservation"],
750
+ hash["peakMemoryReservation"],
695
751
  hash["totalScheduledTime"],
696
752
  hash["totalCpuTime"],
697
753
  hash["totalUserTime"],
698
754
  hash["totalBlockedTime"],
755
+ hash["fullyBlocked"],
756
+ hash["blockedReasons"] && hash["blockedReasons"].map {|h| h.downcase.to_sym },
699
757
  hash["rawInputDataSize"],
700
758
  hash["rawInputPositions"],
701
759
  hash["processedInputDataSize"],
@@ -754,7 +812,7 @@ module Presto::Client
754
812
  end
755
813
  end
756
814
 
757
- class << Session =
815
+ class << SessionRepresentation =
758
816
  Base.new(:user, :source, :catalog, :schema, :time_zone_key, :locale, :remote_user_address, :user_agent, :start_time, :system_properties, :catalog_properties)
759
817
  def decode(hash)
760
818
  obj = allocate
@@ -776,13 +834,17 @@ module Presto::Client
776
834
  end
777
835
 
778
836
  class << SharedBufferInfo =
779
- Base.new(:state, :master_sequence_id, :pages_added, :buffers)
837
+ Base.new(:state, :can_add_buffers, :can_add_pages, :total_buffered_bytes, :total_buffered_pages, :total_queued_pages, :total_pages_sent, :buffers)
780
838
  def decode(hash)
781
839
  obj = allocate
782
840
  obj.send(:initialize_struct,
783
841
  hash["state"] && hash["state"].downcase.to_sym,
784
- hash["masterSequenceId"],
785
- hash["pagesAdded"],
842
+ hash["canAddBuffers"],
843
+ hash["canAddPages"],
844
+ hash["totalBufferedBytes"],
845
+ hash["totalBufferedPages"],
846
+ hash["totalQueuedPages"],
847
+ hash["totalPagesSent"],
786
848
  hash["buffers"] && hash["buffers"].map {|h| BufferInfo.decode(h) },
787
849
  )
788
850
  obj
@@ -805,6 +867,42 @@ module Presto::Client
805
867
  end
806
868
  end
807
869
 
870
+ class << SimpleDomain =
871
+ Base.new(:null_allowed, :ranges)
872
+ def decode(hash)
873
+ obj = allocate
874
+ obj.send(:initialize_struct,
875
+ hash["nullAllowed"],
876
+ hash["ranges"] && hash["ranges"].map {|h| SimpleRange.decode(h) },
877
+ )
878
+ obj
879
+ end
880
+ end
881
+
882
+ class << SimpleMarker =
883
+ Base.new(:inclusive, :value)
884
+ def decode(hash)
885
+ obj = allocate
886
+ obj.send(:initialize_struct,
887
+ hash["inclusive"],
888
+ hash["value"],
889
+ )
890
+ obj
891
+ end
892
+ end
893
+
894
+ class << SimpleRange =
895
+ Base.new(:low, :high)
896
+ def decode(hash)
897
+ obj = allocate
898
+ obj.send(:initialize_struct,
899
+ hash["low"] && SimpleMarker.decode(hash["low"]),
900
+ hash["high"] && SimpleMarker.decode(hash["high"]),
901
+ )
902
+ obj
903
+ end
904
+ end
905
+
808
906
  class << SortNode =
809
907
  Base.new(:id, :source, :order_by, :orderings)
810
908
  def decode(hash)
@@ -820,7 +918,7 @@ module Presto::Client
820
918
  end
821
919
 
822
920
  class << StageInfo =
823
- Base.new(:stage_id, :state, :self, :plan, :types, :stage_stats, :tasks, :sub_stages, :failures)
921
+ Base.new(:stage_id, :state, :self, :plan, :types, :stage_stats, :tasks, :sub_stages, :failure_cause)
824
922
  def decode(hash)
825
923
  obj = allocate
826
924
  obj.send(:initialize_struct,
@@ -832,31 +930,41 @@ module Presto::Client
832
930
  hash["stageStats"] && StageStats.decode(hash["stageStats"]),
833
931
  hash["tasks"] && hash["tasks"].map {|h| TaskInfo.decode(h) },
834
932
  hash["subStages"] && hash["subStages"].map {|h| StageInfo.decode(h) },
835
- hash["failures"] && hash["failures"].map {|h| ExecutionFailureInfo.decode(h) },
933
+ hash["failureCause"] && ExecutionFailureInfo.decode(hash["failureCause"]),
836
934
  )
837
935
  obj
838
936
  end
839
937
  end
840
938
 
841
939
  class << StageStats =
842
- Base.new(:stage_id, :state, :done, :nodes, :total_splits, :queued_splits, :running_splits, :completed_splits, :user_time_millis, :cpu_time_millis, :wall_time_millis, :processed_rows, :processed_bytes, :sub_stages)
940
+ Base.new(:scheduling_complete, :get_split_distribution, :schedule_task_distribution, :add_split_distribution, :total_tasks, :running_tasks, :completed_tasks, :total_drivers, :queued_drivers, :running_drivers, :completed_drivers, :total_memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :fully_blocked, :blocked_reasons, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions)
843
941
  def decode(hash)
844
942
  obj = allocate
845
943
  obj.send(:initialize_struct,
846
- hash["stageId"],
847
- hash["state"],
848
- hash["done"],
849
- hash["nodes"],
850
- hash["totalSplits"],
851
- hash["queuedSplits"],
852
- hash["runningSplits"],
853
- hash["completedSplits"],
854
- hash["userTimeMillis"],
855
- hash["cpuTimeMillis"],
856
- hash["wallTimeMillis"],
857
- hash["processedRows"],
858
- hash["processedBytes"],
859
- hash["subStages"] && hash["subStages"].map {|h| StageStats.decode(h) },
944
+ hash["schedulingComplete"],
945
+ hash["getSplitDistribution"] && DistributionSnapshot.decode(hash["getSplitDistribution"]),
946
+ hash["scheduleTaskDistribution"] && DistributionSnapshot.decode(hash["scheduleTaskDistribution"]),
947
+ hash["addSplitDistribution"] && DistributionSnapshot.decode(hash["addSplitDistribution"]),
948
+ hash["totalTasks"],
949
+ hash["runningTasks"],
950
+ hash["completedTasks"],
951
+ hash["totalDrivers"],
952
+ hash["queuedDrivers"],
953
+ hash["runningDrivers"],
954
+ hash["completedDrivers"],
955
+ hash["totalMemoryReservation"],
956
+ hash["totalScheduledTime"],
957
+ hash["totalCpuTime"],
958
+ hash["totalUserTime"],
959
+ hash["totalBlockedTime"],
960
+ hash["fullyBlocked"],
961
+ hash["blockedReasons"] && hash["blockedReasons"].map {|h| h.downcase.to_sym },
962
+ hash["rawInputDataSize"],
963
+ hash["rawInputPositions"],
964
+ hash["processedInputDataSize"],
965
+ hash["processedInputPositions"],
966
+ hash["outputDataSize"],
967
+ hash["outputPositions"],
860
968
  )
861
969
  obj
862
970
  end
@@ -879,7 +987,7 @@ module Presto::Client
879
987
  hash["wallTimeMillis"],
880
988
  hash["processedRows"],
881
989
  hash["processedBytes"],
882
- hash["rootStage"] && StageStats.decode(hash["rootStage"]),
990
+ hash["rootStage"] && ClientStageStats.decode(hash["rootStage"]),
883
991
  )
884
992
  obj
885
993
  end
@@ -911,15 +1019,29 @@ module Presto::Client
911
1019
  end
912
1020
  end
913
1021
 
1022
+ class << TableLayoutHandle =
1023
+ Base.new(:connector_id, :connector_handle)
1024
+ def decode(hash)
1025
+ obj = allocate
1026
+ obj.send(:initialize_struct,
1027
+ hash["connectorId"],
1028
+ hash["connectorHandle"],
1029
+ )
1030
+ obj
1031
+ end
1032
+ end
1033
+
914
1034
  class << TableScanNode =
915
- Base.new(:id, :table, :output_symbols, :assignments, :original_constraint)
1035
+ Base.new(:id, :table, :output_symbols, :assignments, :layout, :current_constraint, :original_constraint)
916
1036
  def decode(hash)
917
1037
  obj = allocate
918
1038
  obj.send(:initialize_struct,
919
1039
  hash["id"] && PlanNodeId.new(hash["id"]),
920
1040
  hash["table"] && TableHandle.decode(hash["table"]),
921
1041
  hash["outputSymbols"],
922
- hash["assignments"] && Hash[hash["assignments"].to_a.map! {|k,v| [k, ColumnHandle.decode(v)] }],
1042
+ hash["assignments"],
1043
+ hash["layout"] && TableLayoutHandle.decode(hash["layout"]),
1044
+ hash["currentConstraint"],
923
1045
  hash["originalConstraint"],
924
1046
  )
925
1047
  obj
@@ -964,7 +1086,7 @@ module Presto::Client
964
1086
  end
965
1087
 
966
1088
  class << TaskStats =
967
- Base.new(:create_time, :first_start_time, :last_start_time, :end_time, :elapsed_time, :queued_time, :total_drivers, :queued_drivers, :queued_partitioned_drivers, :running_drivers, :running_partitioned_drivers, :completed_drivers, :memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :pipelines)
1089
+ Base.new(:create_time, :first_start_time, :last_start_time, :end_time, :elapsed_time, :queued_time, :total_drivers, :queued_drivers, :queued_partitioned_drivers, :running_drivers, :running_partitioned_drivers, :completed_drivers, :memory_reservation, :total_scheduled_time, :total_cpu_time, :total_user_time, :total_blocked_time, :fully_blocked, :blocked_reasons, :raw_input_data_size, :raw_input_positions, :processed_input_data_size, :processed_input_positions, :output_data_size, :output_positions, :pipelines)
968
1090
  def decode(hash)
969
1091
  obj = allocate
970
1092
  obj.send(:initialize_struct,
@@ -985,6 +1107,8 @@ module Presto::Client
985
1107
  hash["totalCpuTime"],
986
1108
  hash["totalUserTime"],
987
1109
  hash["totalBlockedTime"],
1110
+ hash["fullyBlocked"],
1111
+ hash["blockedReasons"] && hash["blockedReasons"].map {|h| h.downcase.to_sym },
988
1112
  hash["rawInputDataSize"],
989
1113
  hash["rawInputPositions"],
990
1114
  hash["processedInputDataSize"],
@@ -1041,7 +1165,7 @@ module Presto::Client
1041
1165
  end
1042
1166
 
1043
1167
  class << WindowNode =
1044
- Base.new(:id, :source, :partition_by, :order_by, :orderings, :frame, :window_functions, :signatures, :hash_symbol)
1168
+ Base.new(:id, :source, :partition_by, :order_by, :orderings, :frame, :window_functions, :signatures, :hash_symbol, :pre_partitioned_inputs, :pre_sorted_order_prefix)
1045
1169
  def decode(hash)
1046
1170
  obj = allocate
1047
1171
  obj.send(:initialize_struct,
@@ -1054,6 +1178,8 @@ module Presto::Client
1054
1178
  hash["windowFunctions"],
1055
1179
  hash["signatures"] && Hash[hash["signatures"].to_a.map! {|k,v| [k, Signature.decode(v)] }],
1056
1180
  hash["hashSymbol"],
1181
+ hash["prePartitionedInputs"],
1182
+ hash["preSortedOrderPrefix"],
1057
1183
  )
1058
1184
  obj
1059
1185
  end
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.4.5"
18
+ VERSION = "0.4.6"
19
19
  end
20
20
  end
data/modelgen/modelgen.rb CHANGED
@@ -12,11 +12,11 @@ erb = ERB.new(File.read(template_path))
12
12
 
13
13
  source_path = source_dir
14
14
 
15
- predefined_simple_classes = %w[QueryId StageId TaskId PlanNodeId PlanFragmentId ConnectorSession]
16
- predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget]
15
+ predefined_simple_classes = %w[QueryId StageId TaskId PlanNodeId PlanFragmentId MemoryPoolId ConnectorSession]
16
+ predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget PageBufferInfo]
17
17
 
18
- assume_primitive = %w[Object Type Long Symbol URI Duration DataSize DateTime ConnectorTableHandle ConnectorOutputTableHandle ConnectorIndexHandle ConnectorColumnHandle ConnectorInsertTableHandle Expression FunctionCall TimeZoneKey Locale TypeSignature Frame]
19
- enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder BufferState]
18
+ assume_primitive = %w[Object Type Long Symbol URI Duration DataSize DateTime ColumnHandle ConnectorTableHandle ConnectorOutputTableHandle ConnectorIndexHandle ConnectorColumnHandle ConnectorInsertTableHandle ConnectorTableLayoutHandle Expression FunctionCall TimeZoneKey Locale TypeSignature Frame TupleDomain<ColumnHandle> SerializableNativeValue]
19
+ enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder BufferState NullPartitioning BlockedReason]
20
20
 
21
21
  root_models = %w[QueryResults QueryInfo] + %w[
22
22
  OutputNode
@@ -42,9 +42,25 @@ TableWriterNode
42
42
  TableCommitNode
43
43
  ] + %w[InsertTableHandle OutputTableHandle]
44
44
 
45
+ name_mapping = Hash[*%w[
46
+ StatementStats StageStats ClientStageStats
47
+ ClientStageStats StageStats ClientStageStats
48
+ QueryResults Column ClientColumn
49
+ ].each_slice(3).map { |x, y, z| [[x,y], z] }.flatten(1)]
50
+
51
+ path_mapping = Hash[*%w[
52
+ ClientColumn presto-client/src/main/java/com/facebook/presto/client/Column.java
53
+ ClientStageStats presto-client/src/main/java/com/facebook/presto/client/StageStats.java
54
+ Column presto-main/src/main/java/com/facebook/presto/execution/Column.java
55
+ QueryStats presto-main/src/main/java/com/facebook/presto/execution/QueryStats.java
56
+ StageStats presto-main/src/main/java/com/facebook/presto/execution/StageStats.java
57
+ ].map.with_index { |v,i| i % 2 == 0 ? v : (source_path + "/" + v) }]
58
+
45
59
  analyzer = PrestoModels::ModelAnalyzer.new(
46
60
  source_path,
47
- skip_models: predefined_models + predefined_simple_classes + assume_primitive + enum_types
61
+ skip_models: predefined_models + predefined_simple_classes + assume_primitive + enum_types,
62
+ path_mapping: path_mapping,
63
+ name_mapping: name_mapping
48
64
  )
49
65
  analyzer.analyze(root_models)
50
66
  models = analyzer.models
data/modelgen/models.rb CHANGED
@@ -77,6 +77,9 @@ module Presto::Client
77
77
  class PlanFragmentId < String
78
78
  end
79
79
 
80
+ class MemoryPoolId < String
81
+ end
82
+
80
83
  class ConnectorSession < Hash
81
84
  def initialize(hash)
82
85
  super()
@@ -167,6 +170,22 @@ module Presto::Client
167
170
  end
168
171
  end
169
172
 
173
+ # A missing JsonCreator in Presto
174
+ class << PageBufferInfo =
175
+ Base.new(:partition, :buffered_pages, :queued_pages, :buffered_bytes, :pages_added)
176
+ def decode(hash)
177
+ obj = allocate
178
+ obj.send(:initialize_struct,
179
+ hash["partition"],
180
+ hash["bufferedPages"],
181
+ hash["queuedPages"],
182
+ hash["bufferedBytes"],
183
+ hash["pagesAdded"],
184
+ )
185
+ obj
186
+ end
187
+ end
188
+
170
189
  ##
171
190
  # Those model classes are automatically generated
172
191
  #
@@ -25,6 +25,8 @@ module PrestoModels
25
25
  def initialize(source_path, options={})
26
26
  @source_path = source_path
27
27
  @ignore_types = PRIMITIVE_TYPES + (options[:skip_models] || [])
28
+ @path_mapping = options[:path_mapping] || {}
29
+ @name_mapping = options[:name_mapping] || {}
28
30
  @models = {}
29
31
  @skipped_models = []
30
32
  end
@@ -46,15 +48,15 @@ module PrestoModels
46
48
  PROPERTY_PATTERN = /@JsonProperty\(\"(\w+)\"\)\s+(@Nullable\s+)?([\w\<\>\,\s]+)\s+(\w+)/
47
49
  CREATOR_PATTERN = /@JsonCreator[\w\s]+\((?:\s*#{PROPERTY_PATTERN}\s*,?)+\)/
48
50
 
49
- def analyze_model(model_name)
51
+ def analyze_model(model_name, parent_model = nil)
50
52
  return if @models[model_name] || @ignore_types.include?(model_name)
51
53
 
52
- path = find_class_file(model_name)
54
+ path = find_class_file(model_name, parent_model)
53
55
  java = File.read(path)
54
56
 
55
57
  m = CREATOR_PATTERN.match(java)
56
58
  unless m
57
- raise ModelAnalysisError, "Can't find JsonCreator of a model class #{model_name}"
59
+ raise ModelAnalysisError, "Can't find JsonCreator of a model class #{model_name} of #{parent_model} at #{path}"
58
60
  end
59
61
 
60
62
  fields = m[0].scan(PROPERTY_PATTERN).map do |key,nullable,type,field|
@@ -76,6 +78,8 @@ module PrestoModels
76
78
  else
77
79
  raise ModelAnalysisError, "Unsupported type #{type} in model #{model_name}"
78
80
  end
81
+ base_type = @name_mapping[[model_name, base_type]] || base_type
82
+ map_value_base_type = @name_mapping[[model_name, map_value_base_type]] || map_value_base_type
79
83
  Field.new(key, !!nullable, array, map, type, base_type, map_value_base_type)
80
84
  end
81
85
 
@@ -83,8 +87,8 @@ module PrestoModels
83
87
 
84
88
  # recursive call
85
89
  fields.each do |field|
86
- analyze_model(field.base_type)
87
- analyze_model(field.map_value_base_type) if field.map_value_base_type
90
+ analyze_model(field.base_type, model_name)
91
+ analyze_model(field.map_value_base_type, model_name) if field.map_value_base_type
88
92
  end
89
93
 
90
94
  rescue => e
@@ -92,14 +96,20 @@ module PrestoModels
92
96
  @skipped_models << model_name
93
97
  end
94
98
 
95
- def find_class_file(model_name)
99
+ def find_class_file(model_name, parent_model)
100
+ return @path_mapping[model_name] if @path_mapping.has_key? model_name
101
+
96
102
  @source_files ||= Find.find(@source_path).to_a
97
103
  pattern = /\/#{model_name}.java$/
98
- matched = @source_files.find {|path| path =~ pattern }
99
- unless matched
104
+ matched = @source_files.find_all {|path| path =~ pattern }
105
+ if matched.empty?
100
106
  raise ModelAnalysisError, "Model class #{model_name} is not found"
101
107
  end
102
- return matched
108
+ if matched.size == 1
109
+ return matched.first
110
+ else
111
+ raise ModelAnalysisError, "Model class #{model_name} of #{parent_model} found multiple match #{matched}"
112
+ end
103
113
  end
104
114
  end
105
115
 
metadata CHANGED
@@ -1,89 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.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: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.8.8
20
- - - <
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.10.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ! '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.8.8
30
- - - <
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.10.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: multi_json
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ~>
37
+ - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.0'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ~>
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1.0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ! '>='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: 0.9.2
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ! '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 0.9.2
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: 2.13.0
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 2.13.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: webmock
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: 1.16.1
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ~>
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: 1.16.1
89
89
  description: Presto client library
@@ -93,7 +93,7 @@ executables: []
93
93
  extensions: []
94
94
  extra_rdoc_files: []
95
95
  files:
96
- - .gitignore
96
+ - ".gitignore"
97
97
  - ChangeLog
98
98
  - Gemfile
99
99
  - README.md
@@ -122,21 +122,20 @@ require_paths:
122
122
  - lib
123
123
  required_ruby_version: !ruby/object:Gem::Requirement
124
124
  requirements:
125
- - - ! '>='
125
+ - - ">="
126
126
  - !ruby/object:Gem::Version
127
127
  version: 1.9.1
128
128
  required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ! '>='
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  requirements: []
134
134
  rubyforge_project:
135
- rubygems_version: 2.2.2
135
+ rubygems_version: 2.4.5
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Presto client library
139
139
  test_files:
140
140
  - spec/spec_helper.rb
141
141
  - spec/statement_client_spec.rb
142
- has_rdoc: false