presto-client 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjJiOTFmZDNlNzFmYzlkM2ZkMmE1ZGJkMDkzMjVkMjc5MjA3YzcyMg==
4
+ MjgzOWE1ZjExOWQzMWUxZmFiZTgwODcyYzMyZTMyNzcyZDkyYWI4Nw==
5
5
  data.tar.gz: !binary |-
6
- Nzk0NGEzODRlMzBlNjVlNWJkOTZjYWJiZjM2ODc0Y2UxMDBiNGI4Zg==
6
+ NmU2YzJlZDBmN2ZmYzAxNzJhMmY4N2I1NGMyNGE5N2U4MzQzYzkxYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MGZlNzViNTA4OWVjNmQ2MmRkMTBiN2E0MzBiN2RkMTQzZDI5ZWZjZDBjOTU5
10
- ZGU5MGVlZTA4ZjE5OGZkZDYyY2I4ZTY4ZjM0OGUwNmE5MmJlYTBiNjQ2MjE3
11
- YTY4NWZkZTVmYmYwMGM3ODBjMzgwYjBiMTgyMTJkMGMzZjk5MGU=
9
+ N2U2ZTNkOWVjZmEyZWZjOGVhMTA4M2FhYWU2YTBkZGY1ZDE5Yjg0YTU4Njc3
10
+ ZWMzOWU2NjQzODViYjhiOGFkZGY0MmY4YjI1ZTk4MmY3ZmE5NmM1ZDQyZjAz
11
+ MjY1Mjc2MGVlN2M2ZDE5OWI2YzIxNzQwMGU3OTE0MGQ2M2FhY2M=
12
12
  data.tar.gz: !binary |-
13
- NmMzZmM1NjhmNTI5NDEwODA0MWYzYmM0NjlkYmNmOGExMmRkYTY4MWNlZTQy
14
- YzA0ODMyNTE5ZDI5MTQ0ZDQ0ZTk4Yjg5OWNlYTQ4ZTBhZjE0OWIzMDFkZDAz
15
- MjllZTdmM2ZlYzZiNjgwOWFkNmRlZmU5OTEzZTRlN2IzMWIwNzg=
13
+ OTAzNjk1ZDEyNDc0NTljZjNkMWM0ZGJkYzk1N2JmOTRmZDcwZGQ5MTQ2YWQw
14
+ MjQ5NDA3MTc0MDZjNjJkMGIxNWNmYWU5ZGFiYTY0NTk4MzkxNTEyMWRmYTdh
15
+ OTAxYzJiNTNiNDFkYjQ5MGUxNGVkMDY1ZmRiZjQ4M2RiN2QyMzA=
data/ChangeLog CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ 2015-04-01 version 0.4.5:
3
+
4
+ * Upgraded Presto model version to 0.99
5
+
6
+
2
7
  2014-11-20 version 0.4.3:
3
8
 
4
9
  * Updated gem dependency to accept faraday ~> 0.9.x as well as ~> 0.8.8
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  task :default => [:spec, :build]
14
14
 
15
- GEN_MODELS_VERSION = "0.85"
15
+ GEN_MODELS_VERSION = "0.99"
16
16
 
17
17
  task :modelgen do
18
18
  unless Dir.exists?("presto-#{GEN_MODELS_VERSION}")
@@ -102,7 +102,7 @@ module Presto::Client
102
102
  when "sample" then SampleNode
103
103
  when "sort" then SortNode
104
104
  when "exchange" then ExchangeNode
105
- when "sink" then SinkNode
105
+ when "remoteSource" then RemoteSourceNode
106
106
  when "join" then JoinNode
107
107
  when "INNER" then JoinNode
108
108
  when "LEFT" then JoinNode
@@ -155,12 +155,24 @@ module Presto::Client
155
155
  end
156
156
  end
157
157
 
158
+ class << WriterTarget =
159
+ Base.new(:type, :handle)
160
+ def decode(hash)
161
+ obj = allocate
162
+ obj.send(:initialize_struct,
163
+ hash["type"],
164
+ hash["type"] == 'InsertHandle' ? InsertTableHandle.decode(hash['handle']) : OutputTableHandle.decode(hash['handle'])
165
+ )
166
+ obj
167
+ end
168
+ end
169
+
158
170
  ##
159
171
  # Those model classes are automatically generated
160
172
  #
161
173
 
162
174
  class << AggregationNode =
163
- Base.new(:id, :source, :group_by, :aggregations, :functions, :masks, :step, :sample_weight, :confidence)
175
+ Base.new(:id, :source, :group_by, :aggregations, :functions, :masks, :step, :sample_weight, :confidence, :hash_symbol)
164
176
  def decode(hash)
165
177
  obj = allocate
166
178
  obj.send(:initialize_struct,
@@ -173,6 +185,7 @@ module Presto::Client
173
185
  hash["step"] && hash["step"].downcase.to_sym,
174
186
  hash["sampleWeight"],
175
187
  hash["confidence"],
188
+ hash["hashSymbol"],
176
189
  )
177
190
  obj
178
191
  end
@@ -183,7 +196,7 @@ module Presto::Client
183
196
  def decode(hash)
184
197
  obj = allocate
185
198
  obj.send(:initialize_struct,
186
- hash["bufferId"],
199
+ hash["bufferId"] && TaskId.new(hash["bufferId"]),
187
200
  hash["finished"],
188
201
  hash["bufferedPages"],
189
202
  hash["pagesSent"],
@@ -192,13 +205,27 @@ module Presto::Client
192
205
  end
193
206
  end
194
207
 
208
+ class << ClientTypeSignature =
209
+ Base.new(:raw_type, :type_arguments, :literal_arguments)
210
+ def decode(hash)
211
+ obj = allocate
212
+ obj.send(:initialize_struct,
213
+ hash["rawType"],
214
+ hash["typeArguments"] && hash["typeArguments"].map {|h| ClientTypeSignature.decode(h) },
215
+ hash["literalArguments"],
216
+ )
217
+ obj
218
+ end
219
+ end
220
+
195
221
  class << Column =
196
- Base.new(:name, :type)
222
+ Base.new(:name, :type, :type_signature)
197
223
  def decode(hash)
198
224
  obj = allocate
199
225
  obj.send(:initialize_struct,
200
226
  hash["name"],
201
227
  hash["type"],
228
+ hash["typeSignature"] && ClientTypeSignature.decode(hash["typeSignature"]),
202
229
  )
203
230
  obj
204
231
  end
@@ -217,13 +244,14 @@ module Presto::Client
217
244
  end
218
245
 
219
246
  class << DistinctLimitNode =
220
- Base.new(:id, :source, :limit)
247
+ Base.new(:id, :source, :limit, :hash_symbol)
221
248
  def decode(hash)
222
249
  obj = allocate
223
250
  obj.send(:initialize_struct,
224
251
  hash["id"] && PlanNodeId.new(hash["id"]),
225
252
  hash["source"] && PlanNode.decode(hash["source"]),
226
253
  hash["limit"],
254
+ hash["hashSymbol"],
227
255
  )
228
256
  obj
229
257
  end
@@ -282,13 +310,17 @@ module Presto::Client
282
310
  end
283
311
 
284
312
  class << ExchangeNode =
285
- Base.new(:id, :source_fragment_ids, :outputs)
313
+ Base.new(:id, :type, :partition_keys, :hash_symbol, :sources, :outputs, :inputs)
286
314
  def decode(hash)
287
315
  obj = allocate
288
316
  obj.send(:initialize_struct,
289
317
  hash["id"] && PlanNodeId.new(hash["id"]),
290
- hash["sourceFragmentIds"] && hash["sourceFragmentIds"].map {|h| PlanFragmentId.new(h) },
318
+ hash["type"],
319
+ hash["partitionKeys"],
320
+ hash["hashSymbol"],
321
+ hash["sources"] && hash["sources"].map {|h| PlanNode.decode(h) },
291
322
  hash["outputs"],
323
+ hash["inputs"],
292
324
  )
293
325
  obj
294
326
  end
@@ -353,7 +385,7 @@ module Presto::Client
353
385
  end
354
386
 
355
387
  class << IndexJoinNode =
356
- Base.new(:id, :type, :probe_source, :index_source, :criteria)
388
+ Base.new(:id, :type, :probe_source, :index_source, :criteria, :probe_hash_symbol, :index_hash_symbol)
357
389
  def decode(hash)
358
390
  obj = allocate
359
391
  obj.send(:initialize_struct,
@@ -362,6 +394,8 @@ module Presto::Client
362
394
  hash["probeSource"] && PlanNode.decode(hash["probeSource"]),
363
395
  hash["indexSource"] && PlanNode.decode(hash["indexSource"]),
364
396
  hash["criteria"] && hash["criteria"].map {|h| EquiJoinClause.decode(h) },
397
+ hash["probeHashSymbol"],
398
+ hash["indexHashSymbol"],
365
399
  )
366
400
  obj
367
401
  end
@@ -397,8 +431,20 @@ module Presto::Client
397
431
  end
398
432
  end
399
433
 
434
+ class << InsertTableHandle =
435
+ Base.new(:connector_id, :connector_handle)
436
+ def decode(hash)
437
+ obj = allocate
438
+ obj.send(:initialize_struct,
439
+ hash["connectorId"],
440
+ hash["connectorHandle"],
441
+ )
442
+ obj
443
+ end
444
+ end
445
+
400
446
  class << JoinNode =
401
- Base.new(:id, :type, :left, :right, :criteria)
447
+ Base.new(:id, :type, :left, :right, :criteria, :left_hash_symbol, :right_hash_symbol)
402
448
  def decode(hash)
403
449
  obj = allocate
404
450
  obj.send(:initialize_struct,
@@ -407,27 +453,28 @@ module Presto::Client
407
453
  hash["left"] && PlanNode.decode(hash["left"]),
408
454
  hash["right"] && PlanNode.decode(hash["right"]),
409
455
  hash["criteria"] && hash["criteria"].map {|h| EquiJoinClause.decode(h) },
456
+ hash["leftHashSymbol"],
457
+ hash["rightHashSymbol"],
410
458
  )
411
459
  obj
412
460
  end
413
461
  end
414
462
 
415
463
  class << LimitNode =
416
- Base.new(:id, :source, :count, :sample_weight)
464
+ Base.new(:id, :source, :count)
417
465
  def decode(hash)
418
466
  obj = allocate
419
467
  obj.send(:initialize_struct,
420
468
  hash["id"] && PlanNodeId.new(hash["id"]),
421
469
  hash["source"] && PlanNode.decode(hash["source"]),
422
470
  hash["count"],
423
- hash["sampleWeight"],
424
471
  )
425
472
  obj
426
473
  end
427
474
  end
428
475
 
429
476
  class << MarkDistinctNode =
430
- Base.new(:id, :source, :marker_symbol, :distinct_symbols, :sample_weight_symbol)
477
+ Base.new(:id, :source, :marker_symbol, :distinct_symbols, :hash_symbol)
431
478
  def decode(hash)
432
479
  obj = allocate
433
480
  obj.send(:initialize_struct,
@@ -435,20 +482,7 @@ module Presto::Client
435
482
  hash["source"] && PlanNode.decode(hash["source"]),
436
483
  hash["markerSymbol"],
437
484
  hash["distinctSymbols"],
438
- hash["sampleWeightSymbol"],
439
- )
440
- obj
441
- end
442
- end
443
-
444
- class << MaterializeSampleNode =
445
- Base.new(:id, :source, :sample_weight_symbol)
446
- def decode(hash)
447
- obj = allocate
448
- obj.send(:initialize_struct,
449
- hash["id"] && PlanNodeId.new(hash["id"]),
450
- hash["source"] && PlanNode.decode(hash["source"]),
451
- hash["sampleWeightSymbol"],
485
+ hash["hashSymbol"],
452
486
  )
453
487
  obj
454
488
  end
@@ -512,7 +546,7 @@ module Presto::Client
512
546
  end
513
547
 
514
548
  class << PipelineStats =
515
- Base.new(:input_pipeline, :output_pipeline, :total_drivers, :queued_drivers, :running_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)
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)
516
550
  def decode(hash)
517
551
  obj = allocate
518
552
  obj.send(:initialize_struct,
@@ -520,7 +554,9 @@ module Presto::Client
520
554
  hash["outputPipeline"],
521
555
  hash["totalDrivers"],
522
556
  hash["queuedDrivers"],
557
+ hash["queuedPartitionedDrivers"],
523
558
  hash["runningDrivers"],
559
+ hash["runningPartitionedDrivers"],
524
560
  hash["completedDrivers"],
525
561
  hash["memoryReservation"],
526
562
  hash["queuedTime"] && DistributionSnapshot.decode(hash["queuedTime"]),
@@ -543,17 +579,19 @@ module Presto::Client
543
579
  end
544
580
 
545
581
  class << PlanFragment =
546
- Base.new(:id, :root, :symbols, :distribution, :partitioned_source, :output_partitioning, :partition_by)
582
+ Base.new(:id, :root, :symbols, :output_layout, :distribution, :partitioned_source, :output_partitioning, :partition_by, :hash)
547
583
  def decode(hash)
548
584
  obj = allocate
549
585
  obj.send(:initialize_struct,
550
586
  hash["id"] && PlanFragmentId.new(hash["id"]),
551
587
  hash["root"] && PlanNode.decode(hash["root"]),
552
588
  hash["symbols"],
589
+ hash["outputLayout"],
553
590
  hash["distribution"] && hash["distribution"].downcase.to_sym,
554
591
  hash["partitionedSource"] && PlanNodeId.new(hash["partitionedSource"]),
555
592
  hash["outputPartitioning"] && hash["outputPartitioning"].downcase.to_sym,
556
593
  hash["partitionBy"],
594
+ hash["hash"],
557
595
  )
558
596
  obj
559
597
  end
@@ -588,17 +626,21 @@ module Presto::Client
588
626
  end
589
627
 
590
628
  class << QueryInfo =
591
- Base.new(:query_id, :session, :state, :self, :field_names, :query, :query_stats, :output_stage, :failure_info, :error_code, :inputs)
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)
592
630
  def decode(hash)
593
631
  obj = allocate
594
632
  obj.send(:initialize_struct,
595
633
  hash["queryId"] && QueryId.new(hash["queryId"]),
596
- hash["session"] && ConnectorSession.new(hash["session"]),
634
+ hash["session"] && Session.decode(hash["session"]),
597
635
  hash["state"] && hash["state"].downcase.to_sym,
636
+ hash["scheduled"],
598
637
  hash["self"],
599
638
  hash["fieldNames"],
600
639
  hash["query"],
601
640
  hash["queryStats"] && QueryStats.decode(hash["queryStats"]),
641
+ hash["setSessionProperties"],
642
+ hash["resetSessionProperties"],
643
+ hash["updateType"],
602
644
  hash["outputStage"] && StageInfo.decode(hash["outputStage"]),
603
645
  hash["failureInfo"] && FailureInfo.decode(hash["failureInfo"]),
604
646
  hash["errorCode"] && ErrorCode.decode(hash["errorCode"]),
@@ -609,7 +651,7 @@ module Presto::Client
609
651
  end
610
652
 
611
653
  class << QueryResults =
612
- Base.new(:id, :info_uri, :partial_cancel_uri, :next_uri, :columns, :data, :stats, :error)
654
+ Base.new(:id, :info_uri, :partial_cancel_uri, :next_uri, :columns, :data, :stats, :error, :update_type, :update_count)
613
655
  def decode(hash)
614
656
  obj = allocate
615
657
  obj.send(:initialize_struct,
@@ -621,6 +663,8 @@ module Presto::Client
621
663
  hash["data"],
622
664
  hash["stats"] && StatementStats.decode(hash["stats"]),
623
665
  hash["error"] && QueryError.decode(hash["error"]),
666
+ hash["updateType"],
667
+ hash["updateCount"],
624
668
  )
625
669
  obj
626
670
  end
@@ -663,6 +707,19 @@ module Presto::Client
663
707
  end
664
708
  end
665
709
 
710
+ class << RemoteSourceNode =
711
+ Base.new(:id, :source_fragment_ids, :outputs)
712
+ def decode(hash)
713
+ obj = allocate
714
+ obj.send(:initialize_struct,
715
+ hash["id"] && PlanNodeId.new(hash["id"]),
716
+ hash["sourceFragmentIds"] && hash["sourceFragmentIds"].map {|h| PlanFragmentId.new(h) },
717
+ hash["outputs"],
718
+ )
719
+ obj
720
+ end
721
+ end
722
+
666
723
  class << SampleNode =
667
724
  Base.new(:id, :source, :sample_ratio, :sample_type, :rescaled, :sample_weight_symbol)
668
725
  def decode(hash)
@@ -680,7 +737,7 @@ module Presto::Client
680
737
  end
681
738
 
682
739
  class << SemiJoinNode =
683
- Base.new(:id, :source, :filtering_source, :source_join_symbol, :filtering_source_join_symbol, :semi_join_output)
740
+ Base.new(:id, :source, :filtering_source, :source_join_symbol, :filtering_source_join_symbol, :semi_join_output, :source_hash_symbol, :filtering_source_hash_symbol)
684
741
  def decode(hash)
685
742
  obj = allocate
686
743
  obj.send(:initialize_struct,
@@ -690,6 +747,29 @@ module Presto::Client
690
747
  hash["sourceJoinSymbol"],
691
748
  hash["filteringSourceJoinSymbol"],
692
749
  hash["semiJoinOutput"],
750
+ hash["sourceHashSymbol"],
751
+ hash["filteringSourceHashSymbol"],
752
+ )
753
+ obj
754
+ end
755
+ end
756
+
757
+ class << Session =
758
+ Base.new(:user, :source, :catalog, :schema, :time_zone_key, :locale, :remote_user_address, :user_agent, :start_time, :system_properties, :catalog_properties)
759
+ def decode(hash)
760
+ obj = allocate
761
+ obj.send(:initialize_struct,
762
+ hash["user"],
763
+ hash["source"],
764
+ hash["catalog"],
765
+ hash["schema"],
766
+ hash["timeZoneKey"],
767
+ hash["locale"],
768
+ hash["remoteUserAddress"],
769
+ hash["userAgent"],
770
+ hash["startTime"],
771
+ hash["systemProperties"],
772
+ hash["catalogProperties"],
693
773
  )
694
774
  obj
695
775
  end
@@ -710,27 +790,16 @@ module Presto::Client
710
790
  end
711
791
 
712
792
  class << Signature =
713
- Base.new(:name, :return_type, :argument_types, :approximate)
793
+ Base.new(:name, :type_parameters, :return_type, :argument_types, :variable_arity, :internal)
714
794
  def decode(hash)
715
795
  obj = allocate
716
796
  obj.send(:initialize_struct,
717
797
  hash["name"],
798
+ hash["typeParameters"] && hash["typeParameters"].map {|h| TypeParameter.decode(h) },
718
799
  hash["returnType"],
719
800
  hash["argumentTypes"],
720
- hash["approximate"],
721
- )
722
- obj
723
- end
724
- end
725
-
726
- class << SinkNode =
727
- Base.new(:id, :source, :output_symbols)
728
- def decode(hash)
729
- obj = allocate
730
- obj.send(:initialize_struct,
731
- hash["id"] && PlanNodeId.new(hash["id"]),
732
- hash["source"] && PlanNode.decode(hash["source"]),
733
- hash["outputSymbols"],
801
+ hash["variableArity"],
802
+ hash["internal"],
734
803
  )
735
804
  obj
736
805
  end
@@ -823,7 +892,7 @@ module Presto::Client
823
892
  obj.send(:initialize_struct,
824
893
  hash["id"] && PlanNodeId.new(hash["id"]),
825
894
  hash["source"] && PlanNode.decode(hash["source"]),
826
- hash["target"] && OutputTableHandle.decode(hash["target"]),
895
+ hash["target"] && WriterTarget.decode(hash["target"]),
827
896
  hash["outputs"],
828
897
  )
829
898
  obj
@@ -864,7 +933,7 @@ module Presto::Client
864
933
  obj.send(:initialize_struct,
865
934
  hash["id"] && PlanNodeId.new(hash["id"]),
866
935
  hash["source"] && PlanNode.decode(hash["source"]),
867
- hash["target"] && OutputTableHandle.decode(hash["target"]),
936
+ hash["target"] && WriterTarget.decode(hash["target"]),
868
937
  hash["columns"],
869
938
  hash["columnNames"],
870
939
  hash["outputs"],
@@ -875,11 +944,12 @@ module Presto::Client
875
944
  end
876
945
 
877
946
  class << TaskInfo =
878
- Base.new(:task_id, :version, :state, :self, :last_heartbeat, :output_buffers, :no_more_splits, :stats, :failures)
947
+ Base.new(:task_id, :node_instance_id, :version, :state, :self, :last_heartbeat, :output_buffers, :no_more_splits, :stats, :failures)
879
948
  def decode(hash)
880
949
  obj = allocate
881
950
  obj.send(:initialize_struct,
882
951
  hash["taskId"] && TaskId.new(hash["taskId"]),
952
+ hash["nodeInstanceId"],
883
953
  hash["version"],
884
954
  hash["state"] && hash["state"].downcase.to_sym,
885
955
  hash["self"],
@@ -894,7 +964,7 @@ module Presto::Client
894
964
  end
895
965
 
896
966
  class << TaskStats =
897
- Base.new(:create_time, :first_start_time, :last_start_time, :end_time, :elapsed_time, :queued_time, :total_drivers, :queued_drivers, :running_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)
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)
898
968
  def decode(hash)
899
969
  obj = allocate
900
970
  obj.send(:initialize_struct,
@@ -906,7 +976,9 @@ module Presto::Client
906
976
  hash["queuedTime"],
907
977
  hash["totalDrivers"],
908
978
  hash["queuedDrivers"],
979
+ hash["queuedPartitionedDrivers"],
909
980
  hash["runningDrivers"],
981
+ hash["runningPartitionedDrivers"],
910
982
  hash["completedDrivers"],
911
983
  hash["memoryReservation"],
912
984
  hash["totalScheduledTime"],
@@ -926,7 +998,7 @@ module Presto::Client
926
998
  end
927
999
 
928
1000
  class << TopNNode =
929
- Base.new(:id, :source, :count, :order_by, :orderings, :partial, :sample_weight)
1001
+ Base.new(:id, :source, :count, :order_by, :orderings, :partial)
930
1002
  def decode(hash)
931
1003
  obj = allocate
932
1004
  obj.send(:initialize_struct,
@@ -936,7 +1008,20 @@ module Presto::Client
936
1008
  hash["orderBy"],
937
1009
  hash["orderings"] && Hash[hash["orderings"].to_a.map! {|k,v| [k, v.downcase.to_sym] }],
938
1010
  hash["partial"],
939
- hash["sampleWeight"],
1011
+ )
1012
+ obj
1013
+ end
1014
+ end
1015
+
1016
+ class << TypeParameter =
1017
+ Base.new(:name, :comparable_required, :orderable_required, :variadic_bound)
1018
+ def decode(hash)
1019
+ obj = allocate
1020
+ obj.send(:initialize_struct,
1021
+ hash["name"],
1022
+ hash["comparableRequired"],
1023
+ hash["orderableRequired"],
1024
+ hash["variadicBound"],
940
1025
  )
941
1026
  obj
942
1027
  end
@@ -956,7 +1041,7 @@ module Presto::Client
956
1041
  end
957
1042
 
958
1043
  class << WindowNode =
959
- Base.new(:id, :source, :partition_by, :order_by, :orderings, :window_functions, :signatures)
1044
+ Base.new(:id, :source, :partition_by, :order_by, :orderings, :frame, :window_functions, :signatures, :hash_symbol)
960
1045
  def decode(hash)
961
1046
  obj = allocate
962
1047
  obj.send(:initialize_struct,
@@ -965,8 +1050,10 @@ module Presto::Client
965
1050
  hash["partitionBy"],
966
1051
  hash["orderBy"],
967
1052
  hash["orderings"] && Hash[hash["orderings"].to_a.map! {|k,v| [k, v.downcase.to_sym] }],
1053
+ hash["frame"],
968
1054
  hash["windowFunctions"],
969
1055
  hash["signatures"] && Hash[hash["signatures"].to_a.map! {|k,v| [k, Signature.decode(v)] }],
1056
+ hash["hashSymbol"],
970
1057
  )
971
1058
  obj
972
1059
  end
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.4.4"
18
+ VERSION = "0.4.5"
19
19
  end
20
20
  end
data/modelgen/modelgen.rb CHANGED
@@ -10,13 +10,13 @@ require_relative 'presto_models'
10
10
  require 'erb'
11
11
  erb = ERB.new(File.read(template_path))
12
12
 
13
- source_path = "/Users/frsyuki/project/presto-client-ruby/presto"
13
+ source_path = source_dir
14
14
 
15
15
  predefined_simple_classes = %w[QueryId StageId TaskId PlanNodeId PlanFragmentId ConnectorSession]
16
- predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause]
16
+ predefined_models = %w[DistributionSnapshot PlanNode EquiJoinClause WriterTarget]
17
17
 
18
- assume_primitive = %w[Object Type Symbol URI Duration DataSize DateTime ConnectorTableHandle ConnectorOutputTableHandle ConnectorIndexHandle ConnectorColumnHandle Expression FunctionCall]
19
- enum_types = %w[QueryState StageState TaskState QueueState PlanDistribution OutputPartitioning Step SortOrder]
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]
20
20
 
21
21
  root_models = %w[QueryResults QueryInfo] + %w[
22
22
  OutputNode
@@ -25,7 +25,6 @@ TableScanNode
25
25
  ValuesNode
26
26
  AggregationNode
27
27
  MarkDistinctNode
28
- MaterializeSampleNode
29
28
  FilterNode
30
29
  WindowNode
31
30
  LimitNode
@@ -34,14 +33,14 @@ TopNNode
34
33
  SampleNode
35
34
  SortNode
36
35
  ExchangeNode
37
- SinkNode
36
+ RemoteSourceNode
38
37
  JoinNode
39
38
  SemiJoinNode
40
39
  IndexJoinNode
41
40
  IndexSourceNode
42
41
  TableWriterNode
43
42
  TableCommitNode
44
- ]
43
+ ] + %w[InsertTableHandle OutputTableHandle]
45
44
 
46
45
  analyzer = PrestoModels::ModelAnalyzer.new(
47
46
  source_path,
data/modelgen/models.rb CHANGED
@@ -102,7 +102,7 @@ module Presto::Client
102
102
  when "sample" then SampleNode
103
103
  when "sort" then SortNode
104
104
  when "exchange" then ExchangeNode
105
- when "sink" then SinkNode
105
+ when "remoteSource" then RemoteSourceNode
106
106
  when "join" then JoinNode
107
107
  when "INNER" then JoinNode
108
108
  when "LEFT" then JoinNode
@@ -155,6 +155,18 @@ module Presto::Client
155
155
  end
156
156
  end
157
157
 
158
+ class << WriterTarget =
159
+ Base.new(:type, :handle)
160
+ def decode(hash)
161
+ obj = allocate
162
+ obj.send(:initialize_struct,
163
+ hash["type"],
164
+ hash["type"] == 'InsertHandle' ? InsertTableHandle.decode(hash['handle']) : OutputTableHandle.decode(hash['handle'])
165
+ )
166
+ obj
167
+ end
168
+ end
169
+
158
170
  ##
159
171
  # Those model classes are automatically generated
160
172
  #
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.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -110,7 +110,6 @@ files:
110
110
  - modelgen/models.rb
111
111
  - modelgen/presto_models.rb
112
112
  - presto-client.gemspec
113
- - presto-client.rb
114
113
  - spec/spec_helper.rb
115
114
  - spec/statement_client_spec.rb
116
115
  homepage: https://github.com/treasure-data/presto-client-ruby
@@ -140,3 +139,4 @@ summary: Presto client library
140
139
  test_files:
141
140
  - spec/spec_helper.rb
142
141
  - spec/statement_client_spec.rb
142
+ has_rdoc: false
data/presto-client.rb DELETED
@@ -1,420 +0,0 @@
1
-
2
- module PrestoClient
3
- VERSION = "0.1.0"
4
-
5
- require 'faraday'
6
- require 'json'
7
-
8
- class ClientSession
9
- def initialize(options)
10
- @server = options[:server]
11
- @user = options[:user]
12
- @source = options[:source]
13
- @catalog = options[:catalog]
14
- @schema = options[:schema]
15
- @debug = !!options[:debug]
16
- end
17
-
18
- attr_reader :server
19
- attr_reader :user
20
- attr_reader :source
21
- attr_reader :catalog
22
- attr_reader :schema
23
-
24
- def debug?
25
- @debug
26
- end
27
- end
28
-
29
- #class StageStats
30
- # attr_reader :stage_id
31
- # attr_reader :state
32
- # attr_reader :done
33
- # attr_reader :nodes
34
- # attr_reader :total_splits
35
- # attr_reader :queued_splits
36
- # attr_reader :running_splits
37
- # attr_reader :completed_splits
38
- # attr_reader :user_time_millis
39
- # attr_reader :cpu_time_millis
40
- # attr_reader :wall_time_millis
41
- # attr_reader :processed_rows
42
- # attr_reader :processed_bytes
43
- # attr_reader :sub_stages
44
- #
45
- # def initialize(options={})
46
- # @stage_id = options[:stage_id]
47
- # @state = options[:state]
48
- # @done = options[:done]
49
- # @nodes = options[:nodes]
50
- # @total_splits = options[:total_splits]
51
- # @queued_splits = options[:queued_splits]
52
- # @running_splits = options[:running_splits]
53
- # @completed_splits = options[:completed_splits]
54
- # @user_time_millis = options[:user_time_millis]
55
- # @cpu_time_millis = options[:cpu_time_millis]
56
- # @wall_time_millis = options[:wall_time_millis]
57
- # @processed_rows = options[:processed_rows]
58
- # @processed_bytes = options[:processed_bytes]
59
- # @sub_stages = options[:sub_stages]
60
- # end
61
- #
62
- # def self.decode_hash(hash)
63
- # new(
64
- # stage_id: hash["stageId"],
65
- # state: hash["state"],
66
- # done: hash["done"],
67
- # nodes: hash["nodes"],
68
- # total_splits: hash["totalSplits"],
69
- # queued_splits: hash["queuedSplits"],
70
- # running_splits: hash["runningSplits"],
71
- # completed_splits: hash["completedSplits"],
72
- # user_time_millis: hash["userTimeMillis"],
73
- # cpu_time_millis: hash["cpuTimeMillis"],
74
- # wall_time_millis: hash["wallTimeMillis"],
75
- # processed_rows: hash["processedRows"],
76
- # processed_bytes: hash["processedBytes"],
77
- # sub_stages: hash["subStages"].map {|h| StageStats.decode_hash(h) },
78
- # )
79
- # end
80
- #end
81
-
82
- class StatementStats
83
- attr_reader :state
84
- attr_reader :scheduled
85
- attr_reader :nodes
86
- attr_reader :total_splits
87
- attr_reader :queued_splits
88
- attr_reader :running_splits
89
- attr_reader :completed_splits
90
- attr_reader :user_time_millis
91
- attr_reader :cpu_time_millis
92
- attr_reader :wall_time_millis
93
- attr_reader :processed_rows
94
- attr_reader :processed_bytes
95
- #attr_reader :root_stage
96
-
97
- def initialize(options={})
98
- @state = state
99
- @scheduled = scheduled
100
- @nodes = nodes
101
- @total_splits = total_splits
102
- @queued_splits = queued_splits
103
- @running_splits = running_splits
104
- @completed_splits = completed_splits
105
- @user_time_millis = user_time_millis
106
- @cpu_time_millis = cpu_time_millis
107
- @wall_time_millis = wall_time_millis
108
- @processed_rows = processed_rows
109
- @processed_bytes = processed_bytes
110
- #@root_stage = root_stage
111
- end
112
-
113
- def self.decode_hash(hash)
114
- new(
115
- state: hash["state"],
116
- scheduled: hash["scheduled"],
117
- nodes: hash["nodes"],
118
- total_splits: hash["totalSplits"],
119
- queued_splits: hash["queuedSplits"],
120
- running_splits: hash["runningSplits"],
121
- completed_splits: hash["completedSplits"],
122
- user_time_millis: hash["userTimeMillis"],
123
- cpu_time_millis: hash["cpuTimeMillis"],
124
- wall_time_millis: hash["wallTimeMillis"],
125
- processed_rows: hash["processedRows"],
126
- processed_bytes: hash["processedBytes"],
127
- #root_stage: StageStats.decode_hash(hash["rootStage"]),
128
- )
129
- end
130
- end
131
-
132
- class Column
133
- attr_reader :name
134
- attr_reader :type
135
-
136
- def initialize(options={})
137
- @name = options[:name]
138
- @type = options[:type]
139
- end
140
-
141
- def self.decode_hash(hash)
142
- new(
143
- name: hash["name"],
144
- type: hash["type"],
145
- )
146
- end
147
- end
148
-
149
- class QueryResults
150
- attr_reader :id
151
- attr_reader :info_uri
152
- attr_reader :partial_cache_uri
153
- attr_reader :next_uri
154
- attr_reader :columns
155
- attr_reader :data
156
- attr_reader :stats
157
- attr_reader :error
158
-
159
- def initialize(options={})
160
- @id = options[:id]
161
- @info_uri = options[:info_uri]
162
- @partial_cache_uri = options[:partial_cache_uri]
163
- @next_uri = options[:next_uri]
164
- @columns = options[:columns]
165
- @data = options[:data]
166
- @stats = options[:stats]
167
- @error = options[:error]
168
- end
169
-
170
- def self.decode_hash(hash)
171
- new(
172
- id: hash["id"],
173
- info_uri: hash["infoUri"],
174
- partial_cache_uri: hash["partialCancelUri"],
175
- next_uri: hash["nextUri"],
176
- columns: hash["columns"] ? hash["columns"].map {|h| Column.decode_hash(h) } : nil,
177
- data: hash["data"]
178
- stats: StatementStats.decode_hash(hash["stats"]),
179
- error: hash["error"], # TODO
180
- )
181
- end
182
- end
183
-
184
- module PrestoHeaders
185
- PRESTO_USER = "X-Presto-User"
186
- PRESTO_SOURCE = "X-Presto-Source"
187
- PRESTO_CATALOG = "X-Presto-Catalog"
188
- PRESTO_SCHEMA = "X-Presto-Schema"
189
-
190
- PRESTO_CURRENT_STATE = "X-Presto-Current-State"
191
- PRESTO_MAX_WAIT = "X-Presto-Max-Wait"
192
- PRESTO_MAX_SIZE = "X-Presto-Max-Size"
193
- PRESTO_PAGE_SEQUENCE_ID = "X-Presto-Page-Sequence-Id"
194
- end
195
-
196
- class StatementClient
197
- HEADERS = {
198
- "User-Agent" => "presto-ruby/#{VERSION}"
199
- }
200
-
201
- def initialize(faraday, session, query)
202
- @faraday = faraday
203
- @faraday.headers.merge!(HEADERS)
204
-
205
- @session = session
206
- @query = query
207
- @closed = false
208
- @exception = nil
209
- post_query_request!
210
- end
211
-
212
- def post_query_request!
213
- response = @faraday.post do |req|
214
- req.url "/v1/statement"
215
-
216
- if v = @session.user
217
- req.headers[PrestoHeaders::PRESTO_USER] = v
218
- end
219
- if v = @session.source
220
- req.headers[PrestoHeaders::PRESTO_SOURCE] = v
221
- end
222
- if catalog = @session.catalog
223
- req.headers[PrestoHeaders::PRESTO_CATALOG] = catalog
224
- end
225
- if v = @session.schema
226
- req.headers[PrestoHeaders::PRESTO_SCHEMA] = v
227
- end
228
-
229
- req.body = @query
230
- end
231
-
232
- # TODO error handling
233
- if response.status != 200
234
- raise "Failed to start query: #{response.body}" # TODO error class
235
- end
236
-
237
- body = response.body
238
- hash = JSON.parse(body)
239
- @results = QueryResults.decode_hash(hash)
240
- end
241
-
242
- private :post_query_request!
243
-
244
- attr_reader :query
245
-
246
- def debug?
247
- @session.debug?
248
- end
249
-
250
- def closed?
251
- @closed
252
- end
253
-
254
- attr_reader :exception
255
-
256
- def exception?
257
- @exception
258
- end
259
-
260
- def query_failed?
261
- @results.error != nil
262
- end
263
-
264
- def query_succeeded?
265
- @results.error == nil && !@exception && !@closed
266
- end
267
-
268
- def current_results
269
- @results
270
- end
271
-
272
- def has_next?
273
- !!@results.next_uri
274
- end
275
-
276
- def advance
277
- if closed? || !has_next?
278
- return false
279
- end
280
- uri = @results.next_uri
281
-
282
- start = Time.now
283
- attempts = 0
284
-
285
- begin
286
- begin
287
- response = @faraday.get do |req|
288
- req.url uri
289
- end
290
- rescue => e
291
- @exception = e
292
- raise @exception
293
- end
294
-
295
- if response.status == 200 && !response.body.to_s.empty?
296
- @results = QueryResults.decode_hash(JSON.parse(response.body))
297
- return true
298
- end
299
-
300
- if response.status != 503 # retry on 503 Service Unavailable
301
- # deterministic error
302
- @exception = StandardError.new("Error fetching next at #{uri} returned #{response.status}: #{response.body}") # TODO error class
303
- raise @exception
304
- end
305
-
306
- attempts += 1
307
- sleep attempts * 0.1
308
- end while (Time.now - start) < 2*60*60 && !@closed
309
-
310
- @exception = StandardError.new("Error fetching next") # TODO error class
311
- raise @exception
312
- end
313
-
314
- def close
315
- return if @closed
316
-
317
- # cancel running statement
318
- if uri = @results.next_uri
319
- # TODO error handling
320
- # TODO make async reqeust and ignore response
321
- @faraday.delete do |req|
322
- req.url uri
323
- end
324
- end
325
-
326
- @closed = true
327
- nil
328
- end
329
- end
330
-
331
- class Query
332
- def self.start(session, query)
333
- faraday = Faraday.new(url: "http://#{session.server}") do |faraday|
334
- faraday.request :url_encoded
335
- faraday.response :logger
336
- faraday.adapter Faraday.default_adapter
337
- end
338
-
339
- new StatementClient.new(faraday, session, query)
340
- end
341
-
342
- def initialize(client)
343
- @client = client
344
- end
345
-
346
- def wait_for_data
347
- while @client.has_next? && @client.current_results.data == nil
348
- @client.advance
349
- end
350
- end
351
-
352
- private :wait_for_data
353
-
354
- def columns
355
- wait_for_data
356
-
357
- raise_error unless @client.query_succeeded?
358
-
359
- return @client.current_results.columns
360
- end
361
-
362
- def each_row(&block)
363
- wait_for_data
364
-
365
- raise_error unless @client.query_succeeded?
366
-
367
- if self.columns == nil
368
- raise "Query #{@client.current_results.id} has no columns"
369
- end
370
-
371
- begin
372
- if data = @client.current_results.data
373
- data.each(&block)
374
- end
375
- @client.advance
376
- end while @client.has_next?
377
- end
378
-
379
- def raise_error
380
- if @client.closed?
381
- raise "Query aborted by user"
382
- elsif @client.exception?
383
- raise "Query is gone: #{@client.exception}"
384
- elsif @client.query_failed?
385
- results = @client.current_results
386
- # TODO error location
387
- raise "Query #{results.id} failed: #{results.error}"
388
- end
389
- end
390
-
391
- private :raise_error
392
- end
393
-
394
- class Client
395
- def initialize(options)
396
- @session = ClientSession.new(options)
397
- end
398
-
399
- def query(query)
400
- Query.start(@session, query)
401
- end
402
- end
403
- end
404
-
405
- require 'pp'
406
-
407
- client = PrestoClient::Client.new(
408
- server: "localhost:8880",
409
- user: "frsyuki",
410
- catalog: "native",
411
- schema: "default",
412
- debug: true
413
- )
414
-
415
- q = client.query("select * from sys.query")
416
- p q.columns
417
- q.each_row {|row|
418
- p row
419
- }
420
-