From c0f35f77e111a11490aa964f4b8f1dccf7957397 Mon Sep 17 00:00:00 2001 From: Larry Booker Date: Mon, 12 Feb 2024 11:10:49 -0800 Subject: [PATCH] Add `RollingFormula` feature to `UpdateBy` (#5085) * Cleanup on base operators. * Initial commit, working and passing tests. * Optimized to re-use formula columns when possible. * Shared formula column tested (and fixed). * Proto file changes and java client updates. * More spotless. * Refactor accomplished, functional but ugly. * Missing file, sigh. * Python test fix. * Cleanup and more documentation. * Removed unneeded annotations from the Rolling op specs * Addressing PR comments. * Spotless. * table.proto reversion * Correct misnaming. * PR comments addressed. * Minor doc changes. * Python client added, documentation updated. * Python client documentation improvements. --- .../proto/deephaven/proto/table.pb.cc | 2210 +++++---- .../dhclient/proto/deephaven/proto/table.pb.h | 766 ++- .../PartitionedTableProxyImpl.java | 5 +- .../BucketedPartitionedUpdateByManager.java | 10 +- .../engine/table/impl/updateby/UpdateBy.java | 375 +- .../table/impl/updateby/UpdateByOperator.java | 26 +- .../updateby/UpdateByOperatorFactory.java | 685 +-- .../table/impl/updateby/UpdateByWindow.java | 8 + .../updateby/UpdateByWindowCumulative.java | 10 + .../updateby/UpdateByWindowRollingTicks.java | 9 + .../updateby/UpdateByWindowRollingTime.java | 20 +- .../delta/BigDecimalDeltaOperator.java | 37 +- .../delta/BigIntegerDeltaOperator.java | 44 +- .../updateby/delta/ByteDeltaOperator.java | 39 +- .../updateby/delta/CharDeltaOperator.java | 39 +- .../updateby/delta/DoubleDeltaOperator.java | 39 +- .../updateby/delta/FloatDeltaOperator.java | 39 +- .../impl/updateby/delta/IntDeltaOperator.java | 39 +- .../updateby/delta/LongDeltaOperator.java | 39 +- .../updateby/delta/ShortDeltaOperator.java | 39 +- .../updateby/em/BaseBigNumberEMOperator.java | 23 +- .../updateby/em/BasePrimitiveEMOperator.java | 21 +- .../updateby/em/BigDecimalEMOperator.java | 20 +- .../updateby/em/BigIntegerEMOperator.java | 28 +- .../impl/updateby/em/ByteEMOperator.java | 45 +- .../impl/updateby/em/CharEMOperator.java | 42 +- .../impl/updateby/em/DoubleEMOperator.java | 28 +- .../impl/updateby/em/FloatEMOperator.java | 28 +- .../table/impl/updateby/em/IntEMOperator.java | 42 +- .../impl/updateby/em/LongEMOperator.java | 42 +- .../impl/updateby/em/ShortEMOperator.java | 42 +- .../emstd/BaseBigNumberEmStdOperator.java | 56 +- .../emstd/BasePrimitiveEmStdOperator.java | 47 +- .../emstd/BigDecimalEmStdOperator.java | 29 +- .../emstd/BigIntegerEmStdOperator.java | 21 +- .../updateby/emstd/ByteEmStdOperator.java | 59 +- .../updateby/emstd/CharEmStdOperator.java | 56 +- .../updateby/emstd/DoubleEmStdOperator.java | 59 +- .../updateby/emstd/FloatEmStdOperator.java | 59 +- .../impl/updateby/emstd/IntEmStdOperator.java | 56 +- .../updateby/emstd/LongEmStdOperator.java | 56 +- .../updateby/emstd/ShortEmStdOperator.java | 56 +- .../updateby/fill/BooleanFillByOperator.java | 23 +- .../updateby/fill/ByteFillByOperator.java | 23 +- .../updateby/fill/CharFillByOperator.java | 23 +- .../updateby/fill/DoubleFillByOperator.java | 23 +- .../updateby/fill/FloatFillByOperator.java | 23 +- .../impl/updateby/fill/IntFillByOperator.java | 23 +- .../updateby/fill/LongFillByOperator.java | 26 +- .../updateby/fill/ObjectFillByOperator.java | 26 +- .../updateby/fill/ShortFillByOperator.java | 23 +- .../internal/BaseByteUpdateByOperator.java | 64 +- .../internal/BaseCharUpdateByOperator.java | 66 +- .../internal/BaseDoubleUpdateByOperator.java | 66 +- .../internal/BaseFloatUpdateByOperator.java | 66 +- .../internal/BaseIntUpdateByOperator.java | 66 +- .../internal/BaseLongUpdateByOperator.java | 66 +- .../internal/BaseObjectBinaryOperator.java | 5 +- .../internal/BaseObjectUpdateByOperator.java | 74 +- .../internal/BaseShortUpdateByOperator.java | 66 +- .../minmax/ByteCumMinMaxOperator.java | 32 +- .../minmax/ComparableCumMinMaxOperator.java | 11 +- .../minmax/DoubleCumMinMaxOperator.java | 29 +- .../minmax/FloatCumMinMaxOperator.java | 29 +- .../updateby/minmax/IntCumMinMaxOperator.java | 29 +- .../minmax/LongCumMinMaxOperator.java | 40 +- .../minmax/ShortCumMinMaxOperator.java | 29 +- .../prod/BigDecimalCumProdOperator.java | 13 +- .../prod/BigIntegerCumProdOperator.java | 12 +- .../updateby/prod/ByteCumProdOperator.java | 24 +- .../updateby/prod/DoubleCumProdOperator.java | 23 +- .../updateby/prod/FloatCumProdOperator.java | 23 +- .../updateby/prod/IntCumProdOperator.java | 21 +- .../updateby/prod/LongCumProdOperator.java | 21 +- .../updateby/prod/ShortCumProdOperator.java | 21 +- .../BigDecimalRollingAvgOperator.java | 22 +- .../BigIntegerRollingAvgOperator.java | 33 +- .../rollingavg/ByteRollingAvgOperator.java | 41 +- .../rollingavg/CharRollingAvgOperator.java | 38 +- .../rollingavg/DoubleRollingAvgOperator.java | 35 +- .../rollingavg/FloatRollingAvgOperator.java | 35 +- .../rollingavg/IntRollingAvgOperator.java | 38 +- .../rollingavg/LongRollingAvgOperator.java | 38 +- .../rollingavg/ShortRollingAvgOperator.java | 38 +- .../ByteRollingCountOperator.java | 35 +- .../CharRollingCountOperator.java | 32 +- .../DoubleRollingCountOperator.java | 32 +- .../FloatRollingCountOperator.java | 32 +- .../rollingcount/IntRollingCountOperator.java | 32 +- .../LongRollingCountOperator.java | 32 +- .../ObjectRollingCountOperator.java | 28 +- .../ShortRollingCountOperator.java | 32 +- .../BaseRollingFormulaOperator.java | 265 + .../BooleanRollingFormulaOperator.java | 190 + .../ByteRollingFormulaOperator.java | 207 + .../CharRollingFormulaOperator.java | 202 + .../DoubleRollingFormulaOperator.java | 207 + .../FloatRollingFormulaOperator.java | 207 + .../IntRollingFormulaOperator.java | 207 + .../LongRollingFormulaOperator.java | 207 + .../ObjectRollingFormulaOperator.java | 189 + .../ShortRollingFormulaOperator.java | 207 + .../ByteRingBufferVectorWrapper.java | 54 + .../CharRingBufferVectorWrapper.java | 49 + .../DoubleRingBufferVectorWrapper.java | 54 + .../FloatRingBufferVectorWrapper.java | 54 + .../IntRingBufferVectorWrapper.java | 54 + .../LongRingBufferVectorWrapper.java | 54 + .../ObjectRingBufferVectorWrapper.java | 57 + .../RingBufferVectorWrapper.java | 4 + .../ShortRingBufferVectorWrapper.java | 54 + .../rollinggroup/RollingGroupOperator.java | 108 +- .../ByteRollingMinMaxOperator.java | 40 +- .../CharRollingMinMaxOperator.java | 40 +- .../ComparableRollingMinMaxOperator.java | 33 +- .../DoubleRollingMinMaxOperator.java | 40 +- .../FloatRollingMinMaxOperator.java | 40 +- .../IntRollingMinMaxOperator.java | 40 +- .../LongRollingMinMaxOperator.java | 40 +- .../ShortRollingMinMaxOperator.java | 40 +- .../BigDecimalRollingProductOperator.java | 25 +- .../BigIntegerRollingProductOperator.java | 31 +- .../ByteRollingProductOperator.java | 38 +- .../CharRollingProductOperator.java | 38 +- .../DoubleRollingProductOperator.java | 37 +- .../FloatRollingProductOperator.java | 37 +- .../IntRollingProductOperator.java | 38 +- .../LongRollingProductOperator.java | 38 +- .../ShortRollingProductOperator.java | 38 +- .../BigDecimalRollingStdOperator.java | 28 +- .../BigIntegerRollingStdOperator.java | 36 +- .../rollingstd/ByteRollingStdOperator.java | 36 +- .../rollingstd/CharRollingStdOperator.java | 33 +- .../rollingstd/DoubleRollingStdOperator.java | 33 +- .../rollingstd/FloatRollingStdOperator.java | 33 +- .../rollingstd/IntRollingStdOperator.java | 33 +- .../rollingstd/LongRollingStdOperator.java | 33 +- .../rollingstd/ShortRollingStdOperator.java | 33 +- .../BigDecimalRollingSumOperator.java | 18 +- .../BigIntegerRollingSumOperator.java | 30 +- .../rollingsum/ByteRollingSumOperator.java | 37 +- .../rollingsum/CharRollingSumOperator.java | 127 + .../rollingsum/DoubleRollingSumOperator.java | 32 +- .../rollingsum/FloatRollingSumOperator.java | 32 +- .../rollingsum/IntRollingSumOperator.java | 34 +- .../rollingsum/LongRollingSumOperator.java | 34 +- .../rollingsum/ShortRollingSumOperator.java | 37 +- .../BasePrimitiveRollingWAvgOperator.java | 30 +- .../BigDecimalRollingWAvgOperator.java | 43 +- .../rollingwavg/ByteRollingWAvgOperator.java | 37 +- .../rollingwavg/CharRollingWAvgOperator.java | 37 +- .../DoubleRollingWAvgOperator.java | 37 +- .../rollingwavg/FloatRollingWAvgOperator.java | 37 +- .../rollingwavg/IntRollingWAvgOperator.java | 37 +- .../rollingwavg/LongRollingWAvgOperator.java | 37 +- .../rollingwavg/ShortRollingWAvgOperator.java | 37 +- .../sum/BigDecimalCumSumOperator.java | 13 +- .../sum/BigIntegerCumSumOperator.java | 13 +- .../impl/updateby/sum/ByteCumSumOperator.java | 28 +- .../impl/updateby/sum/CharCumSumOperator.java | 68 + .../updateby/sum/DoubleCumSumOperator.java | 19 +- .../updateby/sum/FloatCumSumOperator.java | 19 +- .../impl/updateby/sum/IntCumSumOperator.java | 25 +- .../impl/updateby/sum/LongCumSumOperator.java | 23 +- .../updateby/sum/ShortCumSumOperator.java | 28 +- .../table/impl/updateby/TestCumSum.java | 15 +- .../impl/updateby/TestRollingFormula.java | 1316 +++++ .../table/impl/updateby/TestRollingSum.java | 46 +- go/internal/proto/table/table.pb.go | 4311 +++++++++-------- .../client/impl/UpdateByBuilder.java | 13 + .../client/impl/UpdateBySpecBuilderTest.java | 42 + .../main/proto/deephaven/proto/table.proto | 8 + py/client/pydeephaven/agg.py | 10 +- py/client/pydeephaven/proto/table_pb2.py | 464 +- py/client/pydeephaven/updateby.py | 155 +- py/client/tests/test_updateby.py | 11 +- py/server/deephaven/agg.py | 10 +- py/server/deephaven/updateby.py | 150 +- py/server/tests/test_updateby.py | 14 +- .../replicators/ReplicateUpdateBy.java | 118 +- .../server/table/ops/UpdateByGrpcImpl.java | 9 + .../api/updateby/UpdateByOperation.java | 194 + .../api/updateby/spec/CumSumSpec.java | 2 +- .../api/updateby/spec/RollingFormulaSpec.java | 94 + .../api/updateby/spec/RollingMinMaxSpec.java | 2 - .../api/updateby/spec/RollingSumSpec.java | 1 + .../api/updateby/spec/RollingWAvgSpec.java | 2 - .../api/updateby/spec/UpdateBySpec.java | 2 + 188 files changed, 12901 insertions(+), 5673 deletions(-) create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BaseRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BooleanRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ByteRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/CharRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/DoubleRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/FloatRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/IntRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/LongRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ObjectRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ShortRollingFormulaOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ByteRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/CharRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/DoubleRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/FloatRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/IntRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/LongRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ObjectRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/RingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ShortRingBufferVectorWrapper.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/CharRollingSumOperator.java create mode 100644 engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/CharCumSumOperator.java create mode 100644 engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingFormula.java create mode 100644 table-api/src/main/java/io/deephaven/api/updateby/spec/RollingFormulaSpec.java diff --git a/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.cc b/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.cc index 2a5e516c99a..7fc2110539d 100644 --- a/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.cc +++ b/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.cc @@ -529,6 +529,22 @@ struct UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRol }; }; PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvgDefaultTypeInternal _UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg_default_instance_; +PROTOBUF_CONSTEXPR UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.formula_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.param_token_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.reverse_window_scale_)*/nullptr + , /*decltype(_impl_.forward_window_scale_)*/nullptr + , /*decltype(_impl_._cached_size_)*/{}} {} +struct UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal { + PROTOBUF_CONSTEXPR UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal() {} + union { + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal _UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula_default_instance_; PROTOBUF_CONSTEXPR UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec( ::_pbi::ConstantInitialized): _impl_{ /*decltype(_impl_.type_)*/{} @@ -1758,7 +1774,7 @@ PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORIT } // namespace proto } // namespace deephaven } // namespace io -static ::_pb::Metadata file_level_metadata_deephaven_2fproto_2ftable_2eproto[121]; +static ::_pb::Metadata file_level_metadata_deephaven_2fproto_2ftable_2eproto[122]; static const ::_pb::EnumDescriptor* file_level_enum_descriptors_deephaven_2fproto_2ftable_2eproto[12]; static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_deephaven_2fproto_2ftable_2eproto = nullptr; @@ -2070,6 +2086,16 @@ const uint32_t TableStruct_deephaven_2fproto_2ftable_2eproto::offsets[] PROTOBUF PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.forward_window_scale_), PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.weight_column_), ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.reverse_window_scale_), + PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.forward_window_scale_), + PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.formula_), + PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.param_token_), + ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec, _internal_metadata_), ~0u, // no _extensions_ PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec, _impl_._oneof_case_[0]), @@ -2095,6 +2121,7 @@ const uint32_t TableStruct_deephaven_2fproto_2ftable_2eproto::offsets[] PROTOBUF ::_pbi::kInvalidFieldOffsetTag, ::_pbi::kInvalidFieldOffsetTag, ::_pbi::kInvalidFieldOffsetTag, + ::_pbi::kInvalidFieldOffsetTag, PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec, _impl_.type_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn, _internal_metadata_), @@ -2949,91 +2976,92 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode { 281, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount)}, { 289, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd)}, { 297, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg)}, - { 306, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec)}, - { 333, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn)}, - { 341, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation)}, - { 349, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest)}, - { 360, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SelectDistinctRequest)}, - { 369, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::DropColumnsRequest)}, - { 378, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UnstructuredFilterTableRequest)}, - { 387, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::HeadOrTailRequest)}, - { 396, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::HeadOrTailByRequest)}, - { 406, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UngroupRequest)}, - { 416, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MergeTablesRequest)}, - { 425, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SnapshotTableRequest)}, - { 433, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SnapshotWhenTableRequest)}, - { 446, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CrossJoinTablesRequest)}, - { 458, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::NaturalJoinTablesRequest)}, - { 469, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ExactJoinTablesRequest)}, - { 480, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::LeftJoinTablesRequest)}, - { 491, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AsOfJoinTablesRequest)}, - { 503, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AjRajTablesRequest)}, - { 515, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::RangeJoinTablesRequest)}, - { 531, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ComboAggregateRequest_Aggregate)}, - { 542, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ComboAggregateRequest)}, - { 553, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggregateAllRequest)}, - { 563, 571, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecApproximatePercentile)}, - { 573, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecCountDistinct)}, - { 580, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecDistinct)}, - { 587, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFormula)}, - { 595, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMedian)}, - { 602, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecPercentile)}, - { 610, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSorted)}, - { 617, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSortedColumn)}, - { 624, 631, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecTDigest)}, - { 632, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecUnique)}, - { 640, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecNonUniqueSentinel)}, - { 657, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecWeighted)}, - { 664, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecAbsSum)}, - { 670, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecAvg)}, - { 676, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFirst)}, - { 682, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFreeze)}, - { 688, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecGroup)}, - { 694, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecLast)}, - { 700, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMax)}, - { 706, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMin)}, - { 712, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecStd)}, - { 718, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSum)}, - { 724, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecVar)}, - { 730, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec)}, - { 760, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggregateRequest)}, - { 772, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationColumns)}, - { 780, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationCount)}, - { 787, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationRowKey)}, - { 794, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationPartition)}, - { 802, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation)}, - { 814, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SortDescriptor)}, - { 823, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SortTableRequest)}, - { 832, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::FilterTableRequest)}, - { 841, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SeekRowRequest)}, - { 854, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SeekRowResponse)}, - { 861, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Reference)}, - { 868, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Literal)}, - { 880, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Value)}, - { 889, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Condition)}, - { 906, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AndCondition)}, - { 913, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::OrCondition)}, - { 920, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::NotCondition)}, - { 927, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CompareCondition)}, - { 937, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::InCondition)}, - { 947, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::InvokeCondition)}, - { 956, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::IsNullCondition)}, - { 963, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MatchesCondition)}, - { 973, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ContainsCondition)}, - { 983, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SearchCondition)}, - { 991, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::FlattenRequest)}, - { 999, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MetaTableRequest)}, - { 1007, 1015, -1, sizeof(::io::deephaven::proto::backplane::grpc::RunChartDownsampleRequest_ZoomRange)}, - { 1017, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::RunChartDownsampleRequest)}, - { 1029, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_InMemoryAppendOnly)}, - { 1035, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_InMemoryKeyBacked)}, - { 1042, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_Blink)}, - { 1048, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind)}, - { 1058, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest)}, - { 1069, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::WhereInRequest)}, - { 1080, 1090, -1, sizeof(::io::deephaven::proto::backplane::grpc::ColumnStatisticsRequest)}, - { 1094, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::BatchTableRequest_Operation)}, - { 1141, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::BatchTableRequest)}, + { 306, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula)}, + { 316, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec)}, + { 344, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn)}, + { 352, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation)}, + { 360, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UpdateByRequest)}, + { 371, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SelectDistinctRequest)}, + { 380, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::DropColumnsRequest)}, + { 389, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UnstructuredFilterTableRequest)}, + { 398, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::HeadOrTailRequest)}, + { 407, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::HeadOrTailByRequest)}, + { 417, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::UngroupRequest)}, + { 427, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MergeTablesRequest)}, + { 436, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SnapshotTableRequest)}, + { 444, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SnapshotWhenTableRequest)}, + { 457, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CrossJoinTablesRequest)}, + { 469, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::NaturalJoinTablesRequest)}, + { 480, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ExactJoinTablesRequest)}, + { 491, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::LeftJoinTablesRequest)}, + { 502, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AsOfJoinTablesRequest)}, + { 514, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AjRajTablesRequest)}, + { 526, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::RangeJoinTablesRequest)}, + { 542, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ComboAggregateRequest_Aggregate)}, + { 553, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ComboAggregateRequest)}, + { 564, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggregateAllRequest)}, + { 574, 582, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecApproximatePercentile)}, + { 584, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecCountDistinct)}, + { 591, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecDistinct)}, + { 598, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFormula)}, + { 606, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMedian)}, + { 613, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecPercentile)}, + { 621, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSorted)}, + { 628, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSortedColumn)}, + { 635, 642, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecTDigest)}, + { 643, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecUnique)}, + { 651, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecNonUniqueSentinel)}, + { 668, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecWeighted)}, + { 675, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecAbsSum)}, + { 681, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecAvg)}, + { 687, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFirst)}, + { 693, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecFreeze)}, + { 699, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecGroup)}, + { 705, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecLast)}, + { 711, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMax)}, + { 717, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecMin)}, + { 723, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecStd)}, + { 729, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecSum)}, + { 735, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec_AggSpecVar)}, + { 741, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggSpec)}, + { 771, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AggregateRequest)}, + { 783, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationColumns)}, + { 791, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationCount)}, + { 798, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationRowKey)}, + { 805, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation_AggregationPartition)}, + { 813, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Aggregation)}, + { 825, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SortDescriptor)}, + { 834, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SortTableRequest)}, + { 843, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::FilterTableRequest)}, + { 852, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SeekRowRequest)}, + { 865, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SeekRowResponse)}, + { 872, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Reference)}, + { 879, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Literal)}, + { 891, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Value)}, + { 900, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::Condition)}, + { 917, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::AndCondition)}, + { 924, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::OrCondition)}, + { 931, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::NotCondition)}, + { 938, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CompareCondition)}, + { 948, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::InCondition)}, + { 958, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::InvokeCondition)}, + { 967, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::IsNullCondition)}, + { 974, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MatchesCondition)}, + { 984, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::ContainsCondition)}, + { 994, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::SearchCondition)}, + { 1002, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::FlattenRequest)}, + { 1010, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::MetaTableRequest)}, + { 1018, 1026, -1, sizeof(::io::deephaven::proto::backplane::grpc::RunChartDownsampleRequest_ZoomRange)}, + { 1028, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::RunChartDownsampleRequest)}, + { 1040, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_InMemoryAppendOnly)}, + { 1046, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_InMemoryKeyBacked)}, + { 1053, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind_Blink)}, + { 1059, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest_InputTableKind)}, + { 1069, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::CreateInputTableRequest)}, + { 1080, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::WhereInRequest)}, + { 1091, 1101, -1, sizeof(::io::deephaven::proto::backplane::grpc::ColumnStatisticsRequest)}, + { 1105, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::BatchTableRequest_Operation)}, + { 1152, -1, -1, sizeof(::io::deephaven::proto::backplane::grpc::BatchTableRequest)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -3073,6 +3101,7 @@ static const ::_pb::Message* const file_default_instances[] = { &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount_default_instance_._instance, &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd_default_instance_._instance, &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg_default_instance_._instance, + &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula_default_instance_._instance, &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_default_instance_._instance, &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_default_instance_._instance, &::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_default_instance_._instance, @@ -3226,7 +3255,7 @@ const char descriptor_table_protodef_deephaven_2fproto_2ftable_2eproto[] PROTOBU "o.deephaven.proto.backplane.grpc.MathCon" "text\"f\n\024UpdateByDeltaOptions\022N\n\rnull_beh" "avior\030\001 \001(\01627.io.deephaven.proto.backpla" - "ne.grpc.UpdateByNullBehavior\"\2314\n\017UpdateB" + "ne.grpc.UpdateByNullBehavior\"\2337\n\017UpdateB" "yRequest\022<\n\tresult_id\030\001 \001(\0132).io.deephav" "en.proto.backplane.grpc.Ticket\022D\n\tsource" "_id\030\002 \001(\01321.io.deephaven.proto.backplane" @@ -3246,14 +3275,14 @@ const char descriptor_table_protodef_deephaven_2fproto_2ftable_2eproto[] PROTOBU "extB\022\n\020_use_redirectionB\021\n\017_chunk_capaci" "tyB$\n\"_max_static_sparse_memory_overhead" "B\032\n\030_initial_hash_table_sizeB\026\n\024_maximum" - "_load_factorB\025\n\023_target_load_factor\032\362-\n\021" + "_load_factorB\025\n\023_target_load_factor\032\3640\n\021" "UpdateByOperation\022e\n\006column\030\001 \001(\0132S.io.d" "eephaven.proto.backplane.grpc.UpdateByRe" "quest.UpdateByOperation.UpdateByColumnH\000" - "\032\355,\n\016UpdateByColumn\022n\n\004spec\030\001 \001(\0132`.io.d" + "\032\357/\n\016UpdateByColumn\022n\n\004spec\030\001 \001(\0132`.io.d" "eephaven.proto.backplane.grpc.UpdateByRe" "quest.UpdateByOperation.UpdateByColumn.U" - "pdateBySpec\022\023\n\013match_pairs\030\002 \003(\t\032\325+\n\014Upd" + "pdateBySpec\022\023\n\013match_pairs\030\002 \003(\t\032\327.\n\014Upd" "ateBySpec\022\205\001\n\003sum\030\001 \001(\0132v.io.deephaven.p" "roto.backplane.grpc.UpdateByRequest.Upda" "teByOperation.UpdateByColumn.UpdateBySpe" @@ -3322,716 +3351,726 @@ const char descriptor_table_protodef_deephaven_2fproto_2ftable_2eproto[] PROTOBU "tdH\000\022\214\001\n\014rolling_wavg\030\024 \001(\0132t.io.deephav" "en.proto.backplane.grpc.UpdateByRequest." "UpdateByOperation.UpdateByColumn.UpdateB" - "ySpec.UpdateByRollingWAvgH\000\032\027\n\025UpdateByC" - "umulativeSum\032\027\n\025UpdateByCumulativeMin\032\027\n" - "\025UpdateByCumulativeMax\032\033\n\031UpdateByCumula" - "tiveProduct\032\016\n\014UpdateByFill\032\242\001\n\013UpdateBy" - "Ema\022E\n\007options\030\001 \001(\01324.io.deephaven.prot" - "o.backplane.grpc.UpdateByEmOptions\022L\n\014wi" - "ndow_scale\030\002 \001(\01326.io.deephaven.proto.ba" - "ckplane.grpc.UpdateByWindowScale\032\242\001\n\013Upd" - "ateByEms\022E\n\007options\030\001 \001(\01324.io.deephaven" - ".proto.backplane.grpc.UpdateByEmOptions\022" - "L\n\014window_scale\030\002 \001(\01326.io.deephaven.pro" - "to.backplane.grpc.UpdateByWindowScale\032\244\001" - "\n\rUpdateByEmMin\022E\n\007options\030\001 \001(\01324.io.de" - "ephaven.proto.backplane.grpc.UpdateByEmO" - "ptions\022L\n\014window_scale\030\002 \001(\01326.io.deepha" - "ven.proto.backplane.grpc.UpdateByWindowS" - "cale\032\244\001\n\rUpdateByEmMax\022E\n\007options\030\001 \001(\0132" - "4.io.deephaven.proto.backplane.grpc.Upda" - "teByEmOptions\022L\n\014window_scale\030\002 \001(\01326.io" - ".deephaven.proto.backplane.grpc.UpdateBy" - "WindowScale\032\244\001\n\rUpdateByEmStd\022E\n\007options" - "\030\001 \001(\01324.io.deephaven.proto.backplane.gr" - "pc.UpdateByEmOptions\022L\n\014window_scale\030\002 \001" - "(\01326.io.deephaven.proto.backplane.grpc.U" - "pdateByWindowScale\032Y\n\rUpdateByDelta\022H\n\007o" - "ptions\030\001 \001(\01327.io.deephaven.proto.backpl" - "ane.grpc.UpdateByDeltaOptions\032\300\001\n\022Update" - "ByRollingSum\022T\n\024reverse_window_scale\030\001 \001" - "(\01326.io.deephaven.proto.backplane.grpc.U" - "pdateByWindowScale\022T\n\024forward_window_sca" - "le\030\002 \001(\01326.io.deephaven.proto.backplane." - "grpc.UpdateByWindowScale\032\302\001\n\024UpdateByRol" - "lingGroup\022T\n\024reverse_window_scale\030\001 \001(\0132" - "6.io.deephaven.proto.backplane.grpc.Upda" - "teByWindowScale\022T\n\024forward_window_scale\030" + "ySpec.UpdateByRollingWAvgH\000\022\222\001\n\017rolling_" + "formula\030\025 \001(\0132w.io.deephaven.proto.backp" + "lane.grpc.UpdateByRequest.UpdateByOperat" + "ion.UpdateByColumn.UpdateBySpec.UpdateBy" + "RollingFormulaH\000\032\027\n\025UpdateByCumulativeSu" + "m\032\027\n\025UpdateByCumulativeMin\032\027\n\025UpdateByCu" + "mulativeMax\032\033\n\031UpdateByCumulativeProduct" + "\032\016\n\014UpdateByFill\032\242\001\n\013UpdateByEma\022E\n\007opti" + "ons\030\001 \001(\01324.io.deephaven.proto.backplane" + ".grpc.UpdateByEmOptions\022L\n\014window_scale\030" "\002 \001(\01326.io.deephaven.proto.backplane.grp" - "c.UpdateByWindowScale\032\300\001\n\022UpdateByRollin" - "gAvg\022T\n\024reverse_window_scale\030\001 \001(\01326.io." - "deephaven.proto.backplane.grpc.UpdateByW" - "indowScale\022T\n\024forward_window_scale\030\002 \001(\013" - "26.io.deephaven.proto.backplane.grpc.Upd" - "ateByWindowScale\032\300\001\n\022UpdateByRollingMin\022" - "T\n\024reverse_window_scale\030\001 \001(\01326.io.deeph" - "aven.proto.backplane.grpc.UpdateByWindow" - "Scale\022T\n\024forward_window_scale\030\002 \001(\01326.io" - ".deephaven.proto.backplane.grpc.UpdateBy" - "WindowScale\032\300\001\n\022UpdateByRollingMax\022T\n\024re" - "verse_window_scale\030\001 \001(\01326.io.deephaven." + "c.UpdateByWindowScale\032\242\001\n\013UpdateByEms\022E\n" + "\007options\030\001 \001(\01324.io.deephaven.proto.back" + "plane.grpc.UpdateByEmOptions\022L\n\014window_s" + "cale\030\002 \001(\01326.io.deephaven.proto.backplan" + "e.grpc.UpdateByWindowScale\032\244\001\n\rUpdateByE" + "mMin\022E\n\007options\030\001 \001(\01324.io.deephaven.pro" + "to.backplane.grpc.UpdateByEmOptions\022L\n\014w" + "indow_scale\030\002 \001(\01326.io.deephaven.proto.b" + "ackplane.grpc.UpdateByWindowScale\032\244\001\n\rUp" + "dateByEmMax\022E\n\007options\030\001 \001(\01324.io.deepha" + "ven.proto.backplane.grpc.UpdateByEmOptio" + "ns\022L\n\014window_scale\030\002 \001(\01326.io.deephaven." "proto.backplane.grpc.UpdateByWindowScale" - "\022T\n\024forward_window_scale\030\002 \001(\01326.io.deep" - "haven.proto.backplane.grpc.UpdateByWindo" - "wScale\032\304\001\n\026UpdateByRollingProduct\022T\n\024rev" + "\032\244\001\n\rUpdateByEmStd\022E\n\007options\030\001 \001(\01324.io" + ".deephaven.proto.backplane.grpc.UpdateBy" + "EmOptions\022L\n\014window_scale\030\002 \001(\01326.io.dee" + "phaven.proto.backplane.grpc.UpdateByWind" + "owScale\032Y\n\rUpdateByDelta\022H\n\007options\030\001 \001(" + "\01327.io.deephaven.proto.backplane.grpc.Up" + "dateByDeltaOptions\032\300\001\n\022UpdateByRollingSu" + "m\022T\n\024reverse_window_scale\030\001 \001(\01326.io.dee" + "phaven.proto.backplane.grpc.UpdateByWind" + "owScale\022T\n\024forward_window_scale\030\002 \001(\01326." + "io.deephaven.proto.backplane.grpc.Update" + "ByWindowScale\032\302\001\n\024UpdateByRollingGroup\022T" + "\n\024reverse_window_scale\030\001 \001(\01326.io.deepha" + "ven.proto.backplane.grpc.UpdateByWindowS" + "cale\022T\n\024forward_window_scale\030\002 \001(\01326.io." + "deephaven.proto.backplane.grpc.UpdateByW" + "indowScale\032\300\001\n\022UpdateByRollingAvg\022T\n\024rev" "erse_window_scale\030\001 \001(\01326.io.deephaven.p" "roto.backplane.grpc.UpdateByWindowScale\022" "T\n\024forward_window_scale\030\002 \001(\01326.io.deeph" "aven.proto.backplane.grpc.UpdateByWindow" - "Scale\032\302\001\n\024UpdateByRollingCount\022T\n\024revers" - "e_window_scale\030\001 \001(\01326.io.deephaven.prot" - "o.backplane.grpc.UpdateByWindowScale\022T\n\024" - "forward_window_scale\030\002 \001(\01326.io.deephave" - "n.proto.backplane.grpc.UpdateByWindowSca" - "le\032\300\001\n\022UpdateByRollingStd\022T\n\024reverse_win" - "dow_scale\030\001 \001(\01326.io.deephaven.proto.bac" - "kplane.grpc.UpdateByWindowScale\022T\n\024forwa" - "rd_window_scale\030\002 \001(\01326.io.deephaven.pro" - "to.backplane.grpc.UpdateByWindowScale\032\330\001" - "\n\023UpdateByRollingWAvg\022T\n\024reverse_window_" - "scale\030\001 \001(\01326.io.deephaven.proto.backpla" - "ne.grpc.UpdateByWindowScale\022T\n\024forward_w" - "indow_scale\030\002 \001(\01326.io.deephaven.proto.b" - "ackplane.grpc.UpdateByWindowScale\022\025\n\rwei" - "ght_column\030\003 \001(\tB\006\n\004typeB\006\n\004type\"\261\001\n\025Sel" - "ectDistinctRequest\022<\n\tresult_id\030\001 \001(\0132)." - "io.deephaven.proto.backplane.grpc.Ticket" - "\022D\n\tsource_id\030\002 \001(\01321.io.deephaven.proto" - ".backplane.grpc.TableReference\022\024\n\014column" - "_names\030\003 \003(\t\"\256\001\n\022DropColumnsRequest\022<\n\tr" - "esult_id\030\001 \001(\0132).io.deephaven.proto.back" - "plane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\01321.i" - "o.deephaven.proto.backplane.grpc.TableRe" - "ference\022\024\n\014column_names\030\003 \003(\t\"\265\001\n\036Unstru" - "cturedFilterTableRequest\022<\n\tresult_id\030\001 " + "Scale\032\300\001\n\022UpdateByRollingMin\022T\n\024reverse_" + "window_scale\030\001 \001(\01326.io.deephaven.proto." + "backplane.grpc.UpdateByWindowScale\022T\n\024fo" + "rward_window_scale\030\002 \001(\01326.io.deephaven." + "proto.backplane.grpc.UpdateByWindowScale" + "\032\300\001\n\022UpdateByRollingMax\022T\n\024reverse_windo" + "w_scale\030\001 \001(\01326.io.deephaven.proto.backp" + "lane.grpc.UpdateByWindowScale\022T\n\024forward" + "_window_scale\030\002 \001(\01326.io.deephaven.proto" + ".backplane.grpc.UpdateByWindowScale\032\304\001\n\026" + "UpdateByRollingProduct\022T\n\024reverse_window" + "_scale\030\001 \001(\01326.io.deephaven.proto.backpl" + "ane.grpc.UpdateByWindowScale\022T\n\024forward_" + "window_scale\030\002 \001(\01326.io.deephaven.proto." + "backplane.grpc.UpdateByWindowScale\032\302\001\n\024U" + "pdateByRollingCount\022T\n\024reverse_window_sc" + "ale\030\001 \001(\01326.io.deephaven.proto.backplane" + ".grpc.UpdateByWindowScale\022T\n\024forward_win" + "dow_scale\030\002 \001(\01326.io.deephaven.proto.bac" + "kplane.grpc.UpdateByWindowScale\032\300\001\n\022Upda" + "teByRollingStd\022T\n\024reverse_window_scale\030\001" + " \001(\01326.io.deephaven.proto.backplane.grpc" + ".UpdateByWindowScale\022T\n\024forward_window_s" + "cale\030\002 \001(\01326.io.deephaven.proto.backplan" + "e.grpc.UpdateByWindowScale\032\330\001\n\023UpdateByR" + "ollingWAvg\022T\n\024reverse_window_scale\030\001 \001(\013" + "26.io.deephaven.proto.backplane.grpc.Upd" + "ateByWindowScale\022T\n\024forward_window_scale" + "\030\002 \001(\01326.io.deephaven.proto.backplane.gr" + "pc.UpdateByWindowScale\022\025\n\rweight_column\030" + "\003 \001(\t\032\352\001\n\026UpdateByRollingFormula\022T\n\024reve" + "rse_window_scale\030\001 \001(\01326.io.deephaven.pr" + "oto.backplane.grpc.UpdateByWindowScale\022T" + "\n\024forward_window_scale\030\002 \001(\01326.io.deepha" + "ven.proto.backplane.grpc.UpdateByWindowS" + "cale\022\017\n\007formula\030\003 \001(\t\022\023\n\013param_token\030\004 \001" + "(\tB\006\n\004typeB\006\n\004type\"\261\001\n\025SelectDistinctReq" + "uest\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.p" + "roto.backplane.grpc.Ticket\022D\n\tsource_id\030" + "\002 \001(\01321.io.deephaven.proto.backplane.grp" + "c.TableReference\022\024\n\014column_names\030\003 \003(\t\"\256" + "\001\n\022DropColumnsRequest\022<\n\tresult_id\030\001 \001(\013" + "2).io.deephaven.proto.backplane.grpc.Tic" + "ket\022D\n\tsource_id\030\002 \001(\01321.io.deephaven.pr" + "oto.backplane.grpc.TableReference\022\024\n\014col" + "umn_names\030\003 \003(\t\"\265\001\n\036UnstructuredFilterTa" + "bleRequest\022<\n\tresult_id\030\001 \001(\0132).io.deeph" + "aven.proto.backplane.grpc.Ticket\022D\n\tsour" + "ce_id\030\002 \001(\01321.io.deephaven.proto.backpla" + "ne.grpc.TableReference\022\017\n\007filters\030\003 \003(\t\"" + "\255\001\n\021HeadOrTailRequest\022<\n\tresult_id\030\001 \001(\013" + "2).io.deephaven.proto.backplane.grpc.Tic" + "ket\022D\n\tsource_id\030\002 \001(\01321.io.deephaven.pr" + "oto.backplane.grpc.TableReference\022\024\n\010num" + "_rows\030\003 \001(\022B\0020\001\"\316\001\n\023HeadOrTailByRequest\022" + "<\n\tresult_id\030\001 \001(\0132).io.deephaven.proto." + "backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\013" + "21.io.deephaven.proto.backplane.grpc.Tab" + "leReference\022\024\n\010num_rows\030\003 \001(\022B\0020\001\022\035\n\025gro" + "up_by_column_specs\030\004 \003(\t\"\303\001\n\016UngroupRequ" + "est\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.pr" + "oto.backplane.grpc.Ticket\022D\n\tsource_id\030\002" + " \001(\01321.io.deephaven.proto.backplane.grpc" + ".TableReference\022\021\n\tnull_fill\030\003 \001(\010\022\032\n\022co" + "lumns_to_ungroup\030\004 \003(\t\"\255\001\n\022MergeTablesRe" + "quest\022<\n\tresult_id\030\001 \001(\0132).io.deephaven." + "proto.backplane.grpc.Ticket\022E\n\nsource_id" + "s\030\002 \003(\01321.io.deephaven.proto.backplane.g" + "rpc.TableReference\022\022\n\nkey_column\030\003 \001(\t\"\232" + "\001\n\024SnapshotTableRequest\022<\n\tresult_id\030\001 \001" + "(\0132).io.deephaven.proto.backplane.grpc.T" + "icket\022D\n\tsource_id\030\002 \001(\01321.io.deephaven." + "proto.backplane.grpc.TableReference\"\261\002\n\030" + "SnapshotWhenTableRequest\022<\n\tresult_id\030\001 " "\001(\0132).io.deephaven.proto.backplane.grpc." - "Ticket\022D\n\tsource_id\030\002 \001(\01321.io.deephaven" - ".proto.backplane.grpc.TableReference\022\017\n\007" - "filters\030\003 \003(\t\"\255\001\n\021HeadOrTailRequest\022<\n\tr" - "esult_id\030\001 \001(\0132).io.deephaven.proto.back" - "plane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\01321.i" - "o.deephaven.proto.backplane.grpc.TableRe" - "ference\022\024\n\010num_rows\030\003 \001(\022B\0020\001\"\316\001\n\023HeadOr" - "TailByRequest\022<\n\tresult_id\030\001 \001(\0132).io.de" - "ephaven.proto.backplane.grpc.Ticket\022D\n\ts" - "ource_id\030\002 \001(\01321.io.deephaven.proto.back" - "plane.grpc.TableReference\022\024\n\010num_rows\030\003 " - "\001(\022B\0020\001\022\035\n\025group_by_column_specs\030\004 \003(\t\"\303" - "\001\n\016UngroupRequest\022<\n\tresult_id\030\001 \001(\0132).i" - "o.deephaven.proto.backplane.grpc.Ticket\022" - "D\n\tsource_id\030\002 \001(\01321.io.deephaven.proto." - "backplane.grpc.TableReference\022\021\n\tnull_fi" - "ll\030\003 \001(\010\022\032\n\022columns_to_ungroup\030\004 \003(\t\"\255\001\n" - "\022MergeTablesRequest\022<\n\tresult_id\030\001 \001(\0132)" - ".io.deephaven.proto.backplane.grpc.Ticke" - "t\022E\n\nsource_ids\030\002 \003(\01321.io.deephaven.pro" - "to.backplane.grpc.TableReference\022\022\n\nkey_" - "column\030\003 \001(\t\"\232\001\n\024SnapshotTableRequest\022<\n" - "\tresult_id\030\001 \001(\0132).io.deephaven.proto.ba" - "ckplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\01321" + "Ticket\022B\n\007base_id\030\002 \001(\01321.io.deephaven.p" + "roto.backplane.grpc.TableReference\022E\n\ntr" + "igger_id\030\003 \001(\01321.io.deephaven.proto.back" + "plane.grpc.TableReference\022\017\n\007initial\030\004 \001" + "(\010\022\023\n\013incremental\030\005 \001(\010\022\017\n\007history\030\006 \001(\010" + "\022\025\n\rstamp_columns\030\007 \003(\t\"\247\002\n\026CrossJoinTab" + "lesRequest\022<\n\tresult_id\030\001 \001(\0132).io.deeph" + "aven.proto.backplane.grpc.Ticket\022B\n\007left" + "_id\030\002 \001(\01321.io.deephaven.proto.backplane" + ".grpc.TableReference\022C\n\010right_id\030\003 \001(\01321" ".io.deephaven.proto.backplane.grpc.Table" - "Reference\"\261\002\n\030SnapshotWhenTableRequest\022<" - "\n\tresult_id\030\001 \001(\0132).io.deephaven.proto.b" - "ackplane.grpc.Ticket\022B\n\007base_id\030\002 \001(\01321." - "io.deephaven.proto.backplane.grpc.TableR" - "eference\022E\n\ntrigger_id\030\003 \001(\01321.io.deepha" - "ven.proto.backplane.grpc.TableReference\022" - "\017\n\007initial\030\004 \001(\010\022\023\n\013incremental\030\005 \001(\010\022\017\n" - "\007history\030\006 \001(\010\022\025\n\rstamp_columns\030\007 \003(\t\"\247\002" - "\n\026CrossJoinTablesRequest\022<\n\tresult_id\030\001 " - "\001(\0132).io.deephaven.proto.backplane.grpc." - "Ticket\022B\n\007left_id\030\002 \001(\01321.io.deephaven.p" - "roto.backplane.grpc.TableReference\022C\n\010ri" - "ght_id\030\003 \001(\01321.io.deephaven.proto.backpl" - "ane.grpc.TableReference\022\030\n\020columns_to_ma" - "tch\030\004 \003(\t\022\026\n\016columns_to_add\030\005 \003(\t\022\024\n\014res" - "erve_bits\030\006 \001(\005\"\223\002\n\030NaturalJoinTablesReq" - "uest\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.p" - "roto.backplane.grpc.Ticket\022B\n\007left_id\030\002 " - "\001(\01321.io.deephaven.proto.backplane.grpc." - "TableReference\022C\n\010right_id\030\003 \001(\01321.io.de" - "ephaven.proto.backplane.grpc.TableRefere" - "nce\022\030\n\020columns_to_match\030\004 \003(\t\022\026\n\016columns" - "_to_add\030\005 \003(\t\"\221\002\n\026ExactJoinTablesRequest" - "\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.proto" - ".backplane.grpc.Ticket\022B\n\007left_id\030\002 \001(\0132" - "1.io.deephaven.proto.backplane.grpc.Tabl" - "eReference\022C\n\010right_id\030\003 \001(\01321.io.deepha" - "ven.proto.backplane.grpc.TableReference\022" - "\030\n\020columns_to_match\030\004 \003(\t\022\026\n\016columns_to_" - "add\030\005 \003(\t\"\220\002\n\025LeftJoinTablesRequest\022<\n\tr" - "esult_id\030\001 \001(\0132).io.deephaven.proto.back" - "plane.grpc.Ticket\022B\n\007left_id\030\002 \001(\01321.io." - "deephaven.proto.backplane.grpc.TableRefe" - "rence\022C\n\010right_id\030\003 \001(\01321.io.deephaven.p" - "roto.backplane.grpc.TableReference\022\030\n\020co" - "lumns_to_match\030\004 \003(\t\022\026\n\016columns_to_add\030\005" - " \003(\t\"\321\003\n\025AsOfJoinTablesRequest\022<\n\tresult" + "Reference\022\030\n\020columns_to_match\030\004 \003(\t\022\026\n\016c" + "olumns_to_add\030\005 \003(\t\022\024\n\014reserve_bits\030\006 \001(" + "\005\"\223\002\n\030NaturalJoinTablesRequest\022<\n\tresult" "_id\030\001 \001(\0132).io.deephaven.proto.backplane" ".grpc.Ticket\022B\n\007left_id\030\002 \001(\01321.io.deeph" "aven.proto.backplane.grpc.TableReference" "\022C\n\010right_id\030\003 \001(\01321.io.deephaven.proto." "backplane.grpc.TableReference\022\030\n\020columns" - "_to_match\030\004 \003(\t\022\026\n\016columns_to_add\030\005 \003(\t\022" - "\\\n\020as_of_match_rule\030\007 \001(\0162B.io.deephaven" - ".proto.backplane.grpc.AsOfJoinTablesRequ" - "est.MatchRule\"]\n\tMatchRule\022\023\n\017LESS_THAN_" - "EQUAL\020\000\022\r\n\tLESS_THAN\020\001\022\026\n\022GREATER_THAN_E" - "QUAL\020\002\022\020\n\014GREATER_THAN\020\003\032\002\030\001:\002\030\001\"\246\002\n\022AjR" - "ajTablesRequest\022<\n\tresult_id\030\001 \001(\0132).io." - "deephaven.proto.backplane.grpc.Ticket\022B\n" - "\007left_id\030\002 \001(\01321.io.deephaven.proto.back" - "plane.grpc.TableReference\022C\n\010right_id\030\003 " - "\001(\01321.io.deephaven.proto.backplane.grpc." - "TableReference\022\033\n\023exact_match_columns\030\004 " - "\003(\t\022\024\n\014as_of_column\030\005 \001(\t\022\026\n\016columns_to_" - "add\030\006 \003(\t\"\313\006\n\026RangeJoinTablesRequest\022<\n\t" - "result_id\030\001 \001(\0132).io.deephaven.proto.bac" - "kplane.grpc.Ticket\022B\n\007left_id\030\002 \001(\01321.io" - ".deephaven.proto.backplane.grpc.TableRef" - "erence\022C\n\010right_id\030\003 \001(\01321.io.deephaven." - "proto.backplane.grpc.TableReference\022\033\n\023e" - "xact_match_columns\030\004 \003(\t\022\031\n\021left_start_c" - "olumn\030\005 \001(\t\022b\n\020range_start_rule\030\006 \001(\0162H." - "io.deephaven.proto.backplane.grpc.RangeJ" - "oinTablesRequest.RangeStartRule\022\032\n\022right" - "_range_column\030\007 \001(\t\022^\n\016range_end_rule\030\010 " - "\001(\0162F.io.deephaven.proto.backplane.grpc." - "RangeJoinTablesRequest.RangeEndRule\022\027\n\017l" - "eft_end_column\030\t \001(\t\022D\n\014aggregations\030\n \003" - "(\0132..io.deephaven.proto.backplane.grpc.A" - "ggregation\"v\n\016RangeStartRule\022\025\n\021START_UN" - "SPECIFIED\020\000\022\r\n\tLESS_THAN\020\001\022\026\n\022LESS_THAN_" - "OR_EQUAL\020\002\022&\n\"LESS_THAN_OR_EQUAL_ALLOW_P" - "RECEDING\020\003\"{\n\014RangeEndRule\022\023\n\017END_UNSPEC" - "IFIED\020\000\022\020\n\014GREATER_THAN\020\001\022\031\n\025GREATER_THA" - "N_OR_EQUAL\020\002\022)\n%GREATER_THAN_OR_EQUAL_AL" - "LOW_FOLLOWING\020\003\"\376\004\n\025ComboAggregateReques" + "_to_match\030\004 \003(\t\022\026\n\016columns_to_add\030\005 \003(\t\"" + "\221\002\n\026ExactJoinTablesRequest\022<\n\tresult_id\030" + "\001 \001(\0132).io.deephaven.proto.backplane.grp" + "c.Ticket\022B\n\007left_id\030\002 \001(\01321.io.deephaven" + ".proto.backplane.grpc.TableReference\022C\n\010" + "right_id\030\003 \001(\01321.io.deephaven.proto.back" + "plane.grpc.TableReference\022\030\n\020columns_to_" + "match\030\004 \003(\t\022\026\n\016columns_to_add\030\005 \003(\t\"\220\002\n\025" + "LeftJoinTablesRequest\022<\n\tresult_id\030\001 \001(\013" + "2).io.deephaven.proto.backplane.grpc.Tic" + "ket\022B\n\007left_id\030\002 \001(\01321.io.deephaven.prot" + "o.backplane.grpc.TableReference\022C\n\010right" + "_id\030\003 \001(\01321.io.deephaven.proto.backplane" + ".grpc.TableReference\022\030\n\020columns_to_match" + "\030\004 \003(\t\022\026\n\016columns_to_add\030\005 \003(\t\"\321\003\n\025AsOfJ" + "oinTablesRequest\022<\n\tresult_id\030\001 \001(\0132).io" + ".deephaven.proto.backplane.grpc.Ticket\022B" + "\n\007left_id\030\002 \001(\01321.io.deephaven.proto.bac" + "kplane.grpc.TableReference\022C\n\010right_id\030\003" + " \001(\01321.io.deephaven.proto.backplane.grpc" + ".TableReference\022\030\n\020columns_to_match\030\004 \003(" + "\t\022\026\n\016columns_to_add\030\005 \003(\t\022\\\n\020as_of_match" + "_rule\030\007 \001(\0162B.io.deephaven.proto.backpla" + "ne.grpc.AsOfJoinTablesRequest.MatchRule\"" + "]\n\tMatchRule\022\023\n\017LESS_THAN_EQUAL\020\000\022\r\n\tLES" + "S_THAN\020\001\022\026\n\022GREATER_THAN_EQUAL\020\002\022\020\n\014GREA" + "TER_THAN\020\003\032\002\030\001:\002\030\001\"\246\002\n\022AjRajTablesReques" "t\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.prot" - "o.backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001" - "(\01321.io.deephaven.proto.backplane.grpc.T" - "ableReference\022V\n\naggregates\030\003 \003(\0132B.io.d" - "eephaven.proto.backplane.grpc.ComboAggre" - "gateRequest.Aggregate\022\030\n\020group_by_column" - "s\030\004 \003(\t\022\023\n\013force_combo\030\005 \001(\010\032\255\001\n\tAggrega" - "te\022N\n\004type\030\001 \001(\0162@.io.deephaven.proto.ba" - "ckplane.grpc.ComboAggregateRequest.AggTy" - "pe\022\023\n\013match_pairs\030\002 \003(\t\022\023\n\013column_name\030\003" - " \001(\t\022\022\n\npercentile\030\004 \001(\001\022\022\n\navg_median\030\005" - " \001(\010\"\245\001\n\007AggType\022\007\n\003SUM\020\000\022\013\n\007ABS_SUM\020\001\022\t" - "\n\005GROUP\020\002\022\007\n\003AVG\020\003\022\t\n\005COUNT\020\004\022\t\n\005FIRST\020\005" - "\022\010\n\004LAST\020\006\022\007\n\003MIN\020\007\022\007\n\003MAX\020\010\022\n\n\006MEDIAN\020\t" - "\022\016\n\nPERCENTILE\020\n\022\007\n\003STD\020\013\022\007\n\003VAR\020\014\022\020\n\014WE" - "IGHTED_AVG\020\r:\002\030\001\"\355\001\n\023AggregateAllRequest" - "\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.proto" - ".backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(" - "\01321.io.deephaven.proto.backplane.grpc.Ta" - "bleReference\0228\n\004spec\030\003 \001(\0132*.io.deephave" - "n.proto.backplane.grpc.AggSpec\022\030\n\020group_" - "by_columns\030\004 \003(\t\"\327\027\n\007AggSpec\022K\n\007abs_sum\030" - "\001 \001(\01328.io.deephaven.proto.backplane.grp" - "c.AggSpec.AggSpecAbsSumH\000\022i\n\026approximate" - "_percentile\030\002 \001(\0132G.io.deephaven.proto.b" - "ackplane.grpc.AggSpec.AggSpecApproximate" - "PercentileH\000\022D\n\003avg\030\003 \001(\01325.io.deephaven" - ".proto.backplane.grpc.AggSpec.AggSpecAvg" - "H\000\022Y\n\016count_distinct\030\004 \001(\0132\?.io.deephave" - "n.proto.backplane.grpc.AggSpec.AggSpecCo" - "untDistinctH\000\022N\n\010distinct\030\005 \001(\0132:.io.dee" + "o.backplane.grpc.Ticket\022B\n\007left_id\030\002 \001(\013" + "21.io.deephaven.proto.backplane.grpc.Tab" + "leReference\022C\n\010right_id\030\003 \001(\01321.io.deeph" + "aven.proto.backplane.grpc.TableReference" + "\022\033\n\023exact_match_columns\030\004 \003(\t\022\024\n\014as_of_c" + "olumn\030\005 \001(\t\022\026\n\016columns_to_add\030\006 \003(\t\"\313\006\n\026" + "RangeJoinTablesRequest\022<\n\tresult_id\030\001 \001(" + "\0132).io.deephaven.proto.backplane.grpc.Ti" + "cket\022B\n\007left_id\030\002 \001(\01321.io.deephaven.pro" + "to.backplane.grpc.TableReference\022C\n\010righ" + "t_id\030\003 \001(\01321.io.deephaven.proto.backplan" + "e.grpc.TableReference\022\033\n\023exact_match_col" + "umns\030\004 \003(\t\022\031\n\021left_start_column\030\005 \001(\t\022b\n" + "\020range_start_rule\030\006 \001(\0162H.io.deephaven.p" + "roto.backplane.grpc.RangeJoinTablesReque" + "st.RangeStartRule\022\032\n\022right_range_column\030" + "\007 \001(\t\022^\n\016range_end_rule\030\010 \001(\0162F.io.deeph" + "aven.proto.backplane.grpc.RangeJoinTable" + "sRequest.RangeEndRule\022\027\n\017left_end_column" + "\030\t \001(\t\022D\n\014aggregations\030\n \003(\0132..io.deepha" + "ven.proto.backplane.grpc.Aggregation\"v\n\016" + "RangeStartRule\022\025\n\021START_UNSPECIFIED\020\000\022\r\n" + "\tLESS_THAN\020\001\022\026\n\022LESS_THAN_OR_EQUAL\020\002\022&\n\"" + "LESS_THAN_OR_EQUAL_ALLOW_PRECEDING\020\003\"{\n\014" + "RangeEndRule\022\023\n\017END_UNSPECIFIED\020\000\022\020\n\014GRE" + "ATER_THAN\020\001\022\031\n\025GREATER_THAN_OR_EQUAL\020\002\022)" + "\n%GREATER_THAN_OR_EQUAL_ALLOW_FOLLOWING\020" + "\003\"\376\004\n\025ComboAggregateRequest\022<\n\tresult_id" + "\030\001 \001(\0132).io.deephaven.proto.backplane.gr" + "pc.Ticket\022D\n\tsource_id\030\002 \001(\01321.io.deepha" + "ven.proto.backplane.grpc.TableReference\022" + "V\n\naggregates\030\003 \003(\0132B.io.deephaven.proto" + ".backplane.grpc.ComboAggregateRequest.Ag" + "gregate\022\030\n\020group_by_columns\030\004 \003(\t\022\023\n\013for" + "ce_combo\030\005 \001(\010\032\255\001\n\tAggregate\022N\n\004type\030\001 \001" + "(\0162@.io.deephaven.proto.backplane.grpc.C" + "omboAggregateRequest.AggType\022\023\n\013match_pa" + "irs\030\002 \003(\t\022\023\n\013column_name\030\003 \001(\t\022\022\n\npercen" + "tile\030\004 \001(\001\022\022\n\navg_median\030\005 \001(\010\"\245\001\n\007AggTy" + "pe\022\007\n\003SUM\020\000\022\013\n\007ABS_SUM\020\001\022\t\n\005GROUP\020\002\022\007\n\003A" + "VG\020\003\022\t\n\005COUNT\020\004\022\t\n\005FIRST\020\005\022\010\n\004LAST\020\006\022\007\n\003" + "MIN\020\007\022\007\n\003MAX\020\010\022\n\n\006MEDIAN\020\t\022\016\n\nPERCENTILE" + "\020\n\022\007\n\003STD\020\013\022\007\n\003VAR\020\014\022\020\n\014WEIGHTED_AVG\020\r:\002" + "\030\001\"\355\001\n\023AggregateAllRequest\022<\n\tresult_id\030" + "\001 \001(\0132).io.deephaven.proto.backplane.grp" + "c.Ticket\022D\n\tsource_id\030\002 \001(\01321.io.deephav" + "en.proto.backplane.grpc.TableReference\0228" + "\n\004spec\030\003 \001(\0132*.io.deephaven.proto.backpl" + "ane.grpc.AggSpec\022\030\n\020group_by_columns\030\004 \003" + "(\t\"\327\027\n\007AggSpec\022K\n\007abs_sum\030\001 \001(\01328.io.dee" + "phaven.proto.backplane.grpc.AggSpec.AggS" + "pecAbsSumH\000\022i\n\026approximate_percentile\030\002 " + "\001(\0132G.io.deephaven.proto.backplane.grpc." + "AggSpec.AggSpecApproximatePercentileH\000\022D" + "\n\003avg\030\003 \001(\01325.io.deephaven.proto.backpla" + "ne.grpc.AggSpec.AggSpecAvgH\000\022Y\n\016count_di" + "stinct\030\004 \001(\0132\?.io.deephaven.proto.backpl" + "ane.grpc.AggSpec.AggSpecCountDistinctH\000\022" + "N\n\010distinct\030\005 \001(\0132:.io.deephaven.proto.b" + "ackplane.grpc.AggSpec.AggSpecDistinctH\000\022" + "H\n\005first\030\006 \001(\01327.io.deephaven.proto.back" + "plane.grpc.AggSpec.AggSpecFirstH\000\022L\n\007for" + "mula\030\007 \001(\01329.io.deephaven.proto.backplan" + "e.grpc.AggSpec.AggSpecFormulaH\000\022J\n\006freez" + "e\030\010 \001(\01328.io.deephaven.proto.backplane.g" + "rpc.AggSpec.AggSpecFreezeH\000\022H\n\005group\030\t \001" + "(\01327.io.deephaven.proto.backplane.grpc.A" + "ggSpec.AggSpecGroupH\000\022F\n\004last\030\n \001(\01326.io" + ".deephaven.proto.backplane.grpc.AggSpec." + "AggSpecLastH\000\022D\n\003max\030\013 \001(\01325.io.deephave" + "n.proto.backplane.grpc.AggSpec.AggSpecMa" + "xH\000\022J\n\006median\030\014 \001(\01328.io.deephaven.proto" + ".backplane.grpc.AggSpec.AggSpecMedianH\000\022" + "D\n\003min\030\r \001(\01325.io.deephaven.proto.backpl" + "ane.grpc.AggSpec.AggSpecMinH\000\022R\n\npercent" + "ile\030\016 \001(\0132<.io.deephaven.proto.backplane" + ".grpc.AggSpec.AggSpecPercentileH\000\022P\n\014sor" + "ted_first\030\017 \001(\01328.io.deephaven.proto.bac" + "kplane.grpc.AggSpec.AggSpecSortedH\000\022O\n\013s" + "orted_last\030\020 \001(\01328.io.deephaven.proto.ba" + "ckplane.grpc.AggSpec.AggSpecSortedH\000\022D\n\003" + "std\030\021 \001(\01325.io.deephaven.proto.backplane" + ".grpc.AggSpec.AggSpecStdH\000\022D\n\003sum\030\022 \001(\0132" + "5.io.deephaven.proto.backplane.grpc.AggS" + "pec.AggSpecSumH\000\022M\n\010t_digest\030\023 \001(\01329.io." + "deephaven.proto.backplane.grpc.AggSpec.A" + "ggSpecTDigestH\000\022J\n\006unique\030\024 \001(\01328.io.dee" "phaven.proto.backplane.grpc.AggSpec.AggS" - "pecDistinctH\000\022H\n\005first\030\006 \001(\01327.io.deepha" - "ven.proto.backplane.grpc.AggSpec.AggSpec" - "FirstH\000\022L\n\007formula\030\007 \001(\01329.io.deephaven." - "proto.backplane.grpc.AggSpec.AggSpecForm" - "ulaH\000\022J\n\006freeze\030\010 \001(\01328.io.deephaven.pro" - "to.backplane.grpc.AggSpec.AggSpecFreezeH" - "\000\022H\n\005group\030\t \001(\01327.io.deephaven.proto.ba" - "ckplane.grpc.AggSpec.AggSpecGroupH\000\022F\n\004l" - "ast\030\n \001(\01326.io.deephaven.proto.backplane" - ".grpc.AggSpec.AggSpecLastH\000\022D\n\003max\030\013 \001(\013" - "25.io.deephaven.proto.backplane.grpc.Agg" - "Spec.AggSpecMaxH\000\022J\n\006median\030\014 \001(\01328.io.d" + "pecUniqueH\000\022R\n\014weighted_avg\030\025 \001(\0132:.io.d" "eephaven.proto.backplane.grpc.AggSpec.Ag" - "gSpecMedianH\000\022D\n\003min\030\r \001(\01325.io.deephave" - "n.proto.backplane.grpc.AggSpec.AggSpecMi" - "nH\000\022R\n\npercentile\030\016 \001(\0132<.io.deephaven.p" - "roto.backplane.grpc.AggSpec.AggSpecPerce" - "ntileH\000\022P\n\014sorted_first\030\017 \001(\01328.io.deeph" - "aven.proto.backplane.grpc.AggSpec.AggSpe" - "cSortedH\000\022O\n\013sorted_last\030\020 \001(\01328.io.deep" - "haven.proto.backplane.grpc.AggSpec.AggSp" - "ecSortedH\000\022D\n\003std\030\021 \001(\01325.io.deephaven.p" - "roto.backplane.grpc.AggSpec.AggSpecStdH\000" - "\022D\n\003sum\030\022 \001(\01325.io.deephaven.proto.backp" - "lane.grpc.AggSpec.AggSpecSumH\000\022M\n\010t_dige" - "st\030\023 \001(\01329.io.deephaven.proto.backplane." - "grpc.AggSpec.AggSpecTDigestH\000\022J\n\006unique\030" - "\024 \001(\01328.io.deephaven.proto.backplane.grp" - "c.AggSpec.AggSpecUniqueH\000\022R\n\014weighted_av" - "g\030\025 \001(\0132:.io.deephaven.proto.backplane.g" - "rpc.AggSpec.AggSpecWeightedH\000\022R\n\014weighte" - "d_sum\030\026 \001(\0132:.io.deephaven.proto.backpla" - "ne.grpc.AggSpec.AggSpecWeightedH\000\022D\n\003var" - "\030\027 \001(\01325.io.deephaven.proto.backplane.gr" - "pc.AggSpec.AggSpecVarH\000\032\\\n\034AggSpecApprox" - "imatePercentile\022\022\n\npercentile\030\001 \001(\001\022\030\n\013c" - "ompression\030\002 \001(\001H\000\210\001\001B\016\n\014_compression\032+\n" - "\024AggSpecCountDistinct\022\023\n\013count_nulls\030\001 \001" - "(\010\032(\n\017AggSpecDistinct\022\025\n\rinclude_nulls\030\001" - " \001(\010\0326\n\016AggSpecFormula\022\017\n\007formula\030\001 \001(\t\022" - "\023\n\013param_token\030\002 \001(\t\032/\n\rAggSpecMedian\022\036\n" - "\026average_evenly_divided\030\001 \001(\010\032G\n\021AggSpec" - "Percentile\022\022\n\npercentile\030\001 \001(\001\022\036\n\026averag" - "e_evenly_divided\030\002 \001(\010\032`\n\rAggSpecSorted\022" - "O\n\007columns\030\001 \003(\0132>.io.deephaven.proto.ba" - "ckplane.grpc.AggSpec.AggSpecSortedColumn" - "\032*\n\023AggSpecSortedColumn\022\023\n\013column_name\030\001" - " \001(\t\032:\n\016AggSpecTDigest\022\030\n\013compression\030\001 " - "\001(\001H\000\210\001\001B\016\n\014_compression\032\210\001\n\rAggSpecUniq" - "ue\022\025\n\rinclude_nulls\030\001 \001(\010\022`\n\023non_unique_" - "sentinel\030\002 \001(\0132C.io.deephaven.proto.back" - "plane.grpc.AggSpec.AggSpecNonUniqueSenti" - "nel\032\265\002\n\030AggSpecNonUniqueSentinel\022B\n\nnull" - "_value\030\001 \001(\0162,.io.deephaven.proto.backpl" - "ane.grpc.NullValueH\000\022\026\n\014string_value\030\002 \001" - "(\tH\000\022\023\n\tint_value\030\003 \001(\021H\000\022\030\n\nlong_value\030" - "\004 \001(\022B\0020\001H\000\022\025\n\013float_value\030\005 \001(\002H\000\022\026\n\014do" - "uble_value\030\006 \001(\001H\000\022\024\n\nbool_value\030\007 \001(\010H\000" - "\022\024\n\nbyte_value\030\010 \001(\021H\000\022\025\n\013short_value\030\t " - "\001(\021H\000\022\024\n\nchar_value\030\n \001(\021H\000B\006\n\004type\032(\n\017A" - "ggSpecWeighted\022\025\n\rweight_column\030\001 \001(\t\032\017\n" - "\rAggSpecAbsSum\032\014\n\nAggSpecAvg\032\016\n\014AggSpecF" - "irst\032\017\n\rAggSpecFreeze\032\016\n\014AggSpecGroup\032\r\n" - "\013AggSpecLast\032\014\n\nAggSpecMax\032\014\n\nAggSpecMin" - "\032\014\n\nAggSpecStd\032\014\n\nAggSpecSum\032\014\n\nAggSpecV" - "arB\006\n\004type\"\334\002\n\020AggregateRequest\022<\n\tresul" - "t_id\030\001 \001(\0132).io.deephaven.proto.backplan" - "e.grpc.Ticket\022D\n\tsource_id\030\002 \001(\01321.io.de" - "ephaven.proto.backplane.grpc.TableRefere" - "nce\022L\n\021initial_groups_id\030\003 \001(\01321.io.deep" - "haven.proto.backplane.grpc.TableReferenc" - "e\022\026\n\016preserve_empty\030\004 \001(\010\022D\n\014aggregation" - "s\030\005 \003(\0132..io.deephaven.proto.backplane.g" - "rpc.Aggregation\022\030\n\020group_by_columns\030\006 \003(" - "\t\"\323\005\n\013Aggregation\022T\n\007columns\030\001 \001(\0132A.io." + "gSpecWeightedH\000\022R\n\014weighted_sum\030\026 \001(\0132:." + "io.deephaven.proto.backplane.grpc.AggSpe" + "c.AggSpecWeightedH\000\022D\n\003var\030\027 \001(\01325.io.de" + "ephaven.proto.backplane.grpc.AggSpec.Agg" + "SpecVarH\000\032\\\n\034AggSpecApproximatePercentil" + "e\022\022\n\npercentile\030\001 \001(\001\022\030\n\013compression\030\002 \001" + "(\001H\000\210\001\001B\016\n\014_compression\032+\n\024AggSpecCountD" + "istinct\022\023\n\013count_nulls\030\001 \001(\010\032(\n\017AggSpecD" + "istinct\022\025\n\rinclude_nulls\030\001 \001(\010\0326\n\016AggSpe" + "cFormula\022\017\n\007formula\030\001 \001(\t\022\023\n\013param_token" + "\030\002 \001(\t\032/\n\rAggSpecMedian\022\036\n\026average_evenl" + "y_divided\030\001 \001(\010\032G\n\021AggSpecPercentile\022\022\n\n" + "percentile\030\001 \001(\001\022\036\n\026average_evenly_divid" + "ed\030\002 \001(\010\032`\n\rAggSpecSorted\022O\n\007columns\030\001 \003" + "(\0132>.io.deephaven.proto.backplane.grpc.A" + "ggSpec.AggSpecSortedColumn\032*\n\023AggSpecSor" + "tedColumn\022\023\n\013column_name\030\001 \001(\t\032:\n\016AggSpe" + "cTDigest\022\030\n\013compression\030\001 \001(\001H\000\210\001\001B\016\n\014_c" + "ompression\032\210\001\n\rAggSpecUnique\022\025\n\rinclude_" + "nulls\030\001 \001(\010\022`\n\023non_unique_sentinel\030\002 \001(\013" + "2C.io.deephaven.proto.backplane.grpc.Agg" + "Spec.AggSpecNonUniqueSentinel\032\265\002\n\030AggSpe" + "cNonUniqueSentinel\022B\n\nnull_value\030\001 \001(\0162," + ".io.deephaven.proto.backplane.grpc.NullV" + "alueH\000\022\026\n\014string_value\030\002 \001(\tH\000\022\023\n\tint_va" + "lue\030\003 \001(\021H\000\022\030\n\nlong_value\030\004 \001(\022B\0020\001H\000\022\025\n" + "\013float_value\030\005 \001(\002H\000\022\026\n\014double_value\030\006 \001" + "(\001H\000\022\024\n\nbool_value\030\007 \001(\010H\000\022\024\n\nbyte_value" + "\030\010 \001(\021H\000\022\025\n\013short_value\030\t \001(\021H\000\022\024\n\nchar_" + "value\030\n \001(\021H\000B\006\n\004type\032(\n\017AggSpecWeighted" + "\022\025\n\rweight_column\030\001 \001(\t\032\017\n\rAggSpecAbsSum" + "\032\014\n\nAggSpecAvg\032\016\n\014AggSpecFirst\032\017\n\rAggSpe" + "cFreeze\032\016\n\014AggSpecGroup\032\r\n\013AggSpecLast\032\014" + "\n\nAggSpecMax\032\014\n\nAggSpecMin\032\014\n\nAggSpecStd" + "\032\014\n\nAggSpecSum\032\014\n\nAggSpecVarB\006\n\004type\"\334\002\n" + "\020AggregateRequest\022<\n\tresult_id\030\001 \001(\0132).i" + "o.deephaven.proto.backplane.grpc.Ticket\022" + "D\n\tsource_id\030\002 \001(\01321.io.deephaven.proto." + "backplane.grpc.TableReference\022L\n\021initial" + "_groups_id\030\003 \001(\01321.io.deephaven.proto.ba" + "ckplane.grpc.TableReference\022\026\n\016preserve_" + "empty\030\004 \001(\010\022D\n\014aggregations\030\005 \003(\0132..io.d" + "eephaven.proto.backplane.grpc.Aggregatio" + "n\022\030\n\020group_by_columns\030\006 \003(\t\"\323\005\n\013Aggregat" + "ion\022T\n\007columns\030\001 \001(\0132A.io.deephaven.prot" + "o.backplane.grpc.Aggregation.Aggregation" + "ColumnsH\000\022P\n\005count\030\002 \001(\0132\?.io.deephaven." + "proto.backplane.grpc.Aggregation.Aggrega" + "tionCountH\000\022Y\n\rfirst_row_key\030\003 \001(\0132@.io." "deephaven.proto.backplane.grpc.Aggregati" - "on.AggregationColumnsH\000\022P\n\005count\030\002 \001(\0132\?" - ".io.deephaven.proto.backplane.grpc.Aggre" - "gation.AggregationCountH\000\022Y\n\rfirst_row_k" - "ey\030\003 \001(\0132@.io.deephaven.proto.backplane." - "grpc.Aggregation.AggregationRowKeyH\000\022X\n\014" - "last_row_key\030\004 \001(\0132@.io.deephaven.proto." - "backplane.grpc.Aggregation.AggregationRo" - "wKeyH\000\022X\n\tpartition\030\005 \001(\0132C.io.deephaven" - ".proto.backplane.grpc.Aggregation.Aggreg" - "ationPartitionH\000\032c\n\022AggregationColumns\0228" - "\n\004spec\030\001 \001(\0132*.io.deephaven.proto.backpl" - "ane.grpc.AggSpec\022\023\n\013match_pairs\030\002 \003(\t\032\'\n" - "\020AggregationCount\022\023\n\013column_name\030\001 \001(\t\032(" - "\n\021AggregationRowKey\022\023\n\013column_name\030\001 \001(\t" - "\032M\n\024AggregationPartition\022\023\n\013column_name\030" - "\001 \001(\t\022 \n\030include_group_by_columns\030\002 \001(\010B" - "\006\n\004type\"\341\001\n\016SortDescriptor\022\023\n\013column_nam" - "e\030\001 \001(\t\022\023\n\013is_absolute\030\002 \001(\010\022R\n\tdirectio" - "n\030\003 \001(\0162\?.io.deephaven.proto.backplane.g" - "rpc.SortDescriptor.SortDirection\"Q\n\rSort" - "Direction\022\013\n\007UNKNOWN\020\000\022\027\n\nDESCENDING\020\377\377\377" - "\377\377\377\377\377\377\001\022\r\n\tASCENDING\020\001\022\013\n\007REVERSE\020\002\"\330\001\n\020" - "SortTableRequest\022<\n\tresult_id\030\001 \001(\0132).io" - ".deephaven.proto.backplane.grpc.Ticket\022D" - "\n\tsource_id\030\002 \001(\01321.io.deephaven.proto.b" - "ackplane.grpc.TableReference\022@\n\005sorts\030\003 " - "\003(\01321.io.deephaven.proto.backplane.grpc." - "SortDescriptor\"\327\001\n\022FilterTableRequest\022<\n" - "\tresult_id\030\001 \001(\0132).io.deephaven.proto.ba" - "ckplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\01321" - ".io.deephaven.proto.backplane.grpc.Table" - "Reference\022=\n\007filters\030\003 \003(\0132,.io.deephave" - "n.proto.backplane.grpc.Condition\"\371\001\n\016See" - "kRowRequest\022<\n\tsource_id\030\001 \001(\0132).io.deep" - "haven.proto.backplane.grpc.Ticket\022\030\n\014sta" - "rting_row\030\002 \001(\022B\0020\001\022\023\n\013column_name\030\003 \001(\t" - "\022>\n\nseek_value\030\004 \001(\0132*.io.deephaven.prot" - "o.backplane.grpc.Literal\022\023\n\013insensitive\030" - "\005 \001(\010\022\020\n\010contains\030\006 \001(\010\022\023\n\013is_backward\030\007" - " \001(\010\")\n\017SeekRowResponse\022\026\n\nresult_row\030\001 " - "\001(\022B\0020\001\" \n\tReference\022\023\n\013column_name\030\001 \001(" - "\t\"\221\001\n\007Literal\022\026\n\014string_value\030\001 \001(\tH\000\022\026\n" - "\014double_value\030\002 \001(\001H\000\022\024\n\nbool_value\030\003 \001(" - "\010H\000\022\030\n\nlong_value\030\004 \001(\022B\0020\001H\000\022\035\n\017nano_ti" - "me_value\030\005 \001(\022B\0020\001H\000B\007\n\005value\"\221\001\n\005Value\022" - "A\n\treference\030\001 \001(\0132,.io.deephaven.proto." - "backplane.grpc.ReferenceH\000\022=\n\007literal\030\002 " - "\001(\0132*.io.deephaven.proto.backplane.grpc." - "LiteralH\000B\006\n\004data\"\274\005\n\tCondition\022>\n\003and\030\001" - " \001(\0132/.io.deephaven.proto.backplane.grpc" - ".AndConditionH\000\022<\n\002or\030\002 \001(\0132..io.deephav" - "en.proto.backplane.grpc.OrConditionH\000\022>\n" - "\003not\030\003 \001(\0132/.io.deephaven.proto.backplan" - "e.grpc.NotConditionH\000\022F\n\007compare\030\004 \001(\01323" - ".io.deephaven.proto.backplane.grpc.Compa" - "reConditionH\000\022<\n\002in\030\005 \001(\0132..io.deephaven" - ".proto.backplane.grpc.InConditionH\000\022D\n\006i" - "nvoke\030\006 \001(\01322.io.deephaven.proto.backpla" - "ne.grpc.InvokeConditionH\000\022E\n\007is_null\030\007 \001" - "(\01322.io.deephaven.proto.backplane.grpc.I" - "sNullConditionH\000\022F\n\007matches\030\010 \001(\01323.io.d" - "eephaven.proto.backplane.grpc.MatchesCon" - "ditionH\000\022H\n\010contains\030\t \001(\01324.io.deephave" - "n.proto.backplane.grpc.ContainsCondition" - "H\000\022D\n\006search\030\n \001(\01322.io.deephaven.proto." - "backplane.grpc.SearchConditionH\000B\006\n\004data" - "\"M\n\014AndCondition\022=\n\007filters\030\001 \003(\0132,.io.d" - "eephaven.proto.backplane.grpc.Condition\"" - "L\n\013OrCondition\022=\n\007filters\030\001 \003(\0132,.io.dee" - "phaven.proto.backplane.grpc.Condition\"L\n" - "\014NotCondition\022<\n\006filter\030\001 \001(\0132,.io.deeph" - "aven.proto.backplane.grpc.Condition\"\254\003\n\020" - "CompareCondition\022W\n\toperation\030\001 \001(\0162D.io" - ".deephaven.proto.backplane.grpc.CompareC" - "ondition.CompareOperation\022L\n\020case_sensit" - "ivity\030\002 \001(\01622.io.deephaven.proto.backpla" - "ne.grpc.CaseSensitivity\0225\n\003lhs\030\003 \001(\0132(.i" - "o.deephaven.proto.backplane.grpc.Value\0225" - "\n\003rhs\030\004 \001(\0132(.io.deephaven.proto.backpla" - "ne.grpc.Value\"\202\001\n\020CompareOperation\022\r\n\tLE" - "SS_THAN\020\000\022\026\n\022LESS_THAN_OR_EQUAL\020\001\022\020\n\014GRE" - "ATER_THAN\020\002\022\031\n\025GREATER_THAN_OR_EQUAL\020\003\022\n" - "\n\006EQUALS\020\004\022\016\n\nNOT_EQUALS\020\005\"\225\002\n\013InConditi" - "on\0228\n\006target\030\001 \001(\0132(.io.deephaven.proto." - "backplane.grpc.Value\022<\n\ncandidates\030\002 \003(\013" - "2(.io.deephaven.proto.backplane.grpc.Val" - "ue\022L\n\020case_sensitivity\030\003 \001(\01622.io.deepha" - "ven.proto.backplane.grpc.CaseSensitivity" - "\022@\n\nmatch_type\030\004 \001(\0162,.io.deephaven.prot" - "o.backplane.grpc.MatchType\"\230\001\n\017InvokeCon" - "dition\022\016\n\006method\030\001 \001(\t\0228\n\006target\030\002 \001(\0132(" - ".io.deephaven.proto.backplane.grpc.Value" - "\022;\n\targuments\030\003 \003(\0132(.io.deephaven.proto" - ".backplane.grpc.Value\"R\n\017IsNullCondition" - "\022\?\n\treference\030\001 \001(\0132,.io.deephaven.proto" - ".backplane.grpc.Reference\"\362\001\n\020MatchesCon" - "dition\022\?\n\treference\030\001 \001(\0132,.io.deephaven" - ".proto.backplane.grpc.Reference\022\r\n\005regex" + "on.AggregationRowKeyH\000\022X\n\014last_row_key\030\004" + " \001(\0132@.io.deephaven.proto.backplane.grpc" + ".Aggregation.AggregationRowKeyH\000\022X\n\tpart" + "ition\030\005 \001(\0132C.io.deephaven.proto.backpla" + "ne.grpc.Aggregation.AggregationPartition" + "H\000\032c\n\022AggregationColumns\0228\n\004spec\030\001 \001(\0132*" + ".io.deephaven.proto.backplane.grpc.AggSp" + "ec\022\023\n\013match_pairs\030\002 \003(\t\032\'\n\020AggregationCo" + "unt\022\023\n\013column_name\030\001 \001(\t\032(\n\021AggregationR" + "owKey\022\023\n\013column_name\030\001 \001(\t\032M\n\024Aggregatio" + "nPartition\022\023\n\013column_name\030\001 \001(\t\022 \n\030inclu" + "de_group_by_columns\030\002 \001(\010B\006\n\004type\"\341\001\n\016So" + "rtDescriptor\022\023\n\013column_name\030\001 \001(\t\022\023\n\013is_" + "absolute\030\002 \001(\010\022R\n\tdirection\030\003 \001(\0162\?.io.d" + "eephaven.proto.backplane.grpc.SortDescri" + "ptor.SortDirection\"Q\n\rSortDirection\022\013\n\007U" + "NKNOWN\020\000\022\027\n\nDESCENDING\020\377\377\377\377\377\377\377\377\377\001\022\r\n\tASC" + "ENDING\020\001\022\013\n\007REVERSE\020\002\"\330\001\n\020SortTableReque" + "st\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.pro" + "to.backplane.grpc.Ticket\022D\n\tsource_id\030\002 " + "\001(\01321.io.deephaven.proto.backplane.grpc." + "TableReference\022@\n\005sorts\030\003 \003(\01321.io.deeph" + "aven.proto.backplane.grpc.SortDescriptor" + "\"\327\001\n\022FilterTableRequest\022<\n\tresult_id\030\001 \001" + "(\0132).io.deephaven.proto.backplane.grpc.T" + "icket\022D\n\tsource_id\030\002 \001(\01321.io.deephaven." + "proto.backplane.grpc.TableReference\022=\n\007f" + "ilters\030\003 \003(\0132,.io.deephaven.proto.backpl" + "ane.grpc.Condition\"\371\001\n\016SeekRowRequest\022<\n" + "\tsource_id\030\001 \001(\0132).io.deephaven.proto.ba" + "ckplane.grpc.Ticket\022\030\n\014starting_row\030\002 \001(" + "\022B\0020\001\022\023\n\013column_name\030\003 \001(\t\022>\n\nseek_value" + "\030\004 \001(\0132*.io.deephaven.proto.backplane.gr" + "pc.Literal\022\023\n\013insensitive\030\005 \001(\010\022\020\n\010conta" + "ins\030\006 \001(\010\022\023\n\013is_backward\030\007 \001(\010\")\n\017SeekRo" + "wResponse\022\026\n\nresult_row\030\001 \001(\022B\0020\001\" \n\tRef" + "erence\022\023\n\013column_name\030\001 \001(\t\"\221\001\n\007Literal\022" + "\026\n\014string_value\030\001 \001(\tH\000\022\026\n\014double_value\030" + "\002 \001(\001H\000\022\024\n\nbool_value\030\003 \001(\010H\000\022\030\n\nlong_va" + "lue\030\004 \001(\022B\0020\001H\000\022\035\n\017nano_time_value\030\005 \001(\022" + "B\0020\001H\000B\007\n\005value\"\221\001\n\005Value\022A\n\treference\030\001" + " \001(\0132,.io.deephaven.proto.backplane.grpc" + ".ReferenceH\000\022=\n\007literal\030\002 \001(\0132*.io.deeph" + "aven.proto.backplane.grpc.LiteralH\000B\006\n\004d" + "ata\"\274\005\n\tCondition\022>\n\003and\030\001 \001(\0132/.io.deep" + "haven.proto.backplane.grpc.AndConditionH" + "\000\022<\n\002or\030\002 \001(\0132..io.deephaven.proto.backp" + "lane.grpc.OrConditionH\000\022>\n\003not\030\003 \001(\0132/.i" + "o.deephaven.proto.backplane.grpc.NotCond" + "itionH\000\022F\n\007compare\030\004 \001(\01323.io.deephaven." + "proto.backplane.grpc.CompareConditionH\000\022" + "<\n\002in\030\005 \001(\0132..io.deephaven.proto.backpla" + "ne.grpc.InConditionH\000\022D\n\006invoke\030\006 \001(\01322." + "io.deephaven.proto.backplane.grpc.Invoke" + "ConditionH\000\022E\n\007is_null\030\007 \001(\01322.io.deepha" + "ven.proto.backplane.grpc.IsNullCondition" + "H\000\022F\n\007matches\030\010 \001(\01323.io.deephaven.proto" + ".backplane.grpc.MatchesConditionH\000\022H\n\010co" + "ntains\030\t \001(\01324.io.deephaven.proto.backpl" + "ane.grpc.ContainsConditionH\000\022D\n\006search\030\n" + " \001(\01322.io.deephaven.proto.backplane.grpc" + ".SearchConditionH\000B\006\n\004data\"M\n\014AndConditi" + "on\022=\n\007filters\030\001 \003(\0132,.io.deephaven.proto" + ".backplane.grpc.Condition\"L\n\013OrCondition" + "\022=\n\007filters\030\001 \003(\0132,.io.deephaven.proto.b" + "ackplane.grpc.Condition\"L\n\014NotCondition\022" + "<\n\006filter\030\001 \001(\0132,.io.deephaven.proto.bac" + "kplane.grpc.Condition\"\254\003\n\020CompareConditi" + "on\022W\n\toperation\030\001 \001(\0162D.io.deephaven.pro" + "to.backplane.grpc.CompareCondition.Compa" + "reOperation\022L\n\020case_sensitivity\030\002 \001(\01622." + "io.deephaven.proto.backplane.grpc.CaseSe" + "nsitivity\0225\n\003lhs\030\003 \001(\0132(.io.deephaven.pr" + "oto.backplane.grpc.Value\0225\n\003rhs\030\004 \001(\0132(." + "io.deephaven.proto.backplane.grpc.Value\"" + "\202\001\n\020CompareOperation\022\r\n\tLESS_THAN\020\000\022\026\n\022L" + "ESS_THAN_OR_EQUAL\020\001\022\020\n\014GREATER_THAN\020\002\022\031\n" + "\025GREATER_THAN_OR_EQUAL\020\003\022\n\n\006EQUALS\020\004\022\016\n\n" + "NOT_EQUALS\020\005\"\225\002\n\013InCondition\0228\n\006target\030\001" + " \001(\0132(.io.deephaven.proto.backplane.grpc" + ".Value\022<\n\ncandidates\030\002 \003(\0132(.io.deephave" + "n.proto.backplane.grpc.Value\022L\n\020case_sen" + "sitivity\030\003 \001(\01622.io.deephaven.proto.back" + "plane.grpc.CaseSensitivity\022@\n\nmatch_type" + "\030\004 \001(\0162,.io.deephaven.proto.backplane.gr" + "pc.MatchType\"\230\001\n\017InvokeCondition\022\016\n\006meth" + "od\030\001 \001(\t\0228\n\006target\030\002 \001(\0132(.io.deephaven." + "proto.backplane.grpc.Value\022;\n\targuments\030" + "\003 \003(\0132(.io.deephaven.proto.backplane.grp" + "c.Value\"R\n\017IsNullCondition\022\?\n\treference\030" + "\001 \001(\0132,.io.deephaven.proto.backplane.grp" + "c.Reference\"\362\001\n\020MatchesCondition\022\?\n\trefe" + "rence\030\001 \001(\0132,.io.deephaven.proto.backpla" + "ne.grpc.Reference\022\r\n\005regex\030\002 \001(\t\022L\n\020case" + "_sensitivity\030\003 \001(\01622.io.deephaven.proto." + "backplane.grpc.CaseSensitivity\022@\n\nmatch_" + "type\030\004 \001(\0162,.io.deephaven.proto.backplan" + "e.grpc.MatchType\"\373\001\n\021ContainsCondition\022\?" + "\n\treference\030\001 \001(\0132,.io.deephaven.proto.b" + "ackplane.grpc.Reference\022\025\n\rsearch_string" "\030\002 \001(\t\022L\n\020case_sensitivity\030\003 \001(\01622.io.de" "ephaven.proto.backplane.grpc.CaseSensiti" "vity\022@\n\nmatch_type\030\004 \001(\0162,.io.deephaven." - "proto.backplane.grpc.MatchType\"\373\001\n\021Conta" - "insCondition\022\?\n\treference\030\001 \001(\0132,.io.dee" - "phaven.proto.backplane.grpc.Reference\022\025\n" - "\rsearch_string\030\002 \001(\t\022L\n\020case_sensitivity" - "\030\003 \001(\01622.io.deephaven.proto.backplane.gr" - "pc.CaseSensitivity\022@\n\nmatch_type\030\004 \001(\0162," - ".io.deephaven.proto.backplane.grpc.Match" - "Type\"s\n\017SearchCondition\022\025\n\rsearch_string" - "\030\001 \001(\t\022I\n\023optional_references\030\002 \003(\0132,.io" - ".deephaven.proto.backplane.grpc.Referenc" - "e\"\224\001\n\016FlattenRequest\022<\n\tresult_id\030\001 \001(\0132" - ").io.deephaven.proto.backplane.grpc.Tick" - "et\022D\n\tsource_id\030\002 \001(\01321.io.deephaven.pro" - "to.backplane.grpc.TableReference\"\226\001\n\020Met" - "aTableRequest\022<\n\tresult_id\030\001 \001(\0132).io.de" - "ephaven.proto.backplane.grpc.Ticket\022D\n\ts" - "ource_id\030\002 \001(\01321.io.deephaven.proto.back" - "plane.grpc.TableReference\"\264\003\n\031RunChartDo" - "wnsampleRequest\022<\n\tresult_id\030\001 \001(\0132).io." - "deephaven.proto.backplane.grpc.Ticket\022D\n" - "\tsource_id\030\002 \001(\01321.io.deephaven.proto.ba" - "ckplane.grpc.TableReference\022\023\n\013pixel_cou" - "nt\030\003 \001(\005\022Z\n\nzoom_range\030\004 \001(\0132F.io.deepha" - "ven.proto.backplane.grpc.RunChartDownsam" - "pleRequest.ZoomRange\022\025\n\rx_column_name\030\005 " - "\001(\t\022\026\n\016y_column_names\030\006 \003(\t\032s\n\tZoomRange" - "\022\037\n\016min_date_nanos\030\001 \001(\003B\0020\001H\000\210\001\001\022\037\n\016max" - "_date_nanos\030\002 \001(\003B\0020\001H\001\210\001\001B\021\n\017_min_date_" - "nanosB\021\n\017_max_date_nanos\"\340\005\n\027CreateInput" - "TableRequest\022<\n\tresult_id\030\001 \001(\0132).io.dee" - "phaven.proto.backplane.grpc.Ticket\022L\n\017so" - "urce_table_id\030\002 \001(\01321.io.deephaven.proto" - ".backplane.grpc.TableReferenceH\000\022\020\n\006sche" - "ma\030\003 \001(\014H\000\022W\n\004kind\030\004 \001(\0132I.io.deephaven." - "proto.backplane.grpc.CreateInputTableReq" - "uest.InputTableKind\032\277\003\n\016InputTableKind\022}" - "\n\025in_memory_append_only\030\001 \001(\0132\\.io.deeph" - "aven.proto.backplane.grpc.CreateInputTab" - "leRequest.InputTableKind.InMemoryAppendO" - "nlyH\000\022{\n\024in_memory_key_backed\030\002 \001(\0132[.io" - ".deephaven.proto.backplane.grpc.CreateIn" - "putTableRequest.InputTableKind.InMemoryK" - "eyBackedH\000\022`\n\005blink\030\003 \001(\0132O.io.deephaven" - ".proto.backplane.grpc.CreateInputTableRe" - "quest.InputTableKind.BlinkH\000\032\024\n\022InMemory" - "AppendOnly\032(\n\021InMemoryKeyBacked\022\023\n\013key_c" - "olumns\030\001 \003(\t\032\007\n\005BlinkB\006\n\004kindB\014\n\ndefinit" - "ion\"\203\002\n\016WhereInRequest\022<\n\tresult_id\030\001 \001(" - "\0132).io.deephaven.proto.backplane.grpc.Ti" - "cket\022B\n\007left_id\030\002 \001(\01321.io.deephaven.pro" - "to.backplane.grpc.TableReference\022C\n\010righ" - "t_id\030\003 \001(\01321.io.deephaven.proto.backplan" - "e.grpc.TableReference\022\020\n\010inverted\030\004 \001(\010\022" - "\030\n\020columns_to_match\030\005 \003(\t\"\352\001\n\027ColumnStat" - "isticsRequest\022<\n\tresult_id\030\001 \001(\0132).io.de" - "ephaven.proto.backplane.grpc.Ticket\022D\n\ts" - "ource_id\030\002 \001(\01321.io.deephaven.proto.back" - "plane.grpc.TableReference\022\023\n\013column_name" - "\030\003 \001(\t\022\037\n\022unique_value_limit\030\004 \001(\005H\000\210\001\001B" - "\025\n\023_unique_value_limit\"\310\031\n\021BatchTableReq" - "uest\022K\n\003ops\030\001 \003(\0132>.io.deephaven.proto.b" - "ackplane.grpc.BatchTableRequest.Operatio" - "n\032\345\030\n\tOperation\022K\n\013empty_table\030\001 \001(\01324.i" - "o.deephaven.proto.backplane.grpc.EmptyTa" - "bleRequestH\000\022I\n\ntime_table\030\002 \001(\01323.io.de" - "ephaven.proto.backplane.grpc.TimeTableRe" - "questH\000\022M\n\014drop_columns\030\003 \001(\01325.io.deeph" - "aven.proto.backplane.grpc.DropColumnsReq" - "uestH\000\022J\n\006update\030\004 \001(\01328.io.deephaven.pr" - "oto.backplane.grpc.SelectOrUpdateRequest" - "H\000\022O\n\013lazy_update\030\005 \001(\01328.io.deephaven.p" - "roto.backplane.grpc.SelectOrUpdateReques" - "tH\000\022H\n\004view\030\006 \001(\01328.io.deephaven.proto.b" - "ackplane.grpc.SelectOrUpdateRequestH\000\022O\n" - "\013update_view\030\007 \001(\01328.io.deephaven.proto." - "backplane.grpc.SelectOrUpdateRequestH\000\022J" - "\n\006select\030\010 \001(\01328.io.deephaven.proto.back" - "plane.grpc.SelectOrUpdateRequestH\000\022S\n\017se" - "lect_distinct\030\t \001(\01328.io.deephaven.proto" - ".backplane.grpc.SelectDistinctRequestH\000\022" - "G\n\006filter\030\n \001(\01325.io.deephaven.proto.bac" - "kplane.grpc.FilterTableRequestH\000\022`\n\023unst" - "ructured_filter\030\013 \001(\0132A.io.deephaven.pro" - "to.backplane.grpc.UnstructuredFilterTabl" - "eRequestH\000\022C\n\004sort\030\014 \001(\01323.io.deephaven." - "proto.backplane.grpc.SortTableRequestH\000\022" - "D\n\004head\030\r \001(\01324.io.deephaven.proto.backp" - "lane.grpc.HeadOrTailRequestH\000\022D\n\004tail\030\016 " - "\001(\01324.io.deephaven.proto.backplane.grpc." - "HeadOrTailRequestH\000\022I\n\007head_by\030\017 \001(\01326.i" - "o.deephaven.proto.backplane.grpc.HeadOrT" - "ailByRequestH\000\022I\n\007tail_by\030\020 \001(\01326.io.dee" - "phaven.proto.backplane.grpc.HeadOrTailBy" - "RequestH\000\022D\n\007ungroup\030\021 \001(\01321.io.deephave" - "n.proto.backplane.grpc.UngroupRequestH\000\022" - "F\n\005merge\030\022 \001(\01325.io.deephaven.proto.back" - "plane.grpc.MergeTablesRequestH\000\022S\n\017combo" - "_aggregate\030\023 \001(\01328.io.deephaven.proto.ba" - "ckplane.grpc.ComboAggregateRequestH\000\022D\n\007" - "flatten\030\025 \001(\01321.io.deephaven.proto.backp" - "lane.grpc.FlattenRequestH\000\022\\\n\024run_chart_" - "downsample\030\026 \001(\0132<.io.deephaven.proto.ba" - "ckplane.grpc.RunChartDownsampleRequestH\000" - "\022O\n\ncross_join\030\027 \001(\01329.io.deephaven.prot" - "o.backplane.grpc.CrossJoinTablesRequestH" - "\000\022S\n\014natural_join\030\030 \001(\0132;.io.deephaven.p" - "roto.backplane.grpc.NaturalJoinTablesReq" - "uestH\000\022O\n\nexact_join\030\031 \001(\01329.io.deephave" - "n.proto.backplane.grpc.ExactJoinTablesRe" - "questH\000\022M\n\tleft_join\030\032 \001(\01328.io.deephave" - "n.proto.backplane.grpc.LeftJoinTablesReq" - "uestH\000\022R\n\nas_of_join\030\033 \001(\01328.io.deephave" - "n.proto.backplane.grpc.AsOfJoinTablesReq" - "uestB\002\030\001H\000\022K\n\013fetch_table\030\034 \001(\01324.io.dee" - "phaven.proto.backplane.grpc.FetchTableRe" - "questH\000\022^\n\025apply_preview_columns\030\036 \001(\0132=" - ".io.deephaven.proto.backplane.grpc.Apply" - "PreviewColumnsRequestH\000\022X\n\022create_input_" - "table\030\037 \001(\0132:.io.deephaven.proto.backpla" - "ne.grpc.CreateInputTableRequestH\000\022G\n\tupd" - "ate_by\030 \001(\01322.io.deephaven.proto.backpl" - "ane.grpc.UpdateByRequestH\000\022E\n\010where_in\030!" - " \001(\01321.io.deephaven.proto.backplane.grpc" - ".WhereInRequestH\000\022O\n\raggregate_all\030\" \001(\013" - "26.io.deephaven.proto.backplane.grpc.Agg" - "regateAllRequestH\000\022H\n\taggregate\030# \001(\01323." - "io.deephaven.proto.backplane.grpc.Aggreg" - "ateRequestH\000\022K\n\010snapshot\030$ \001(\01327.io.deep" - "haven.proto.backplane.grpc.SnapshotTable" - "RequestH\000\022T\n\rsnapshot_when\030% \001(\0132;.io.de" - "ephaven.proto.backplane.grpc.SnapshotWhe" - "nTableRequestH\000\022I\n\nmeta_table\030& \001(\01323.io" - ".deephaven.proto.backplane.grpc.MetaTabl" - "eRequestH\000\022O\n\nrange_join\030\' \001(\01329.io.deep" - "haven.proto.backplane.grpc.RangeJoinTabl" - "esRequestH\000\022C\n\002aj\030( \001(\01325.io.deephaven.p" - "roto.backplane.grpc.AjRajTablesRequestH\000" - "\022D\n\003raj\030) \001(\01325.io.deephaven.proto.backp" - "lane.grpc.AjRajTablesRequestH\000\022W\n\021column" - "_statistics\030* \001(\0132:.io.deephaven.proto.b" - "ackplane.grpc.ColumnStatisticsRequestH\000B" - "\004\n\002opJ\004\010\024\020\025J\004\010\035\020\036*b\n\017BadDataBehavior\022#\n\037" - "BAD_DATA_BEHAVIOR_NOT_SPECIFIED\020\000\022\t\n\005THR" - "OW\020\001\022\t\n\005RESET\020\002\022\010\n\004SKIP\020\003\022\n\n\006POISON\020\004*t\n" - "\024UpdateByNullBehavior\022\037\n\033NULL_BEHAVIOR_N" - "OT_SPECIFIED\020\000\022\022\n\016NULL_DOMINATES\020\001\022\023\n\017VA" - "LUE_DOMINATES\020\002\022\022\n\016ZERO_DOMINATES\020\003*\033\n\tN" - "ullValue\022\016\n\nNULL_VALUE\020\000*2\n\017CaseSensitiv" - "ity\022\016\n\nMATCH_CASE\020\000\022\017\n\013IGNORE_CASE\020\001*&\n\t" - "MatchType\022\013\n\007REGULAR\020\000\022\014\n\010INVERTED\020\0012\2500\n" - "\014TableService\022\221\001\n GetExportedTableCreati" - "onResponse\022).io.deephaven.proto.backplan" - "e.grpc.Ticket\032@.io.deephaven.proto.backp" - "lane.grpc.ExportedTableCreationResponse\"" - "\000\022\206\001\n\nFetchTable\0224.io.deephaven.proto.ba" - "ckplane.grpc.FetchTableRequest\032@.io.deep" - "haven.proto.backplane.grpc.ExportedTable" - "CreationResponse\"\000\022\230\001\n\023ApplyPreviewColum" - "ns\022=.io.deephaven.proto.backplane.grpc.A" - "pplyPreviewColumnsRequest\032@.io.deephaven" - ".proto.backplane.grpc.ExportedTableCreat" - "ionResponse\"\000\022\206\001\n\nEmptyTable\0224.io.deepha" - "ven.proto.backplane.grpc.EmptyTableReque" - "st\032@.io.deephaven.proto.backplane.grpc.E" - "xportedTableCreationResponse\"\000\022\204\001\n\tTimeT" - "able\0223.io.deephaven.proto.backplane.grpc" - ".TimeTableRequest\032@.io.deephaven.proto.b" - "ackplane.grpc.ExportedTableCreationRespo" - "nse\"\000\022\210\001\n\013DropColumns\0225.io.deephaven.pro" - "to.backplane.grpc.DropColumnsRequest\032@.i" - "o.deephaven.proto.backplane.grpc.Exporte" - "dTableCreationResponse\"\000\022\206\001\n\006Update\0228.io" - ".deephaven.proto.backplane.grpc.SelectOr" - "UpdateRequest\032@.io.deephaven.proto.backp" - "lane.grpc.ExportedTableCreationResponse\"" - "\000\022\212\001\n\nLazyUpdate\0228.io.deephaven.proto.ba" - "ckplane.grpc.SelectOrUpdateRequest\032@.io." - "deephaven.proto.backplane.grpc.ExportedT" - "ableCreationResponse\"\000\022\204\001\n\004View\0228.io.dee" - "phaven.proto.backplane.grpc.SelectOrUpda" - "teRequest\032@.io.deephaven.proto.backplane" - ".grpc.ExportedTableCreationResponse\"\000\022\212\001" - "\n\nUpdateView\0228.io.deephaven.proto.backpl" - "ane.grpc.SelectOrUpdateRequest\032@.io.deep" - "haven.proto.backplane.grpc.ExportedTable" - "CreationResponse\"\000\022\206\001\n\006Select\0228.io.deeph" - "aven.proto.backplane.grpc.SelectOrUpdate" - "Request\032@.io.deephaven.proto.backplane.g" - "rpc.ExportedTableCreationResponse\"\000\022\202\001\n\010" - "UpdateBy\0222.io.deephaven.proto.backplane." - "grpc.UpdateByRequest\032@.io.deephaven.prot" - "o.backplane.grpc.ExportedTableCreationRe" - "sponse\"\000\022\216\001\n\016SelectDistinct\0228.io.deephav" - "en.proto.backplane.grpc.SelectDistinctRe" - "quest\032@.io.deephaven.proto.backplane.grp" - "c.ExportedTableCreationResponse\"\000\022\203\001\n\006Fi" - "lter\0225.io.deephaven.proto.backplane.grpc" - ".FilterTableRequest\032@.io.deephaven.proto" - ".backplane.grpc.ExportedTableCreationRes" - "ponse\"\000\022\233\001\n\022UnstructuredFilter\022A.io.deep" - "haven.proto.backplane.grpc.UnstructuredF" - "ilterTableRequest\032@.io.deephaven.proto.b" - "ackplane.grpc.ExportedTableCreationRespo" - "nse\"\000\022\177\n\004Sort\0223.io.deephaven.proto.backp" - "lane.grpc.SortTableRequest\032@.io.deephave" - "n.proto.backplane.grpc.ExportedTableCrea" - "tionResponse\"\000\022\200\001\n\004Head\0224.io.deephaven.p" - "roto.backplane.grpc.HeadOrTailRequest\032@." - "io.deephaven.proto.backplane.grpc.Export" - "edTableCreationResponse\"\000\022\200\001\n\004Tail\0224.io." - "deephaven.proto.backplane.grpc.HeadOrTai" - "lRequest\032@.io.deephaven.proto.backplane." - "grpc.ExportedTableCreationResponse\"\000\022\204\001\n" - "\006HeadBy\0226.io.deephaven.proto.backplane.g" - "rpc.HeadOrTailByRequest\032@.io.deephaven.p" - "roto.backplane.grpc.ExportedTableCreatio" - "nResponse\"\000\022\204\001\n\006TailBy\0226.io.deephaven.pr" - "oto.backplane.grpc.HeadOrTailByRequest\032@" - ".io.deephaven.proto.backplane.grpc.Expor" - "tedTableCreationResponse\"\000\022\200\001\n\007Ungroup\0221" - ".io.deephaven.proto.backplane.grpc.Ungro" - "upRequest\032@.io.deephaven.proto.backplane" - ".grpc.ExportedTableCreationResponse\"\000\022\210\001" - "\n\013MergeTables\0225.io.deephaven.proto.backp" - "lane.grpc.MergeTablesRequest\032@.io.deepha" + "proto.backplane.grpc.MatchType\"s\n\017Search" + "Condition\022\025\n\rsearch_string\030\001 \001(\t\022I\n\023opti" + "onal_references\030\002 \003(\0132,.io.deephaven.pro" + "to.backplane.grpc.Reference\"\224\001\n\016FlattenR" + "equest\022<\n\tresult_id\030\001 \001(\0132).io.deephaven" + ".proto.backplane.grpc.Ticket\022D\n\tsource_i" + "d\030\002 \001(\01321.io.deephaven.proto.backplane.g" + "rpc.TableReference\"\226\001\n\020MetaTableRequest\022" + "<\n\tresult_id\030\001 \001(\0132).io.deephaven.proto." + "backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\013" + "21.io.deephaven.proto.backplane.grpc.Tab" + "leReference\"\264\003\n\031RunChartDownsampleReques" + "t\022<\n\tresult_id\030\001 \001(\0132).io.deephaven.prot" + "o.backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001" + "(\01321.io.deephaven.proto.backplane.grpc.T" + "ableReference\022\023\n\013pixel_count\030\003 \001(\005\022Z\n\nzo" + "om_range\030\004 \001(\0132F.io.deephaven.proto.back" + "plane.grpc.RunChartDownsampleRequest.Zoo" + "mRange\022\025\n\rx_column_name\030\005 \001(\t\022\026\n\016y_colum" + "n_names\030\006 \003(\t\032s\n\tZoomRange\022\037\n\016min_date_n" + "anos\030\001 \001(\003B\0020\001H\000\210\001\001\022\037\n\016max_date_nanos\030\002 " + "\001(\003B\0020\001H\001\210\001\001B\021\n\017_min_date_nanosB\021\n\017_max_" + "date_nanos\"\340\005\n\027CreateInputTableRequest\022<" + "\n\tresult_id\030\001 \001(\0132).io.deephaven.proto.b" + "ackplane.grpc.Ticket\022L\n\017source_table_id\030" + "\002 \001(\01321.io.deephaven.proto.backplane.grp" + "c.TableReferenceH\000\022\020\n\006schema\030\003 \001(\014H\000\022W\n\004" + "kind\030\004 \001(\0132I.io.deephaven.proto.backplan" + "e.grpc.CreateInputTableRequest.InputTabl" + "eKind\032\277\003\n\016InputTableKind\022}\n\025in_memory_ap" + "pend_only\030\001 \001(\0132\\.io.deephaven.proto.bac" + "kplane.grpc.CreateInputTableRequest.Inpu" + "tTableKind.InMemoryAppendOnlyH\000\022{\n\024in_me" + "mory_key_backed\030\002 \001(\0132[.io.deephaven.pro" + "to.backplane.grpc.CreateInputTableReques" + "t.InputTableKind.InMemoryKeyBackedH\000\022`\n\005" + "blink\030\003 \001(\0132O.io.deephaven.proto.backpla" + "ne.grpc.CreateInputTableRequest.InputTab" + "leKind.BlinkH\000\032\024\n\022InMemoryAppendOnly\032(\n\021" + "InMemoryKeyBacked\022\023\n\013key_columns\030\001 \003(\t\032\007" + "\n\005BlinkB\006\n\004kindB\014\n\ndefinition\"\203\002\n\016WhereI" + "nRequest\022<\n\tresult_id\030\001 \001(\0132).io.deephav" + "en.proto.backplane.grpc.Ticket\022B\n\007left_i" + "d\030\002 \001(\01321.io.deephaven.proto.backplane.g" + "rpc.TableReference\022C\n\010right_id\030\003 \001(\01321.i" + "o.deephaven.proto.backplane.grpc.TableRe" + "ference\022\020\n\010inverted\030\004 \001(\010\022\030\n\020columns_to_" + "match\030\005 \003(\t\"\352\001\n\027ColumnStatisticsRequest\022" + "<\n\tresult_id\030\001 \001(\0132).io.deephaven.proto." + "backplane.grpc.Ticket\022D\n\tsource_id\030\002 \001(\013" + "21.io.deephaven.proto.backplane.grpc.Tab" + "leReference\022\023\n\013column_name\030\003 \001(\t\022\037\n\022uniq" + "ue_value_limit\030\004 \001(\005H\000\210\001\001B\025\n\023_unique_val" + "ue_limit\"\310\031\n\021BatchTableRequest\022K\n\003ops\030\001 " + "\003(\0132>.io.deephaven.proto.backplane.grpc." + "BatchTableRequest.Operation\032\345\030\n\tOperatio" + "n\022K\n\013empty_table\030\001 \001(\01324.io.deephaven.pr" + "oto.backplane.grpc.EmptyTableRequestH\000\022I" + "\n\ntime_table\030\002 \001(\01323.io.deephaven.proto." + "backplane.grpc.TimeTableRequestH\000\022M\n\014dro" + "p_columns\030\003 \001(\01325.io.deephaven.proto.bac" + "kplane.grpc.DropColumnsRequestH\000\022J\n\006upda" + "te\030\004 \001(\01328.io.deephaven.proto.backplane." + "grpc.SelectOrUpdateRequestH\000\022O\n\013lazy_upd" + "ate\030\005 \001(\01328.io.deephaven.proto.backplane" + ".grpc.SelectOrUpdateRequestH\000\022H\n\004view\030\006 " + "\001(\01328.io.deephaven.proto.backplane.grpc." + "SelectOrUpdateRequestH\000\022O\n\013update_view\030\007" + " \001(\01328.io.deephaven.proto.backplane.grpc" + ".SelectOrUpdateRequestH\000\022J\n\006select\030\010 \001(\013" + "28.io.deephaven.proto.backplane.grpc.Sel" + "ectOrUpdateRequestH\000\022S\n\017select_distinct\030" + "\t \001(\01328.io.deephaven.proto.backplane.grp" + "c.SelectDistinctRequestH\000\022G\n\006filter\030\n \001(" + "\01325.io.deephaven.proto.backplane.grpc.Fi" + "lterTableRequestH\000\022`\n\023unstructured_filte" + "r\030\013 \001(\0132A.io.deephaven.proto.backplane.g" + "rpc.UnstructuredFilterTableRequestH\000\022C\n\004" + "sort\030\014 \001(\01323.io.deephaven.proto.backplan" + "e.grpc.SortTableRequestH\000\022D\n\004head\030\r \001(\0132" + "4.io.deephaven.proto.backplane.grpc.Head" + "OrTailRequestH\000\022D\n\004tail\030\016 \001(\01324.io.deeph" + "aven.proto.backplane.grpc.HeadOrTailRequ" + "estH\000\022I\n\007head_by\030\017 \001(\01326.io.deephaven.pr" + "oto.backplane.grpc.HeadOrTailByRequestH\000" + "\022I\n\007tail_by\030\020 \001(\01326.io.deephaven.proto.b" + "ackplane.grpc.HeadOrTailByRequestH\000\022D\n\007u" + "ngroup\030\021 \001(\01321.io.deephaven.proto.backpl" + "ane.grpc.UngroupRequestH\000\022F\n\005merge\030\022 \001(\013" + "25.io.deephaven.proto.backplane.grpc.Mer" + "geTablesRequestH\000\022S\n\017combo_aggregate\030\023 \001" + "(\01328.io.deephaven.proto.backplane.grpc.C" + "omboAggregateRequestH\000\022D\n\007flatten\030\025 \001(\0132" + "1.io.deephaven.proto.backplane.grpc.Flat" + "tenRequestH\000\022\\\n\024run_chart_downsample\030\026 \001" + "(\0132<.io.deephaven.proto.backplane.grpc.R" + "unChartDownsampleRequestH\000\022O\n\ncross_join" + "\030\027 \001(\01329.io.deephaven.proto.backplane.gr" + "pc.CrossJoinTablesRequestH\000\022S\n\014natural_j" + "oin\030\030 \001(\0132;.io.deephaven.proto.backplane" + ".grpc.NaturalJoinTablesRequestH\000\022O\n\nexac" + "t_join\030\031 \001(\01329.io.deephaven.proto.backpl" + "ane.grpc.ExactJoinTablesRequestH\000\022M\n\tlef" + "t_join\030\032 \001(\01328.io.deephaven.proto.backpl" + "ane.grpc.LeftJoinTablesRequestH\000\022R\n\nas_o" + "f_join\030\033 \001(\01328.io.deephaven.proto.backpl" + "ane.grpc.AsOfJoinTablesRequestB\002\030\001H\000\022K\n\013" + "fetch_table\030\034 \001(\01324.io.deephaven.proto.b" + "ackplane.grpc.FetchTableRequestH\000\022^\n\025app" + "ly_preview_columns\030\036 \001(\0132=.io.deephaven." + "proto.backplane.grpc.ApplyPreviewColumns" + "RequestH\000\022X\n\022create_input_table\030\037 \001(\0132:." + "io.deephaven.proto.backplane.grpc.Create" + "InputTableRequestH\000\022G\n\tupdate_by\030 \001(\01322" + ".io.deephaven.proto.backplane.grpc.Updat" + "eByRequestH\000\022E\n\010where_in\030! \001(\01321.io.deep" + "haven.proto.backplane.grpc.WhereInReques" + "tH\000\022O\n\raggregate_all\030\" \001(\01326.io.deephave" + "n.proto.backplane.grpc.AggregateAllReque" + "stH\000\022H\n\taggregate\030# \001(\01323.io.deephaven.p" + "roto.backplane.grpc.AggregateRequestH\000\022K" + "\n\010snapshot\030$ \001(\01327.io.deephaven.proto.ba" + "ckplane.grpc.SnapshotTableRequestH\000\022T\n\rs" + "napshot_when\030% \001(\0132;.io.deephaven.proto." + "backplane.grpc.SnapshotWhenTableRequestH" + "\000\022I\n\nmeta_table\030& \001(\01323.io.deephaven.pro" + "to.backplane.grpc.MetaTableRequestH\000\022O\n\n" + "range_join\030\' \001(\01329.io.deephaven.proto.ba" + "ckplane.grpc.RangeJoinTablesRequestH\000\022C\n" + "\002aj\030( \001(\01325.io.deephaven.proto.backplane" + ".grpc.AjRajTablesRequestH\000\022D\n\003raj\030) \001(\0132" + "5.io.deephaven.proto.backplane.grpc.AjRa" + "jTablesRequestH\000\022W\n\021column_statistics\030* " + "\001(\0132:.io.deephaven.proto.backplane.grpc." + "ColumnStatisticsRequestH\000B\004\n\002opJ\004\010\024\020\025J\004\010" + "\035\020\036*b\n\017BadDataBehavior\022#\n\037BAD_DATA_BEHAV" + "IOR_NOT_SPECIFIED\020\000\022\t\n\005THROW\020\001\022\t\n\005RESET\020" + "\002\022\010\n\004SKIP\020\003\022\n\n\006POISON\020\004*t\n\024UpdateByNullB" + "ehavior\022\037\n\033NULL_BEHAVIOR_NOT_SPECIFIED\020\000" + "\022\022\n\016NULL_DOMINATES\020\001\022\023\n\017VALUE_DOMINATES\020" + "\002\022\022\n\016ZERO_DOMINATES\020\003*\033\n\tNullValue\022\016\n\nNU" + "LL_VALUE\020\000*2\n\017CaseSensitivity\022\016\n\nMATCH_C" + "ASE\020\000\022\017\n\013IGNORE_CASE\020\001*&\n\tMatchType\022\013\n\007R" + "EGULAR\020\000\022\014\n\010INVERTED\020\0012\2500\n\014TableService\022" + "\221\001\n GetExportedTableCreationResponse\022).i" + "o.deephaven.proto.backplane.grpc.Ticket\032" + "@.io.deephaven.proto.backplane.grpc.Expo" + "rtedTableCreationResponse\"\000\022\206\001\n\nFetchTab" + "le\0224.io.deephaven.proto.backplane.grpc.F" + "etchTableRequest\032@.io.deephaven.proto.ba" + "ckplane.grpc.ExportedTableCreationRespon" + "se\"\000\022\230\001\n\023ApplyPreviewColumns\022=.io.deepha" + "ven.proto.backplane.grpc.ApplyPreviewCol" + "umnsRequest\032@.io.deephaven.proto.backpla" + "ne.grpc.ExportedTableCreationResponse\"\000\022" + "\206\001\n\nEmptyTable\0224.io.deephaven.proto.back" + "plane.grpc.EmptyTableRequest\032@.io.deepha" "ven.proto.backplane.grpc.ExportedTableCr" - "eationResponse\"\000\022\220\001\n\017CrossJoinTables\0229.i" - "o.deephaven.proto.backplane.grpc.CrossJo" - "inTablesRequest\032@.io.deephaven.proto.bac" - "kplane.grpc.ExportedTableCreationRespons" - "e\"\000\022\224\001\n\021NaturalJoinTables\022;.io.deephaven" - ".proto.backplane.grpc.NaturalJoinTablesR" - "equest\032@.io.deephaven.proto.backplane.gr" - "pc.ExportedTableCreationResponse\"\000\022\220\001\n\017E" - "xactJoinTables\0229.io.deephaven.proto.back" - "plane.grpc.ExactJoinTablesRequest\032@.io.d" - "eephaven.proto.backplane.grpc.ExportedTa" - "bleCreationResponse\"\000\022\216\001\n\016LeftJoinTables" - "\0228.io.deephaven.proto.backplane.grpc.Lef" - "tJoinTablesRequest\032@.io.deephaven.proto." - "backplane.grpc.ExportedTableCreationResp" - "onse\"\000\022\221\001\n\016AsOfJoinTables\0228.io.deephaven" - ".proto.backplane.grpc.AsOfJoinTablesRequ" + "eationResponse\"\000\022\204\001\n\tTimeTable\0223.io.deep" + "haven.proto.backplane.grpc.TimeTableRequ" "est\032@.io.deephaven.proto.backplane.grpc." - "ExportedTableCreationResponse\"\003\210\002\001\022\205\001\n\010A" - "jTables\0225.io.deephaven.proto.backplane.g" - "rpc.AjRajTablesRequest\032@.io.deephaven.pr" + "ExportedTableCreationResponse\"\000\022\210\001\n\013Drop" + "Columns\0225.io.deephaven.proto.backplane.g" + "rpc.DropColumnsRequest\032@.io.deephaven.pr" "oto.backplane.grpc.ExportedTableCreation" - "Response\"\000\022\206\001\n\tRajTables\0225.io.deephaven." - "proto.backplane.grpc.AjRajTablesRequest\032" + "Response\"\000\022\206\001\n\006Update\0228.io.deephaven.pro" + "to.backplane.grpc.SelectOrUpdateRequest\032" "@.io.deephaven.proto.backplane.grpc.Expo" - "rtedTableCreationResponse\"\000\022\220\001\n\017RangeJoi" - "nTables\0229.io.deephaven.proto.backplane.g" - "rpc.RangeJoinTablesRequest\032@.io.deephave" - "n.proto.backplane.grpc.ExportedTableCrea" - "tionResponse\"\000\022\221\001\n\016ComboAggregate\0228.io.d" - "eephaven.proto.backplane.grpc.ComboAggre" - "gateRequest\032@.io.deephaven.proto.backpla" - "ne.grpc.ExportedTableCreationResponse\"\003\210" - "\002\001\022\212\001\n\014AggregateAll\0226.io.deephaven.proto" - ".backplane.grpc.AggregateAllRequest\032@.io" + "rtedTableCreationResponse\"\000\022\212\001\n\nLazyUpda" + "te\0228.io.deephaven.proto.backplane.grpc.S" + "electOrUpdateRequest\032@.io.deephaven.prot" + "o.backplane.grpc.ExportedTableCreationRe" + "sponse\"\000\022\204\001\n\004View\0228.io.deephaven.proto.b" + "ackplane.grpc.SelectOrUpdateRequest\032@.io" ".deephaven.proto.backplane.grpc.Exported" - "TableCreationResponse\"\000\022\204\001\n\tAggregate\0223." - "io.deephaven.proto.backplane.grpc.Aggreg" - "ateRequest\032@.io.deephaven.proto.backplan" - "e.grpc.ExportedTableCreationResponse\"\000\022\207" - "\001\n\010Snapshot\0227.io.deephaven.proto.backpla" - "ne.grpc.SnapshotTableRequest\032@.io.deepha" - "ven.proto.backplane.grpc.ExportedTableCr" - "eationResponse\"\000\022\217\001\n\014SnapshotWhen\022;.io.d" - "eephaven.proto.backplane.grpc.SnapshotWh" - "enTableRequest\032@.io.deephaven.proto.back" + "TableCreationResponse\"\000\022\212\001\n\nUpdateView\0228" + ".io.deephaven.proto.backplane.grpc.Selec" + "tOrUpdateRequest\032@.io.deephaven.proto.ba" + "ckplane.grpc.ExportedTableCreationRespon" + "se\"\000\022\206\001\n\006Select\0228.io.deephaven.proto.bac" + "kplane.grpc.SelectOrUpdateRequest\032@.io.d" + "eephaven.proto.backplane.grpc.ExportedTa" + "bleCreationResponse\"\000\022\202\001\n\010UpdateBy\0222.io." + "deephaven.proto.backplane.grpc.UpdateByR" + "equest\032@.io.deephaven.proto.backplane.gr" + "pc.ExportedTableCreationResponse\"\000\022\216\001\n\016S" + "electDistinct\0228.io.deephaven.proto.backp" + "lane.grpc.SelectDistinctRequest\032@.io.dee" + "phaven.proto.backplane.grpc.ExportedTabl" + "eCreationResponse\"\000\022\203\001\n\006Filter\0225.io.deep" + "haven.proto.backplane.grpc.FilterTableRe" + "quest\032@.io.deephaven.proto.backplane.grp" + "c.ExportedTableCreationResponse\"\000\022\233\001\n\022Un" + "structuredFilter\022A.io.deephaven.proto.ba" + "ckplane.grpc.UnstructuredFilterTableRequ" + "est\032@.io.deephaven.proto.backplane.grpc." + "ExportedTableCreationResponse\"\000\022\177\n\004Sort\022" + "3.io.deephaven.proto.backplane.grpc.Sort" + "TableRequest\032@.io.deephaven.proto.backpl" + "ane.grpc.ExportedTableCreationResponse\"\000" + "\022\200\001\n\004Head\0224.io.deephaven.proto.backplane" + ".grpc.HeadOrTailRequest\032@.io.deephaven.p" + "roto.backplane.grpc.ExportedTableCreatio" + "nResponse\"\000\022\200\001\n\004Tail\0224.io.deephaven.prot" + "o.backplane.grpc.HeadOrTailRequest\032@.io." + "deephaven.proto.backplane.grpc.ExportedT" + "ableCreationResponse\"\000\022\204\001\n\006HeadBy\0226.io.d" + "eephaven.proto.backplane.grpc.HeadOrTail" + "ByRequest\032@.io.deephaven.proto.backplane" + ".grpc.ExportedTableCreationResponse\"\000\022\204\001" + "\n\006TailBy\0226.io.deephaven.proto.backplane." + "grpc.HeadOrTailByRequest\032@.io.deephaven." + "proto.backplane.grpc.ExportedTableCreati" + "onResponse\"\000\022\200\001\n\007Ungroup\0221.io.deephaven." + "proto.backplane.grpc.UngroupRequest\032@.io" + ".deephaven.proto.backplane.grpc.Exported" + "TableCreationResponse\"\000\022\210\001\n\013MergeTables\022" + "5.io.deephaven.proto.backplane.grpc.Merg" + "eTablesRequest\032@.io.deephaven.proto.back" "plane.grpc.ExportedTableCreationResponse" - "\"\000\022\200\001\n\007Flatten\0221.io.deephaven.proto.back" - "plane.grpc.FlattenRequest\032@.io.deephaven" + "\"\000\022\220\001\n\017CrossJoinTables\0229.io.deephaven.pr" + "oto.backplane.grpc.CrossJoinTablesReques" + "t\032@.io.deephaven.proto.backplane.grpc.Ex" + "portedTableCreationResponse\"\000\022\224\001\n\021Natura" + "lJoinTables\022;.io.deephaven.proto.backpla" + "ne.grpc.NaturalJoinTablesRequest\032@.io.de" + "ephaven.proto.backplane.grpc.ExportedTab" + "leCreationResponse\"\000\022\220\001\n\017ExactJoinTables" + "\0229.io.deephaven.proto.backplane.grpc.Exa" + "ctJoinTablesRequest\032@.io.deephaven.proto" + ".backplane.grpc.ExportedTableCreationRes" + "ponse\"\000\022\216\001\n\016LeftJoinTables\0228.io.deephave" + "n.proto.backplane.grpc.LeftJoinTablesReq" + "uest\032@.io.deephaven.proto.backplane.grpc" + ".ExportedTableCreationResponse\"\000\022\221\001\n\016AsO" + "fJoinTables\0228.io.deephaven.proto.backpla" + "ne.grpc.AsOfJoinTablesRequest\032@.io.deeph" + "aven.proto.backplane.grpc.ExportedTableC" + "reationResponse\"\003\210\002\001\022\205\001\n\010AjTables\0225.io.d" + "eephaven.proto.backplane.grpc.AjRajTable" + "sRequest\032@.io.deephaven.proto.backplane." + "grpc.ExportedTableCreationResponse\"\000\022\206\001\n" + "\tRajTables\0225.io.deephaven.proto.backplan" + "e.grpc.AjRajTablesRequest\032@.io.deephaven" ".proto.backplane.grpc.ExportedTableCreat" - "ionResponse\"\000\022\226\001\n\022RunChartDownsample\022<.i" - "o.deephaven.proto.backplane.grpc.RunChar" - "tDownsampleRequest\032@.io.deephaven.proto." - "backplane.grpc.ExportedTableCreationResp" - "onse\"\000\022\222\001\n\020CreateInputTable\022:.io.deephav" - "en.proto.backplane.grpc.CreateInputTable" - "Request\032@.io.deephaven.proto.backplane.g" - "rpc.ExportedTableCreationResponse\"\000\022\200\001\n\007" - "WhereIn\0221.io.deephaven.proto.backplane.g" - "rpc.WhereInRequest\032@.io.deephaven.proto." - "backplane.grpc.ExportedTableCreationResp" - "onse\"\000\022\203\001\n\005Batch\0224.io.deephaven.proto.ba" - "ckplane.grpc.BatchTableRequest\032@.io.deep" - "haven.proto.backplane.grpc.ExportedTable" - "CreationResponse\"\0000\001\022\231\001\n\024ExportedTableUp" - "dates\022>.io.deephaven.proto.backplane.grp" - "c.ExportedTableUpdatesRequest\032=.io.deeph" - "aven.proto.backplane.grpc.ExportedTableU" - "pdateMessage\"\0000\001\022r\n\007SeekRow\0221.io.deephav" - "en.proto.backplane.grpc.SeekRowRequest\0322" - ".io.deephaven.proto.backplane.grpc.SeekR" - "owResponse\"\000\022\204\001\n\tMetaTable\0223.io.deephave" - "n.proto.backplane.grpc.MetaTableRequest\032" - "@.io.deephaven.proto.backplane.grpc.Expo" - "rtedTableCreationResponse\"\000\022\231\001\n\027ComputeC" - "olumnStatistics\022:.io.deephaven.proto.bac" - "kplane.grpc.ColumnStatisticsRequest\032@.io" - ".deephaven.proto.backplane.grpc.Exported" - "TableCreationResponse\"\000BAH\001P\001Z;github.co" - "m/deephaven/deephaven-core/go/internal/p" - "roto/tableb\006proto3" + "ionResponse\"\000\022\220\001\n\017RangeJoinTables\0229.io.d" + "eephaven.proto.backplane.grpc.RangeJoinT" + "ablesRequest\032@.io.deephaven.proto.backpl" + "ane.grpc.ExportedTableCreationResponse\"\000" + "\022\221\001\n\016ComboAggregate\0228.io.deephaven.proto" + ".backplane.grpc.ComboAggregateRequest\032@." + "io.deephaven.proto.backplane.grpc.Export" + "edTableCreationResponse\"\003\210\002\001\022\212\001\n\014Aggrega" + "teAll\0226.io.deephaven.proto.backplane.grp" + "c.AggregateAllRequest\032@.io.deephaven.pro" + "to.backplane.grpc.ExportedTableCreationR" + "esponse\"\000\022\204\001\n\tAggregate\0223.io.deephaven.p" + "roto.backplane.grpc.AggregateRequest\032@.i" + "o.deephaven.proto.backplane.grpc.Exporte" + "dTableCreationResponse\"\000\022\207\001\n\010Snapshot\0227." + "io.deephaven.proto.backplane.grpc.Snapsh" + "otTableRequest\032@.io.deephaven.proto.back" + "plane.grpc.ExportedTableCreationResponse" + "\"\000\022\217\001\n\014SnapshotWhen\022;.io.deephaven.proto" + ".backplane.grpc.SnapshotWhenTableRequest" + "\032@.io.deephaven.proto.backplane.grpc.Exp" + "ortedTableCreationResponse\"\000\022\200\001\n\007Flatten" + "\0221.io.deephaven.proto.backplane.grpc.Fla" + "ttenRequest\032@.io.deephaven.proto.backpla" + "ne.grpc.ExportedTableCreationResponse\"\000\022" + "\226\001\n\022RunChartDownsample\022<.io.deephaven.pr" + "oto.backplane.grpc.RunChartDownsampleReq" + "uest\032@.io.deephaven.proto.backplane.grpc" + ".ExportedTableCreationResponse\"\000\022\222\001\n\020Cre" + "ateInputTable\022:.io.deephaven.proto.backp" + "lane.grpc.CreateInputTableRequest\032@.io.d" + "eephaven.proto.backplane.grpc.ExportedTa" + "bleCreationResponse\"\000\022\200\001\n\007WhereIn\0221.io.d" + "eephaven.proto.backplane.grpc.WhereInReq" + "uest\032@.io.deephaven.proto.backplane.grpc" + ".ExportedTableCreationResponse\"\000\022\203\001\n\005Bat" + "ch\0224.io.deephaven.proto.backplane.grpc.B" + "atchTableRequest\032@.io.deephaven.proto.ba" + "ckplane.grpc.ExportedTableCreationRespon" + "se\"\0000\001\022\231\001\n\024ExportedTableUpdates\022>.io.dee" + "phaven.proto.backplane.grpc.ExportedTabl" + "eUpdatesRequest\032=.io.deephaven.proto.bac" + "kplane.grpc.ExportedTableUpdateMessage\"\000" + "0\001\022r\n\007SeekRow\0221.io.deephaven.proto.backp" + "lane.grpc.SeekRowRequest\0322.io.deephaven." + "proto.backplane.grpc.SeekRowResponse\"\000\022\204" + "\001\n\tMetaTable\0223.io.deephaven.proto.backpl" + "ane.grpc.MetaTableRequest\032@.io.deephaven" + ".proto.backplane.grpc.ExportedTableCreat" + "ionResponse\"\000\022\231\001\n\027ComputeColumnStatistic" + "s\022:.io.deephaven.proto.backplane.grpc.Co" + "lumnStatisticsRequest\032@.io.deephaven.pro" + "to.backplane.grpc.ExportedTableCreationR" + "esponse\"\000BAH\001P\001Z;github.com/deephaven/de" + "ephaven-core/go/internal/proto/tableb\006pr" + "oto3" ; static const ::_pbi::DescriptorTable* const descriptor_table_deephaven_2fproto_2ftable_2eproto_deps[1] = { &::descriptor_table_deephaven_2fproto_2fticket_2eproto, }; static ::_pbi::once_flag descriptor_table_deephaven_2fproto_2ftable_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_deephaven_2fproto_2ftable_2eproto = { - false, false, 34458, descriptor_table_protodef_deephaven_2fproto_2ftable_2eproto, + false, false, 34844, descriptor_table_protodef_deephaven_2fproto_2ftable_2eproto, "deephaven/proto/table.proto", - &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, descriptor_table_deephaven_2fproto_2ftable_2eproto_deps, 1, 121, + &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, descriptor_table_deephaven_2fproto_2ftable_2eproto_deps, 1, 122, schemas, file_default_instances, TableStruct_deephaven_2fproto_2ftable_2eproto::offsets, file_level_metadata_deephaven_2fproto_2ftable_2eproto, file_level_enum_descriptors_deephaven_2fproto_2ftable_2eproto, file_level_service_descriptors_deephaven_2fproto_2ftable_2eproto, @@ -12347,9 +12386,326 @@ const char* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Update #undef CHK_ } -uint8_t* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_InternalSerialize( +uint8_t* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; + if (this->_internal_has_reverse_window_scale()) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(1, _Internal::reverse_window_scale(this), + _Internal::reverse_window_scale(this).GetCachedSize(), target, stream); + } + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale forward_window_scale = 2; + if (this->_internal_has_forward_window_scale()) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(2, _Internal::forward_window_scale(this), + _Internal::forward_window_scale(this).GetCachedSize(), target, stream); + } + + // string weight_column = 3; + if (!this->_internal_weight_column().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_weight_column().data(), static_cast(this->_internal_weight_column().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.weight_column"); + target = stream->WriteStringMaybeAliased( + 3, this->_internal_weight_column(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + return target; +} + +size_t UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string weight_column = 3; + if (!this->_internal_weight_column().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_weight_column()); + } + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; + if (this->_internal_has_reverse_window_scale()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + *_impl_.reverse_window_scale_); + } + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale forward_window_scale = 2; + if (this->_internal_has_forward_window_scale()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + *_impl_.forward_window_scale_); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::GetClassData() const { return &_class_data_; } + + +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_weight_column().empty()) { + _this->_internal_set_weight_column(from._internal_weight_column()); + } + if (from._internal_has_reverse_window_scale()) { + _this->_internal_mutable_reverse_window_scale()->::io::deephaven::proto::backplane::grpc::UpdateByWindowScale::MergeFrom( + from._internal_reverse_window_scale()); + } + if (from._internal_has_forward_window_scale()) { + _this->_internal_mutable_forward_window_scale()->::io::deephaven::proto::backplane::grpc::UpdateByWindowScale::MergeFrom( + from._internal_forward_window_scale()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::CopyFrom(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::IsInitialized() const { + return true; +} + +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::InternalSwap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.weight_column_, lhs_arena, + &other->_impl_.weight_column_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::memswap< + PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.forward_window_scale_) + + sizeof(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_impl_.forward_window_scale_) + - PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.reverse_window_scale_)>( + reinterpret_cast(&_impl_.reverse_window_scale_), + reinterpret_cast(&other->_impl_.reverse_window_scale_)); +} + +::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, + file_level_metadata_deephaven_2fproto_2ftable_2eproto[35]); +} + +// =================================================================== + +class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_Internal { + public: + static const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& reverse_window_scale(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* msg); + static const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& forward_window_scale(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* msg); +}; + +const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_Internal::reverse_window_scale(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* msg) { + return *msg->_impl_.reverse_window_scale_; +} +const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_Internal::forward_window_scale(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* msg) { + return *msg->_impl_.forward_window_scale_; +} +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) +} +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.formula_){} + , decltype(_impl_.param_token_){} + , decltype(_impl_.reverse_window_scale_){nullptr} + , decltype(_impl_.forward_window_scale_){nullptr} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.formula_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.formula_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_formula().empty()) { + _this->_impl_.formula_.Set(from._internal_formula(), + _this->GetArenaForAllocation()); + } + _impl_.param_token_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.param_token_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_param_token().empty()) { + _this->_impl_.param_token_.Set(from._internal_param_token(), + _this->GetArenaForAllocation()); + } + if (from._internal_has_reverse_window_scale()) { + _this->_impl_.reverse_window_scale_ = new ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale(*from._impl_.reverse_window_scale_); + } + if (from._internal_has_forward_window_scale()) { + _this->_impl_.forward_window_scale_ = new ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale(*from._impl_.forward_window_scale_); + } + // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) +} + +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.formula_){} + , decltype(_impl_.param_token_){} + , decltype(_impl_.reverse_window_scale_){nullptr} + , decltype(_impl_.forward_window_scale_){nullptr} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.formula_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.formula_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.param_token_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.param_token_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::~UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula() { + // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.formula_.Destroy(); + _impl_.param_token_.Destroy(); + if (this != internal_default_instance()) delete _impl_.reverse_window_scale_; + if (this != internal_default_instance()) delete _impl_.forward_window_scale_; +} + +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::Clear() { +// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.formula_.ClearToEmpty(); + _impl_.param_token_.ClearToEmpty(); + if (GetArenaForAllocation() == nullptr && _impl_.reverse_window_scale_ != nullptr) { + delete _impl_.reverse_window_scale_; + } + _impl_.reverse_window_scale_ = nullptr; + if (GetArenaForAllocation() == nullptr && _impl_.forward_window_scale_ != nullptr) { + delete _impl_.forward_window_scale_; + } + _impl_.forward_window_scale_ = nullptr; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + ptr = ctx->ParseMessage(_internal_mutable_reverse_window_scale(), ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale forward_window_scale = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) { + ptr = ctx->ParseMessage(_internal_mutable_forward_window_scale(), ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // string formula = 3; + case 3: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 26)) { + auto str = _internal_mutable_formula(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula")); + } else + goto handle_unusual; + continue; + // string param_token = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) { + auto str = _internal_mutable_param_token(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token")); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_InternalSerialize( uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { - // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) uint32_t cached_has_bits = 0; (void) cached_has_bits; @@ -12367,37 +12723,54 @@ uint8_t* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByR _Internal::forward_window_scale(this).GetCachedSize(), target, stream); } - // string weight_column = 3; - if (!this->_internal_weight_column().empty()) { + // string formula = 3; + if (!this->_internal_formula().empty()) { ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->_internal_weight_column().data(), static_cast(this->_internal_weight_column().length()), + this->_internal_formula().data(), static_cast(this->_internal_formula().length()), ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.weight_column"); + "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula"); target = stream->WriteStringMaybeAliased( - 3, this->_internal_weight_column(), target); + 3, this->_internal_formula(), target); + } + + // string param_token = 4; + if (!this->_internal_param_token().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_param_token().data(), static_cast(this->_internal_param_token().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token"); + target = stream->WriteStringMaybeAliased( + 4, this->_internal_param_token(), target); } if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); } - // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) + // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) return target; } -size_t UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) +size_t UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) size_t total_size = 0; uint32_t cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - // string weight_column = 3; - if (!this->_internal_weight_column().empty()) { + // string formula = 3; + if (!this->_internal_formula().empty()) { total_size += 1 + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->_internal_weight_column()); + this->_internal_formula()); + } + + // string param_token = 4; + if (!this->_internal_param_token().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_param_token()); } // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; @@ -12417,23 +12790,26 @@ size_t UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRol return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } -const ::PROTOBUF_NAMESPACE_ID::Message::ClassData UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_class_data_ = { +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_class_data_ = { ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, - UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::MergeImpl + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::MergeImpl }; -const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::GetClassData() const { return &_class_data_; } +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::GetClassData() const { return &_class_data_; } -void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { - auto* const _this = static_cast(&to_msg); - auto& from = static_cast(from_msg); - // @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) GOOGLE_DCHECK_NE(&from, _this); uint32_t cached_has_bits = 0; (void) cached_has_bits; - if (!from._internal_weight_column().empty()) { - _this->_internal_set_weight_column(from._internal_weight_column()); + if (!from._internal_formula().empty()) { + _this->_internal_set_formula(from._internal_formula()); + } + if (!from._internal_param_token().empty()) { + _this->_internal_set_param_token(from._internal_param_token()); } if (from._internal_has_reverse_window_scale()) { _this->_internal_mutable_reverse_window_scale()->::io::deephaven::proto::backplane::grpc::UpdateByWindowScale::MergeFrom( @@ -12446,38 +12822,42 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRolli _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); } -void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::CopyFrom(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg) +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::CopyFrom(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) if (&from == this) return; Clear(); MergeFrom(from); } -bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::IsInitialized() const { +bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::IsInitialized() const { return true; } -void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::InternalSwap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg* other) { +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::InternalSwap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* other) { using std::swap; auto* lhs_arena = GetArenaForAllocation(); auto* rhs_arena = other->GetArenaForAllocation(); _internal_metadata_.InternalSwap(&other->_internal_metadata_); ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( - &_impl_.weight_column_, lhs_arena, - &other->_impl_.weight_column_, rhs_arena + &_impl_.formula_, lhs_arena, + &other->_impl_.formula_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.param_token_, lhs_arena, + &other->_impl_.param_token_, rhs_arena ); ::PROTOBUF_NAMESPACE_ID::internal::memswap< - PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.forward_window_scale_) - + sizeof(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::_impl_.forward_window_scale_) - - PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg, _impl_.reverse_window_scale_)>( + PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.forward_window_scale_) + + sizeof(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_impl_.forward_window_scale_) + - PROTOBUF_FIELD_OFFSET(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula, _impl_.reverse_window_scale_)>( reinterpret_cast(&_impl_.reverse_window_scale_), reinterpret_cast(&other->_impl_.reverse_window_scale_)); } -::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg::GetMetadata() const { +::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[35]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[36]); } // =================================================================== @@ -12504,6 +12884,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_Internal { static const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount& rolling_count(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg); static const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd& rolling_std(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg); static const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg& rolling_wavg(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg); + static const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& rolling_formula(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg); }; const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByCumulativeSum& @@ -12586,6 +12967,10 @@ const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_Internal::rolling_wavg(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg) { return *msg->_impl_.type_.rolling_wavg_; } +const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& +UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_Internal::rolling_formula(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* msg) { + return *msg->_impl_.type_.rolling_formula_; +} void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::set_allocated_sum(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByCumulativeSum* sum) { ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); clear_type(); @@ -12886,6 +13271,21 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::set_allocate } // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_wavg) } +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::set_allocated_rolling_formula(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* rolling_formula) { + ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); + clear_type(); + if (rolling_formula) { + ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = + ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(rolling_formula); + if (message_arena != submessage_arena) { + rolling_formula = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( + message_arena, rolling_formula, submessage_arena); + } + set_has_rolling_formula(); + _impl_.type_.rolling_formula_ = rolling_formula; + } + // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) +} UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned) : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { @@ -13003,6 +13403,11 @@ UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::UpdateByRequest_U from._internal_rolling_wavg()); break; } + case kRollingFormula: { + _this->_internal_mutable_rolling_formula()->::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::MergeFrom( + from._internal_rolling_formula()); + break; + } case TYPE_NOT_SET: { break; } @@ -13165,6 +13570,12 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::clear_type() } break; } + case kRollingFormula: { + if (GetArenaForAllocation() == nullptr) { + delete _impl_.type_.rolling_formula_; + } + break; + } case TYPE_NOT_SET: { break; } @@ -13349,6 +13760,14 @@ const char* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_Inte } else goto handle_unusual; continue; + // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula rolling_formula = 21; + case 21: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 170)) { + ptr = ctx->ParseMessage(_internal_mutable_rolling_formula(), ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; default: goto handle_unusual; } // switch @@ -13518,6 +13937,13 @@ uint8_t* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_Interna _Internal::rolling_wavg(this).GetCachedSize(), target, stream); } + // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula rolling_formula = 21; + if (_internal_has_rolling_formula()) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(21, _Internal::rolling_formula(this), + _Internal::rolling_formula(this).GetCachedSize(), target, stream); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -13675,6 +14101,13 @@ size_t UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::ByteSizeLo *_impl_.type_.rolling_wavg_); break; } + // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula rolling_formula = 21; + case kRollingFormula: { + total_size += 2 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + *_impl_.type_.rolling_formula_); + break; + } case TYPE_NOT_SET: { break; } @@ -13798,6 +14231,11 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::MergeImpl(:: from._internal_rolling_wavg()); break; } + case kRollingFormula: { + _this->_internal_mutable_rolling_formula()->::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::MergeFrom( + from._internal_rolling_formula()); + break; + } case TYPE_NOT_SET: { break; } @@ -13826,7 +14264,7 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::InternalSwap ::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[36]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[37]); } // =================================================================== @@ -14058,7 +14496,7 @@ void UpdateByRequest_UpdateByOperation_UpdateByColumn::InternalSwap(UpdateByRequ ::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation_UpdateByColumn::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[37]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[38]); } // =================================================================== @@ -14305,7 +14743,7 @@ void UpdateByRequest_UpdateByOperation::InternalSwap(UpdateByRequest_UpdateByOpe ::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest_UpdateByOperation::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[38]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[39]); } // =================================================================== @@ -14664,7 +15102,7 @@ void UpdateByRequest::InternalSwap(UpdateByRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata UpdateByRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[39]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[40]); } // =================================================================== @@ -14948,7 +15386,7 @@ void SelectDistinctRequest::InternalSwap(SelectDistinctRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SelectDistinctRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[40]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[41]); } // =================================================================== @@ -15232,7 +15670,7 @@ void DropColumnsRequest::InternalSwap(DropColumnsRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata DropColumnsRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[41]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[42]); } // =================================================================== @@ -15516,7 +15954,7 @@ void UnstructuredFilterTableRequest::InternalSwap(UnstructuredFilterTableRequest ::PROTOBUF_NAMESPACE_ID::Metadata UnstructuredFilterTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[42]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[43]); } // =================================================================== @@ -15787,7 +16225,7 @@ void HeadOrTailRequest::InternalSwap(HeadOrTailRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata HeadOrTailRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[43]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[44]); } // =================================================================== @@ -16097,7 +16535,7 @@ void HeadOrTailByRequest::InternalSwap(HeadOrTailByRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata HeadOrTailByRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[44]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[45]); } // =================================================================== @@ -16407,7 +16845,7 @@ void UngroupRequest::InternalSwap(UngroupRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata UngroupRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[45]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[46]); } // =================================================================== @@ -16692,7 +17130,7 @@ void MergeTablesRequest::InternalSwap(MergeTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata MergeTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[46]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[47]); } // =================================================================== @@ -16937,7 +17375,7 @@ void SnapshotTableRequest::InternalSwap(SnapshotTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SnapshotTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[47]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[48]); } // =================================================================== @@ -17340,7 +17778,7 @@ void SnapshotWhenTableRequest::InternalSwap(SnapshotWhenTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SnapshotWhenTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[48]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[49]); } // =================================================================== @@ -17730,7 +18168,7 @@ void CrossJoinTablesRequest::InternalSwap(CrossJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata CrossJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[49]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[50]); } // =================================================================== @@ -18094,7 +18532,7 @@ void NaturalJoinTablesRequest::InternalSwap(NaturalJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata NaturalJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[50]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[51]); } // =================================================================== @@ -18458,7 +18896,7 @@ void ExactJoinTablesRequest::InternalSwap(ExactJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata ExactJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[51]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[52]); } // =================================================================== @@ -18822,7 +19260,7 @@ void LeftJoinTablesRequest::InternalSwap(LeftJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata LeftJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[52]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[53]); } // =================================================================== @@ -19215,7 +19653,7 @@ void AsOfJoinTablesRequest::InternalSwap(AsOfJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AsOfJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[53]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[54]); } // =================================================================== @@ -19631,7 +20069,7 @@ void AjRajTablesRequest::InternalSwap(AjRajTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AjRajTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[54]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[55]); } // =================================================================== @@ -20202,7 +20640,7 @@ void RangeJoinTablesRequest::InternalSwap(RangeJoinTablesRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata RangeJoinTablesRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[55]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[56]); } // =================================================================== @@ -20543,7 +20981,7 @@ void ComboAggregateRequest_Aggregate::InternalSwap(ComboAggregateRequest_Aggrega ::PROTOBUF_NAMESPACE_ID::Metadata ComboAggregateRequest_Aggregate::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[56]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[57]); } // =================================================================== @@ -20887,7 +21325,7 @@ void ComboAggregateRequest::InternalSwap(ComboAggregateRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata ComboAggregateRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[57]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[58]); } // =================================================================== @@ -21212,7 +21650,7 @@ void AggregateAllRequest::InternalSwap(AggregateAllRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggregateAllRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[58]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[59]); } // =================================================================== @@ -21446,7 +21884,7 @@ void AggSpec_AggSpecApproximatePercentile::InternalSwap(AggSpec_AggSpecApproxima ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecApproximatePercentile::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[59]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[60]); } // =================================================================== @@ -21624,7 +22062,7 @@ void AggSpec_AggSpecCountDistinct::InternalSwap(AggSpec_AggSpecCountDistinct* ot ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecCountDistinct::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[60]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[61]); } // =================================================================== @@ -21802,7 +22240,7 @@ void AggSpec_AggSpecDistinct::InternalSwap(AggSpec_AggSpecDistinct* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecDistinct::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[61]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[62]); } // =================================================================== @@ -22055,7 +22493,7 @@ void AggSpec_AggSpecFormula::InternalSwap(AggSpec_AggSpecFormula* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecFormula::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[62]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[63]); } // =================================================================== @@ -22233,7 +22671,7 @@ void AggSpec_AggSpecMedian::InternalSwap(AggSpec_AggSpecMedian* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecMedian::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[63]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[64]); } // =================================================================== @@ -22456,7 +22894,7 @@ void AggSpec_AggSpecPercentile::InternalSwap(AggSpec_AggSpecPercentile* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecPercentile::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[64]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[65]); } // =================================================================== @@ -22641,7 +23079,7 @@ void AggSpec_AggSpecSorted::InternalSwap(AggSpec_AggSpecSorted* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecSorted::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[65]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[66]); } // =================================================================== @@ -22844,7 +23282,7 @@ void AggSpec_AggSpecSortedColumn::InternalSwap(AggSpec_AggSpecSortedColumn* othe ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecSortedColumn::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[66]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[67]); } // =================================================================== @@ -23034,7 +23472,7 @@ void AggSpec_AggSpecTDigest::InternalSwap(AggSpec_AggSpecTDigest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecTDigest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[67]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[68]); } // =================================================================== @@ -23258,7 +23696,7 @@ void AggSpec_AggSpecUnique::InternalSwap(AggSpec_AggSpecUnique* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecUnique::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[68]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[69]); } // =================================================================== @@ -23768,7 +24206,7 @@ void AggSpec_AggSpecNonUniqueSentinel::InternalSwap(AggSpec_AggSpecNonUniqueSent ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecNonUniqueSentinel::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[69]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[70]); } // =================================================================== @@ -23971,7 +24409,7 @@ void AggSpec_AggSpecWeighted::InternalSwap(AggSpec_AggSpecWeighted* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecWeighted::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[70]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[71]); } // =================================================================== @@ -24011,7 +24449,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecAbsSum::GetClas ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecAbsSum::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[71]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[72]); } // =================================================================== @@ -24051,7 +24489,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecAvg::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecAvg::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[72]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[73]); } // =================================================================== @@ -24091,7 +24529,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecFirst::GetClass ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecFirst::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[73]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[74]); } // =================================================================== @@ -24131,7 +24569,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecFreeze::GetClas ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecFreeze::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[74]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[75]); } // =================================================================== @@ -24171,7 +24609,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecGroup::GetClass ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecGroup::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[75]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[76]); } // =================================================================== @@ -24211,7 +24649,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecLast::GetClassD ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecLast::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[76]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[77]); } // =================================================================== @@ -24251,7 +24689,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecMax::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecMax::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[77]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[78]); } // =================================================================== @@ -24291,7 +24729,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecMin::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecMin::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[78]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[79]); } // =================================================================== @@ -24331,7 +24769,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecStd::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecStd::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[79]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[80]); } // =================================================================== @@ -24371,7 +24809,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecSum::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecSum::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[80]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[81]); } // =================================================================== @@ -24411,7 +24849,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AggSpec_AggSpecVar::GetClassDa ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec_AggSpecVar::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[81]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[82]); } // =================================================================== @@ -25934,7 +26372,7 @@ void AggSpec::InternalSwap(AggSpec* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggSpec::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[82]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[83]); } // =================================================================== @@ -26319,7 +26757,7 @@ void AggregateRequest::InternalSwap(AggregateRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AggregateRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[83]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[84]); } // =================================================================== @@ -26551,7 +26989,7 @@ void Aggregation_AggregationColumns::InternalSwap(Aggregation_AggregationColumns ::PROTOBUF_NAMESPACE_ID::Metadata Aggregation_AggregationColumns::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[84]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[85]); } // =================================================================== @@ -26754,7 +27192,7 @@ void Aggregation_AggregationCount::InternalSwap(Aggregation_AggregationCount* ot ::PROTOBUF_NAMESPACE_ID::Metadata Aggregation_AggregationCount::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[85]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[86]); } // =================================================================== @@ -26957,7 +27395,7 @@ void Aggregation_AggregationRowKey::InternalSwap(Aggregation_AggregationRowKey* ::PROTOBUF_NAMESPACE_ID::Metadata Aggregation_AggregationRowKey::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[86]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[87]); } // =================================================================== @@ -27187,7 +27625,7 @@ void Aggregation_AggregationPartition::InternalSwap(Aggregation_AggregationParti ::PROTOBUF_NAMESPACE_ID::Metadata Aggregation_AggregationPartition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[87]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[88]); } // =================================================================== @@ -27666,7 +28104,7 @@ void Aggregation::InternalSwap(Aggregation* other) { ::PROTOBUF_NAMESPACE_ID::Metadata Aggregation::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[88]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[89]); } // =================================================================== @@ -27932,7 +28370,7 @@ void SortDescriptor::InternalSwap(SortDescriptor* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SortDescriptor::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[89]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[90]); } // =================================================================== @@ -28211,7 +28649,7 @@ void SortTableRequest::InternalSwap(SortTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SortTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[90]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[91]); } // =================================================================== @@ -28490,7 +28928,7 @@ void FilterTableRequest::InternalSwap(FilterTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata FilterTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[91]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[92]); } // =================================================================== @@ -28889,7 +29327,7 @@ void SeekRowRequest::InternalSwap(SeekRowRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SeekRowRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[92]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[93]); } // =================================================================== @@ -29067,7 +29505,7 @@ void SeekRowResponse::InternalSwap(SeekRowResponse* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SeekRowResponse::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[93]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[94]); } // =================================================================== @@ -29270,7 +29708,7 @@ void Reference::InternalSwap(Reference* other) { ::PROTOBUF_NAMESPACE_ID::Metadata Reference::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[94]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[95]); } // =================================================================== @@ -29622,7 +30060,7 @@ void Literal::InternalSwap(Literal* other) { ::PROTOBUF_NAMESPACE_ID::Metadata Literal::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[95]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[96]); } // =================================================================== @@ -29927,7 +30365,7 @@ void Value::InternalSwap(Value* other) { ::PROTOBUF_NAMESPACE_ID::Metadata Value::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[96]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[97]); } // =================================================================== @@ -30696,7 +31134,7 @@ void Condition::InternalSwap(Condition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata Condition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[97]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[98]); } // =================================================================== @@ -30881,7 +31319,7 @@ void AndCondition::InternalSwap(AndCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata AndCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[98]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[99]); } // =================================================================== @@ -31066,7 +31504,7 @@ void OrCondition::InternalSwap(OrCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata OrCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[99]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[100]); } // =================================================================== @@ -31259,7 +31697,7 @@ void NotCondition::InternalSwap(NotCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata NotCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[100]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[101]); } // =================================================================== @@ -31558,7 +31996,7 @@ void CompareCondition::InternalSwap(CompareCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata CompareCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[101]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[102]); } // =================================================================== @@ -31850,7 +32288,7 @@ void InCondition::InternalSwap(InCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata InCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[102]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[103]); } // =================================================================== @@ -32129,7 +32567,7 @@ void InvokeCondition::InternalSwap(InvokeCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata InvokeCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[103]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[104]); } // =================================================================== @@ -32322,7 +32760,7 @@ void IsNullCondition::InternalSwap(IsNullCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata IsNullCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[104]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[105]); } // =================================================================== @@ -32632,7 +33070,7 @@ void MatchesCondition::InternalSwap(MatchesCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata MatchesCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[105]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[106]); } // =================================================================== @@ -32942,7 +33380,7 @@ void ContainsCondition::InternalSwap(ContainsCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata ContainsCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[106]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[107]); } // =================================================================== @@ -33179,7 +33617,7 @@ void SearchCondition::InternalSwap(SearchCondition* other) { ::PROTOBUF_NAMESPACE_ID::Metadata SearchCondition::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[107]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[108]); } // =================================================================== @@ -33424,7 +33862,7 @@ void FlattenRequest::InternalSwap(FlattenRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata FlattenRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[108]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[109]); } // =================================================================== @@ -33669,7 +34107,7 @@ void MetaTableRequest::InternalSwap(MetaTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata MetaTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[109]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[110]); } // =================================================================== @@ -33905,7 +34343,7 @@ void RunChartDownsampleRequest_ZoomRange::InternalSwap(RunChartDownsampleRequest ::PROTOBUF_NAMESPACE_ID::Metadata RunChartDownsampleRequest_ZoomRange::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[110]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[111]); } // =================================================================== @@ -34308,7 +34746,7 @@ void RunChartDownsampleRequest::InternalSwap(RunChartDownsampleRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata RunChartDownsampleRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[111]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[112]); } // =================================================================== @@ -34348,7 +34786,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CreateInputTableRequest_InputT ::PROTOBUF_NAMESPACE_ID::Metadata CreateInputTableRequest_InputTableKind_InMemoryAppendOnly::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[112]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[113]); } // =================================================================== @@ -34538,7 +34976,7 @@ void CreateInputTableRequest_InputTableKind_InMemoryKeyBacked::InternalSwap(Crea ::PROTOBUF_NAMESPACE_ID::Metadata CreateInputTableRequest_InputTableKind_InMemoryKeyBacked::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[113]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[114]); } // =================================================================== @@ -34578,7 +35016,7 @@ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CreateInputTableRequest_InputT ::PROTOBUF_NAMESPACE_ID::Metadata CreateInputTableRequest_InputTableKind_Blink::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[114]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[115]); } // =================================================================== @@ -34941,7 +35379,7 @@ void CreateInputTableRequest_InputTableKind::InternalSwap(CreateInputTableReques ::PROTOBUF_NAMESPACE_ID::Metadata CreateInputTableRequest_InputTableKind::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[115]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[116]); } // =================================================================== @@ -35316,7 +35754,7 @@ void CreateInputTableRequest::InternalSwap(CreateInputTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata CreateInputTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[116]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[117]); } // =================================================================== @@ -35667,7 +36105,7 @@ void WhereInRequest::InternalSwap(WhereInRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata WhereInRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[117]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[118]); } // =================================================================== @@ -36002,7 +36440,7 @@ void ColumnStatisticsRequest::InternalSwap(ColumnStatisticsRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata ColumnStatisticsRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[118]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[119]); } // =================================================================== @@ -38511,7 +38949,7 @@ void BatchTableRequest_Operation::InternalSwap(BatchTableRequest_Operation* othe ::PROTOBUF_NAMESPACE_ID::Metadata BatchTableRequest_Operation::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[119]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[120]); } // =================================================================== @@ -38696,7 +39134,7 @@ void BatchTableRequest::InternalSwap(BatchTableRequest* other) { ::PROTOBUF_NAMESPACE_ID::Metadata BatchTableRequest::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_deephaven_2fproto_2ftable_2eproto_getter, &descriptor_table_deephaven_2fproto_2ftable_2eproto_once, - file_level_metadata_deephaven_2fproto_2ftable_2eproto[120]); + file_level_metadata_deephaven_2fproto_2ftable_2eproto[121]); } // @@protoc_insertion_point(namespace_scope) @@ -38850,6 +39288,10 @@ template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::grpc::UpdateByRe Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg >(Arena* arena) { return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg >(arena); } +template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* +Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula >(Arena* arena) { + return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula >(arena); +} template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec* Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec >(Arena* arena) { return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec >(arena); diff --git a/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.h b/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.h index 0a533dbc151..840d3c3c6df 100644 --- a/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.h +++ b/cpp-client/deephaven/dhclient/proto/deephaven/proto/table.pb.h @@ -376,6 +376,9 @@ extern UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRol class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount; struct UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCountDefaultTypeInternal; extern UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCountDefaultTypeInternal _UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount_default_instance_; +class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula; +struct UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal; +extern UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormulaDefaultTypeInternal _UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula_default_instance_; class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroup; struct UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroupDefaultTypeInternal; extern UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroupDefaultTypeInternal _UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroup_default_instance_; @@ -529,6 +532,7 @@ template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOper template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByFill* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByFill>(Arena*); template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingAvg* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingAvg>(Arena*); template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount>(Arena*); +template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula>(Arena*); template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroup* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingGroup>(Arena*); template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingMax* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingMax>(Arena*); template<> ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingMin* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingMin>(Arena*); @@ -7206,6 +7210,215 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRoll }; // ------------------------------------------------------------------- +class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) */ { + public: + inline UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula() : UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(nullptr) {} + ~UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula() override; + explicit PROTOBUF_CONSTEXPR UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from); + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula&& from) noexcept + : UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula() { + *this = ::std::move(from); + } + + inline UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& operator=(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from) { + CopyFrom(from); + return *this; + } + inline UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& operator=(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& default_instance() { + return *internal_default_instance(); + } + static inline const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* internal_default_instance() { + return reinterpret_cast( + &_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula_default_instance_); + } + static constexpr int kIndexInFileMessages = + 36; + + friend void swap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& a, UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& b) { + a.Swap(&b); + } + inline void Swap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& from) { + UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula"; + } + protected: + explicit UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kFormulaFieldNumber = 3, + kParamTokenFieldNumber = 4, + kReverseWindowScaleFieldNumber = 1, + kForwardWindowScaleFieldNumber = 2, + }; + // string formula = 3; + void clear_formula(); + const std::string& formula() const; + template + void set_formula(ArgT0&& arg0, ArgT... args); + std::string* mutable_formula(); + PROTOBUF_NODISCARD std::string* release_formula(); + void set_allocated_formula(std::string* formula); + private: + const std::string& _internal_formula() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_formula(const std::string& value); + std::string* _internal_mutable_formula(); + public: + + // string param_token = 4; + void clear_param_token(); + const std::string& param_token() const; + template + void set_param_token(ArgT0&& arg0, ArgT... args); + std::string* mutable_param_token(); + PROTOBUF_NODISCARD std::string* release_param_token(); + void set_allocated_param_token(std::string* param_token); + private: + const std::string& _internal_param_token() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_param_token(const std::string& value); + std::string* _internal_mutable_param_token(); + public: + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; + bool has_reverse_window_scale() const; + private: + bool _internal_has_reverse_window_scale() const; + public: + void clear_reverse_window_scale(); + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& reverse_window_scale() const; + PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* release_reverse_window_scale(); + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* mutable_reverse_window_scale(); + void set_allocated_reverse_window_scale(::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* reverse_window_scale); + private: + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& _internal_reverse_window_scale() const; + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* _internal_mutable_reverse_window_scale(); + public: + void unsafe_arena_set_allocated_reverse_window_scale( + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* reverse_window_scale); + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* unsafe_arena_release_reverse_window_scale(); + + // .io.deephaven.proto.backplane.grpc.UpdateByWindowScale forward_window_scale = 2; + bool has_forward_window_scale() const; + private: + bool _internal_has_forward_window_scale() const; + public: + void clear_forward_window_scale(); + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& forward_window_scale() const; + PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* release_forward_window_scale(); + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* mutable_forward_window_scale(); + void set_allocated_forward_window_scale(::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* forward_window_scale); + private: + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& _internal_forward_window_scale() const; + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* _internal_mutable_forward_window_scale(); + public: + void unsafe_arena_set_allocated_forward_window_scale( + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* forward_window_scale); + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* unsafe_arena_release_forward_window_scale(); + + // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr formula_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr param_token_; + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* reverse_window_scale_; + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* forward_window_scale_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_deephaven_2fproto_2ftable_2eproto; +}; +// ------------------------------------------------------------------- + class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec) */ { public: @@ -7270,6 +7483,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : kRollingCount = 18, kRollingStd = 19, kRollingWavg = 20, + kRollingFormula = 21, TYPE_NOT_SET = 0, }; @@ -7278,7 +7492,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : &_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_default_instance_); } static constexpr int kIndexInFileMessages = - 36; + 37; friend void swap(UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec& a, UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec& b) { a.Swap(&b); @@ -7368,6 +7582,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : typedef UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount UpdateByRollingCount; typedef UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd UpdateByRollingStd; typedef UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg UpdateByRollingWAvg; + typedef UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula UpdateByRollingFormula; // accessors ------------------------------------------------------- @@ -7392,6 +7607,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : kRollingCountFieldNumber = 18, kRollingStdFieldNumber = 19, kRollingWavgFieldNumber = 20, + kRollingFormulaFieldNumber = 21, }; // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeSum sum = 1; bool has_sum() const; @@ -7753,6 +7969,24 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg* rolling_wavg); ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg* unsafe_arena_release_rolling_wavg(); + // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula rolling_formula = 21; + bool has_rolling_formula() const; + private: + bool _internal_has_rolling_formula() const; + public: + void clear_rolling_formula(); + const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& rolling_formula() const; + PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* release_rolling_formula(); + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* mutable_rolling_formula(); + void set_allocated_rolling_formula(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* rolling_formula); + private: + const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& _internal_rolling_formula() const; + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* _internal_mutable_rolling_formula(); + public: + void unsafe_arena_set_allocated_rolling_formula( + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* rolling_formula); + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* unsafe_arena_release_rolling_formula(); + void clear_type(); TypeCase type_case() const; // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec) @@ -7778,6 +8012,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : void set_has_rolling_count(); void set_has_rolling_std(); void set_has_rolling_wavg(); + void set_has_rolling_formula(); inline bool has_type() const; inline void clear_has_type(); @@ -7809,6 +8044,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec final : ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount* rolling_count_; ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd* rolling_std_; ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg* rolling_wavg_; + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* rolling_formula_; } type_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; uint32_t _oneof_case_[1]; @@ -7867,7 +8103,7 @@ class UpdateByRequest_UpdateByOperation_UpdateByColumn final : &_UpdateByRequest_UpdateByOperation_UpdateByColumn_default_instance_); } static constexpr int kIndexInFileMessages = - 37; + 38; friend void swap(UpdateByRequest_UpdateByOperation_UpdateByColumn& a, UpdateByRequest_UpdateByOperation_UpdateByColumn& b) { a.Swap(&b); @@ -8057,7 +8293,7 @@ class UpdateByRequest_UpdateByOperation final : &_UpdateByRequest_UpdateByOperation_default_instance_); } static constexpr int kIndexInFileMessages = - 38; + 39; friend void swap(UpdateByRequest_UpdateByOperation& a, UpdateByRequest_UpdateByOperation& b) { a.Swap(&b); @@ -8228,7 +8464,7 @@ class UpdateByRequest final : &_UpdateByRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 39; + 40; friend void swap(UpdateByRequest& a, UpdateByRequest& b) { a.Swap(&b); @@ -8474,7 +8710,7 @@ class SelectDistinctRequest final : &_SelectDistinctRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 40; + 41; friend void swap(SelectDistinctRequest& a, SelectDistinctRequest& b) { a.Swap(&b); @@ -8677,7 +8913,7 @@ class DropColumnsRequest final : &_DropColumnsRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 41; + 42; friend void swap(DropColumnsRequest& a, DropColumnsRequest& b) { a.Swap(&b); @@ -8880,7 +9116,7 @@ class UnstructuredFilterTableRequest final : &_UnstructuredFilterTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 42; + 43; friend void swap(UnstructuredFilterTableRequest& a, UnstructuredFilterTableRequest& b) { a.Swap(&b); @@ -9083,7 +9319,7 @@ class HeadOrTailRequest final : &_HeadOrTailRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 43; + 44; friend void swap(HeadOrTailRequest& a, HeadOrTailRequest& b) { a.Swap(&b); @@ -9271,7 +9507,7 @@ class HeadOrTailByRequest final : &_HeadOrTailByRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 44; + 45; friend void swap(HeadOrTailByRequest& a, HeadOrTailByRequest& b) { a.Swap(&b); @@ -9485,7 +9721,7 @@ class UngroupRequest final : &_UngroupRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 45; + 46; friend void swap(UngroupRequest& a, UngroupRequest& b) { a.Swap(&b); @@ -9699,7 +9935,7 @@ class MergeTablesRequest final : &_MergeTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 46; + 47; friend void swap(MergeTablesRequest& a, MergeTablesRequest& b) { a.Swap(&b); @@ -9892,7 +10128,7 @@ class SnapshotTableRequest final : &_SnapshotTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 47; + 48; friend void swap(SnapshotTableRequest& a, SnapshotTableRequest& b) { a.Swap(&b); @@ -10069,7 +10305,7 @@ class SnapshotWhenTableRequest final : &_SnapshotWhenTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 48; + 49; friend void swap(SnapshotWhenTableRequest& a, SnapshotWhenTableRequest& b) { a.Swap(&b); @@ -10325,7 +10561,7 @@ class CrossJoinTablesRequest final : &_CrossJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 49; + 50; friend void swap(CrossJoinTablesRequest& a, CrossJoinTablesRequest& b) { a.Swap(&b); @@ -10585,7 +10821,7 @@ class NaturalJoinTablesRequest final : &_NaturalJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 50; + 51; friend void swap(NaturalJoinTablesRequest& a, NaturalJoinTablesRequest& b) { a.Swap(&b); @@ -10834,7 +11070,7 @@ class ExactJoinTablesRequest final : &_ExactJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 51; + 52; friend void swap(ExactJoinTablesRequest& a, ExactJoinTablesRequest& b) { a.Swap(&b); @@ -11083,7 +11319,7 @@ class LeftJoinTablesRequest final : &_LeftJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 52; + 53; friend void swap(LeftJoinTablesRequest& a, LeftJoinTablesRequest& b) { a.Swap(&b); @@ -11332,7 +11568,7 @@ class AsOfJoinTablesRequest final : &_AsOfJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 53; + 54; friend void swap(AsOfJoinTablesRequest& a, AsOfJoinTablesRequest& b) { a.Swap(&b); @@ -11626,7 +11862,7 @@ class AjRajTablesRequest final : &_AjRajTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 54; + 55; friend void swap(AjRajTablesRequest& a, AjRajTablesRequest& b) { a.Swap(&b); @@ -11891,7 +12127,7 @@ class RangeJoinTablesRequest final : &_RangeJoinTablesRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 55; + 56; friend void swap(RangeJoinTablesRequest& a, RangeJoinTablesRequest& b) { a.Swap(&b); @@ -12272,7 +12508,7 @@ class ComboAggregateRequest_Aggregate final : &_ComboAggregateRequest_Aggregate_default_instance_); } static constexpr int kIndexInFileMessages = - 56; + 57; friend void swap(ComboAggregateRequest_Aggregate& a, ComboAggregateRequest_Aggregate& b) { a.Swap(&b); @@ -12484,7 +12720,7 @@ class ComboAggregateRequest final : &_ComboAggregateRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 57; + 58; friend void swap(ComboAggregateRequest& a, ComboAggregateRequest& b) { a.Swap(&b); @@ -12774,7 +13010,7 @@ class AggregateAllRequest final : &_AggregateAllRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 58; + 59; friend void swap(AggregateAllRequest& a, AggregateAllRequest& b) { a.Swap(&b); @@ -12997,7 +13233,7 @@ class AggSpec_AggSpecApproximatePercentile final : &_AggSpec_AggSpecApproximatePercentile_default_instance_); } static constexpr int kIndexInFileMessages = - 59; + 60; friend void swap(AggSpec_AggSpecApproximatePercentile& a, AggSpec_AggSpecApproximatePercentile& b) { a.Swap(&b); @@ -13161,7 +13397,7 @@ class AggSpec_AggSpecCountDistinct final : &_AggSpec_AggSpecCountDistinct_default_instance_); } static constexpr int kIndexInFileMessages = - 60; + 61; friend void swap(AggSpec_AggSpecCountDistinct& a, AggSpec_AggSpecCountDistinct& b) { a.Swap(&b); @@ -13309,7 +13545,7 @@ class AggSpec_AggSpecDistinct final : &_AggSpec_AggSpecDistinct_default_instance_); } static constexpr int kIndexInFileMessages = - 61; + 62; friend void swap(AggSpec_AggSpecDistinct& a, AggSpec_AggSpecDistinct& b) { a.Swap(&b); @@ -13457,7 +13693,7 @@ class AggSpec_AggSpecFormula final : &_AggSpec_AggSpecFormula_default_instance_); } static constexpr int kIndexInFileMessages = - 62; + 63; friend void swap(AggSpec_AggSpecFormula& a, AggSpec_AggSpecFormula& b) { a.Swap(&b); @@ -13626,7 +13862,7 @@ class AggSpec_AggSpecMedian final : &_AggSpec_AggSpecMedian_default_instance_); } static constexpr int kIndexInFileMessages = - 63; + 64; friend void swap(AggSpec_AggSpecMedian& a, AggSpec_AggSpecMedian& b) { a.Swap(&b); @@ -13774,7 +14010,7 @@ class AggSpec_AggSpecPercentile final : &_AggSpec_AggSpecPercentile_default_instance_); } static constexpr int kIndexInFileMessages = - 64; + 65; friend void swap(AggSpec_AggSpecPercentile& a, AggSpec_AggSpecPercentile& b) { a.Swap(&b); @@ -13933,7 +14169,7 @@ class AggSpec_AggSpecSorted final : &_AggSpec_AggSpecSorted_default_instance_); } static constexpr int kIndexInFileMessages = - 65; + 66; friend void swap(AggSpec_AggSpecSorted& a, AggSpec_AggSpecSorted& b) { a.Swap(&b); @@ -14090,7 +14326,7 @@ class AggSpec_AggSpecSortedColumn final : &_AggSpec_AggSpecSortedColumn_default_instance_); } static constexpr int kIndexInFileMessages = - 66; + 67; friend void swap(AggSpec_AggSpecSortedColumn& a, AggSpec_AggSpecSortedColumn& b) { a.Swap(&b); @@ -14243,7 +14479,7 @@ class AggSpec_AggSpecTDigest final : &_AggSpec_AggSpecTDigest_default_instance_); } static constexpr int kIndexInFileMessages = - 67; + 68; friend void swap(AggSpec_AggSpecTDigest& a, AggSpec_AggSpecTDigest& b) { a.Swap(&b); @@ -14396,7 +14632,7 @@ class AggSpec_AggSpecUnique final : &_AggSpec_AggSpecUnique_default_instance_); } static constexpr int kIndexInFileMessages = - 68; + 69; friend void swap(AggSpec_AggSpecUnique& a, AggSpec_AggSpecUnique& b) { a.Swap(&b); @@ -14578,7 +14814,7 @@ class AggSpec_AggSpecNonUniqueSentinel final : &_AggSpec_AggSpecNonUniqueSentinel_default_instance_); } static constexpr int kIndexInFileMessages = - 69; + 70; friend void swap(AggSpec_AggSpecNonUniqueSentinel& a, AggSpec_AggSpecNonUniqueSentinel& b) { a.Swap(&b); @@ -14891,7 +15127,7 @@ class AggSpec_AggSpecWeighted final : &_AggSpec_AggSpecWeighted_default_instance_); } static constexpr int kIndexInFileMessages = - 70; + 71; friend void swap(AggSpec_AggSpecWeighted& a, AggSpec_AggSpecWeighted& b) { a.Swap(&b); @@ -15043,7 +15279,7 @@ class AggSpec_AggSpecAbsSum final : &_AggSpec_AggSpecAbsSum_default_instance_); } static constexpr int kIndexInFileMessages = - 71; + 72; friend void swap(AggSpec_AggSpecAbsSum& a, AggSpec_AggSpecAbsSum& b) { a.Swap(&b); @@ -15161,7 +15397,7 @@ class AggSpec_AggSpecAvg final : &_AggSpec_AggSpecAvg_default_instance_); } static constexpr int kIndexInFileMessages = - 72; + 73; friend void swap(AggSpec_AggSpecAvg& a, AggSpec_AggSpecAvg& b) { a.Swap(&b); @@ -15279,7 +15515,7 @@ class AggSpec_AggSpecFirst final : &_AggSpec_AggSpecFirst_default_instance_); } static constexpr int kIndexInFileMessages = - 73; + 74; friend void swap(AggSpec_AggSpecFirst& a, AggSpec_AggSpecFirst& b) { a.Swap(&b); @@ -15397,7 +15633,7 @@ class AggSpec_AggSpecFreeze final : &_AggSpec_AggSpecFreeze_default_instance_); } static constexpr int kIndexInFileMessages = - 74; + 75; friend void swap(AggSpec_AggSpecFreeze& a, AggSpec_AggSpecFreeze& b) { a.Swap(&b); @@ -15515,7 +15751,7 @@ class AggSpec_AggSpecGroup final : &_AggSpec_AggSpecGroup_default_instance_); } static constexpr int kIndexInFileMessages = - 75; + 76; friend void swap(AggSpec_AggSpecGroup& a, AggSpec_AggSpecGroup& b) { a.Swap(&b); @@ -15633,7 +15869,7 @@ class AggSpec_AggSpecLast final : &_AggSpec_AggSpecLast_default_instance_); } static constexpr int kIndexInFileMessages = - 76; + 77; friend void swap(AggSpec_AggSpecLast& a, AggSpec_AggSpecLast& b) { a.Swap(&b); @@ -15751,7 +15987,7 @@ class AggSpec_AggSpecMax final : &_AggSpec_AggSpecMax_default_instance_); } static constexpr int kIndexInFileMessages = - 77; + 78; friend void swap(AggSpec_AggSpecMax& a, AggSpec_AggSpecMax& b) { a.Swap(&b); @@ -15869,7 +16105,7 @@ class AggSpec_AggSpecMin final : &_AggSpec_AggSpecMin_default_instance_); } static constexpr int kIndexInFileMessages = - 78; + 79; friend void swap(AggSpec_AggSpecMin& a, AggSpec_AggSpecMin& b) { a.Swap(&b); @@ -15987,7 +16223,7 @@ class AggSpec_AggSpecStd final : &_AggSpec_AggSpecStd_default_instance_); } static constexpr int kIndexInFileMessages = - 79; + 80; friend void swap(AggSpec_AggSpecStd& a, AggSpec_AggSpecStd& b) { a.Swap(&b); @@ -16105,7 +16341,7 @@ class AggSpec_AggSpecSum final : &_AggSpec_AggSpecSum_default_instance_); } static constexpr int kIndexInFileMessages = - 80; + 81; friend void swap(AggSpec_AggSpecSum& a, AggSpec_AggSpecSum& b) { a.Swap(&b); @@ -16223,7 +16459,7 @@ class AggSpec_AggSpecVar final : &_AggSpec_AggSpecVar_default_instance_); } static constexpr int kIndexInFileMessages = - 81; + 82; friend void swap(AggSpec_AggSpecVar& a, AggSpec_AggSpecVar& b) { a.Swap(&b); @@ -16369,7 +16605,7 @@ class AggSpec final : &_AggSpec_default_instance_); } static constexpr int kIndexInFileMessages = - 82; + 83; friend void swap(AggSpec& a, AggSpec& b) { a.Swap(&b); @@ -17024,7 +17260,7 @@ class AggregateRequest final : &_AggregateRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 83; + 84; friend void swap(AggregateRequest& a, AggregateRequest& b) { a.Swap(&b); @@ -17278,7 +17514,7 @@ class Aggregation_AggregationColumns final : &_Aggregation_AggregationColumns_default_instance_); } static constexpr int kIndexInFileMessages = - 84; + 85; friend void swap(Aggregation_AggregationColumns& a, Aggregation_AggregationColumns& b) { a.Swap(&b); @@ -17461,7 +17697,7 @@ class Aggregation_AggregationCount final : &_Aggregation_AggregationCount_default_instance_); } static constexpr int kIndexInFileMessages = - 85; + 86; friend void swap(Aggregation_AggregationCount& a, Aggregation_AggregationCount& b) { a.Swap(&b); @@ -17614,7 +17850,7 @@ class Aggregation_AggregationRowKey final : &_Aggregation_AggregationRowKey_default_instance_); } static constexpr int kIndexInFileMessages = - 86; + 87; friend void swap(Aggregation_AggregationRowKey& a, Aggregation_AggregationRowKey& b) { a.Swap(&b); @@ -17767,7 +18003,7 @@ class Aggregation_AggregationPartition final : &_Aggregation_AggregationPartition_default_instance_); } static constexpr int kIndexInFileMessages = - 87; + 88; friend void swap(Aggregation_AggregationPartition& a, Aggregation_AggregationPartition& b) { a.Swap(&b); @@ -17940,7 +18176,7 @@ class Aggregation final : &_Aggregation_default_instance_); } static constexpr int kIndexInFileMessages = - 88; + 89; friend void swap(Aggregation& a, Aggregation& b) { a.Swap(&b); @@ -18198,7 +18434,7 @@ class SortDescriptor final : &_SortDescriptor_default_instance_); } static constexpr int kIndexInFileMessages = - 89; + 90; friend void swap(SortDescriptor& a, SortDescriptor& b) { a.Swap(&b); @@ -18407,7 +18643,7 @@ class SortTableRequest final : &_SortTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 90; + 91; friend void swap(SortTableRequest& a, SortTableRequest& b) { a.Swap(&b); @@ -18604,7 +18840,7 @@ class FilterTableRequest final : &_FilterTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 91; + 92; friend void swap(FilterTableRequest& a, FilterTableRequest& b) { a.Swap(&b); @@ -18801,7 +19037,7 @@ class SeekRowRequest final : &_SeekRowRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 92; + 93; friend void swap(SeekRowRequest& a, SeekRowRequest& b) { a.Swap(&b); @@ -19038,7 +19274,7 @@ class SeekRowResponse final : &_SeekRowResponse_default_instance_); } static constexpr int kIndexInFileMessages = - 93; + 94; friend void swap(SeekRowResponse& a, SeekRowResponse& b) { a.Swap(&b); @@ -19186,7 +19422,7 @@ class Reference final : &_Reference_default_instance_); } static constexpr int kIndexInFileMessages = - 94; + 95; friend void swap(Reference& a, Reference& b) { a.Swap(&b); @@ -19348,7 +19584,7 @@ class Literal final : &_Literal_default_instance_); } static constexpr int kIndexInFileMessages = - 95; + 96; friend void swap(Literal& a, Literal& b) { a.Swap(&b); @@ -19587,7 +19823,7 @@ class Value final : &_Value_default_instance_); } static constexpr int kIndexInFileMessages = - 96; + 97; friend void swap(Value& a, Value& b) { a.Swap(&b); @@ -19791,7 +20027,7 @@ class Condition final : &_Condition_default_instance_); } static constexpr int kIndexInFileMessages = - 97; + 98; friend void swap(Condition& a, Condition& b) { a.Swap(&b); @@ -20149,7 +20385,7 @@ class AndCondition final : &_AndCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 98; + 99; friend void swap(AndCondition& a, AndCondition& b) { a.Swap(&b); @@ -20306,7 +20542,7 @@ class OrCondition final : &_OrCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 99; + 100; friend void swap(OrCondition& a, OrCondition& b) { a.Swap(&b); @@ -20463,7 +20699,7 @@ class NotCondition final : &_NotCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 100; + 101; friend void swap(NotCondition& a, NotCondition& b) { a.Swap(&b); @@ -20620,7 +20856,7 @@ class CompareCondition final : &_CompareCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 101; + 102; friend void swap(CompareCondition& a, CompareCondition& b) { a.Swap(&b); @@ -20857,7 +21093,7 @@ class InCondition final : &_InCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 102; + 103; friend void swap(InCondition& a, InCondition& b) { a.Swap(&b); @@ -21056,7 +21292,7 @@ class InvokeCondition final : &_InvokeCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 103; + 104; friend void swap(InvokeCondition& a, InvokeCondition& b) { a.Swap(&b); @@ -21249,7 +21485,7 @@ class IsNullCondition final : &_IsNullCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 104; + 105; friend void swap(IsNullCondition& a, IsNullCondition& b) { a.Swap(&b); @@ -21406,7 +21642,7 @@ class MatchesCondition final : &_MatchesCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 105; + 106; friend void swap(MatchesCondition& a, MatchesCondition& b) { a.Swap(&b); @@ -21601,7 +21837,7 @@ class ContainsCondition final : &_ContainsCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 106; + 107; friend void swap(ContainsCondition& a, ContainsCondition& b) { a.Swap(&b); @@ -21796,7 +22032,7 @@ class SearchCondition final : &_SearchCondition_default_instance_); } static constexpr int kIndexInFileMessages = - 107; + 108; friend void swap(SearchCondition& a, SearchCondition& b) { a.Swap(&b); @@ -21969,7 +22205,7 @@ class FlattenRequest final : &_FlattenRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 108; + 109; friend void swap(FlattenRequest& a, FlattenRequest& b) { a.Swap(&b); @@ -22146,7 +22382,7 @@ class MetaTableRequest final : &_MetaTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 109; + 110; friend void swap(MetaTableRequest& a, MetaTableRequest& b) { a.Swap(&b); @@ -22323,7 +22559,7 @@ class RunChartDownsampleRequest_ZoomRange final : &_RunChartDownsampleRequest_ZoomRange_default_instance_); } static constexpr int kIndexInFileMessages = - 110; + 111; friend void swap(RunChartDownsampleRequest_ZoomRange& a, RunChartDownsampleRequest_ZoomRange& b) { a.Swap(&b); @@ -22491,7 +22727,7 @@ class RunChartDownsampleRequest final : &_RunChartDownsampleRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 111; + 112; friend void swap(RunChartDownsampleRequest& a, RunChartDownsampleRequest& b) { a.Swap(&b); @@ -22742,7 +22978,7 @@ class CreateInputTableRequest_InputTableKind_InMemoryAppendOnly final : &_CreateInputTableRequest_InputTableKind_InMemoryAppendOnly_default_instance_); } static constexpr int kIndexInFileMessages = - 112; + 113; friend void swap(CreateInputTableRequest_InputTableKind_InMemoryAppendOnly& a, CreateInputTableRequest_InputTableKind_InMemoryAppendOnly& b) { a.Swap(&b); @@ -22861,7 +23097,7 @@ class CreateInputTableRequest_InputTableKind_InMemoryKeyBacked final : &_CreateInputTableRequest_InputTableKind_InMemoryKeyBacked_default_instance_); } static constexpr int kIndexInFileMessages = - 113; + 114; friend void swap(CreateInputTableRequest_InputTableKind_InMemoryKeyBacked& a, CreateInputTableRequest_InputTableKind_InMemoryKeyBacked& b) { a.Swap(&b); @@ -23023,7 +23259,7 @@ class CreateInputTableRequest_InputTableKind_Blink final : &_CreateInputTableRequest_InputTableKind_Blink_default_instance_); } static constexpr int kIndexInFileMessages = - 114; + 115; friend void swap(CreateInputTableRequest_InputTableKind_Blink& a, CreateInputTableRequest_InputTableKind_Blink& b) { a.Swap(&b); @@ -23149,7 +23385,7 @@ class CreateInputTableRequest_InputTableKind final : &_CreateInputTableRequest_InputTableKind_default_instance_); } static constexpr int kIndexInFileMessages = - 115; + 116; friend void swap(CreateInputTableRequest_InputTableKind& a, CreateInputTableRequest_InputTableKind& b) { a.Swap(&b); @@ -23370,7 +23606,7 @@ class CreateInputTableRequest final : &_CreateInputTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 116; + 117; friend void swap(CreateInputTableRequest& a, CreateInputTableRequest& b) { a.Swap(&b); @@ -23602,7 +23838,7 @@ class WhereInRequest final : &_WhereInRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 117; + 118; friend void swap(WhereInRequest& a, WhereInRequest& b) { a.Swap(&b); @@ -23836,7 +24072,7 @@ class ColumnStatisticsRequest final : &_ColumnStatisticsRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 118; + 119; friend void swap(ColumnStatisticsRequest& a, ColumnStatisticsRequest& b) { a.Swap(&b); @@ -24089,7 +24325,7 @@ class BatchTableRequest_Operation final : &_BatchTableRequest_Operation_default_instance_); } static constexpr int kIndexInFileMessages = - 119; + 120; friend void swap(BatchTableRequest_Operation& a, BatchTableRequest_Operation& b) { a.Swap(&b); @@ -25077,7 +25313,7 @@ class BatchTableRequest final : &_BatchTableRequest_default_instance_); } static constexpr int kIndexInFileMessages = - 120; + 121; friend void swap(BatchTableRequest& a, BatchTableRequest& b) { a.Swap(&b); @@ -30434,6 +30670,290 @@ inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Update // ------------------------------------------------------------------- +// UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula + +// .io.deephaven.proto.backplane.grpc.UpdateByWindowScale reverse_window_scale = 1; +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_has_reverse_window_scale() const { + return this != internal_default_instance() && _impl_.reverse_window_scale_ != nullptr; +} +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::has_reverse_window_scale() const { + return _internal_has_reverse_window_scale(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::clear_reverse_window_scale() { + if (GetArenaForAllocation() == nullptr && _impl_.reverse_window_scale_ != nullptr) { + delete _impl_.reverse_window_scale_; + } + _impl_.reverse_window_scale_ = nullptr; +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_reverse_window_scale() const { + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* p = _impl_.reverse_window_scale_; + return p != nullptr ? *p : reinterpret_cast( + ::io::deephaven::proto::backplane::grpc::_UpdateByWindowScale_default_instance_); +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::reverse_window_scale() const { + // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale) + return _internal_reverse_window_scale(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::unsafe_arena_set_allocated_reverse_window_scale( + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* reverse_window_scale) { + if (GetArenaForAllocation() == nullptr) { + delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.reverse_window_scale_); + } + _impl_.reverse_window_scale_ = reverse_window_scale; + if (reverse_window_scale) { + + } else { + + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale) +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::release_reverse_window_scale() { + + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* temp = _impl_.reverse_window_scale_; + _impl_.reverse_window_scale_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + if (GetArenaForAllocation() == nullptr) { delete old; } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArenaForAllocation() != nullptr) { + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return temp; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::unsafe_arena_release_reverse_window_scale() { + // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale) + + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* temp = _impl_.reverse_window_scale_; + _impl_.reverse_window_scale_ = nullptr; + return temp; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_mutable_reverse_window_scale() { + + if (_impl_.reverse_window_scale_ == nullptr) { + auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByWindowScale>(GetArenaForAllocation()); + _impl_.reverse_window_scale_ = p; + } + return _impl_.reverse_window_scale_; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::mutable_reverse_window_scale() { + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* _msg = _internal_mutable_reverse_window_scale(); + // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale) + return _msg; +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_allocated_reverse_window_scale(::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* reverse_window_scale) { + ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); + if (message_arena == nullptr) { + delete _impl_.reverse_window_scale_; + } + if (reverse_window_scale) { + ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = + ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(reverse_window_scale); + if (message_arena != submessage_arena) { + reverse_window_scale = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( + message_arena, reverse_window_scale, submessage_arena); + } + + } else { + + } + _impl_.reverse_window_scale_ = reverse_window_scale; + // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale) +} + +// .io.deephaven.proto.backplane.grpc.UpdateByWindowScale forward_window_scale = 2; +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_has_forward_window_scale() const { + return this != internal_default_instance() && _impl_.forward_window_scale_ != nullptr; +} +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::has_forward_window_scale() const { + return _internal_has_forward_window_scale(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::clear_forward_window_scale() { + if (GetArenaForAllocation() == nullptr && _impl_.forward_window_scale_ != nullptr) { + delete _impl_.forward_window_scale_; + } + _impl_.forward_window_scale_ = nullptr; +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_forward_window_scale() const { + const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* p = _impl_.forward_window_scale_; + return p != nullptr ? *p : reinterpret_cast( + ::io::deephaven::proto::backplane::grpc::_UpdateByWindowScale_default_instance_); +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::forward_window_scale() const { + // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale) + return _internal_forward_window_scale(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::unsafe_arena_set_allocated_forward_window_scale( + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* forward_window_scale) { + if (GetArenaForAllocation() == nullptr) { + delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.forward_window_scale_); + } + _impl_.forward_window_scale_ = forward_window_scale; + if (forward_window_scale) { + + } else { + + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale) +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::release_forward_window_scale() { + + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* temp = _impl_.forward_window_scale_; + _impl_.forward_window_scale_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + if (GetArenaForAllocation() == nullptr) { delete old; } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArenaForAllocation() != nullptr) { + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return temp; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::unsafe_arena_release_forward_window_scale() { + // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale) + + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* temp = _impl_.forward_window_scale_; + _impl_.forward_window_scale_ = nullptr; + return temp; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_mutable_forward_window_scale() { + + if (_impl_.forward_window_scale_ == nullptr) { + auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::UpdateByWindowScale>(GetArenaForAllocation()); + _impl_.forward_window_scale_ = p; + } + return _impl_.forward_window_scale_; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::mutable_forward_window_scale() { + ::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* _msg = _internal_mutable_forward_window_scale(); + // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale) + return _msg; +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_allocated_forward_window_scale(::io::deephaven::proto::backplane::grpc::UpdateByWindowScale* forward_window_scale) { + ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); + if (message_arena == nullptr) { + delete _impl_.forward_window_scale_; + } + if (forward_window_scale) { + ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = + ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(forward_window_scale); + if (message_arena != submessage_arena) { + forward_window_scale = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( + message_arena, forward_window_scale, submessage_arena); + } + + } else { + + } + _impl_.forward_window_scale_ = forward_window_scale; + // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale) +} + +// string formula = 3; +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::clear_formula() { + _impl_.formula_.ClearToEmpty(); +} +inline const std::string& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::formula() const { + // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula) + return _internal_formula(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_formula(ArgT0&& arg0, ArgT... args) { + + _impl_.formula_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula) +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::mutable_formula() { + std::string* _s = _internal_mutable_formula(); + // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula) + return _s; +} +inline const std::string& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_formula() const { + return _impl_.formula_.Get(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_set_formula(const std::string& value) { + + _impl_.formula_.Set(value, GetArenaForAllocation()); +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_mutable_formula() { + + return _impl_.formula_.Mutable(GetArenaForAllocation()); +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::release_formula() { + // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula) + return _impl_.formula_.Release(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_allocated_formula(std::string* formula) { + if (formula != nullptr) { + + } else { + + } + _impl_.formula_.SetAllocated(formula, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.formula_.IsDefault()) { + _impl_.formula_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.formula) +} + +// string param_token = 4; +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::clear_param_token() { + _impl_.param_token_.ClearToEmpty(); +} +inline const std::string& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::param_token() const { + // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token) + return _internal_param_token(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_param_token(ArgT0&& arg0, ArgT... args) { + + _impl_.param_token_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token) +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::mutable_param_token() { + std::string* _s = _internal_mutable_param_token(); + // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token) + return _s; +} +inline const std::string& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_param_token() const { + return _impl_.param_token_.Get(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_set_param_token(const std::string& value) { + + _impl_.param_token_.Set(value, GetArenaForAllocation()); +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::_internal_mutable_param_token() { + + return _impl_.param_token_.Mutable(GetArenaForAllocation()); +} +inline std::string* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::release_param_token() { + // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token) + return _impl_.param_token_.Release(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula::set_allocated_param_token(std::string* param_token) { + if (param_token != nullptr) { + + } else { + + } + _impl_.param_token_.SetAllocated(param_token, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.param_token_.IsDefault()) { + _impl_.param_token_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.param_token) +} + +// ------------------------------------------------------------------- + // UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec // .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeSum sum = 1; @@ -31916,6 +32436,80 @@ inline ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperatio return _msg; } +// .io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula rolling_formula = 21; +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_internal_has_rolling_formula() const { + return type_case() == kRollingFormula; +} +inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::has_rolling_formula() const { + return _internal_has_rolling_formula(); +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::set_has_rolling_formula() { + _impl_._oneof_case_[0] = kRollingFormula; +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::clear_rolling_formula() { + if (_internal_has_rolling_formula()) { + if (GetArenaForAllocation() == nullptr) { + delete _impl_.type_.rolling_formula_; + } + clear_has_type(); + } +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::release_rolling_formula() { + // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) + if (_internal_has_rolling_formula()) { + clear_has_type(); + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* temp = _impl_.type_.rolling_formula_; + if (GetArenaForAllocation() != nullptr) { + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + } + _impl_.type_.rolling_formula_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_internal_rolling_formula() const { + return _internal_has_rolling_formula() + ? *_impl_.type_.rolling_formula_ + : reinterpret_cast< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula&>(::io::deephaven::proto::backplane::grpc::_UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula_default_instance_); +} +inline const ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula& UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::rolling_formula() const { + // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) + return _internal_rolling_formula(); +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::unsafe_arena_release_rolling_formula() { + // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) + if (_internal_has_rolling_formula()) { + clear_has_type(); + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* temp = _impl_.type_.rolling_formula_; + _impl_.type_.rolling_formula_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline void UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::unsafe_arena_set_allocated_rolling_formula(::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* rolling_formula) { + clear_type(); + if (rolling_formula) { + set_has_rolling_formula(); + _impl_.type_.rolling_formula_ = rolling_formula; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::_internal_mutable_rolling_formula() { + if (!_internal_has_rolling_formula()) { + clear_type(); + set_has_rolling_formula(); + _impl_.type_.rolling_formula_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula >(GetArenaForAllocation()); + } + return _impl_.type_.rolling_formula_; +} +inline ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::mutable_rolling_formula() { + ::io::deephaven::proto::backplane::grpc::UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula* _msg = _internal_mutable_rolling_formula(); + // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula) + return _msg; +} + inline bool UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec::has_type() const { return type_case() != TYPE_NOT_SET; } @@ -51529,6 +52123,8 @@ BatchTableRequest::ops() const { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/partitioned/PartitionedTableProxyImpl.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/partitioned/PartitionedTableProxyImpl.java index 8cc0b210593..5bfa7de3160 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/partitioned/PartitionedTableProxyImpl.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/partitioned/PartitionedTableProxyImpl.java @@ -22,6 +22,7 @@ import io.deephaven.engine.table.impl.select.SourceColumn; import io.deephaven.engine.table.impl.select.WhereFilter; import io.deephaven.engine.table.impl.select.analyzers.SelectAndViewAnalyzer; +import io.deephaven.engine.table.impl.updateby.UpdateBy; import io.deephaven.engine.updategraph.NotificationQueue.Dependency; import io.deephaven.engine.updategraph.UpdateGraph; import io.deephaven.engine.util.TableTools; @@ -599,7 +600,9 @@ public PartitionedTable.Proxy aggBy(Collection aggregatio @Override public PartitionedTable.Proxy updateBy(UpdateByControl control, Collection operations, Collection byColumns) { - return basicTransform(ct -> ct.updateBy(control, operations, byColumns)); + final UpdateBy.UpdateByOperatorCollection collection = UpdateBy.UpdateByOperatorCollection + .from(target.constituentDefinition(), control, operations, byColumns); + return basicTransform(ct -> UpdateBy.updateBy((QueryTable) ct, collection.copy(), control)); } @Override diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/BucketedPartitionedUpdateByManager.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/BucketedPartitionedUpdateByManager.java index 9b766dd9d12..00c94789267 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/BucketedPartitionedUpdateByManager.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/BucketedPartitionedUpdateByManager.java @@ -1,7 +1,6 @@ package io.deephaven.engine.table.impl.updateby; import io.deephaven.UncheckedDeephavenException; -import io.deephaven.api.ColumnName; import io.deephaven.api.updateby.UpdateByControl; import io.deephaven.base.verify.Assert; import io.deephaven.engine.exceptions.CancellationException; @@ -17,7 +16,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @@ -64,7 +66,7 @@ class BucketedPartitionedUpdateByManager extends UpdateBy { @NotNull final QueryTable source, @NotNull final String[] preservedColumns, @NotNull final Map> resultSources, - @NotNull final Collection byColumns, + @NotNull final String[] byColumnNames, @Nullable final String timestampColumnName, @Nullable final RowRedirection rowRedirection, @NotNull final UpdateByControl control) { @@ -73,8 +75,6 @@ class BucketedPartitionedUpdateByManager extends UpdateBy { // this table will always have the rowset of the source result = new QueryTable(source.getRowSet(), resultSources); - final String[] byColumnNames = byColumns.stream().map(ColumnName::name).toArray(String[]::new); - final Table transformedTable = LivenessScopeStack.computeEnclosed(() -> { final PartitionedTable partitioned = source.partitionedAggBy(List.of(), true, null, byColumnNames); final PartitionedTable transformed = partitioned.transform(t -> { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateBy.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateBy.java index c4af875b829..298ada3a2dd 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateBy.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateBy.java @@ -373,9 +373,7 @@ public Future processUpdate() { // clear them now and let them set their own prev states if (!initialStep && !toClear.isEmpty()) { - forAllOperators(op -> { - op.clearOutputRows(toClear); - }); + forAllOperators(op -> op.clearOutputRows(toClear)); } } else { // identify which rows we need to clear in our Object columns (actual clearing will be performed later) @@ -805,6 +803,7 @@ final class OperatorThreadContext implements JobScheduler.JobThreadContext { maxInfluencerChunkSize); } + // noinspection unchecked chunkArr = new Chunk[srcIndices.length]; chunkContexts = new ChunkSource.GetContext[srcIndices.length]; @@ -892,9 +891,7 @@ private void cleanUpAndNotify(final Runnable onCleanupComplete) { // clear the sparse output columns for rows that no longer exist if (!initialStep && !redirHelper.isRedirected() && !toClear.isEmpty()) { - forAllOperators(op -> { - op.clearOutputRows(toClear); - }); + forAllOperators(op -> op.clearOutputRows(toClear)); } // release remaining resources @@ -956,7 +953,6 @@ private TableUpdate computeDownstreamUpdate() { // add the window modified rows to this set modifiedRowSet.insert(win.getAffectedRows(winCtx)); // add the modified output column sets to the downstream set - final UpdateByOperator[] winOps = win.getOperators(); for (int winOpIdx : win.getDirtyOperators(winCtx)) { // these were created directly from the result output columns so no transformer needed win.operators[winOpIdx].extractDownstreamModifiedColumnSet(upstream, downstream); @@ -1128,23 +1124,238 @@ UpdateByListener newUpdateByListener() { // region UpdateBy implementation + /** + * This helper class will process the update by clauses and organize the operators into windows that can be + * processed together. The operators are not fully initialized; the input sources and output sources will not be + * assigned or created until {@link UpdateByOperator#initializeSources(Table, RowRedirection)} is called. + */ + public static class UpdateByOperatorCollection { + /** + * The table definition used to initialize the operator collection. + */ + final TableDefinition tableDef; + + /** + * The name of the timestamp column, if any. + */ + final String timestampColumnName; + + /** + * The names of the unique input columns used by the update operators. + */ + final String[] inputColumnNames; + + /** + * The names of the output columns created by the update operators, in the order specified by the updateBy call. + */ + final String[] outputColumnNames; + + /** + * The names of the columns used to group the input rows into buckets. Empty if no key is specified. + */ + final String[] byColumnNames; + + /** + * The names of the columns that are preserved without being overridden by the update operators. + */ + final String[] preservedColumnNames; + + /** + * The description of the updateBy operator collection (for error reporting or logging). + */ + final String description; + + /** + * Contains the operators for this updateBy call, organized into windows that can be processed together. + */ + final UpdateByWindow[] windowArr; + + private UpdateByOperatorCollection( + final TableDefinition tableDef, + final String timestampColumnName, + final String[] inputColumnNames, + final String[] outputColumnNames, + final String[] byColumnNames, + final String[] preservedColumnNames, + final String description, + final UpdateByWindow[] windowArr) { + this.tableDef = tableDef; + this.timestampColumnName = timestampColumnName; + this.inputColumnNames = inputColumnNames; + this.outputColumnNames = outputColumnNames; + this.byColumnNames = byColumnNames; + this.preservedColumnNames = preservedColumnNames; + this.description = description; + this.windowArr = windowArr; + } + + public static UpdateByOperatorCollection from( + @NotNull final TableDefinition tableDef, + @NotNull final UpdateByControl control, + @NotNull final Collection clauses, + @NotNull final Collection byColumns) { + + // TODO(deephaven-core#2693): Improve UpdateByBucketHelper implementation for ColumnName + + final UpdateByOperatorFactory updateByOperatorFactory = + new UpdateByOperatorFactory(tableDef, MatchPair.fromPairs(byColumns), control); + + final Collection> windowSpecs = + updateByOperatorFactory.getWindowOperatorSpecs(clauses); + if (windowSpecs.isEmpty()) { + throw new IllegalArgumentException("At least one operator must be specified"); + } + + final StringBuilder descriptionBuilder = new StringBuilder("updateBy(ops={") + .append(updateByOperatorFactory.describe(clauses)) + .append("}"); + + final MutableObject timestampColumnName = new MutableObject<>(null); + // Track which columns are preserved without being overridden by the update operators. + final LinkedHashSet preservedColumnSet = new LinkedHashSet<>(tableDef.getColumnNameSet()); + + final Set problems = new LinkedHashSet<>(); + final Set opResultColumnSet = new HashSet<>(); + + final ArrayList inputColumnList = new ArrayList<>(); + final TObjectIntHashMap inputColumnToSlotMap = new TObjectIntHashMap<>(); + + final UpdateByWindow[] windowArr = windowSpecs.stream().map(clauseList -> { + final UpdateByOperator[] windowOps = + updateByOperatorFactory.getOperators(clauseList).toArray(UpdateByOperator[]::new); + final int[][] windowOpSourceSlots = new int[windowOps.length][]; + + for (int opIdx = 0; opIdx < windowOps.length; opIdx++) { + final UpdateByOperator op = windowOps[opIdx]; + + // Verify no collision in the resulting column names and mark which columns are preserved. + final String[] opResultNames = op.getOutputColumnNames(); + for (final String name : opResultNames) { + if (opResultColumnSet.contains(name)) { + problems.add(name); + } + opResultColumnSet.add(name); + // remove overridden source columns + preservedColumnSet.remove(name); + } + + // Verify no variance in the timestamp column names. + if (op.getTimestampColumnName() != null) { + if (timestampColumnName.getValue() == null) { + timestampColumnName.setValue(op.getTimestampColumnName()); + } else if (!timestampColumnName.getValue().equals(op.getTimestampColumnName())) { + throw new UncheckedTableException( + "Cannot reference more than one timestamp source on a single UpdateBy call {" + + timestampColumnName + ", " + op.getTimestampColumnName() + "}"); + } + } + + // Iterate over each input column and map this operator to unique source + final String[] inputColumnNames = op.getInputColumnNames(); + windowOpSourceSlots[opIdx] = new int[inputColumnNames.length]; + + for (int colIdx = 0; colIdx < inputColumnNames.length; colIdx++) { + final String name = inputColumnNames[colIdx]; + final int maybeExistingSlot = inputColumnToSlotMap.get(name); + if (maybeExistingSlot == inputColumnToSlotMap.getNoEntryValue()) { + // create a new input source + final int srcIdx = inputColumnList.size(); + inputColumnList.add(name); + inputColumnToSlotMap.put(name, srcIdx); + // map the window operator indices to this new source + windowOpSourceSlots[opIdx][colIdx] = srcIdx; + } else { + // map the window indices to this existing source + windowOpSourceSlots[opIdx][colIdx] = maybeExistingSlot; + } + } + } + + return UpdateByWindow.createFromOperatorArray(windowOps, windowOpSourceSlots); + }).toArray(UpdateByWindow[]::new); + + if (!problems.isEmpty()) { + throw new UncheckedTableException(descriptionBuilder + ": resulting column names must be unique {" + + String.join(", ", problems) + "}"); + } + + if (!byColumns.isEmpty()) { + descriptionBuilder.append(", byColumns={").append(byColumns).append("})"); + + // Verify the source has all the byColumns + final Set byColumnSet = tableDef.getColumnNameSet(); + for (final ColumnName byColumn : byColumns) { + if (!byColumnSet.contains(byColumn.name())) { + problems.add(byColumn.name()); + } + } + + if (!problems.isEmpty()) { + throw new UncheckedTableException( + descriptionBuilder + ": Missing byColumns in parent table {" + + String.join(", ", problems) + "}"); + } + } + + return new UpdateByOperatorCollection( + tableDef, + timestampColumnName.getValue(), + inputColumnList.toArray(String[]::new), + updateByOperatorFactory.getOutputColumns(clauses).toArray(String[]::new), + byColumns.stream().map(ColumnName::name).toArray(String[]::new), + preservedColumnSet.toArray(String[]::new), + descriptionBuilder.toString(), + windowArr); + } + + public UpdateByOperatorCollection copy() { + // Recreate the windows with copies of each operator. + final UpdateByWindow[] localWindowArr = new UpdateByWindow[windowArr.length]; + for (int ii = 0; ii < windowArr.length; ii++) { + localWindowArr[ii] = windowArr[ii].copy(); + } + + return new UpdateByOperatorCollection( + tableDef, + timestampColumnName, + inputColumnNames, + outputColumnNames, + byColumnNames, + preservedColumnNames, + description, + localWindowArr); + } + } + + public static Table updateBy(@NotNull final QueryTable source, + @NotNull final Collection clauses, + @NotNull final Collection byColumns, + @NotNull final UpdateByControl control) { + final UpdateByOperatorCollection operatorCollection = + UpdateByOperatorCollection.from(source.getDefinition(), control, clauses, byColumns); + return updateBy(source, operatorCollection, control); + } + /** * Apply the specified operations to each group of rows in the source table and produce a result table with the same * row set as the source with each operator applied. * * @param source the source to apply to. - * @param clauses the operations to apply. - * @param byColumns the columns to group by before applying operations + * @param operatorCollection the collection of operations to apply. * @return a new table with the same index as the source with all the operations applied. */ public static Table updateBy(@NotNull final QueryTable source, - @NotNull final Collection clauses, - @NotNull final Collection byColumns, + @NotNull final UpdateByOperatorCollection operatorCollection, @NotNull final UpdateByControl control) { QueryTable.checkInitiateOperation(source); + // Assert that the operator collection and source table definitions are compatible. + operatorCollection.tableDef.checkMutualCompatibility( + source.getDefinition(), + "OperatorCollection TableDef", + "Source TableDef"); - // create the rowRedirection if instructed + // Create the rowRedirection (if instructed by the user) final RowRedirection rowRedirection; if (control.useRedirectionOrDefault()) { if (!source.isRefreshing()) { @@ -1172,122 +1383,39 @@ public static Table updateBy(@NotNull final QueryTable source, rowRedirection = null; } - // TODO(deephaven-core#2693): Improve UpdateByBucketHelper implementation for ColumnName - // generate a MatchPair array for use by the existing algorithm - MatchPair[] pairs = MatchPair.fromPairs(byColumns); - - final UpdateByOperatorFactory updateByOperatorFactory = - new UpdateByOperatorFactory(source, pairs, rowRedirection, control); - - final Collection> windowSpecs = - updateByOperatorFactory.getWindowOperatorSpecs(clauses); - if (windowSpecs.isEmpty()) { - throw new IllegalArgumentException("At least one operator must be specified"); - } - - final StringBuilder descriptionBuilder = new StringBuilder("updateBy(ops={") - .append(updateByOperatorFactory.describe(clauses)) - .append("}"); - - final MutableObject timestampColumnName = new MutableObject<>(null); - // create an initial set of all source columns - final LinkedHashSet preservedColumnSet = new LinkedHashSet<>(source.getDefinition().getColumnNameSet()); - - final Set problems = new LinkedHashSet<>(); - final Map> opResultSources = new LinkedHashMap<>(); + final ColumnSource[] inputSourceArr = Arrays.stream(operatorCollection.inputColumnNames) + .map(colName -> ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(colName))) + .toArray(ColumnSource[]::new); - final ArrayList> inputSourceList = new ArrayList<>(); - final TObjectIntHashMap> sourceToSlotMap = new TObjectIntHashMap<>(); - - final UpdateByWindow[] windowArr = windowSpecs.stream().map(clauseList -> { - final UpdateByOperator[] windowOps = - updateByOperatorFactory.getOperators(clauseList).toArray(UpdateByOperator[]::new); - final int[][] windowOpSourceSlots = new int[windowOps.length][]; - - for (int opIdx = 0; opIdx < windowOps.length; opIdx++) { - UpdateByOperator op = windowOps[opIdx]; - - op.getOutputColumns().forEach((name, col) -> { - if (opResultSources.putIfAbsent(name, col) != null) { - problems.add(name); - } - // remove overridden source columns - preservedColumnSet.remove(name); - }); - // verify zero or one timestamp column names - if (op.getTimestampColumnName() != null) { - if (timestampColumnName.getValue() == null) { - timestampColumnName.setValue(op.getTimestampColumnName()); - } else { - if (!timestampColumnName.getValue().equals(op.getTimestampColumnName())) { - throw new UncheckedTableException( - "Cannot reference more than one timestamp source on a single UpdateBy call {" - + timestampColumnName + ", " + op.getTimestampColumnName() + "}"); - } - } - } + final Map> resultSources = new LinkedHashMap<>(source.getColumnSourceMap()); - // Iterate over each input column and map this operator to unique source - final String[] inputColumnNames = op.getInputColumnNames(); - windowOpSourceSlots[opIdx] = new int[inputColumnNames.length]; - - for (int colIdx = 0; colIdx < inputColumnNames.length; colIdx++) { - final ColumnSource input = source.getColumnSource(inputColumnNames[colIdx]); - final int maybeExistingSlot = sourceToSlotMap.get(input); - if (maybeExistingSlot == sourceToSlotMap.getNoEntryValue()) { - // create a new input source - final int srcIdx = inputSourceList.size(); - inputSourceList.add(ReinterpretUtils.maybeConvertToPrimitive(input)); - sourceToSlotMap.put(input, srcIdx); - // map the window operator indices to this new source - windowOpSourceSlots[opIdx][colIdx] = srcIdx; - } else { - // map the window indices to this existing source - windowOpSourceSlots[opIdx][colIdx] = maybeExistingSlot; - } - } + // We have the source table and the row redirection; we can initialize the operators and add the output + // columns to the result sources + for (UpdateByWindow win : operatorCollection.windowArr) { + for (UpdateByOperator op : win.operators) { + op.initializeSources(source, rowRedirection); + resultSources.putAll(op.getOutputColumns()); } - - return UpdateByWindow.createFromOperatorArray(windowOps, windowOpSourceSlots); - }).toArray(UpdateByWindow[]::new); - - if (!problems.isEmpty()) { - throw new UncheckedTableException(descriptionBuilder + ": resulting column names must be unique {" + - String.join(", ", problems) + "}"); } - // These are the source columns that exist unchanged in the result - final String[] preservedColumns = preservedColumnSet.toArray(String[]::new); - - final ColumnSource[] inputSourceArr = inputSourceList.toArray(ColumnSource.ZERO_LENGTH_COLUMN_SOURCE_ARRAY); - - final Map> resultSources = new LinkedHashMap<>(source.getColumnSourceMap()); - // Add the output columns in the user-supplied order - final Collection userOutputColumns = updateByOperatorFactory.getOutputColumns(clauses); - for (String colName : userOutputColumns) { - final ColumnSource matchedColumn = opResultSources.get(colName); - Assert.neqNull(matchedColumn, "matchedColumn"); - resultSources.put(colName, matchedColumn); - } - if (pairs.length == 0) { - descriptionBuilder.append(")"); + if (operatorCollection.byColumnNames.length == 0) { return LivenessScopeStack.computeEnclosed(() -> { final ZeroKeyUpdateByManager zkm = new ZeroKeyUpdateByManager( - windowArr, + operatorCollection.windowArr, inputSourceArr, source, - preservedColumns, + operatorCollection.preservedColumnNames, resultSources, - timestampColumnName.getValue(), + operatorCollection.timestampColumnName, rowRedirection, control); if (source.isRefreshing()) { - // start tracking previous values + // Tracking previous values if (rowRedirection != null) { rowRedirection.writableCast().startTrackingPrevValues(); } - for (UpdateByWindow win : windowArr) { + for (UpdateByWindow win : operatorCollection.windowArr) { for (UpdateByOperator op : win.operators) { op.startTrackingPrev(); } @@ -1297,40 +1425,27 @@ public static Table updateBy(@NotNull final QueryTable source, }, source::isRefreshing, DynamicNode::isRefreshing); } - descriptionBuilder.append(", pairs={").append(MatchPair.matchString(pairs)).append("})"); - - for (final MatchPair byColumn : pairs) { - if (!source.hasColumns(byColumn.rightColumn)) { - problems.add(byColumn.rightColumn); - } - } - - if (!problems.isEmpty()) { - throw new UncheckedTableException(descriptionBuilder + ": Missing byColumns in parent table {" + - String.join(", ", problems) + "}"); - } - // TODO: test whether the source is static and that UpdateBy call uses only cumulative operators. In this // case, we can use an optimized manager and a single pass through the column sources (DHC #3393) return LivenessScopeStack.computeEnclosed(() -> { final BucketedPartitionedUpdateByManager bm = new BucketedPartitionedUpdateByManager( - windowArr, + operatorCollection.windowArr, inputSourceArr, source, - preservedColumns, + operatorCollection.preservedColumnNames, resultSources, - byColumns, - timestampColumnName.getValue(), + operatorCollection.byColumnNames, + operatorCollection.timestampColumnName, rowRedirection, control); if (source.isRefreshing()) { - // start tracking previous values + // Tracking previous values if (rowRedirection != null) { rowRedirection.writableCast().startTrackingPrevValues(); } - for (UpdateByWindow win : windowArr) { + for (UpdateByWindow win : operatorCollection.windowArr) { for (UpdateByOperator op : win.operators) { op.startTrackingPrev(); } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperator.java index 28914cd0366..6601db1f771 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperator.java @@ -7,7 +7,10 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; -import io.deephaven.engine.table.*; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.ModifiedColumnSet; +import io.deephaven.engine.table.Table; +import io.deephaven.engine.table.TableUpdate; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.QueryTable; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -35,13 +38,13 @@ public abstract class UpdateByOperator { protected final MatchPair pair; protected final String[] affectingColumns; - protected final RowRedirection rowRedirection; protected final long reverseWindowScaleUnits; protected final long forwardWindowScaleUnits; protected final String timestampColumnName; + protected final boolean isWindowed; - final boolean isWindowed; + protected RowRedirection rowRedirection; /** * The input modifiedColumnSet for this operator @@ -126,20 +129,32 @@ public abstract void accumulateRolling(RowSequence inputKeys, protected UpdateByOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, final boolean isWindowed) { this.pair = pair; this.affectingColumns = affectingColumns; - this.rowRedirection = rowRedirection; this.timestampColumnName = timestampColumnName; this.reverseWindowScaleUnits = reverseWindowScaleUnits; this.forwardWindowScaleUnits = forwardWindowScaleUnits; this.isWindowed = isWindowed; } + /** + * Create an uninitialized copy of this operator. {@link #initializeSources(Table, RowRedirection)} must be called + * before this operator can be used. + * + * @return a copy of this operator + */ + public abstract UpdateByOperator copy(); + + /** + * Initialize this operator with a specific source table (and row redirection if needed). This will be called + * exactly once per operator. + */ + public abstract void initializeSources(@NotNull Table source, @Nullable RowRedirection rowRedirection); + /** * Initialize the bucket context for a cumulative operator */ @@ -240,6 +255,7 @@ protected String[] getOutputColumnNames() { * * @param context the context object */ + @SuppressWarnings("unused") protected void finishUpdate(@NotNull final Context context) {} /** diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperatorFactory.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperatorFactory.java index 81c3ab44045..9a2a295e1e7 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperatorFactory.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperatorFactory.java @@ -6,29 +6,29 @@ import io.deephaven.api.updateby.UpdateByControl; import io.deephaven.api.updateby.UpdateByOperation; import io.deephaven.api.updateby.spec.*; -import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.ColumnDefinition; +import io.deephaven.engine.table.TableDefinition; import io.deephaven.engine.table.impl.MatchPair; -import io.deephaven.engine.table.Table; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.updateby.delta.*; import io.deephaven.engine.table.impl.updateby.em.*; import io.deephaven.engine.table.impl.updateby.emstd.*; -import io.deephaven.engine.table.impl.updateby.delta.*; import io.deephaven.engine.table.impl.updateby.fill.*; import io.deephaven.engine.table.impl.updateby.minmax.*; import io.deephaven.engine.table.impl.updateby.prod.*; -import io.deephaven.engine.table.impl.updateby.rollingcount.*; -import io.deephaven.engine.table.impl.updateby.rollinggroup.*; import io.deephaven.engine.table.impl.updateby.rollingavg.*; +import io.deephaven.engine.table.impl.updateby.rollingcount.*; +import io.deephaven.engine.table.impl.updateby.rollingformula.*; +import io.deephaven.engine.table.impl.updateby.rollinggroup.RollingGroupOperator; import io.deephaven.engine.table.impl.updateby.rollingminmax.*; +import io.deephaven.engine.table.impl.updateby.rollingproduct.*; import io.deephaven.engine.table.impl.updateby.rollingstd.*; import io.deephaven.engine.table.impl.updateby.rollingsum.*; -import io.deephaven.engine.table.impl.updateby.rollingproduct.*; import io.deephaven.engine.table.impl.updateby.rollingwavg.*; import io.deephaven.engine.table.impl.updateby.sum.*; -import io.deephaven.engine.table.impl.util.RowRedirection; import io.deephaven.hash.KeyedObjectHashMap; import io.deephaven.hash.KeyedObjectKey; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.math.BigDecimal; import java.math.BigInteger; @@ -36,6 +36,7 @@ import java.time.Instant; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import static io.deephaven.util.BooleanUtils.NULL_BOOLEAN_AS_BYTE; import static io.deephaven.util.QueryConstants.NULL_BYTE; @@ -45,20 +46,17 @@ * {@link UpdateBy} can use to produce a result. */ public class UpdateByOperatorFactory { - private final Table source; + private final TableDefinition tableDef; private final MatchPair[] groupByColumns; - @Nullable - private final RowRedirection rowRedirection; @NotNull private final UpdateByControl control; - public UpdateByOperatorFactory(@NotNull final Table source, + public UpdateByOperatorFactory( + @NotNull final TableDefinition tableDef, @NotNull final MatchPair[] groupByColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final UpdateByControl control) { - this.source = source; + this.tableDef = tableDef; this.groupByColumns = groupByColumns; - this.rowRedirection = rowRedirection; this.control = control; } @@ -89,7 +87,7 @@ final Collection getOperators(@NotNull final Collection columns) { /** * If the input columns to add is an empty array, create a new one that maps each column to itself in the result * - * @param table the source table + * @param tableDef the source table definition * @param columnsToAdd the list of {@link MatchPair}s for the result columns * @return the input columns to add if it was non-empty, or a new one that maps each source column 1:1 to the * output. */ @NotNull static MatchPair[] createColumnsToAddIfMissing( - @NotNull final Table table, + @NotNull final TableDefinition tableDef, @NotNull final MatchPair[] columnsToAdd, @NotNull final UpdateBySpec spec, final MatchPair[] groupByColumns) { if (columnsToAdd.length == 0) { - return createOneToOneMatchPairs(table, groupByColumns, spec); + return createOneToOneMatchPairs(tableDef, groupByColumns, spec); } return columnsToAdd; } @@ -142,19 +140,19 @@ static MatchPair[] createColumnsToAddIfMissing( /** * Create a new {@link MatchPair} array that maps each input column to itself on the output side. * - * @param table the source table. - * @param groupByColumns the columns to group the table by + * @param tableDef the source table definition + * @param groupByColumns the columns to group the tableDef by * @return A new {@link MatchPair}[] that maps each source column 1:1 to the output. */ @NotNull static MatchPair[] createOneToOneMatchPairs( - @NotNull final Table table, + @NotNull final TableDefinition tableDef, final MatchPair[] groupByColumns, @NotNull final UpdateBySpec spec) { final Set usedGroupColumns = groupByColumns.length == 0 ? Collections.emptySet() : Arrays.stream(groupByColumns) .map(MatchPair::rightColumn).collect(Collectors.toSet()); - return table.getDefinition().getColumnStream() + return tableDef.getColumnStream() .filter(c -> !usedGroupColumns.contains(c.getName()) && spec.applicableTo(c.getDataType())) .map(c -> new MatchPair(c.getName(), c.getName())) .toArray(MatchPair[]::new); @@ -191,7 +189,7 @@ private class OutputColumnVisitor implements UpdateByOperation.Visitor { public Void visit(@NotNull final ColumnUpdateOperation clause) { final UpdateBySpec spec = clause.spec(); final MatchPair[] pairs = - createColumnsToAddIfMissing(source, parseMatchPairs(clause.columns()), spec, groupByColumns); + createColumnsToAddIfMissing(tableDef, parseMatchPairs(clause.columns()), spec, groupByColumns); for (MatchPair pair : pairs) { outputColumns.add(pair.leftColumn); } @@ -302,7 +300,7 @@ public boolean isTimeType(@NotNull final Class type) { @Override public Void visit(@NotNull final ColumnUpdateOperation clause) { final UpdateBySpec spec = clause.spec(); - pairs = createColumnsToAddIfMissing(source, parseMatchPairs(clause.columns()), spec, groupByColumns); + pairs = createColumnsToAddIfMissing(tableDef, parseMatchPairs(clause.columns()), spec, groupByColumns); spec.walk(this); pairs = null; return null; @@ -316,7 +314,7 @@ public Void visit(@NotNull final EmaSpec es) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeEmaOperator(fc, - source, + tableDef, es)) .forEach(ops::add); return null; @@ -330,7 +328,7 @@ public Void visit(@NotNull final EmsSpec spec) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeEmsOperator(fc, - source, + tableDef, spec)) .forEach(ops::add); return null; @@ -344,7 +342,7 @@ public Void visit(@NotNull final EmMinMaxSpec spec) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeEmMinMaxOperator(fc, - source, + tableDef, spec)) .forEach(ops::add); return null; @@ -358,7 +356,7 @@ public Void visit(@NotNull final EmStdSpec spec) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeEmStdOperator(fc, - source, + tableDef, spec)) .forEach(ops::add); return null; @@ -367,7 +365,7 @@ public Void visit(@NotNull final EmStdSpec spec) { @Override public Void visit(@NotNull final FillBySpec fbs) { Arrays.stream(pairs) - .map(fc -> makeForwardFillOperator(fc, source)) + .map(fc -> makeForwardFillOperator(fc, tableDef)) .forEach(ops::add); return null; } @@ -375,7 +373,7 @@ public Void visit(@NotNull final FillBySpec fbs) { @Override public Void visit(@NotNull final CumSumSpec css) { Arrays.stream(pairs) - .map(fc -> makeCumSumOperator(fc, source)) + .map(fc -> makeCumSumOperator(fc, tableDef)) .forEach(ops::add); return null; } @@ -383,7 +381,7 @@ public Void visit(@NotNull final CumSumSpec css) { @Override public Void visit(CumMinMaxSpec cmms) { Arrays.stream(pairs) - .map(fc -> makeCumMinMaxOperator(fc, source, cmms.isMax())) + .map(fc -> makeCumMinMaxOperator(fc, tableDef, cmms.isMax())) .forEach(ops::add); return null; } @@ -391,7 +389,7 @@ public Void visit(CumMinMaxSpec cmms) { @Override public Void visit(CumProdSpec cps) { Arrays.stream(pairs) - .map(fc -> makeCumProdOperator(fc, source)) + .map(fc -> makeCumProdOperator(fc, tableDef)) .forEach(ops::add); return null; } @@ -399,7 +397,7 @@ public Void visit(CumProdSpec cps) { @Override public Void visit(@NotNull final DeltaSpec spec) { Arrays.stream(pairs) - .map(fc -> makeDeltaOperator(fc, source, spec)) + .map(fc -> makeDeltaOperator(fc, tableDef, spec)) .forEach(ops::add); return null; } @@ -412,7 +410,7 @@ public Void visit(@NotNull final RollingSumSpec rss) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingSumOperator(fc, - source, + tableDef, rss)) .forEach(ops::add); return null; @@ -443,7 +441,7 @@ public Void visit(@NotNull final RollingProductSpec rps) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingProductOperator(fc, - source, + tableDef, rps)) .forEach(ops::add); return null; @@ -457,7 +455,7 @@ public Void visit(@NotNull final RollingAvgSpec rs) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingAvgOperator(fc, - source, + tableDef, rs)) .forEach(ops::add); return null; @@ -471,7 +469,7 @@ public Void visit(@NotNull final RollingMinMaxSpec rmm) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingMinMaxOperator(fc, - source, + tableDef, rmm)) .forEach(ops::add); return null; @@ -485,7 +483,7 @@ public Void visit(@NotNull final RollingWAvgSpec rws) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingWAvgOperator(fc, - source, + tableDef, rws)) .forEach(ops::add); return null; @@ -499,7 +497,7 @@ public Void visit(@NotNull final RollingStdSpec spec) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingStdOperator(fc, - source, + tableDef, spec)) .forEach(ops::add); return null; @@ -513,18 +511,32 @@ public Void visit(@NotNull final RollingCountSpec spec) { Arrays.stream(pairs) .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) .map(fc -> makeRollingCountOperator(fc, - source, + tableDef, spec)) .forEach(ops::add); return null; } + @Override + public Void visit(@NotNull final RollingFormulaSpec spec) { + final boolean isTimeBased = spec.revWindowScale().isTimeBased(); + final String timestampCol = spec.revWindowScale().timestampCol(); + + // These operators can re-use formula columns when the types match. + final Map, FormulaColumn> formulaColumnMap = new HashMap<>(); + + Arrays.stream(pairs) + .filter(p -> !isTimeBased || !p.rightColumn().equals(timestampCol)) + .map(fc -> makeRollingFormulaOperator(fc, tableDef, formulaColumnMap, spec)) + .forEach(ops::add); + return null; + } + private UpdateByOperator makeEmaOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final EmaSpec spec) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (spec.windowScale().timestampCol() == null) { @@ -548,43 +560,42 @@ private UpdateByOperator makeEmaOperator(@NotNull final MatchPair pair, }; if (csType == byte.class || csType == Byte.class) { - return new ByteEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction, NULL_BYTE); + return new ByteEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new CharEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == short.class || csType == Short.class) { - return new ShortEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new ShortEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == int.class || csType == Integer.class) { - return new IntEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new IntEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == long.class || csType == Long.class) { - return new LongEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new LongEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == float.class || csType == Float.class) { - return new FloatEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new FloatEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == double.class || csType == Double.class) { - return new DoubleEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new DoubleEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == BigDecimal.class) { - return new BigDecimalEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigDecimalEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } else if (csType == BigInteger.class) { - return new BigIntegerEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigIntegerEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } throw new IllegalArgumentException("Can not perform EMA on type " + csType); } private UpdateByOperator makeEmsOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final EmsSpec spec) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (spec.windowScale().timestampCol() == null) { @@ -608,43 +619,42 @@ private UpdateByOperator makeEmsOperator(@NotNull final MatchPair pair, }; if (csType == byte.class || csType == Byte.class) { - return new ByteEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction, NULL_BYTE); + return new ByteEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new CharEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == short.class || csType == Short.class) { - return new ShortEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new ShortEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == int.class || csType == Integer.class) { - return new IntEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new IntEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == long.class || csType == Long.class) { - return new LongEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new LongEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == float.class || csType == Float.class) { - return new FloatEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new FloatEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == double.class || csType == Double.class) { - return new DoubleEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new DoubleEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == BigDecimal.class) { - return new BigDecimalEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigDecimalEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } else if (csType == BigInteger.class) { - return new BigIntegerEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigIntegerEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } throw new IllegalArgumentException("Can not perform EMS on type " + csType); } private UpdateByOperator makeEmMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final EmMinMaxSpec spec) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (spec.windowScale().timestampCol() == null) { @@ -668,7 +678,7 @@ private UpdateByOperator makeEmMinMaxOperator(@NotNull final MatchPair pair, }; bdFunction = (prev, cur, alpha, oneMinusAlpha) -> { final BigDecimal decayedVal = prev.multiply(alpha, mathCtx); - return decayedVal.compareTo(cur) == 1 + return decayedVal.compareTo(cur) > 0 ? decayedVal : cur; }; @@ -679,50 +689,49 @@ private UpdateByOperator makeEmMinMaxOperator(@NotNull final MatchPair pair, }; bdFunction = (prev, cur, alpha, oneMinusAlpha) -> { final BigDecimal decayedVal = prev.multiply(alpha, mathCtx); - return decayedVal.compareTo(cur) == -1 + return decayedVal.compareTo(cur) < 0 ? decayedVal : cur; }; } if (csType == byte.class || csType == Byte.class) { - return new ByteEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction, NULL_BYTE); + return new ByteEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new CharEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == short.class || csType == Short.class) { - return new ShortEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new ShortEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == int.class || csType == Integer.class) { - return new IntEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new IntEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == long.class || csType == Long.class) { - return new LongEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new LongEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == float.class || csType == Float.class) { - return new FloatEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new FloatEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == double.class || csType == Double.class) { - return new DoubleEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, doubleFunction); + return new DoubleEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, doubleFunction); } else if (csType == BigDecimal.class) { - return new BigDecimalEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigDecimalEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } else if (csType == BigInteger.class) { - return new BigIntegerEMOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, bdFunction); + return new BigIntegerEMOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, bdFunction); } throw new IllegalArgumentException("Can not perform EmMinMax on type " + csType); } private UpdateByOperator makeEmStdOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final EmStdSpec spec) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (spec.windowScale().timestampCol() == null) { @@ -736,170 +745,174 @@ private UpdateByOperator makeEmStdOperator(@NotNull final MatchPair pair, final OperationControl control = spec.controlOrDefault(); final MathContext mathCtx = control.bigValueContextOrDefault(); - final boolean sourceRefreshing = source.isRefreshing(); - if (csType == byte.class || csType == Byte.class) { - return new ByteEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing, NULL_BYTE); + return new ByteEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new CharEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new ShortEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new IntEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new LongEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new FloatEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing); + return new DoubleEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits); } else if (csType == BigDecimal.class) { - return new BigDecimalEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing, mathCtx); + return new BigDecimalEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, mathCtx); } else if (csType == BigInteger.class) { - return new BigIntegerEmStdOperator(pair, affectingColumns, rowRedirection, control, - spec.windowScale().timestampCol(), timeScaleUnits, columnSource, sourceRefreshing, mathCtx); + return new BigIntegerEmStdOperator(pair, affectingColumns, control, + spec.windowScale().timestampCol(), timeScaleUnits, mathCtx); } throw new IllegalArgumentException("Can not perform EmStd on type " + csType); } - private UpdateByOperator makeCumProdOperator(MatchPair fc, Table source) { - final Class csType = source.getColumnSource(fc.rightColumn).getType(); + private UpdateByOperator makeCumProdOperator(MatchPair pair, TableDefinition tableDef) { + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); + if (csType == byte.class || csType == Byte.class) { - return new ByteCumProdOperator(fc, rowRedirection, NULL_BYTE); + return new ByteCumProdOperator(pair, NULL_BYTE); } else if (csType == short.class || csType == Short.class) { - return new ShortCumProdOperator(fc, rowRedirection); + return new ShortCumProdOperator(pair); } else if (csType == int.class || csType == Integer.class) { - return new IntCumProdOperator(fc, rowRedirection); + return new IntCumProdOperator(pair); } else if (csType == long.class || csType == Long.class) { - return new LongCumProdOperator(fc, rowRedirection); + return new LongCumProdOperator(pair); } else if (csType == float.class || csType == Float.class) { - return new FloatCumProdOperator(fc, rowRedirection); + return new FloatCumProdOperator(pair); } else if (csType == double.class || csType == Double.class) { - return new DoubleCumProdOperator(fc, rowRedirection); + return new DoubleCumProdOperator(pair); } else if (csType == BigDecimal.class) { - return new BigDecimalCumProdOperator(fc, rowRedirection, control.mathContextOrDefault()); + return new BigDecimalCumProdOperator(pair, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerCumProdOperator(fc, rowRedirection); + return new BigIntegerCumProdOperator(pair); } throw new IllegalArgumentException("Can not perform Cumulative Min/Max on type " + csType); } - private UpdateByOperator makeCumMinMaxOperator(MatchPair fc, Table source, boolean isMax) { - final ColumnSource columnSource = source.getColumnSource(fc.rightColumn); - final Class csType = columnSource.getType(); + private UpdateByOperator makeCumMinMaxOperator(MatchPair pair, TableDefinition tableDef, boolean isMax) { + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); + if (csType == byte.class || csType == Byte.class) { - return new ByteCumMinMaxOperator(fc, isMax, rowRedirection, NULL_BYTE); + return new ByteCumMinMaxOperator(pair, isMax, NULL_BYTE); } else if (csType == short.class || csType == Short.class) { - return new ShortCumMinMaxOperator(fc, isMax, rowRedirection); + return new ShortCumMinMaxOperator(pair, isMax); } else if (csType == int.class || csType == Integer.class) { - return new IntCumMinMaxOperator(fc, isMax, rowRedirection); + return new IntCumMinMaxOperator(pair, isMax); } else if (csType == long.class || csType == Long.class || isTimeType(csType)) { - return new LongCumMinMaxOperator(fc, isMax, rowRedirection, csType); + return new LongCumMinMaxOperator(pair, isMax, csType); } else if (csType == float.class || csType == Float.class) { - return new FloatCumMinMaxOperator(fc, isMax, rowRedirection); + return new FloatCumMinMaxOperator(pair, isMax); } else if (csType == double.class || csType == Double.class) { - return new DoubleCumMinMaxOperator(fc, isMax, rowRedirection); + return new DoubleCumMinMaxOperator(pair, isMax); } else if (Comparable.class.isAssignableFrom(csType)) { - // noinspection rawtypes - return new ComparableCumMinMaxOperator(fc, isMax, rowRedirection, csType); + return new ComparableCumMinMaxOperator(pair, isMax, csType); } throw new IllegalArgumentException("Can not perform Cumulative Min/Max on type " + csType); } - private UpdateByOperator makeCumSumOperator(MatchPair fc, Table source) { - final Class csType = source.getColumnSource(fc.rightColumn).getType(); + private UpdateByOperator makeCumSumOperator(MatchPair pair, TableDefinition tableDef) { + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); + if (csType == Boolean.class || csType == boolean.class) { - return new ByteCumSumOperator(fc, rowRedirection, NULL_BOOLEAN_AS_BYTE); + return new ByteCumSumOperator(pair, NULL_BOOLEAN_AS_BYTE); } else if (csType == byte.class || csType == Byte.class) { - return new ByteCumSumOperator(fc, rowRedirection, NULL_BYTE); + return new ByteCumSumOperator(pair, NULL_BYTE); + } else if (csType == char.class || csType == Character.class) { + return new CharCumSumOperator(pair); } else if (csType == short.class || csType == Short.class) { - return new ShortCumSumOperator(fc, rowRedirection); + return new ShortCumSumOperator(pair); } else if (csType == int.class || csType == Integer.class) { - return new IntCumSumOperator(fc, rowRedirection); + return new IntCumSumOperator(pair); } else if (csType == long.class || csType == Long.class) { - return new LongCumSumOperator(fc, rowRedirection); + return new LongCumSumOperator(pair); } else if (csType == float.class || csType == Float.class) { - return new FloatCumSumOperator(fc, rowRedirection); + return new FloatCumSumOperator(pair); } else if (csType == double.class || csType == Double.class) { - return new DoubleCumSumOperator(fc, rowRedirection); + return new DoubleCumSumOperator(pair); } else if (csType == BigDecimal.class) { - return new BigDecimalCumSumOperator(fc, rowRedirection, control.mathContextOrDefault()); + return new BigDecimalCumSumOperator(pair, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerCumSumOperator(fc, rowRedirection); + return new BigIntegerCumSumOperator(pair); } throw new IllegalArgumentException("Can not perform Cumulative Sum on type " + csType); } - private UpdateByOperator makeForwardFillOperator(MatchPair fc, Table source) { - final ColumnSource columnSource = source.getColumnSource(fc.rightColumn); - final Class csType = columnSource.getType(); + private UpdateByOperator makeForwardFillOperator(MatchPair pair, TableDefinition tableDef) { + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); + if (csType == char.class || csType == Character.class) { - return new CharFillByOperator(fc, rowRedirection); + return new CharFillByOperator(pair); } else if (csType == byte.class || csType == Byte.class) { - return new ByteFillByOperator(fc, rowRedirection); + return new ByteFillByOperator(pair); } else if (csType == short.class || csType == Short.class) { - return new ShortFillByOperator(fc, rowRedirection); + return new ShortFillByOperator(pair); } else if (csType == int.class || csType == Integer.class) { - return new IntFillByOperator(fc, rowRedirection); + return new IntFillByOperator(pair); } else if (csType == long.class || csType == Long.class || isTimeType(csType)) { - return new LongFillByOperator(fc, rowRedirection, csType); + return new LongFillByOperator(pair, csType); } else if (csType == float.class || csType == Float.class) { - return new FloatFillByOperator(fc, rowRedirection); + return new FloatFillByOperator(pair); } else if (csType == double.class || csType == Double.class) { - return new DoubleFillByOperator(fc, rowRedirection); + return new DoubleFillByOperator(pair); } else if (csType == boolean.class || csType == Boolean.class) { - return new BooleanFillByOperator(fc, rowRedirection); + return new BooleanFillByOperator(pair); } else { - return new ObjectFillByOperator<>(fc, rowRedirection, csType); + return new ObjectFillByOperator<>(pair, csType); } } private UpdateByOperator makeDeltaOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final DeltaSpec ds) { - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); if (csType == Character.class || csType == char.class) { - return new CharDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new CharDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == byte.class || csType == Byte.class) { - return new ByteDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new ByteDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == short.class || csType == Short.class) { - return new ShortDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new ShortDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == int.class || csType == Integer.class) { - return new IntDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new IntDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == long.class || csType == Long.class || isTimeType(csType)) { - return new LongDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new LongDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == float.class || csType == Float.class) { - return new FloatDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new FloatDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == double.class || csType == Double.class) { - return new DoubleDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new DoubleDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == BigDecimal.class) { - return new BigDecimalDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new BigDecimalDeltaOperator(pair, ds.deltaControlOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerDeltaOperator(pair, rowRedirection, ds.deltaControlOrDefault(), columnSource); + return new BigIntegerDeltaOperator(pair, ds.deltaControlOrDefault()); } throw new IllegalArgumentException("Can not perform Delta on type " + csType); } private UpdateByOperator makeRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingSumSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rs.revWindowScale().timestampCol() == null) { @@ -912,39 +925,43 @@ private UpdateByOperator makeRollingSumOperator(@NotNull final MatchPair pair, final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); if (csType == Boolean.class || csType == boolean.class) { - return new ByteRollingSumOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BOOLEAN_AS_BYTE); } else if (csType == byte.class || csType == Byte.class) { - return new ByteRollingSumOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BYTE); + } else if (csType == char.class || csType == Character.class) { + return new CharRollingSumOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingSumOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingSumOperator(pair, affectingColumns, rowRedirection, + return new IntRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongRollingSumOperator(pair, affectingColumns, rowRedirection, + return new LongRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingSumOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingSumOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == BigDecimal.class) { - return new BigDecimalRollingSumOperator(pair, affectingColumns, rowRedirection, + return new BigDecimalRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerRollingSumOperator(pair, affectingColumns, rowRedirection, + return new BigIntegerRollingSumOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } @@ -953,42 +970,29 @@ private UpdateByOperator makeRollingSumOperator(@NotNull final MatchPair pair, } private UpdateByOperator makeRollingGroupOperator(@NotNull final MatchPair[] pairs, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingGroupSpec rg) { - // noinspection rawtypes - final ColumnSource[] columnSources = new ColumnSource[pairs.length]; - final String[] affectingColumns; - if (rg.revWindowScale().timestampCol() == null) { - affectingColumns = new String[pairs.length]; - } else { - // We are affected by the timestamp column. Add it to the end of the list - affectingColumns = new String[pairs.length + 1]; - affectingColumns[pairs.length] = rg.revWindowScale().timestampCol(); - } - - // Assemble the arrays of input and affecting sources - for (int ii = 0; ii < pairs.length; ii++) { - MatchPair pair = pairs[ii]; - - columnSources[ii] = source.getColumnSource(pair.rightColumn); - affectingColumns[ii] = pair.rightColumn; + Stream inputColumnStream = Arrays.stream(pairs).map(MatchPair::rightColumn); + if (rg.revWindowScale().timestampCol() != null) { + // Include the timestamp column in the affecting list + inputColumnStream = Stream.concat(Stream.of(rg.revWindowScale().timestampCol()), inputColumnStream); } + final String[] affectingColumns = inputColumnStream.toArray(String[]::new); final long prevWindowScaleUnits = rg.revWindowScale().getTimeScaleUnits(); final long fwdWindowScaleUnits = rg.fwdWindowScale().getTimeScaleUnits(); - return new RollingGroupOperator(pairs, affectingColumns, rowRedirection, + return new RollingGroupOperator(pairs, affectingColumns, rg.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, columnSources); + prevWindowScaleUnits, fwdWindowScaleUnits, tableDef); } private UpdateByOperator makeRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingAvgSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rs.revWindowScale().timestampCol() == null) { @@ -1001,43 +1005,43 @@ private UpdateByOperator makeRollingAvgOperator(@NotNull final MatchPair pair, final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); if (csType == Boolean.class || csType == boolean.class) { - return new ByteRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BOOLEAN_AS_BYTE); } else if (csType == byte.class || csType == Byte.class) { - return new ByteRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new CharRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new IntRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new LongRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == BigDecimal.class) { - return new BigDecimalRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new BigDecimalRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerRollingAvgOperator(pair, affectingColumns, rowRedirection, + return new BigIntegerRollingAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } @@ -1046,10 +1050,10 @@ private UpdateByOperator makeRollingAvgOperator(@NotNull final MatchPair pair, } private UpdateByOperator makeRollingMinMaxOperator(@NotNull MatchPair pair, - @NotNull Table source, + @NotNull TableDefinition tableDef, @NotNull RollingMinMaxSpec rmm) { - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rmm.revWindowScale().timestampCol() == null) { @@ -1062,36 +1066,35 @@ private UpdateByOperator makeRollingMinMaxOperator(@NotNull MatchPair pair, final long fwdWindowScaleUnits = rmm.fwdWindowScale().getTimeScaleUnits(); if (csType == byte.class || csType == Byte.class) { - return new ByteRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == char.class || csType == Character.class) { - return new CharRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new CharRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new IntRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == long.class || csType == Long.class || isTimeType(csType)) { - return new LongRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new LongRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingMinMaxOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingMinMaxOperator(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax()); } else if (Comparable.class.isAssignableFrom(csType)) { - // noinspection rawtypes - return new ComparableRollingMinMaxOperator<>(pair, affectingColumns, rowRedirection, + return new ComparableRollingMinMaxOperator<>(pair, affectingColumns, rmm.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax(), csType); } @@ -1100,11 +1103,10 @@ private UpdateByOperator makeRollingMinMaxOperator(@NotNull MatchPair pair, } private UpdateByOperator makeRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingProductSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rs.revWindowScale().timestampCol() == null) { @@ -1117,39 +1119,39 @@ private UpdateByOperator makeRollingProductOperator(@NotNull final MatchPair pai final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); if (csType == byte.class || csType == Byte.class) { - return new ByteRollingProductOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == char.class || csType == Character.class) { - return new CharRollingProductOperator(pair, affectingColumns, rowRedirection, + return new CharRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingProductOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingProductOperator(pair, affectingColumns, rowRedirection, + return new IntRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongRollingProductOperator(pair, affectingColumns, rowRedirection, + return new LongRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingProductOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingProductOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == BigDecimal.class) { - return new BigDecimalRollingProductOperator(pair, affectingColumns, rowRedirection, + return new BigDecimalRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerRollingProductOperator(pair, affectingColumns, rowRedirection, + return new BigIntegerRollingProductOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } @@ -1158,11 +1160,10 @@ private UpdateByOperator makeRollingProductOperator(@NotNull final MatchPair pai } private UpdateByOperator makeRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingCountSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rs.revWindowScale().timestampCol() == null) { @@ -1175,50 +1176,49 @@ private UpdateByOperator makeRollingCountOperator(@NotNull final MatchPair pair, final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); if (csType == boolean.class || csType == Boolean.class) { - return new ByteRollingCountOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BOOLEAN_AS_BYTE); } else if (csType == byte.class || csType == Byte.class) { - return new ByteRollingCountOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharRollingCountOperator(pair, affectingColumns, rowRedirection, + return new CharRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingCountOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingCountOperator(pair, affectingColumns, rowRedirection, + return new IntRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongRollingCountOperator(pair, affectingColumns, rowRedirection, + return new LongRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingCountOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingCountOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else { - return new ObjectRollingCountOperator(pair, affectingColumns, rowRedirection, + return new ObjectRollingCountOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } } private UpdateByOperator makeRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingStdSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); final String[] affectingColumns; if (rs.revWindowScale().timestampCol() == null) { @@ -1231,43 +1231,43 @@ private UpdateByOperator makeRollingStdOperator(@NotNull final MatchPair pair, final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); if (csType == Boolean.class || csType == boolean.class) { - return new ByteRollingStdOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BOOLEAN_AS_BYTE); } else if (csType == byte.class || csType == Byte.class) { - return new ByteRollingStdOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, NULL_BYTE); } else if (csType == char.class || csType == Character.class) { - return new CharRollingStdOperator(pair, affectingColumns, rowRedirection, + return new CharRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingStdOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingStdOperator(pair, affectingColumns, rowRedirection, + return new IntRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == long.class || csType == Long.class) { - return new LongRollingStdOperator(pair, affectingColumns, rowRedirection, + return new LongRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingStdOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingStdOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits); } else if (csType == BigDecimal.class) { - return new BigDecimalRollingStdOperator(pair, affectingColumns, rowRedirection, + return new BigDecimalRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } else if (csType == BigInteger.class) { - return new BigIntegerRollingStdOperator(pair, affectingColumns, rowRedirection, + return new BigIntegerRollingStdOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), prevWindowScaleUnits, fwdWindowScaleUnits, control.mathContextOrDefault()); } @@ -1276,14 +1276,13 @@ private UpdateByOperator makeRollingStdOperator(@NotNull final MatchPair pair, } private UpdateByOperator makeRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final Table source, + @NotNull final TableDefinition tableDef, @NotNull final RollingWAvgSpec rs) { - // noinspection rawtypes - final ColumnSource columnSource = source.getColumnSource(pair.rightColumn); - final Class csType = columnSource.getType(); + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); - final ColumnSource weightColumnSource = source.getColumnSource(rs.weightCol()); - final Class weightCsType = weightColumnSource.getType(); + final ColumnDefinition weightColumnDef = tableDef.getColumn(rs.weightCol()); + final Class weightCsType = weightColumnDef.getDataType(); if (!rs.weightColumnApplicableTo(weightCsType)) { throw new IllegalArgumentException("Can not perform RollingWAvg on weight column type " + weightCsType); @@ -1303,43 +1302,107 @@ private UpdateByOperator makeRollingWAvgOperator(@NotNull final MatchPair pair, weightCsType == BigDecimal.class || weightCsType == BigInteger.class) { // We need to produce a BigDecimal result output. All input columns will be cast to BigDecimal so // there is no distinction between input types. - return new BigDecimalRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new BigDecimalRollingWAvgOperator<>(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource, - columnSource, control.mathContextOrDefault()); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), control.mathContextOrDefault()); } if (csType == byte.class || csType == Byte.class) { - return new ByteRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new ByteRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == char.class || csType == Character.class) { - return new CharRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new CharRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == short.class || csType == Short.class) { - return new ShortRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new ShortRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == int.class || csType == Integer.class) { - return new IntRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new IntRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == long.class || csType == Long.class) { - return new LongRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new LongRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == float.class || csType == Float.class) { - return new FloatRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new FloatRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } else if (csType == double.class || csType == Double.class) { - return new DoubleRollingWAvgOperator(pair, affectingColumns, rowRedirection, + return new DoubleRollingWAvgOperator(pair, affectingColumns, rs.revWindowScale().timestampCol(), - prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol(), weightColumnSource); + prevWindowScaleUnits, fwdWindowScaleUnits, rs.weightCol()); } throw new IllegalArgumentException("Can not perform RollingWAvg on type " + csType); } + + private UpdateByOperator makeRollingFormulaOperator(@NotNull final MatchPair pair, + @NotNull final TableDefinition tableDef, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final RollingFormulaSpec rs) { + final ColumnDefinition columnDef = tableDef.getColumn(pair.rightColumn); + final Class csType = columnDef.getDataType(); + + final String[] affectingColumns; + if (rs.revWindowScale().timestampCol() == null) { + affectingColumns = new String[] {pair.rightColumn}; + } else { + affectingColumns = new String[] {rs.revWindowScale().timestampCol(), pair.rightColumn}; + } + + final long prevWindowScaleUnits = rs.revWindowScale().getTimeScaleUnits(); + final long fwdWindowScaleUnits = rs.fwdWindowScale().getTimeScaleUnits(); + + if (csType == boolean.class || csType == Boolean.class) { + return new BooleanRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == byte.class || csType == Byte.class) { + return new ByteRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == char.class || csType == Character.class) { + return new CharRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == short.class || csType == Short.class) { + return new ShortRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == int.class || csType == Integer.class) { + return new IntRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == long.class || csType == Long.class) { + return new LongRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == float.class || csType == Float.class) { + return new FloatRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } else if (csType == double.class || csType == Double.class) { + return new DoubleRollingFormulaOperator(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } + return new ObjectRollingFormulaOperator<>(pair, affectingColumns, + rs.revWindowScale().timestampCol(), + prevWindowScaleUnits, fwdWindowScaleUnits, rs.formula(), rs.paramToken(), + formulaColumnMap, tableDef); + } + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindow.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindow.java index bfbbb30f0ae..dcee470e55b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindow.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindow.java @@ -142,6 +142,14 @@ static UpdateByWindow createFromOperatorArray(final UpdateByOperator[] operators } } + + /** + * Create a new window by copying . + * + * @return a new {@link UpdateByWindow window} copied from this one + */ + abstract UpdateByWindow copy(); + abstract void prepareWindowBucket(UpdateByWindowBucketContext context); @OverridingMethodsMustInvokeSuper diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowCumulative.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowCumulative.java index 0f282900857..623fc5b6c1f 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowCumulative.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowCumulative.java @@ -29,6 +29,16 @@ class UpdateByWindowCumulative extends UpdateByWindow { super(operators, operatorSourceSlots, timestampColumnName); } + @Override + UpdateByWindow copy() { + final UpdateByOperator[] copiedOperators = new UpdateByOperator[this.operators.length]; + for (int ii = 0; ii < copiedOperators.length; ii++) { + copiedOperators[ii] = this.operators[ii].copy(); + } + + return new UpdateByWindowCumulative(copiedOperators, operatorInputSourceSlots, timestampColumnName); + } + @Override void prepareWindowBucket(UpdateByWindowBucketContext context) { // working chunk size need not be larger than affectedRows.size() diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTicks.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTicks.java index 36131b475cb..40bc369cace 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTicks.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTicks.java @@ -51,6 +51,15 @@ public void close() { } } + @Override + UpdateByWindow copy() { + final UpdateByOperator[] copiedOperators = new UpdateByOperator[this.operators.length]; + for (int ii = 0; ii < copiedOperators.length; ii++) { + copiedOperators[ii] = this.operators[ii].copy(); + } + + return new UpdateByWindowRollingTicks(copiedOperators, operatorInputSourceSlots, prevUnits, fwdUnits); + } @Override void finalizeWindowBucket(UpdateByWindowBucketContext context) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTime.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTime.java index c64203d0313..eb9203cb5e2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTime.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByWindowRollingTime.java @@ -53,12 +53,26 @@ public void close() { } } - UpdateByWindowRollingTime(UpdateByOperator[] operators, int[][] operatorSourceSlots, - @Nullable String timestampColumnName, - long prevUnits, long fwdUnits) { + UpdateByWindowRollingTime( + UpdateByOperator[] operators, + int[][] operatorSourceSlots, + @NotNull String timestampColumnName, + long prevUnits, + long fwdUnits) { super(operators, operatorSourceSlots, prevUnits, fwdUnits, timestampColumnName); } + @Override + UpdateByWindow copy() { + final UpdateByOperator[] copiedOperators = new UpdateByOperator[this.operators.length]; + for (int ii = 0; ii < copiedOperators.length; ii++) { + copiedOperators[ii] = this.operators[ii].copy(); + } + + return new UpdateByWindowRollingTime(copiedOperators, operatorInputSourceSlots, timestampColumnName, prevUnits, + fwdUnits); + } + @Override void finalizeWindowBucket(UpdateByWindowBucketContext context) { UpdateByWindowTimeBucketContext ctx = (UpdateByWindowTimeBucketContext) context; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigDecimalDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigDecimalDeltaOperator.java index ad5e2c52336..1618dbc7708 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigDecimalDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigDecimalDeltaOperator.java @@ -8,6 +8,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; @@ -21,14 +22,13 @@ public class BigDecimalDeltaOperator extends BaseObjectUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; - // region extra-fields - // endregion extra-fields + private ColumnSource inputSource; protected class Context extends BaseObjectUpdateByOperator.Context { public ObjectChunk objectValueChunk; private BigDecimal lastVal = null; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -61,22 +61,26 @@ public void push(int pos, int count) { } } - public BigDecimalDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, new String[] {pair.rightColumn}, rowRedirection, BigDecimal.class); + public BigDecimalDeltaOperator(@NotNull final MatchPair pair, @NotNull final DeltaControl control) { + super(pair, new String[] {pair.rightColumn}, BigDecimal.class); this.control = control; - this.inputSource = inputSource; - // region constructor - // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, + public UpdateByOperator copy() { + return new BigDecimalDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = source.getColumnSource(pair.rightColumn); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, final long firstUnmodifiedKey, final long firstUnmodifiedTimestamp, @NotNull final RowSet bucketRowSet) { @@ -90,9 +94,6 @@ public void initializeCumulative(@NotNull final UpdateByOperator.Context context } } - // region extra-methods - // endregion extra-methods - @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigIntegerDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigIntegerDeltaOperator.java index 57a5c01f005..3a1d28c7d23 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigIntegerDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/BigIntegerDeltaOperator.java @@ -8,7 +8,9 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -21,14 +23,13 @@ public class BigIntegerDeltaOperator extends BaseObjectUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; - // region extra-fields - // endregion extra-fields + private ColumnSource inputSource; protected class Context extends BaseObjectUpdateByOperator.Context { public ObjectChunk objectValueChunk; private BigInteger lastVal = null; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -61,25 +62,29 @@ public void push(int pos, int count) { } } - public BigIntegerDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection, BigInteger.class); + public BigIntegerDeltaOperator(@NotNull final MatchPair pair, @NotNull final DeltaControl control) { + super(pair, new String[] { pair.rightColumn }, BigInteger.class); this.control = control; - this.inputSource = inputSource; - // region constructor - // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new BigIntegerDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { @@ -90,9 +95,6 @@ public void initializeCumulative(@NotNull final UpdateByOperator.Context context } } - // region extra-methods - // endregion extra-methods - @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ByteDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ByteDeltaOperator.java index 720ab4c1d60..7606190f2da 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ByteDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ByteDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class ByteDeltaOperator extends BaseByteUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseByteUpdateByOperator.Context { public ByteChunk byteValueChunk; private byte lastVal = NULL_BYTE; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public ByteDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public ByteDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new ByteDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/CharDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/CharDeltaOperator.java index e37adbf6e4a..ba0c24a65e6 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/CharDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/CharDeltaOperator.java @@ -8,6 +8,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -21,7 +22,7 @@ public class CharDeltaOperator extends BaseCharUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -29,6 +30,7 @@ protected class Context extends BaseCharUpdateByOperator.Context { public CharChunk charValueChunk; private char lastVal = NULL_CHAR; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -61,25 +63,36 @@ public void push(int pos, int count) { } } - public CharDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public CharDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new CharDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/DoubleDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/DoubleDeltaOperator.java index 85f63ac256a..d111cbfcb02 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/DoubleDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/DoubleDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class DoubleDeltaOperator extends BaseDoubleUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { public DoubleChunk doubleValueChunk; private double lastVal = NULL_DOUBLE; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public DoubleDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new DoubleDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/FloatDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/FloatDeltaOperator.java index b7e0aa731f3..00ecfa3a2b8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/FloatDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/FloatDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class FloatDeltaOperator extends BaseFloatUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseFloatUpdateByOperator.Context { public FloatChunk floatValueChunk; private float lastVal = NULL_FLOAT; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public FloatDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public FloatDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new FloatDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/IntDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/IntDeltaOperator.java index fab4b8f5170..31a48d6f4af 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/IntDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/IntDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class IntDeltaOperator extends BaseIntUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseIntUpdateByOperator.Context { public IntChunk intValueChunk; private int lastVal = NULL_INT; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public IntDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public IntDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new IntDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/LongDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/LongDeltaOperator.java index 8cd19f15788..e9a3348228a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/LongDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/LongDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class LongDeltaOperator extends BaseLongUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { public LongChunk longValueChunk; private long lastVal = NULL_LONG; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public LongDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public LongDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new LongDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ShortDeltaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ShortDeltaOperator.java index 2bf5ca20961..1f345c38fd5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ShortDeltaOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/delta/ShortDeltaOperator.java @@ -13,6 +13,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -26,7 +27,7 @@ public class ShortDeltaOperator extends BaseShortUpdateByOperator { private final DeltaControl control; - private final ColumnSource inputSource; + private ColumnSource inputSource; // region extra-fields // endregion extra-fields @@ -34,6 +35,7 @@ protected class Context extends BaseShortUpdateByOperator.Context { public ShortChunk shortValueChunk; private short lastVal = NULL_SHORT; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -66,25 +68,36 @@ public void push(int pos, int count) { } } - public ShortDeltaOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection, - @NotNull final DeltaControl control, - @NotNull final ColumnSource inputSource - // region extra-constructor-args - // endregion extra-constructor-args + public ShortDeltaOperator( + @NotNull final MatchPair pair, + @NotNull final DeltaControl control + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.control = control; - this.inputSource = ReinterpretUtils.maybeConvertToPrimitive(inputSource); // region constructor // endregion constructor } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context context, - final long firstUnmodifiedKey, - final long firstUnmodifiedTimestamp, - @NotNull final RowSet bucketRowSet) { + public UpdateByOperator copy() { + return new ShortDeltaOperator(pair, control); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + inputSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + } + + @Override + public void initializeCumulative( + @NotNull final UpdateByOperator.Context context, + final long firstUnmodifiedKey, + final long firstUnmodifiedTimestamp, + @NotNull final RowSet bucketRowSet) { Context ctx = (Context) context; ctx.reset(); if (firstUnmodifiedKey != NULL_ROW_KEY) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BaseBigNumberEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BaseBigNumberEMOperator.java index 46ddca614d9..20616d45278 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BaseBigNumberEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BaseBigNumberEMOperator.java @@ -7,6 +7,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.locations.TableDataException; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; @@ -20,7 +21,6 @@ import static io.deephaven.util.QueryConstants.NULL_LONG; public abstract class BaseBigNumberEMOperator extends BaseObjectUpdateByOperator { - protected final ColumnSource valueSource; protected final OperationControl control; /** For EM operators, we can allow floating-point tick/time units. */ @@ -28,6 +28,8 @@ public abstract class BaseBigNumberEMOperator extends BaseObjectUpdateByOpera protected final BigDecimal opAlpha; protected final BigDecimal opOneMinusAlpha; + protected ColumnSource valueSource; + final EmFunction aggFunction; public interface EmFunction { @@ -71,26 +73,21 @@ public void reset() { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is * measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public BaseBigNumberEMOperator(@NotNull final MatchPair pair, + public BaseBigNumberEMOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - @NotNull final ColumnSource valueSource, @NotNull final EmFunction aggFunction) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, 0, 0, false, - BigDecimal.class); + super(pair, affectingColumns, timestampColumnName, 0, 0, false, BigDecimal.class); this.control = control; - this.valueSource = valueSource; this.aggFunction = aggFunction; this.reverseWindowScaleUnits = windowScaleUnits; @@ -105,6 +102,13 @@ public BaseBigNumberEMOperator(@NotNull final MatchPair pair, } } + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueSource = source.getColumnSource(pair.rightColumn); + } + @Override public void initializeCumulative(@NotNull final UpdateByOperator.Context updateContext, final long firstUnmodifiedKey, @@ -112,6 +116,7 @@ public void initializeCumulative(@NotNull final UpdateByOperator.Context updateC @NotNull final RowSet bucketRowSet) { super.initializeCumulative(updateContext, firstUnmodifiedKey, firstUnmodifiedTimestamp, bucketRowSet); + // noinspection unchecked final Context ctx = (Context) updateContext; // rely on the caller to validate this is a valid timestamp (or NULL_LONG when appropriate) ctx.lastStamp = firstUnmodifiedTimestamp; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BasePrimitiveEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BasePrimitiveEMOperator.java index 8286dfbc149..5a6a5c731d2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BasePrimitiveEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BasePrimitiveEMOperator.java @@ -3,8 +3,11 @@ import io.deephaven.api.updateby.BadDataBehavior; import io.deephaven.api.updateby.OperationControl; import io.deephaven.engine.rowset.RowSet; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.locations.TableDataException; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -18,6 +21,8 @@ public abstract class BasePrimitiveEMOperator extends BaseDoubleUpdateByOperator /** For EM operators, we can allow floating-point tick/time units. */ protected final double reverseWindowScaleUnits; protected final double opAlpha; + + protected ColumnSource valueSource; protected double opOneMinusAlpha; final EmFunction aggFunction; @@ -47,32 +52,38 @@ public void reset() { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the row redirection to use for the EM operator output columns * @param control the control parameters for EM operator * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param windowScaleUnits the smoothing window for the EM operator. If no {@code timestampColumnName} is provided, * this is measured in ticks, otherwise it is measured in nanoseconds. */ - public BasePrimitiveEMOperator(@NotNull final MatchPair pair, + public BasePrimitiveEMOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, @NotNull final EmFunction aggFunction) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, 0, 0, false); + super(pair, affectingColumns, timestampColumnName, 0, 0, false); this.control = control; this.aggFunction = aggFunction; this.reverseWindowScaleUnits = windowScaleUnits; opAlpha = Math.exp(-1.0 / reverseWindowScaleUnits); opOneMinusAlpha = 1 - opAlpha; + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + valueSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); } @Override - public void initializeCumulative(@NotNull final UpdateByOperator.Context updateContext, + public void initializeCumulative( + @NotNull final UpdateByOperator.Context updateContext, final long firstUnmodifiedKey, final long firstUnmodifiedTimestamp, @NotNull final RowSet bucketRowSet) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigDecimalEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigDecimalEMOperator.java index 70d5adb162e..0b8393f39f7 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigDecimalEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigDecimalEMOperator.java @@ -5,10 +5,8 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,7 +21,7 @@ protected Context(final int chunkSize) { } @Override - public void accumulateCumulative(RowSequence inputKeys, + public void accumulateCumulative(@NotNull RowSequence inputKeys, Chunk[] valueChunkArr, LongChunk tsChunk, int len) { @@ -55,7 +53,7 @@ public void accumulateCumulative(RowSequence inputKeys, final boolean isNull = input == null; final boolean isNullTime = timestamp == NULL_LONG; if (isNull) { - handleBadData(this, isNull); + handleBadData(this, true); } else if (isNullTime) { // no change to curVal and lastStamp } else { @@ -95,22 +93,24 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is * measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public BigDecimalEMOperator(@NotNull final MatchPair pair, + public BigDecimalEMOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - final ColumnSource valueSource, @NotNull final EmFunction aggFunction) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, valueSource, + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); + } + + @Override + public UpdateByOperator copy() { + return new BigDecimalEMOperator(pair, affectingColumns, control, timestampColumnName, reverseWindowScaleUnits, aggFunction); } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigIntegerEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigIntegerEMOperator.java index af5d43da9c8..206f8e7e932 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigIntegerEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/BigIntegerEMOperator.java @@ -5,10 +5,8 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,7 +22,7 @@ protected Context(final int chunkSize) { } @Override - public void accumulateCumulative(RowSequence inputKeys, + public void accumulateCumulative(@NotNull RowSequence inputKeys, Chunk[] valueChunkArr, LongChunk tsChunk, int len) { @@ -96,21 +94,23 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public BigIntegerEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, valueSource, aggFunction); + public BigIntegerEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction) { + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerEMOperator(pair, affectingColumns, control, timestampColumnName, reverseWindowScaleUnits, aggFunction); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ByteEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ByteEMOperator.java index e37d7089e00..8fa8950d3d3 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ByteEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ByteEMOperator.java @@ -11,17 +11,14 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class ByteEMOperator extends BasePrimitiveEMOperator { - public final ColumnSource valueSource; // region extra-fields final byte nullValue; // endregion extra-fields @@ -29,6 +26,7 @@ public class ByteEMOperator extends BasePrimitiveEMOperator { protected class Context extends BasePrimitiveEMOperator.Context { public ByteChunk byteValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -114,31 +112,42 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public ByteEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); // region constructor this.nullValue = nullValue; // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/CharEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/CharEMOperator.java index 31fcdb6b1cf..af9846237aa 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/CharEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/CharEMOperator.java @@ -6,23 +6,21 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class CharEMOperator extends BasePrimitiveEMOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields protected class Context extends BasePrimitiveEMOperator.Context { public CharChunk charValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -108,29 +106,39 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public CharEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args + public CharEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new CharEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/DoubleEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/DoubleEMOperator.java index 9b0b9b6653b..e6b980a0f7a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/DoubleEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/DoubleEMOperator.java @@ -12,18 +12,14 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class DoubleEMOperator extends BasePrimitiveEMOperator { - private final ColumnSource valueSource; - protected class Context extends BasePrimitiveEMOperator.Context { public DoubleChunk doubleValueChunk; @@ -32,7 +28,7 @@ protected Context(final int chunkSize) { } @Override - public void accumulateCumulative(RowSequence inputKeys, + public void accumulateCumulative(@NotNull RowSequence inputKeys, Chunk[] valueChunkArr, LongChunk tsChunk, int len) { @@ -119,27 +115,29 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ public DoubleEMOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - final ColumnSource valueSource, @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; - // region constructor - // endregion constructor + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); + } + + @Override + public UpdateByOperator copy() { + return new DoubleEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/FloatEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/FloatEMOperator.java index ace614f141a..7b1450d82e7 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/FloatEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/FloatEMOperator.java @@ -7,18 +7,14 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class FloatEMOperator extends BasePrimitiveEMOperator { - private final ColumnSource valueSource; - protected class Context extends BasePrimitiveEMOperator.Context { public FloatChunk floatValueChunk; @@ -27,7 +23,7 @@ protected Context(final int chunkSize) { } @Override - public void accumulateCumulative(RowSequence inputKeys, + public void accumulateCumulative(@NotNull RowSequence inputKeys, Chunk[] valueChunkArr, LongChunk tsChunk, int len) { @@ -114,27 +110,29 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ public FloatEMOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - final ColumnSource valueSource, @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; - // region constructor - // endregion constructor + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); + } + + @Override + public UpdateByOperator copy() { + return new FloatEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/IntEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/IntEMOperator.java index 90d8448344f..7ec288f5a12 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/IntEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/IntEMOperator.java @@ -11,23 +11,21 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class IntEMOperator extends BasePrimitiveEMOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields protected class Context extends BasePrimitiveEMOperator.Context { public IntChunk intValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -113,29 +111,39 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public IntEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args + public IntEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/LongEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/LongEMOperator.java index e83bb8752ee..054642c47b2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/LongEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/LongEMOperator.java @@ -11,23 +11,21 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class LongEMOperator extends BasePrimitiveEMOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields protected class Context extends BasePrimitiveEMOperator.Context { public LongChunk longValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -113,29 +111,39 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public LongEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args + public LongEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ShortEMOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ShortEMOperator.java index ede17817151..c53e13d40d5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ShortEMOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/em/ShortEMOperator.java @@ -11,23 +11,21 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; public class ShortEMOperator extends BasePrimitiveEMOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields protected class Context extends BasePrimitiveEMOperator.Context { public ShortChunk shortValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -113,29 +111,39 @@ public void push(int pos, int count) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public ShortEMOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - @NotNull final EmFunction aggFunction - // region extra-constructor-args - // endregion extra-constructor-args + public ShortEMOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits, + @NotNull final EmFunction aggFunction + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, aggFunction); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, aggFunction); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortEMOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + aggFunction + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BaseBigNumberEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BaseBigNumberEmStdOperator.java index a820db907df..44bf74f070f 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BaseBigNumberEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BaseBigNumberEmStdOperator.java @@ -28,7 +28,6 @@ import static io.deephaven.util.QueryConstants.NULL_LONG; public abstract class BaseBigNumberEmStdOperator extends BaseObjectUpdateByOperator { - protected final ColumnSource valueSource; protected final OperationControl control; /** For EM operators, we can allow floating-point tick/time units. */ protected final double reverseWindowScaleUnits; @@ -39,8 +38,9 @@ public abstract class BaseBigNumberEmStdOperator extends BaseObjectUpdateByOp protected final BigDecimal opAlpha; protected final BigDecimal opOneMinusAlpha; - protected final WritableColumnSource emaSource; - protected final WritableColumnSource maybeEmaInnerSource; + protected ColumnSource valueSource; + protected WritableColumnSource emaSource; + protected WritableColumnSource maybeEmaInnerSource; public interface EmFunction { BigDecimal apply(BigDecimal prevVal, BigDecimal curVal, BigDecimal alpha, BigDecimal oneMinusAlpha); @@ -117,47 +117,23 @@ public void close() { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is * measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ public BaseBigNumberEmStdOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - @NotNull final ColumnSource valueSource, - final boolean sourceRefreshing, @NotNull final MathContext mathContext) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, 0, 0, false, - BigDecimal.class); + super(pair, affectingColumns, timestampColumnName, 0, 0, false, BigDecimal.class); this.control = control; - this.valueSource = valueSource; this.mathContext = mathContext; this.reverseWindowScaleUnits = windowScaleUnits; - if (sourceRefreshing) { - if (rowRedirection != null) { - // region create-dense - this.maybeEmaInnerSource = new ObjectArraySource<>(BigDecimal.class); - // endregion create-dense - this.emaSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); - } else { - this.maybeEmaInnerSource = null; - // region create-sparse - this.emaSource = new ObjectSparseArraySource<>(BigDecimal.class); - // endregion create-sparse - } - } else { - this.maybeEmaInnerSource = null; - this.emaSource = null; - } - if (timestampColumnName == null) { // tick-based, pre-compute alpha and oneMinusAlpha opAlpha = computeAlpha(-1, reverseWindowScaleUnits); @@ -169,6 +145,30 @@ public BaseBigNumberEmStdOperator(@NotNull final MatchPair pair, } } + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueSource = source.getColumnSource(pair.rightColumn); + + if (source.isRefreshing()) { + if (rowRedirection != null) { + // region create-dense + maybeEmaInnerSource = new ObjectArraySource<>(BigDecimal.class); + // endregion create-dense + emaSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + } else { + maybeEmaInnerSource = null; + // region create-sparse + emaSource = new ObjectSparseArraySource<>(BigDecimal.class); + // endregion create-sparse + } + } else { + maybeEmaInnerSource = null; + emaSource = null; + } + } + @Override public void initializeCumulative(@NotNull final UpdateByOperator.Context updateContext, final long firstUnmodifiedKey, diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BasePrimitiveEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BasePrimitiveEmStdOperator.java index 4def5813764..4366dfa4ed5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BasePrimitiveEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BasePrimitiveEmStdOperator.java @@ -5,13 +5,12 @@ import io.deephaven.chunk.WritableDoubleChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSet; -import io.deephaven.engine.table.ChunkSink; -import io.deephaven.engine.table.WritableColumnSource; -import io.deephaven.engine.table.WritableSourceWithPrepareForParallelPopulation; +import io.deephaven.engine.table.*; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.locations.TableDataException; import io.deephaven.engine.table.impl.sources.DoubleArraySource; import io.deephaven.engine.table.impl.sources.DoubleSparseArraySource; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.sources.WritableRedirectedColumnSource; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; @@ -29,10 +28,13 @@ public abstract class BasePrimitiveEmStdOperator extends BaseDoubleUpdateByOpera /** For EM operators, we can allow floating-point tick/time units. */ protected final double reverseWindowScaleUnits; protected final double opAlpha; + + protected ColumnSource valueSource; + protected double opOneMinusAlpha; - protected final WritableColumnSource emaSource; - protected final WritableColumnSource maybeEmaInnerSource; + protected WritableColumnSource emaSource; + protected WritableColumnSource maybeEmaInnerSource; public abstract class Context extends BaseDoubleUpdateByOperator.Context { protected final ChunkSink.FillFromContext emaFillContext; @@ -83,7 +85,6 @@ public void close() { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the row redirection to use for the EM operator output columns * @param control the control parameters for EM operator * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. @@ -92,34 +93,40 @@ public void close() { */ public BasePrimitiveEmStdOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, - final double windowScaleUnits, - final boolean sourceRefreshing) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, 0, 0, false); + final double windowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, 0, 0, false); this.control = control; this.reverseWindowScaleUnits = windowScaleUnits; - if (sourceRefreshing) { + opAlpha = Math.exp(-1.0 / reverseWindowScaleUnits); + opOneMinusAlpha = 1 - opAlpha; + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + + // do we need another + if (source.isRefreshing()) { if (rowRedirection != null) { // region create-dense - this.maybeEmaInnerSource = new DoubleArraySource(); + maybeEmaInnerSource = new DoubleArraySource(); // endregion create-dense - this.emaSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + emaSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeEmaInnerSource = null; + maybeEmaInnerSource = null; // region create-sparse - this.emaSource = new DoubleSparseArraySource(); + emaSource = new DoubleSparseArraySource(); // endregion create-sparse } } else { - this.maybeEmaInnerSource = null; - this.emaSource = null; + maybeEmaInnerSource = null; + emaSource = null; } - - opAlpha = Math.exp(-1.0 / reverseWindowScaleUnits); - opOneMinusAlpha = 1 - opAlpha; } @Override diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigDecimalEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigDecimalEmStdOperator.java index 2ec30bfc4c2..7f477e526b6 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigDecimalEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigDecimalEmStdOperator.java @@ -5,10 +5,8 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -20,15 +18,15 @@ /*** * Compute an exponential moving standard deviation for a BigDecimal column source. The output is expressed as a * BigDecimal value and is computed using the following formula: - * + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * + *

* "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class BigDecimalEmStdOperator extends BaseBigNumberEmStdOperator { @@ -131,24 +129,29 @@ public void accumulateCumulative(@NotNull final RowSequence inputKeys, * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is * measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ public BigDecimalEmStdOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing, @NotNull final MathContext mathContext) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, valueSource, - sourceRefreshing, mathContext); + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, mathContext); + } + + @Override + public UpdateByOperator copy() { + return new BigDecimalEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + mathContext); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigIntegerEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigIntegerEmStdOperator.java index 62ddb7865d4..82143fb3b18 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigIntegerEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/BigIntegerEmStdOperator.java @@ -5,10 +5,8 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -131,24 +129,29 @@ public void accumulateCumulative(@NotNull final RowSequence inputKeys, * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is * measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ public BigIntegerEmStdOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final OperationControl control, @Nullable final String timestampColumnName, final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing, @NotNull final MathContext mathContext) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, valueSource, - sourceRefreshing, mathContext); + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits, mathContext); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits, + mathContext); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ByteEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ByteEmStdOperator.java index 8829b1cc8fd..69626677032 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ByteEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ByteEmStdOperator.java @@ -11,31 +11,28 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; /*** - * Compute an exponential moving standard deviation for a byte column source. The output is expressed as a double - * value and is computed using the following formula: - * + * Compute an exponential moving standard deviation for a byte column source. The output is expressed as a + * BigDecimal value and is computed using the following formula: + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * - * "Incremental calculation of weighted mean and variance" - * Tony Finch, University of Cambridge Computing Service (February 2009) + *

+ * "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service + * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class ByteEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; // region extra-fields final byte nullValue; // endregion extra-fields @@ -44,6 +41,7 @@ protected class Context extends BasePrimitiveEmStdOperator.Context { public ByteChunk byteValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -155,31 +153,40 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public ByteEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); // region constructor this.nullValue = nullValue; // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/CharEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/CharEmStdOperator.java index 9545b1a4c5e..d64d8a73e1f 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/CharEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/CharEmStdOperator.java @@ -6,31 +6,28 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; /*** - * Compute an exponential moving standard deviation for a char column source. The output is expressed as a double - * value and is computed using the following formula: - * + * Compute an exponential moving standard deviation for a char column source. The output is expressed as a + * BigDecimal value and is computed using the following formula: + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * - * "Incremental calculation of weighted mean and variance" - * Tony Finch, University of Cambridge Computing Service (February 2009) + *

+ * "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service + * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class CharEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields @@ -38,6 +35,7 @@ protected class Context extends BasePrimitiveEmStdOperator.Context { public CharChunk charValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -149,29 +147,37 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public CharEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args + public CharEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new CharEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/DoubleEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/DoubleEmStdOperator.java index 75fb5ea1d1f..7fdff84a96c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/DoubleEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/DoubleEmStdOperator.java @@ -13,11 +13,12 @@ import io.deephaven.api.updateby.BadDataBehavior; import io.deephaven.api.updateby.OperationControl; import io.deephaven.chunk.Chunk; -import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.DoubleChunk; +import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -29,33 +30,35 @@ /*** * Compute an exponential moving standard deviation for a double column source. The output is expressed as a double * value and is computed using the following formula: - * + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * + *

* "Incremental calculation of weighted mean and variance" * Tony Finch, University of Cambridge Computing Service (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class DoubleEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; + public ColumnSource valueSource; protected class Context extends BasePrimitiveEmStdOperator.Context { public DoubleChunk doubleValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @Override - public void accumulateCumulative(@NotNull RowSequence inputKeys, - Chunk[] valueChunkArr, - LongChunk tsChunk, - int len) { + public void accumulateCumulative( + @NotNull RowSequence inputKeys, + Chunk[] valueChunkArr, + LongChunk tsChunk, + int len) { setValueChunks(valueChunkArr); // chunk processing @@ -167,27 +170,29 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public DoubleEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; - // region constructor - // endregion constructor + public DoubleEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits) { + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); + } + + @Override + public UpdateByOperator copy() { + return new DoubleEmStdOperator(pair, affectingColumns, control, timestampColumnName, reverseWindowScaleUnits); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueSource = source.getColumnSource(pair.rightColumn); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/FloatEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/FloatEmStdOperator.java index 7c8af42ef32..a3ee7f6ceab 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/FloatEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/FloatEmStdOperator.java @@ -8,11 +8,12 @@ import io.deephaven.api.updateby.BadDataBehavior; import io.deephaven.api.updateby.OperationControl; import io.deephaven.chunk.Chunk; -import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.FloatChunk; +import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -24,33 +25,35 @@ /*** * Compute an exponential moving standard deviation for a float column source. The output is expressed as a double * value and is computed using the following formula: - * + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * + *

* "Incremental calculation of weighted mean and variance" * Tony Finch, University of Cambridge Computing Service (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class FloatEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; + public ColumnSource valueSource; protected class Context extends BasePrimitiveEmStdOperator.Context { public FloatChunk floatValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @Override - public void accumulateCumulative(@NotNull RowSequence inputKeys, - Chunk[] valueChunkArr, - LongChunk tsChunk, - int len) { + public void accumulateCumulative( + @NotNull RowSequence inputKeys, + Chunk[] valueChunkArr, + LongChunk tsChunk, + int len) { setValueChunks(valueChunkArr); // chunk processing @@ -162,27 +165,29 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public FloatEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; - // region constructor - // endregion constructor + public FloatEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits) { + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); + } + + @Override + public UpdateByOperator copy() { + return new FloatEmStdOperator(pair, affectingColumns, control, timestampColumnName, reverseWindowScaleUnits); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueSource = source.getColumnSource(pair.rightColumn); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/IntEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/IntEmStdOperator.java index 9fa8a39c1c4..a28e0a32047 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/IntEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/IntEmStdOperator.java @@ -11,31 +11,28 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; /*** - * Compute an exponential moving standard deviation for a int column source. The output is expressed as a double - * value and is computed using the following formula: - * + * Compute an exponential moving standard deviation for a int column source. The output is expressed as a + * BigDecimal value and is computed using the following formula: + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * - * "Incremental calculation of weighted mean and variance" - * Tony Finch, University of Cambridge Computing Service (February 2009) + *

+ * "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service + * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class IntEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields @@ -43,6 +40,7 @@ protected class Context extends BasePrimitiveEmStdOperator.Context { public IntChunk intValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -154,29 +152,37 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public IntEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args + public IntEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/LongEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/LongEmStdOperator.java index 678bd52a1b0..29de6878bf4 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/LongEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/LongEmStdOperator.java @@ -11,31 +11,28 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; /*** - * Compute an exponential moving standard deviation for a long column source. The output is expressed as a double - * value and is computed using the following formula: - * + * Compute an exponential moving standard deviation for a long column source. The output is expressed as a + * BigDecimal value and is computed using the following formula: + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * - * "Incremental calculation of weighted mean and variance" - * Tony Finch, University of Cambridge Computing Service (February 2009) + *

+ * "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service + * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class LongEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields @@ -43,6 +40,7 @@ protected class Context extends BasePrimitiveEmStdOperator.Context { public LongChunk longValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -154,29 +152,37 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public LongEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args + public LongEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ShortEmStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ShortEmStdOperator.java index d927759f702..9e14ed100b8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ShortEmStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/ShortEmStdOperator.java @@ -11,31 +11,28 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.rowset.RowSequence; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; /*** - * Compute an exponential moving standard deviation for a short column source. The output is expressed as a double - * value and is computed using the following formula: - * + * Compute an exponential moving standard deviation for a short column source. The output is expressed as a + * BigDecimal value and is computed using the following formula: + *

* variance = alpha * (prevVariance + (1 - alpha) * (x - prevEma)^2) - * + *

* This function is described in the following document: - * - * "Incremental calculation of weighted mean and variance" - * Tony Finch, University of Cambridge Computing Service (February 2009) + *

+ * "Incremental calculation of weighted mean and variance" Tony Finch, University of Cambridge Computing Service + * (February 2009) * https://web.archive.org/web/20181222175223/http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf - * + *

* NOTE: `alpha` as used in the paper has been replaced with `1 - alpha` per the convention adopted by Deephaven. */ public class ShortEmStdOperator extends BasePrimitiveEmStdOperator { - public final ColumnSource valueSource; // region extra-fields // endregion extra-fields @@ -43,6 +40,7 @@ protected class Context extends BasePrimitiveEmStdOperator.Context { public ShortChunk shortValueChunk; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); } @@ -154,29 +152,37 @@ public boolean isValueValid(long atKey) { * * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns the names of the columns that affect this ema - * @param rowRedirection the {@link RowRedirection} to use for dense output sources * @param control defines how to handle {@code null} input values. * @param timestampColumnName the name of the column containing timestamps for time-based calcuations * @param windowScaleUnits the smoothing window for the EMA. If no {@code timestampColumnName} is provided, this is measured in ticks, otherwise it is measured in nanoseconds - * @param valueSource a reference to the input column source for this operation */ - public ShortEmStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @NotNull final OperationControl control, - @Nullable final String timestampColumnName, - final double windowScaleUnits, - final ColumnSource valueSource, - final boolean sourceRefreshing - // region extra-constructor-args - // endregion extra-constructor-args + public ShortEmStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @NotNull final OperationControl control, + @Nullable final String timestampColumnName, + final double windowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, control, timestampColumnName, windowScaleUnits, sourceRefreshing); - this.valueSource = valueSource; + super(pair, affectingColumns, control, timestampColumnName, windowScaleUnits); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortEmStdOperator( + pair, + affectingColumns, + control, + timestampColumnName, + reverseWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/BooleanFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/BooleanFillByOperator.java index 012fdb84afe..1d513d1bb7a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/BooleanFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/BooleanFillByOperator.java @@ -19,9 +19,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseByteUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.BooleanUtils.NULL_BOOLEAN_AS_BYTE; @@ -52,16 +50,25 @@ public void push(int pos, int count) { } } - public BooleanFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public BooleanFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new BooleanFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ByteFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ByteFillByOperator.java index b2891b84161..cbad6889538 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ByteFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ByteFillByOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseByteUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_BYTE; @@ -45,16 +43,25 @@ public void push(int pos, int count) { } } - public ByteFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public ByteFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java index d3063e5cd9a..e6c3ba5fa2c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseCharUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_CHAR; @@ -40,16 +38,25 @@ public void push(int pos, int count) { } } - public CharFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public CharFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new CharFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/DoubleFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/DoubleFillByOperator.java index c155e5efc48..4e4807745f4 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/DoubleFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/DoubleFillByOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_DOUBLE; @@ -45,16 +43,25 @@ public void push(int pos, int count) { } } - public DoubleFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public DoubleFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new DoubleFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/FloatFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/FloatFillByOperator.java index 76d2e4cd6a5..41a24e17047 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/FloatFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/FloatFillByOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_FLOAT; @@ -45,16 +43,25 @@ public void push(int pos, int count) { } } - public FloatFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public FloatFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new FloatFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/IntFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/IntFillByOperator.java index 272dc0eb072..b9dae79bd35 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/IntFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/IntFillByOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseIntUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_INT; @@ -45,16 +43,25 @@ public void push(int pos, int count) { } } - public IntFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public IntFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/LongFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/LongFillByOperator.java index 61e4e6d0271..95c3790e3bd 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/LongFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/LongFillByOperator.java @@ -19,9 +19,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; @@ -53,18 +51,28 @@ public void push(int pos, int count) { } } - public LongFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - ,@NotNull final Class type - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public LongFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + ,@NotNull final Class type + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor this.type = type; // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongFillByOperator( + pair + // region extra-copy-args + , type + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ObjectFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ObjectFillByOperator.java index 5c238519a7a..725fdf0cd54 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ObjectFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ObjectFillByOperator.java @@ -14,9 +14,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class ObjectFillByOperator extends BaseObjectUpdateByOperator { @@ -46,17 +44,27 @@ public void push(int pos, int count) { } } - public ObjectFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - , final Class colType - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection, colType); + public ObjectFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + , final Class colType + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }, colType); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ObjectFillByOperator( + pair + // region extra-copy-args + , colType + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ShortFillByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ShortFillByOperator.java index 3cd4df3d86c..9407bf67e9a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ShortFillByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/ShortFillByOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseShortUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_SHORT; @@ -45,16 +43,25 @@ public void push(int pos, int count) { } } - public ShortFillByOperator(@NotNull final MatchPair fillPair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection); + public ShortFillByOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortFillByOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseByteUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseByteUpdateByOperator.java index 7eed599282f..66e569fe358 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseByteUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseByteUpdateByOperator.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -33,8 +34,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseByteUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields final byte nullValue; @@ -47,8 +48,8 @@ protected abstract class Context extends UpdateByOperator.Context { public byte curVal = NULL_BYTE; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableByteChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableByteChunk.makeWritableChunk(chunkSize); } @Override @@ -148,15 +149,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseByteUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseByteUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -165,7 +165,6 @@ public BaseByteUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -173,32 +172,37 @@ public BaseByteUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseByteUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseByteUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + this.nullValue = getNullValue(); + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense this.maybeInnerSource = makeDenseSource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse this.outputSource = makeSparseSource(); // endregion create-sparse } - - // region constructor - this.nullValue = getNullValue(); - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java index d77aab0e988..0d2f7762224 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java @@ -16,6 +16,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -23,8 +24,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseCharUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -36,8 +37,8 @@ protected abstract class Context extends UpdateByOperator.Context { public char curVal = NULL_CHAR; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableCharChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableCharChunk.makeWritableChunk(chunkSize); } @Override @@ -137,15 +138,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseCharUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseCharUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -154,7 +154,6 @@ public BaseCharUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -162,31 +161,36 @@ public BaseCharUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseCharUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseCharUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new CharacterArraySource(); + maybeInnerSource = new CharacterArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new CharacterSparseArraySource(); + outputSource = new CharacterSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseDoubleUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseDoubleUpdateByOperator.java index 7219515d02e..22d497628b9 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseDoubleUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseDoubleUpdateByOperator.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -28,8 +29,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseDoubleUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -41,8 +42,8 @@ protected abstract class Context extends UpdateByOperator.Context { public double curVal = NULL_DOUBLE; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableDoubleChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableDoubleChunk.makeWritableChunk(chunkSize); } @Override @@ -142,15 +143,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseDoubleUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseDoubleUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -159,7 +159,6 @@ public BaseDoubleUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -167,31 +166,36 @@ public BaseDoubleUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseDoubleUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseDoubleUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new DoubleArraySource(); + maybeInnerSource = new DoubleArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new DoubleSparseArraySource(); + outputSource = new DoubleSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseFloatUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseFloatUpdateByOperator.java index 4c5fcf1a9b2..05563ef83aa 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseFloatUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseFloatUpdateByOperator.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -28,8 +29,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseFloatUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -41,8 +42,8 @@ protected abstract class Context extends UpdateByOperator.Context { public float curVal = NULL_FLOAT; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableFloatChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableFloatChunk.makeWritableChunk(chunkSize); } @Override @@ -142,15 +143,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseFloatUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseFloatUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -159,7 +159,6 @@ public BaseFloatUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -167,31 +166,36 @@ public BaseFloatUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseFloatUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseFloatUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new FloatArraySource(); + maybeInnerSource = new FloatArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new FloatSparseArraySource(); + outputSource = new FloatSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseIntUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseIntUpdateByOperator.java index 60517f6e8d0..19e5b720976 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseIntUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseIntUpdateByOperator.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -28,8 +29,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseIntUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -41,8 +42,8 @@ protected abstract class Context extends UpdateByOperator.Context { public int curVal = NULL_INT; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableIntChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableIntChunk.makeWritableChunk(chunkSize); } @Override @@ -142,15 +143,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseIntUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseIntUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -159,7 +159,6 @@ public BaseIntUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -167,31 +166,36 @@ public BaseIntUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseIntUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseIntUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new IntegerArraySource(); + maybeInnerSource = new IntegerArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new IntegerSparseArraySource(); + outputSource = new IntegerSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseLongUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseLongUpdateByOperator.java index dd99d013b17..dcabd2a0c23 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseLongUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseLongUpdateByOperator.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -28,8 +29,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseLongUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -41,8 +42,8 @@ protected abstract class Context extends UpdateByOperator.Context { public long curVal = NULL_LONG; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableLongChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableLongChunk.makeWritableChunk(chunkSize); } @Override @@ -142,15 +143,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseLongUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseLongUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -159,7 +159,6 @@ public BaseLongUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -167,31 +166,36 @@ public BaseLongUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseLongUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseLongUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new LongArraySource(); + maybeInnerSource = new LongArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new LongSparseArraySource(); + outputSource = new LongSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectBinaryOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectBinaryOperator.java index ef53710d5be..47666a345ff 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectBinaryOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectBinaryOperator.java @@ -5,9 +5,7 @@ import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public abstract class BaseObjectBinaryOperator extends BaseObjectUpdateByOperator { protected class Context extends BaseObjectUpdateByOperator.Context { @@ -43,9 +41,8 @@ public void reset() { public BaseObjectBinaryOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @NotNull final Class type) { - super(pair, affectingColumns, rowRedirection, type); + super(pair, affectingColumns, type); } protected abstract T doOperation(T bucketCurVal, T chunkCurVal); diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectUpdateByOperator.java index 87797571be0..e7cb220693f 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseObjectUpdateByOperator.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -30,11 +31,11 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseObjectUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields - private final Class colType; + protected final Class colType; // endregion extra-fields protected abstract class Context extends UpdateByOperator.Context { @@ -44,8 +45,8 @@ protected abstract class Context extends UpdateByOperator.Context { public T curVal = null; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableObjectChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableObjectChunk.makeWritableChunk(chunkSize); } @Override @@ -145,16 +146,15 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseObjectUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - , final Class colType - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false, colType); + public BaseObjectUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + , final Class colType + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false, colType); } /** @@ -163,7 +163,6 @@ public BaseObjectUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -171,33 +170,38 @@ public BaseObjectUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseObjectUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - , final Class colType - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseObjectUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + , final Class colType + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + this.colType = colType; + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new ObjectArraySource<>(colType); + maybeInnerSource = new ObjectArraySource<>(colType); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new ObjectSparseArraySource<>(colType); + outputSource = new ObjectSparseArraySource<>(colType); // endregion create-sparse } - - // region constructor - this.colType = colType; - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseShortUpdateByOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseShortUpdateByOperator.java index d54ef4d4bbd..a971383066a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseShortUpdateByOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseShortUpdateByOperator.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.Collections; import java.util.Map; @@ -28,8 +29,8 @@ import static io.deephaven.util.QueryConstants.*; public abstract class BaseShortUpdateByOperator extends UpdateByOperator { - protected final WritableColumnSource outputSource; - protected final WritableColumnSource maybeInnerSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; // region extra-fields // endregion extra-fields @@ -41,8 +42,8 @@ protected abstract class Context extends UpdateByOperator.Context { public short curVal = NULL_SHORT; protected Context(final int chunkSize) { - this.outputFillContext = outputSource.makeFillFromContext(chunkSize); - this.outputValues = WritableShortChunk.makeWritableChunk(chunkSize); + outputFillContext = outputSource.makeFillFromContext(chunkSize); + outputValues = WritableShortChunk.makeWritableChunk(chunkSize); } @Override @@ -142,15 +143,14 @@ public void close() { * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column */ - public BaseShortUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - this(pair, affectingColumns, rowRedirection, null, 0, 0, false); + public BaseShortUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns + // region extra-constructor-args + // endregion extra-constructor-args + ) { + this(pair, affectingColumns, null, 0, 0, false); } /** @@ -159,7 +159,6 @@ public BaseShortUpdateByOperator(@NotNull final MatchPair pair, * @param pair the {@link MatchPair} that defines the input/output for this operation * @param affectingColumns a list of all columns (including the input column from the pair) that affects the result * of this operator. - * @param rowRedirection the {@link RowRedirection} for the output column * @param timestampColumnName an optional timestamp column. If this is null, it will be assumed time is measured in * integer ticks. * @param reverseWindowScaleUnits the reverse window for the operator. If no {@code timestampColumnName} is provided, this @@ -167,31 +166,36 @@ public BaseShortUpdateByOperator(@NotNull final MatchPair pair, * @param forwardWindowScaleUnits the forward window for the operator. If no {@code timestampColumnName} is provided, this * is measured in ticks, otherwise it is measured in nanoseconds. */ - public BaseShortUpdateByOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isWindowed - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + public BaseShortUpdateByOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isWindowed + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, isWindowed); + // region constructor + // endregion constructor + } + + @Override + @OverridingMethodsMustInvokeSuper + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; if(rowRedirection != null) { // region create-dense - this.maybeInnerSource = new ShortArraySource(); + maybeInnerSource = new ShortArraySource(); // endregion create-dense - this.outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); } else { - this.maybeInnerSource = null; + maybeInnerSource = null; // region create-sparse - this.outputSource = new ShortSparseArraySource(); + outputSource = new ShortSparseArraySource(); // endregion create-sparse } - - // region constructor - // endregion constructor } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ByteCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ByteCumMinMaxOperator.java index a62445746d9..591cb81d873 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ByteCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ByteCumMinMaxOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseByteUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -54,25 +52,37 @@ public void push(int pos, int count) { } } - public ByteCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor this.nullValue = nullValue; // endregion constructor } - // region extra-methods - // endregion extra-methods + + @Override + public UpdateByOperator copy() { + return new ByteCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { return new Context(affectedChunkSize); } + + // region extra-methods + // endregion extra-methods } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ComparableCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ComparableCumMinMaxOperator.java index 91faf6c81a5..3d64fbd7840 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ComparableCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ComparableCumMinMaxOperator.java @@ -1,22 +1,25 @@ package io.deephaven.engine.table.impl.updateby.minmax; import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectBinaryOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class ComparableCumMinMaxOperator> extends BaseObjectBinaryOperator { private final boolean isMax; public ComparableCumMinMaxOperator(@NotNull final MatchPair inputPair, final boolean isMax, - @Nullable final RowRedirection rowRedirection, final Class colType) { - super(inputPair, new String[] {inputPair.rightColumn}, rowRedirection, colType); + super(inputPair, new String[] {inputPair.rightColumn}, colType); this.isMax = isMax; } + @Override + public UpdateByOperator copy() { + return new ComparableCumMinMaxOperator<>(pair, isMax, colType); + } + @Override protected T doOperation(T bucketCurVal, T chunkCurVal) { if ((isMax && chunkCurVal.compareTo(bucketCurVal) > 0) || diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/DoubleCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/DoubleCumMinMaxOperator.java index 2f1a68a06da..ff5baedcb69 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/DoubleCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/DoubleCumMinMaxOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -53,23 +51,34 @@ public void push(int pos, int count) { } } - public DoubleCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor // endregion constructor } - // region extra-methods - // endregion extra-methods + + @Override + public UpdateByOperator copy() { + return new DoubleCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { return new Context(affectedChunkSize); } + + // region extra-methods + // endregion extra-methods } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/FloatCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/FloatCumMinMaxOperator.java index ef918636a74..a9456a82bac 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/FloatCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/FloatCumMinMaxOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -53,23 +51,34 @@ public void push(int pos, int count) { } } - public FloatCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public FloatCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor // endregion constructor } - // region extra-methods - // endregion extra-methods + + @Override + public UpdateByOperator copy() { + return new FloatCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { return new Context(affectedChunkSize); } + + // region extra-methods + // endregion extra-methods } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/IntCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/IntCumMinMaxOperator.java index 2301b688e9e..3e07323ad0a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/IntCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/IntCumMinMaxOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseIntUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -53,23 +51,34 @@ public void push(int pos, int count) { } } - public IntCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public IntCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor // endregion constructor } - // region extra-methods - // endregion extra-methods + + @Override + public UpdateByOperator copy() { + return new IntCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { return new Context(affectedChunkSize); } + + // region extra-methods + // endregion extra-methods } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/LongCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/LongCumMinMaxOperator.java index 63299529c2b..4d9ac108abe 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/LongCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/LongCumMinMaxOperator.java @@ -19,9 +19,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -61,19 +59,37 @@ public void push(int pos, int count) { } } - public LongCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - ,@NotNull final Class type - // endregion extra-constructor-args + public LongCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + ,@NotNull final Class type + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor this.type = type; // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + , type + // endregion extra-copy-args + ); + } + + @NotNull + @Override + public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { + return new Context(affectedChunkSize); + } + // region extra-methods @NotNull @Override @@ -87,10 +103,4 @@ public Map> getOutputColumns() { return Collections.singletonMap(pair.leftColumn, actualOutput); } // endregion extra-methods - - @NotNull - @Override - public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { - return new Context(affectedChunkSize); - } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ShortCumMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ShortCumMinMaxOperator.java index daf6c44c3e7..07fe5da2948 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ShortCumMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ShortCumMinMaxOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseShortUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.*; @@ -48,23 +46,34 @@ public void push(int pos, int count) { } } - public ShortCumMinMaxOperator(@NotNull final MatchPair pair, - final boolean isMax, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public ShortCumMinMaxOperator( + @NotNull final MatchPair pair, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); this.isMax = isMax; // region constructor // endregion constructor } - // region extra-methods - // endregion extra-methods + + @Override + public UpdateByOperator copy() { + return new ShortCumMinMaxOperator( + pair, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { return new Context(affectedChunkSize); } + + // region extra-methods + // endregion extra-methods } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigDecimalCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigDecimalCumProdOperator.java index e605ce82c45..79281ee4282 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigDecimalCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigDecimalCumProdOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.math.BigDecimal; import java.math.MathContext; @@ -47,13 +45,18 @@ public void reset() { } } - public BigDecimalCumProdOperator(@NotNull final MatchPair inputPair, - @Nullable final RowRedirection rowRedirection, + public BigDecimalCumProdOperator( + @NotNull final MatchPair inputPair, @NotNull final MathContext mathContext) { - super(inputPair, new String[] {inputPair.rightColumn}, rowRedirection, BigDecimal.class); + super(inputPair, new String[] {inputPair.rightColumn}, BigDecimal.class); this.mathContext = mathContext; } + @Override + public UpdateByOperator copy() { + return new BigDecimalCumProdOperator(pair, mathContext); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigIntegerCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigIntegerCumProdOperator.java index 5c6ef2e87ce..8ec2aac7e97 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigIntegerCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/BigIntegerCumProdOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.math.BigInteger; @@ -43,9 +41,13 @@ public void reset() { } } - public BigIntegerCumProdOperator(@NotNull final MatchPair inputPair, - @Nullable final RowRedirection rowRedirection) { - super(inputPair, new String[] {inputPair.rightColumn}, rowRedirection, BigInteger.class); + public BigIntegerCumProdOperator(@NotNull final MatchPair inputPair) { + super(inputPair, new String[] {inputPair.rightColumn}, BigInteger.class); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerCumProdOperator(pair); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ByteCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ByteCumProdOperator.java index 6dd280c391e..4cc2e8d25d2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ByteCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ByteCumProdOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_BYTE; @@ -48,18 +46,28 @@ public void push(int pos, int count) { } } - public ByteCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor this.nullValue = nullValue; // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteCumProdOperator( + pair + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/DoubleCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/DoubleCumProdOperator.java index d85d0667821..e7f8b93af5d 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/DoubleCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/DoubleCumProdOperator.java @@ -12,11 +12,9 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class DoubleCumProdOperator extends BaseDoubleUpdateByOperator { // region extra-fields @@ -46,16 +44,25 @@ public void push(int pos, int count) { } } - public DoubleCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new DoubleCumProdOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/FloatCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/FloatCumProdOperator.java index e4b5eaa5a6a..6c442130f6b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/FloatCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/FloatCumProdOperator.java @@ -7,11 +7,9 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_FLOAT; public class FloatCumProdOperator extends BaseFloatUpdateByOperator { // region extra-fields @@ -41,16 +39,25 @@ public void push(int pos, int count) { } } - public FloatCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public FloatCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new FloatCumProdOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/IntCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/IntCumProdOperator.java index bb00cbbf976..c083640363d 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/IntCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/IntCumProdOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_INT; @@ -47,16 +45,25 @@ public void push(int pos, int count) { } } - public IntCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public IntCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntCumProdOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/LongCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/LongCumProdOperator.java index 24754c777a4..c6a0c810684 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/LongCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/LongCumProdOperator.java @@ -12,9 +12,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_LONG; @@ -47,16 +45,25 @@ public void push(int pos, int count) { } } - public LongCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public LongCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongCumProdOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ShortCumProdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ShortCumProdOperator.java index d91a09d6577..e231d8bdf4b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ShortCumProdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/prod/ShortCumProdOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_SHORT; @@ -42,16 +40,25 @@ public void push(int pos, int count) { } } - public ShortCumProdOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public ShortCumProdOperator( + @NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortCumProdOperator( + pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigDecimalRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigDecimalRollingAvgOperator.java index ac4f4c972d6..ff7be077e28 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigDecimalRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigDecimalRollingAvgOperator.java @@ -7,7 +7,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,6 +22,7 @@ protected class Context extends BaseObjectUpdateByOperator.Context { protected ObjectChunk objectInfluencerValuesChunk; protected RingBuffer objectWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); objectWindowValues = new RingBuffer<>(RING_BUFFER_INITIAL_CAPACITY); @@ -99,15 +99,27 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigDecimalRollingAvgOperator(@NotNull final MatchPair pair, + public BigDecimalRollingAvgOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, @NotNull final MathContext mathContext) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, - forwardWindowScaleUnits, true, BigDecimal.class); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, + BigDecimal.class); this.mathContext = mathContext; } + + @Override + public UpdateByOperator copy() { + return new BigDecimalRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); + + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigIntegerRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigIntegerRollingAvgOperator.java index 8a54da95c28..decdd7e576e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigIntegerRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/BigIntegerRollingAvgOperator.java @@ -28,6 +28,7 @@ protected class Context extends BaseObjectUpdateByOperator.Context { protected ObjectChunk objectInfluencerValuesChunk; protected RingBuffer objectWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); objectWindowValues = new RingBuffer<>(RING_BUFFER_INITIAL_CAPACITY); @@ -104,19 +105,25 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigIntegerRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final MathContext mathContext - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); + public BigIntegerRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final MathContext mathContext) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.mathContext = mathContext; - // region constructor - // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ByteRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ByteRollingAvgOperator.java index dc354836853..6f7e89a017e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ByteRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ByteRollingAvgOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.ByteRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_BYTE; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class ByteRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; @@ -29,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected ByteChunk influencerValuesChunk; protected ByteRingBuffer byteWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); byteWindowValues = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -109,19 +110,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor this.nullValue = nullValue; // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/CharRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/CharRollingAvgOperator.java index 6f5c7610c74..d1ee36d621a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/CharRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/CharRollingAvgOperator.java @@ -2,17 +2,17 @@ import io.deephaven.base.ringbuffer.CharRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_CHAR; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class CharRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; @@ -23,6 +23,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected CharChunk influencerValuesChunk; protected CharRingBuffer charWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); charWindowValues = new CharRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -103,17 +104,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new CharRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/DoubleRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/DoubleRollingAvgOperator.java index 3c3e405368d..05855da9823 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/DoubleRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/DoubleRollingAvgOperator.java @@ -13,11 +13,11 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class DoubleRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int PAIRWISE_BUFFER_INITIAL_SIZE = 64; @@ -105,17 +105,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/FloatRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/FloatRollingAvgOperator.java index 220f3df01e9..5d45e6086ec 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/FloatRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/FloatRollingAvgOperator.java @@ -8,11 +8,11 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; +import static io.deephaven.util.QueryConstants.NULL_FLOAT; public class FloatRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int PAIRWISE_BUFFER_INITIAL_SIZE = 64; @@ -100,17 +100,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public FloatRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new FloatRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/IntRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/IntRollingAvgOperator.java index 3fc6e88bf80..513b7548324 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/IntRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/IntRollingAvgOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.IntRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_INT; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class IntRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; @@ -28,6 +28,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected IntChunk influencerValuesChunk; protected IntRingBuffer intWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); intWindowValues = new IntRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -108,17 +109,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/LongRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/LongRollingAvgOperator.java index 3fcc9ff5006..d64263ccf4a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/LongRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/LongRollingAvgOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.LongRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_LONG; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class LongRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; @@ -28,6 +28,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected LongChunk influencerValuesChunk; protected LongRingBuffer longWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); longWindowValues = new LongRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -108,17 +109,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ShortRollingAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ShortRollingAvgOperator.java index 70920192b0c..0f91486985e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ShortRollingAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingavg/ShortRollingAvgOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.ShortRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ShortChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_SHORT; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class ShortRollingAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; @@ -28,6 +28,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected ShortChunk influencerValuesChunk; protected ShortRingBuffer shortWindowValues; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); shortWindowValues = new ShortRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -108,17 +109,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ByteRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ByteRollingCountOperator.java index 857b61a28f8..d0c5266d3a8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ByteRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ByteRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,6 +28,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected ByteChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -92,19 +92,32 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor this.nullValue = nullValue; // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/CharRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/CharRollingCountOperator.java index 2518609fec9..ca1dd1eb528 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/CharRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/CharRollingCountOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,6 +22,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected CharChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -86,17 +86,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new CharRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/DoubleRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/DoubleRollingCountOperator.java index f0dea746b66..fc613515cd5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/DoubleRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/DoubleRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +27,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected DoubleChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -91,17 +91,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/FloatRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/FloatRollingCountOperator.java index cd7fa9f0512..ebdd714c449 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/FloatRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/FloatRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +27,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected FloatChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -91,17 +91,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public FloatRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new FloatRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/IntRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/IntRollingCountOperator.java index c909b0ad8b5..c7a9ff8f04d 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/IntRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/IntRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +27,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected IntChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -91,17 +91,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/LongRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/LongRollingCountOperator.java index 110e1352e87..c16401341b5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/LongRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/LongRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +27,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected LongChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -91,17 +91,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ObjectRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ObjectRollingCountOperator.java index 0b7dcf9ce12..0c79e962be5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ObjectRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ObjectRollingCountOperator.java @@ -8,19 +8,17 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ObjectRollingCountOperator extends BaseLongUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; - // region extra-fields - // endregion extra-fields protected class Context extends BaseLongUpdateByOperator.Context { protected ObjectChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -85,17 +83,17 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ObjectRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); - // region constructor - // endregion constructor + public ObjectRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + } + + @Override + public UpdateByOperator copy() { + return new ObjectRollingCountOperator(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ShortRollingCountOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ShortRollingCountOperator.java index 23a8527af11..0e9bd5f4300 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ShortRollingCountOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingcount/ShortRollingCountOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +27,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected ShortChunk influencerValuesChunk; protected ByteRingBuffer buffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); @@ -91,17 +91,29 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingCountOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingCountOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingCountOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BaseRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BaseRollingFormulaOperator.java new file mode 100644 index 00000000000..51be9f20d03 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BaseRollingFormulaOperator.java @@ -0,0 +1,265 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.*; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSet; +import io.deephaven.engine.table.*; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.select.FormulaUtil; +import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SparseArrayColumnSource; +import io.deephaven.engine.table.impl.sources.WritableRedirectedColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.RingBufferVectorWrapper; +import io.deephaven.engine.table.impl.util.ChunkUtils; +import io.deephaven.engine.table.impl.util.RowRedirection; +import io.deephaven.vector.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +abstract class BaseRollingFormulaOperator extends UpdateByOperator { + protected final String PARAM_COLUMN_NAME = "__PARAM_COLUMN__"; + + @NotNull + final Map, FormulaColumn> formulaColumnMap; + @NotNull + final TableDefinition tableDef; + + final FormulaColumn formulaColumn; + final Class inputVectorType; + + protected WritableColumnSource primitiveOutputSource; + protected WritableColumnSource outputSource; + protected WritableColumnSource maybeInnerSource; + ChunkType outputChunkType; + + abstract class Context extends UpdateByOperator.Context { + protected final ChunkSink.FillFromContext outputFillContext; + final WritableChunk outputValues; + + @SuppressWarnings("unused") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + outputFillContext = primitiveOutputSource.makeFillFromContext(affectedChunkSize); + outputValues = outputChunkType.makeWritableChunk(affectedChunkSize); + } + + @Override + public void accumulateCumulative( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] valueChunkArr, + @Nullable final LongChunk tsChunk, + final int len) { + throw new UnsupportedOperationException("RollingFormula is not supported in cumulative operations."); + } + + + @Override + protected void writeToOutputChunk(int outIdx) { + throw Assert.statementNeverExecuted("RollingFormulaOperator.Context.writeToOutputChunk"); + } + + @Override + public void writeToOutputColumn(@NotNull final RowSequence inputKeys) { + primitiveOutputSource.fillFromChunk(outputFillContext, outputValues, inputKeys); + } + + @Override + public void reset() { + nullCount = 0; + } + + @Override + public void close() { + outputValues.close(); + outputFillContext.close(); + } + } + + public BaseRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + this.formulaColumnMap = formulaColumnMap; + this.tableDef = tableDef; + + final String outputColumnName = pair.leftColumn; + + final Class inputColumnType = tableDef.getColumn(pair.rightColumn).getDataType(); + inputVectorType = VectorFactory.forElementType(inputColumnType).vectorType(); + + // Re-use the formula column if it's already been created for this type. No need to synchronize; these + // operators are created serially. + formulaColumn = formulaColumnMap.computeIfAbsent(inputColumnType, t -> { + final FormulaColumn tmp = FormulaColumn.createFormulaColumn(outputColumnName, + FormulaUtil.replaceFormulaTokens(formula, paramToken, PARAM_COLUMN_NAME)); + + final ColumnDefinition inputColumnDefinition = ColumnDefinition + .fromGenericType(PARAM_COLUMN_NAME, inputVectorType, inputColumnType); + tmp.initDef(Collections.singletonMap(PARAM_COLUMN_NAME, inputColumnDefinition)); + return tmp; + }); + } + + protected BaseRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class inputVectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + this.formulaColumnMap = formulaColumnMap; + this.tableDef = tableDef; + + final Class columnType = tableDef.getColumn(pair.rightColumn).getDataType(); + this.inputVectorType = inputVectorType; + + // Re-use the formula column already created for this type. + formulaColumn = formulaColumnMap.computeIfAbsent(columnType, t -> { + throw new IllegalStateException("formulaColumnMap should have been populated for " + columnType); + }); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; + + if (rowRedirection != null) { + // region create-dense + maybeInnerSource = ArrayBackedColumnSource.getMemoryColumnSource(0, formulaColumn.getReturnedType()); + // endregion create-dense + outputSource = WritableRedirectedColumnSource.maybeRedirect(rowRedirection, maybeInnerSource, 0); + } else { + maybeInnerSource = null; + // region create-sparse + outputSource = SparseArrayColumnSource.getSparseMemoryColumnSource(0, formulaColumn.getReturnedType()); + // endregion create-sparse + } + + primitiveOutputSource = ReinterpretUtils.maybeConvertToWritablePrimitive(outputSource); + + outputChunkType = primitiveOutputSource.getChunkType(); + } + + protected static IntConsumer getChunkSetter( + final WritableChunk valueChunk, + final ColumnSource formulaOutputSource) { + final ChunkType chunkType = valueChunk.getChunkType(); + if (chunkType == ChunkType.Boolean) { + throw new IllegalStateException( + "Output chunk type should not be Boolean but should have been reinterpreted to byte"); + } + if (chunkType == ChunkType.Byte) { + return i -> { + final WritableByteChunk writableChunk = valueChunk.asWritableByteChunk(); + writableChunk.set(i, formulaOutputSource.getByte(0)); + }; + } + if (chunkType == ChunkType.Char) { + return i -> { + final WritableCharChunk writableChunk = valueChunk.asWritableCharChunk(); + writableChunk.set(i, formulaOutputSource.getChar(0)); + }; + } + if (chunkType == ChunkType.Double) { + return i -> { + final WritableDoubleChunk writableChunk = valueChunk.asWritableDoubleChunk(); + writableChunk.set(i, formulaOutputSource.getDouble(0)); + }; + } + if (chunkType == ChunkType.Float) { + return i -> { + final WritableFloatChunk writableChunk = valueChunk.asWritableFloatChunk(); + writableChunk.set(i, formulaOutputSource.getFloat(0)); + }; + } + if (chunkType == ChunkType.Int) { + return i -> { + final WritableIntChunk writableChunk = valueChunk.asWritableIntChunk(); + writableChunk.set(i, formulaOutputSource.getInt(0)); + }; + } + if (chunkType == ChunkType.Long) { + return i -> { + final WritableLongChunk writableChunk = valueChunk.asWritableLongChunk(); + writableChunk.set(i, formulaOutputSource.getLong(0)); + }; + } + if (chunkType == ChunkType.Short) { + return i -> { + final WritableShortChunk writableChunk = valueChunk.asWritableShortChunk(); + writableChunk.set(i, formulaOutputSource.getShort(0)); + }; + } + return i -> { + final WritableObjectChunk writableChunk = valueChunk.asWritableObjectChunk(); + Object result = formulaOutputSource.get(0); + if (result instanceof RingBufferVectorWrapper) { + // Handle the rare (and probably not useful) case where the formula is an identity. We need to + // copy the data in the RingBuffer and store that as a DirectVector. If not, we will point to the + // live data in the ring. + result = ((Vector) result).getDirect(); + } + writableChunk.set(i, result); + }; + } + + @Override + public void startTrackingPrev() { + outputSource.startTrackingPrevValues(); + if (rowRedirection != null) { + assert maybeInnerSource != null; + maybeInnerSource.startTrackingPrevValues(); + } + } + + @Override + public void prepareForParallelPopulation(final RowSet changedRows) { + if (rowRedirection != null) { + assert maybeInnerSource != null; + ((WritableSourceWithPrepareForParallelPopulation) maybeInnerSource) + .prepareForParallelPopulation(changedRows); + } else { + ((WritableSourceWithPrepareForParallelPopulation) outputSource).prepareForParallelPopulation(changedRows); + } + } + + @NotNull + @Override + public Map> getOutputColumns() { + return Collections.singletonMap(pair.leftColumn, outputSource); + } + + // region clear-output + @Override + public void clearOutputRows(final RowSet toClear) { + // if we are redirected, clear the inner source + if (rowRedirection != null) { + ChunkUtils.fillWithNullValue(maybeInnerSource, toClear); + } else { + ChunkUtils.fillWithNullValue(outputSource, toClear); + } + } + + @Override + public void applyOutputShift(@NotNull final RowSet subRowSetToShift, final long delta) { + ((SparseArrayColumnSource) outputSource).shift(subRowSetToShift, delta); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BooleanRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BooleanRollingFormulaOperator.java new file mode 100644 index 00000000000..c5dd517bd8b --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/BooleanRollingFormulaOperator.java @@ -0,0 +1,190 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.ObjectRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.ObjectRingBufferVectorWrapper; +import io.deephaven.util.BooleanUtils; +import io.deephaven.vector.ObjectVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source byte columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class BooleanRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private ByteChunk influencerValuesChunk; + /** + * The value chunks are coming from a reinterpreted column, but we want to present an ObjectVector + * to the formula. + */ + private ObjectRingBuffer windowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + windowValues = new ObjectRingBuffer<>(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource> formulaInputSource = (SingleValueColumnSource>) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new ObjectRingBufferVectorWrapper(windowValues, inputVectorType)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = formulaCopy.getDataView(); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + windowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asByteChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + windowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final byte val = influencerValuesChunk.get(pos + ii); + windowValues.addUnsafe(BooleanUtils.byteAsBoolean(val)); + } + } + + @Override + public void pop(int count) { + Assert.geq(windowValues.size(), "windowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + windowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + windowValues.clear(); + } + } + + public BooleanRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + } + + protected BooleanRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + } + + @Override + public UpdateByOperator copy() { + return new BooleanRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ByteRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ByteRollingFormulaOperator.java new file mode 100644 index 00000000000..966f8a78d4b --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ByteRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.ByteRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.ByteRingBufferVectorWrapper; +import io.deephaven.vector.ByteVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source byte columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class ByteRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private ByteChunk influencerValuesChunk; + private ByteRingBuffer byteWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + byteWindowValues = new ByteRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new ByteRingBufferVectorWrapper(byteWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + byteWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asByteChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + byteWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final byte val = influencerValuesChunk.get(pos + ii); + byteWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(byteWindowValues.size(), "byteWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + byteWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + byteWindowValues.clear(); + } + } + + public ByteRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected ByteRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new ByteRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/CharRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/CharRollingFormulaOperator.java new file mode 100644 index 00000000000..bc9464acbc7 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/CharRollingFormulaOperator.java @@ -0,0 +1,202 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.CharRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.CharRingBufferVectorWrapper; +import io.deephaven.vector.CharVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source char columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class CharRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private CharChunk influencerValuesChunk; + private CharRingBuffer charWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + charWindowValues = new CharRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new CharRingBufferVectorWrapper(charWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + charWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asCharChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + charWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final char val = influencerValuesChunk.get(pos + ii); + charWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(charWindowValues.size(), "charWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + charWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + charWindowValues.clear(); + } + } + + public CharRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected CharRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new CharRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/DoubleRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/DoubleRollingFormulaOperator.java new file mode 100644 index 00000000000..5f65bbf71e5 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/DoubleRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.DoubleRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.DoubleChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.DoubleRingBufferVectorWrapper; +import io.deephaven.vector.DoubleVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source double columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class DoubleRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private DoubleChunk influencerValuesChunk; + private DoubleRingBuffer doubleWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + doubleWindowValues = new DoubleRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new DoubleRingBufferVectorWrapper(doubleWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + doubleWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asDoubleChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + doubleWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final double val = influencerValuesChunk.get(pos + ii); + doubleWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(doubleWindowValues.size(), "doubleWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + doubleWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + doubleWindowValues.clear(); + } + } + + public DoubleRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected DoubleRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/FloatRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/FloatRollingFormulaOperator.java new file mode 100644 index 00000000000..c350d61cd4a --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/FloatRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.FloatRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.FloatChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.FloatRingBufferVectorWrapper; +import io.deephaven.vector.FloatVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source float columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class FloatRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private FloatChunk influencerValuesChunk; + private FloatRingBuffer floatWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + floatWindowValues = new FloatRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new FloatRingBufferVectorWrapper(floatWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + floatWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asFloatChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + floatWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final float val = influencerValuesChunk.get(pos + ii); + floatWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(floatWindowValues.size(), "floatWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + floatWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + floatWindowValues.clear(); + } + } + + public FloatRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected FloatRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new FloatRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/IntRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/IntRollingFormulaOperator.java new file mode 100644 index 00000000000..3bbfaa8d2f4 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/IntRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.IntRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.IntRingBufferVectorWrapper; +import io.deephaven.vector.IntVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source int columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class IntRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private IntChunk influencerValuesChunk; + private IntRingBuffer intWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + intWindowValues = new IntRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new IntRingBufferVectorWrapper(intWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + intWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asIntChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + intWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final int val = influencerValuesChunk.get(pos + ii); + intWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(intWindowValues.size(), "intWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + intWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + intWindowValues.clear(); + } + } + + public IntRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected IntRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new IntRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/LongRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/LongRollingFormulaOperator.java new file mode 100644 index 00000000000..9af89aa516f --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/LongRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.LongRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.LongRingBufferVectorWrapper; +import io.deephaven.vector.LongVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source long columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class LongRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private LongChunk influencerValuesChunk; + private LongRingBuffer longWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + longWindowValues = new LongRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new LongRingBufferVectorWrapper(longWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + longWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asLongChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + longWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final long val = influencerValuesChunk.get(pos + ii); + longWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(longWindowValues.size(), "longWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + longWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + longWindowValues.clear(); + } + } + + public LongRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected LongRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new LongRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ObjectRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ObjectRollingFormulaOperator.java new file mode 100644 index 00000000000..63375c30bd0 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ObjectRollingFormulaOperator.java @@ -0,0 +1,189 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.ObjectRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.ObjectChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.ObjectRingBufferVectorWrapper; +import io.deephaven.vector.ObjectVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source char columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class ObjectRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private ObjectChunk influencerValuesChunk; + private ObjectRingBuffer windowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + windowValues = new ObjectRingBuffer<>(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource> formulaInputSource = (SingleValueColumnSource>) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new ObjectRingBufferVectorWrapper(windowValues, inputVectorType)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = formulaCopy.getDataView(); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + windowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asObjectChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + windowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final T val = influencerValuesChunk.get(pos + ii); + windowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(windowValues.size(), "charWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + windowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + windowValues.clear(); + } + } + + + public ObjectRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + } + + protected ObjectRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + } + + @Override + public UpdateByOperator copy() { + return new ObjectRollingFormulaOperator<>(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ShortRollingFormulaOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ShortRollingFormulaOperator.java new file mode 100644 index 00000000000..ebd9052f0b2 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ShortRollingFormulaOperator.java @@ -0,0 +1,207 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingFormulaOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula; + +import io.deephaven.base.ringbuffer.ShortRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.ShortChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.rowset.RowSequence; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.TableDefinition; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.select.FormulaColumn; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; +import io.deephaven.engine.table.impl.sources.SingleValueColumnSource; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper.ShortRingBufferVectorWrapper; +import io.deephaven.vector.ShortVector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.Map; +import java.util.function.IntConsumer; + +import static io.deephaven.util.QueryConstants.NULL_INT; + +/** + * Rolling formula operator for source short columns. The output column type will be entirely dependent on the formula + * provided by the user. + */ + +public class ShortRollingFormulaOperator extends BaseRollingFormulaOperator { + private static final int BUFFER_INITIAL_CAPACITY = 128; + + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseRollingFormulaOperator.Context { + private final ColumnSource formulaOutputSource; + private final IntConsumer outputSetter; + + private ShortChunk influencerValuesChunk; + private ShortRingBuffer shortWindowValues; + + @SuppressWarnings("unchecked") + protected Context(final int affectedChunkSize, final int influencerChunkSize) { + super(affectedChunkSize, influencerChunkSize); + + shortWindowValues = new ShortRingBuffer(BUFFER_INITIAL_CAPACITY, true); + + // Make a copy of the operator formula column. + final FormulaColumn formulaCopy = (FormulaColumn)formulaColumn.copy(); + + // Create a single value column source of the appropriate type for the formula column input. + final SingleValueColumnSource formulaInputSource = (SingleValueColumnSource) SingleValueColumnSource.getSingleValueColumnSource(inputVectorType); + formulaInputSource.set(new ShortRingBufferVectorWrapper(shortWindowValues)); + formulaCopy.initInputs(RowSetFactory.flat(1).toTracking(), + Collections.singletonMap(PARAM_COLUMN_NAME, formulaInputSource)); + + formulaOutputSource = ReinterpretUtils.maybeConvertToPrimitive(formulaCopy.getDataView()); + outputSetter = getChunkSetter(outputValues, formulaOutputSource); + } + + @Override + public void close() { + super.close(); + shortWindowValues = null; + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + influencerValuesChunk = valueChunks[0].asShortChunk(); + } + + @Override + public void accumulateRolling( + @NotNull final RowSequence inputKeys, + @NotNull final Chunk[] influencerValueChunkArr, + @Nullable final LongChunk affectedPosChunk, + @Nullable final LongChunk influencerPosChunk, + @NotNull final IntChunk pushChunk, + @NotNull final IntChunk popChunk, + final int len) { + + setValueChunks(influencerValueChunkArr); + setPosChunks(affectedPosChunk, influencerPosChunk); + + int pushIndex = 0; + + // chunk processing + for (int ii = 0; ii < len; ii++) { + final int pushCount = pushChunk.get(ii); + final int popCount = popChunk.get(ii); + + if (pushCount == NULL_INT) { + outputValues.fillWithNullValue(ii, 1); + continue; + } + + // pop for this row + if (popCount > 0) { + pop(popCount); + } + + // push for this row + if (pushCount > 0) { + push(pushIndex, pushCount); + pushIndex += pushCount; + } + + // If not empty (even if completely full of null), run the formula over the window values. + outputSetter.accept(ii); + } + + // chunk output to column + writeToOutputColumn(inputKeys); + } + + @Override + public void push(int pos, int count) { + shortWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + final short val = influencerValuesChunk.get(pos + ii); + shortWindowValues.addUnsafe(val); + } + } + + @Override + public void pop(int count) { + Assert.geq(shortWindowValues.size(), "shortWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + shortWindowValues.removeUnsafe(); + } + } + + @Override + public void reset() { + shortWindowValues.clear(); + } + } + + public ShortRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String formula, + @NotNull final String paramToken, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, formula, paramToken, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + protected ShortRollingFormulaOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final Class vectorType, + @NotNull final Map, FormulaColumn> formulaColumnMap, + @NotNull final TableDefinition tableDef + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, vectorType, formulaColumnMap, tableDef); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new ShortRollingFormulaOperator(pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputVectorType, + formulaColumnMap, + tableDef + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @Override + public UpdateByOperator.@NotNull Context makeUpdateContext(int affectedChunkSize, int influencerChunkSize) { + return new Context(affectedChunkSize, influencerChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ByteRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ByteRingBufferVectorWrapper.java new file mode 100644 index 00000000000..e6e5911a08a --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ByteRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.ByteRingBuffer; +import io.deephaven.vector.ByteSubVector; +import io.deephaven.vector.ByteVector; +import io.deephaven.vector.ByteVectorDirect; +import io.deephaven.vector.ByteVectorSlice; + +public class ByteRingBufferVectorWrapper implements ByteVector, RingBufferVectorWrapper { + private final ByteRingBuffer ringBuffer; + + public ByteRingBufferVectorWrapper(final ByteRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public byte get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public ByteVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new ByteVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public ByteVector subVectorByPositions(final long[] positions) { + return new ByteSubVector(this, positions); + } + + @Override + public byte[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public byte[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public ByteVector getDirect() { + return new ByteVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/CharRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/CharRingBufferVectorWrapper.java new file mode 100644 index 00000000000..99d473731bd --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/CharRingBufferVectorWrapper.java @@ -0,0 +1,49 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.CharRingBuffer; +import io.deephaven.vector.CharSubVector; +import io.deephaven.vector.CharVector; +import io.deephaven.vector.CharVectorDirect; +import io.deephaven.vector.CharVectorSlice; + +public class CharRingBufferVectorWrapper implements CharVector, RingBufferVectorWrapper { + private final CharRingBuffer ringBuffer; + + public CharRingBufferVectorWrapper(final CharRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public char get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public CharVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new CharVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public CharVector subVectorByPositions(final long[] positions) { + return new CharSubVector(this, positions); + } + + @Override + public char[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public char[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public CharVector getDirect() { + return new CharVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/DoubleRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/DoubleRingBufferVectorWrapper.java new file mode 100644 index 00000000000..ad5c8ce8ec9 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/DoubleRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.DoubleRingBuffer; +import io.deephaven.vector.DoubleSubVector; +import io.deephaven.vector.DoubleVector; +import io.deephaven.vector.DoubleVectorDirect; +import io.deephaven.vector.DoubleVectorSlice; + +public class DoubleRingBufferVectorWrapper implements DoubleVector, RingBufferVectorWrapper { + private final DoubleRingBuffer ringBuffer; + + public DoubleRingBufferVectorWrapper(final DoubleRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public double get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public DoubleVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new DoubleVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public DoubleVector subVectorByPositions(final long[] positions) { + return new DoubleSubVector(this, positions); + } + + @Override + public double[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public double[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public DoubleVector getDirect() { + return new DoubleVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/FloatRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/FloatRingBufferVectorWrapper.java new file mode 100644 index 00000000000..7a7605a4e98 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/FloatRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.FloatRingBuffer; +import io.deephaven.vector.FloatSubVector; +import io.deephaven.vector.FloatVector; +import io.deephaven.vector.FloatVectorDirect; +import io.deephaven.vector.FloatVectorSlice; + +public class FloatRingBufferVectorWrapper implements FloatVector, RingBufferVectorWrapper { + private final FloatRingBuffer ringBuffer; + + public FloatRingBufferVectorWrapper(final FloatRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public float get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public FloatVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new FloatVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public FloatVector subVectorByPositions(final long[] positions) { + return new FloatSubVector(this, positions); + } + + @Override + public float[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public float[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public FloatVector getDirect() { + return new FloatVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/IntRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/IntRingBufferVectorWrapper.java new file mode 100644 index 00000000000..37e681702d2 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/IntRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.IntRingBuffer; +import io.deephaven.vector.IntSubVector; +import io.deephaven.vector.IntVector; +import io.deephaven.vector.IntVectorDirect; +import io.deephaven.vector.IntVectorSlice; + +public class IntRingBufferVectorWrapper implements IntVector, RingBufferVectorWrapper { + private final IntRingBuffer ringBuffer; + + public IntRingBufferVectorWrapper(final IntRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public int get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public IntVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new IntVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public IntVector subVectorByPositions(final long[] positions) { + return new IntSubVector(this, positions); + } + + @Override + public int[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public int[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public IntVector getDirect() { + return new IntVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/LongRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/LongRingBufferVectorWrapper.java new file mode 100644 index 00000000000..5e505a6102d --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/LongRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.LongRingBuffer; +import io.deephaven.vector.LongSubVector; +import io.deephaven.vector.LongVector; +import io.deephaven.vector.LongVectorDirect; +import io.deephaven.vector.LongVectorSlice; + +public class LongRingBufferVectorWrapper implements LongVector, RingBufferVectorWrapper { + private final LongRingBuffer ringBuffer; + + public LongRingBufferVectorWrapper(final LongRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public long get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public LongVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new LongVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public LongVector subVectorByPositions(final long[] positions) { + return new LongSubVector(this, positions); + } + + @Override + public long[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public long[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public LongVector getDirect() { + return new LongVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ObjectRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ObjectRingBufferVectorWrapper.java new file mode 100644 index 00000000000..c955b1ca67f --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ObjectRingBufferVectorWrapper.java @@ -0,0 +1,57 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.ObjectRingBuffer; +import io.deephaven.vector.ObjectSubVector; +import io.deephaven.vector.ObjectVector; +import io.deephaven.vector.ObjectVectorDirect; +import io.deephaven.vector.ObjectVectorSlice; + +public class ObjectRingBufferVectorWrapper implements ObjectVector, RingBufferVectorWrapper { + private final ObjectRingBuffer ringBuffer; + private final Class componentType; + + public ObjectRingBufferVectorWrapper(final ObjectRingBuffer ringBuffer, final Class componentType) { + this.ringBuffer = ringBuffer; + this.componentType = componentType; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public T get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public ObjectVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new ObjectVectorSlice<>(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + @Override + public ObjectVector subVectorByPositions(final long[] positions) { + return new ObjectSubVector<>(this, positions); + } + + @Override + public T[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public T[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public ObjectVector getDirect() { + return new ObjectVectorDirect<>(ringBuffer.getAll()); + } + + @Override + public Class getComponentType() { + return componentType; + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/RingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/RingBufferVectorWrapper.java new file mode 100644 index 00000000000..f00d71d1090 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/RingBufferVectorWrapper.java @@ -0,0 +1,4 @@ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +public interface RingBufferVectorWrapper { +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ShortRingBufferVectorWrapper.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ShortRingBufferVectorWrapper.java new file mode 100644 index 00000000000..cfbb11b3915 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/ShortRingBufferVectorWrapper.java @@ -0,0 +1,54 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRingBufferVectorWrapper and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ +package io.deephaven.engine.table.impl.updateby.rollingformula.ringbuffervectorwrapper; + +import io.deephaven.base.ringbuffer.ShortRingBuffer; +import io.deephaven.vector.ShortSubVector; +import io.deephaven.vector.ShortVector; +import io.deephaven.vector.ShortVectorDirect; +import io.deephaven.vector.ShortVectorSlice; + +public class ShortRingBufferVectorWrapper implements ShortVector, RingBufferVectorWrapper { + private final ShortRingBuffer ringBuffer; + + public ShortRingBufferVectorWrapper(final ShortRingBuffer ringBuffer) { + this.ringBuffer = ringBuffer; + } + + @Override + public long size() { + return ringBuffer.size(); + } + + @Override + public short get(long index) { + return ringBuffer.front((int)index); + } + + @Override + public ShortVector subVector(final long fromIndexInclusive, final long toIndexExclusive) { + return new ShortVectorSlice(this, fromIndexInclusive, toIndexExclusive - fromIndexInclusive); + } + + public ShortVector subVectorByPositions(final long[] positions) { + return new ShortSubVector(this, positions); + } + + @Override + public short[] toArray() { + return ringBuffer.getAll(); + } + + @Override + public short[] copyToArray() { + return ringBuffer.getAll(); + } + + @Override + public ShortVector getDirect() { + return new ShortVectorDirect(ringBuffer.getAll()); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollinggroup/RollingGroupOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollinggroup/RollingGroupOperator.java index b35f50cd0ed..aad948c1ab3 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollinggroup/RollingGroupOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollinggroup/RollingGroupOperator.java @@ -29,15 +29,16 @@ public class RollingGroupOperator extends UpdateByOperator { /** * Store input/output column information for retrieval. */ + private final MatchPair[] pairs; private final String[] inputColumnNames; private final String[] outputColumnNames; - private final ColumnSource[] outputSources; - private final Map> outputSourceMap; + private ColumnSource[] outputSources; + private Map> outputSourceMap; /** Store a mapping from row keys to bucket RowSets */ - protected final WritableColumnSource groupRowSetSource; - protected final ObjectArraySource innerGroupRowSetSource; + protected WritableColumnSource groupRowSetSource; + protected ObjectArraySource innerGroupRowSetSource; /** * These sources will retain the position offsets from the current row position for the source and end of this @@ -50,10 +51,10 @@ public class RollingGroupOperator extends UpdateByOperator { * beginning 5 rows earlier than this one and continuing through 3 rows earlier than this (inclusive). A range of * [0,0] contains exactly the current row. */ - protected final WritableColumnSource startSource; - protected final LongArraySource innerStartSource; - protected final WritableColumnSource endSource; - protected final LongArraySource innerEndSource; + protected WritableColumnSource startSource; + protected LongArraySource innerStartSource; + protected WritableColumnSource endSource; + protected LongArraySource innerEndSource; private ModifiedColumnSet.Transformer inputOutputTransformer; private ModifiedColumnSet[] outputModifiedColumnSets; @@ -100,19 +101,23 @@ public void close() { } @Override - public void accumulateCumulative(RowSequence inputKeys, Chunk[] valueChunkArr, - LongChunk tsChunk, int len) { + public void accumulateCumulative( + @NotNull RowSequence inputKeys, + final Chunk[] valueChunkArr, + final LongChunk tsChunk, + final int len) { throw new IllegalStateException("accumulateCumulative() is invalid for RollingGroupOperator"); } @Override - public void accumulateRolling(RowSequence inputKeys, - Chunk[] influencerValueChunkArr, - LongChunk affectedPosChunk, - LongChunk influencerPosChunk, - IntChunk pushChunk, - IntChunk popChunk, - int len) { + public void accumulateRolling( + @NotNull RowSequence inputKeys, + final Chunk[] influencerValueChunkArr, + final LongChunk affectedPosChunk, + final LongChunk influencerPosChunk, + final IntChunk pushChunk, + final IntChunk popChunk, + final int len) { if (timestampColumnName == null) { // The only work for ticks operators is to update the groupRowSetSource @@ -219,22 +224,59 @@ public void writeToOutputColumn(@NotNull RowSequence inputKeys) { } } - public RollingGroupOperator(@NotNull final MatchPair[] pairs, + @SuppressWarnings("unused") + public RollingGroupOperator( + @NotNull final MatchPair[] pairs, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, - @NotNull final ColumnSource[] valueSources - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pairs[0], affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, - forwardWindowScaleUnits, true); + @NotNull final TableDefinition tableDef) { + super(pairs[0], affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + + this.pairs = pairs; inputColumnNames = new String[pairs.length]; outputColumnNames = new String[pairs.length]; - outputSources = new ColumnSource[pairs.length]; + + for (int ii = 0; ii < pairs.length; ii++) { + inputColumnNames[ii] = pairs[ii].rightColumn; + outputColumnNames[ii] = pairs[ii].leftColumn; + } + } + + protected RollingGroupOperator( + @NotNull final MatchPair[] pairs, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String[] inputColumnNames, + @NotNull final String[] outputColumnNames) { + super(pairs[0], affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + + this.pairs = pairs; + this.inputColumnNames = inputColumnNames; + this.outputColumnNames = outputColumnNames; + } + + @Override + public UpdateByOperator copy() { + return new RollingGroupOperator( + pairs, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + inputColumnNames, + outputColumnNames); + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + this.rowRedirection = rowRedirection; + + outputSources = new ColumnSource[outputColumnNames.length]; outputSourceMap = new HashMap<>(); // For the sake of rolling group operators, we need to map from every row to its bucket row set (or the @@ -270,13 +312,8 @@ public RollingGroupOperator(@NotNull final MatchPair[] pairs, } } - for (int ii = 0; ii < pairs.length; ii++) { - final MatchPair pair = pairs[ii]; - final Class csType = valueSources[ii].getType(); - - inputColumnNames[ii] = pair.rightColumn; - outputColumnNames[ii] = pair.leftColumn; - + for (int ii = 0; ii < inputColumnNames.length; ii++) { + final ColumnSource valueSource = source.getColumnSource(inputColumnNames[ii]); // When timestampColumnName == null, we have a tick-based rolling window. RollingOpSpec accepts fwd/rev // tick parameters and applies the constraint that the current row belongs to the reverse window. This // implies that to create a group containing exactly the current row, you must provide a rev/fwd range of @@ -288,12 +325,13 @@ public RollingGroupOperator(@NotNull final MatchPair[] pairs, // // The aggregated column source range is half-open, so we add one to the inclusive fwd units to convert. outputSources[ii] = timestampColumnName != null - ? AggregateColumnSource.makeSliced((ColumnSource) valueSources[ii], groupRowSetSource, + ? AggregateColumnSource.makeSliced((ColumnSource) valueSource, groupRowSetSource, startSource, endSource) - : AggregateColumnSource.makeSliced((ColumnSource) valueSources[ii], groupRowSetSource, + : AggregateColumnSource.makeSliced((ColumnSource) valueSource, groupRowSetSource, -reverseWindowScaleUnits + 1, forwardWindowScaleUnits + 1); outputSourceMap.put(outputColumnNames[ii], outputSources[ii]); } + } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ByteRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ByteRollingMinMaxOperator.java index 8468351bea2..ba6f93bb1ee 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ByteRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ByteRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingByteRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseByteUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_BYTE; public class ByteRollingMinMaxOperator extends BaseByteUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseByteUpdateByOperator.Context { protected AggregatingByteRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public ByteRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/CharRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/CharRollingMinMaxOperator.java index 63815fbcc73..8f575b4eeb0 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/CharRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/CharRollingMinMaxOperator.java @@ -2,17 +2,16 @@ import io.deephaven.base.ringbuffer.AggregatingCharRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseCharUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_CHAR; public class CharRollingMinMaxOperator extends BaseCharUpdateByOperator { private final boolean isMax; @@ -25,6 +24,7 @@ protected class Context extends BaseCharUpdateByOperator.Context { protected AggregatingCharRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -132,19 +132,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new CharRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ComparableRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ComparableRollingMinMaxOperator.java index 75a86f54509..00d32ec0940 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ComparableRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ComparableRollingMinMaxOperator.java @@ -8,21 +8,19 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ComparableRollingMinMaxOperator> extends BaseObjectUpdateByOperator { private final boolean isMax; private static final int BUFFER_INITIAL_CAPACITY = 128; - // region extra-fields - // endregion extra-fields protected class Context extends BaseObjectUpdateByOperator.Context { protected ObjectChunk objectInfluencerValuesChunk; protected AggregatingObjectRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -83,7 +81,7 @@ public void push(int pos, int count) { @Override public void pop(int count) { - Assert.geq(aggMinMax.size(), "shortWindowValues.size()", count); + Assert.geq(aggMinMax.size(), "aggMinMax.size()", count); for (int ii = 0; ii < count; ii++) { T val = aggMinMax.removeUnsafe(); @@ -126,19 +124,26 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f public ComparableRollingMinMaxOperator(@NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - , final Class colType - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, - forwardWindowScaleUnits, true, colType); + final boolean isMax, + final Class colType) { + // noinspection unchecked + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, + (Class) colType); this.isMax = isMax; - // region constructor - // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new ComparableRollingMinMaxOperator<>( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax, + colType); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/DoubleRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/DoubleRollingMinMaxOperator.java index a5ee85c287b..a009a5bb31d 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/DoubleRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/DoubleRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.DoubleChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class DoubleRollingMinMaxOperator extends BaseDoubleUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/FloatRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/FloatRollingMinMaxOperator.java index 4f777701a61..9486cf570f6 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/FloatRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/FloatRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingFloatRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.FloatChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_FLOAT; public class FloatRollingMinMaxOperator extends BaseFloatUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseFloatUpdateByOperator.Context { protected AggregatingFloatRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public FloatRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new FloatRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/IntRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/IntRollingMinMaxOperator.java index f5b5cc0471b..7be04eebce7 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/IntRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/IntRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingIntRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseIntUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_INT; public class IntRollingMinMaxOperator extends BaseIntUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseIntUpdateByOperator.Context { protected AggregatingIntRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/LongRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/LongRollingMinMaxOperator.java index 6589eccbcb8..5abf202af42 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/LongRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/LongRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingLongRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_LONG; public class LongRollingMinMaxOperator extends BaseLongUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseLongUpdateByOperator.Context { protected AggregatingLongRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ShortRollingMinMaxOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ShortRollingMinMaxOperator.java index 624d9f8ce6e..8c1ff819d83 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ShortRollingMinMaxOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ShortRollingMinMaxOperator.java @@ -7,17 +7,16 @@ import io.deephaven.base.ringbuffer.AggregatingShortRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ShortChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseShortUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_SHORT; public class ShortRollingMinMaxOperator extends BaseShortUpdateByOperator { private final boolean isMax; @@ -30,6 +29,7 @@ protected class Context extends BaseShortUpdateByOperator.Context { protected AggregatingShortRingBuffer aggMinMax; protected boolean evaluationNeeded; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); if (isMax) { @@ -137,19 +137,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingMinMaxOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final boolean isMax - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingMinMaxOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final boolean isMax + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.isMax = isMax; // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingMinMaxOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + isMax + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigDecimalRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigDecimalRollingProductOperator.java index 6d72fe26a53..bc18488d2e1 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigDecimalRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigDecimalRollingProductOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -113,20 +112,26 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public BigDecimalRollingProductOperator(@NotNull final MatchPair pair, + public BigDecimalRollingProductOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, - @NotNull final MathContext mathContext - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, + @NotNull final MathContext mathContext) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.mathContext = mathContext; - // region constructor - // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new BigDecimalRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigIntegerRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigIntegerRollingProductOperator.java index ccd6a8049b6..12504ede630 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigIntegerRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/BigIntegerRollingProductOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,6 +23,7 @@ protected class Context extends BaseObjectUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingObjectRingBuffer<>(BUFFER_INITIAL_SIZE, @@ -109,17 +109,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigIntegerRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigInteger.class); - // region constructor - // endregion constructor + public BigIntegerRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigInteger.class); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ByteRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ByteRollingProductOperator.java index 26bd4b1ee6b..7a47d384895 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ByteRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ByteRollingProductOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_BYTE; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class ByteRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; @@ -31,6 +31,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -119,17 +120,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ByteRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/CharRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/CharRollingProductOperator.java index ed00c6951ae..d641b98eb02 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/CharRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/CharRollingProductOperator.java @@ -2,17 +2,17 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_CHAR; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class CharRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; @@ -26,6 +26,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -114,17 +115,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new CharRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/DoubleRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/DoubleRollingProductOperator.java index 6d0d3cef925..cae34ddc502 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/DoubleRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/DoubleRollingProductOperator.java @@ -13,18 +13,15 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class DoubleRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; - // region extra-fields - // endregion extra-fields - protected class Context extends BaseDoubleUpdateByOperator.Context { protected DoubleChunk doubleInfluencerValuesChunk; protected AggregatingDoubleRingBuffer buffer; @@ -33,6 +30,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int nanCount; private int infCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -140,17 +138,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); - // region constructor - // endregion constructor + public DoubleRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/FloatRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/FloatRollingProductOperator.java index f7868c2c0ae..1c0d6465e87 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/FloatRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/FloatRollingProductOperator.java @@ -8,18 +8,15 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; +import static io.deephaven.util.QueryConstants.NULL_FLOAT; public class FloatRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; - // region extra-fields - // endregion extra-fields - protected class Context extends BaseDoubleUpdateByOperator.Context { protected FloatChunk floatInfluencerValuesChunk; protected AggregatingDoubleRingBuffer buffer; @@ -28,6 +25,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int nanCount; private int infCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -135,17 +133,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); - // region constructor - // endregion constructor + public FloatRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + } + + @Override + public UpdateByOperator copy() { + return new FloatRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/IntRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/IntRollingProductOperator.java index 068749ff400..5f886f64627 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/IntRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/IntRollingProductOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_INT; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class IntRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; @@ -31,6 +31,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -119,17 +120,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/LongRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/LongRollingProductOperator.java index a95d99d85f5..272d5b024db 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/LongRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/LongRollingProductOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_LONG; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class LongRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; @@ -31,6 +31,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -119,17 +120,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ShortRollingProductOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ShortRollingProductOperator.java index f5e762f41be..bf8d37ff776 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ShortRollingProductOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/ShortRollingProductOperator.java @@ -7,17 +7,17 @@ import io.deephaven.base.ringbuffer.AggregatingDoubleRingBuffer; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ShortChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.*; +import static io.deephaven.util.QueryConstants.NULL_SHORT; +import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class ShortRollingProductOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; @@ -31,6 +31,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { private int zeroCount; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); buffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_SIZE, @@ -119,17 +120,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingProductOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingProductOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingProductOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigDecimalRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigDecimalRollingStdOperator.java index cf267a9904f..3fe79505c73 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigDecimalRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigDecimalRollingStdOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -18,14 +17,13 @@ public class BigDecimalRollingStdOperator extends BaseObjectUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; private final MathContext mathContext; - // region extra-fields - // endregion extra-fields protected class Context extends BaseObjectUpdateByOperator.Context { protected ObjectChunk influencerValuesChunk; protected AggregatingObjectRingBuffer valueBuffer; protected AggregatingObjectRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingObjectRingBuffer<>(BUFFER_INITIAL_CAPACITY, BigDecimal.ZERO, @@ -144,20 +142,26 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigDecimalRollingStdOperator(@NotNull final MatchPair pair, + public BigDecimalRollingStdOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, - final MathContext mathContext - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, + final MathContext mathContext) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.mathContext = mathContext; - // region constructor - // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new BigDecimalRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigIntegerRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigIntegerRollingStdOperator.java index 025c69d8dd7..fd968dc9b54 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigIntegerRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/BigIntegerRollingStdOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,14 +18,13 @@ public class BigIntegerRollingStdOperator extends BaseObjectUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; private final MathContext mathContext; - // region extra-fields - // endregion extra-fields protected class Context extends BaseObjectUpdateByOperator.Context { protected ObjectChunk influencerValuesChunk; protected AggregatingObjectRingBuffer valueBuffer; protected AggregatingObjectRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingObjectRingBuffer<>(BUFFER_INITIAL_CAPACITY, BigDecimal.ZERO, @@ -147,19 +145,25 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigIntegerRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - final MathContext mathContext - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); + public BigIntegerRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + final MathContext mathContext) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.mathContext = mathContext; - // region constructor - // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ByteRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ByteRollingStdOperator.java index 1707f555603..a772cca3bf7 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ByteRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ByteRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,6 +30,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -158,19 +158,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor this.nullValue = nullValue; // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/CharRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/CharRollingStdOperator.java index 4e2893a8120..f8a7f2400df 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/CharRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/CharRollingStdOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,6 +24,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -152,17 +152,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new CharRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/DoubleRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/DoubleRollingStdOperator.java index 3adbc7e04d3..ab3c6487a85 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/DoubleRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/DoubleRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -157,17 +157,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/FloatRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/FloatRollingStdOperator.java index 082fa4f46e7..50048dd7f0d 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/FloatRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/FloatRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -157,17 +157,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public FloatRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new FloatRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/IntRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/IntRollingStdOperator.java index 3aa840cbf17..28afe76b066 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/IntRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/IntRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -157,17 +157,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/LongRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/LongRollingStdOperator.java index 793d441e497..8d4cf961e30 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/LongRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/LongRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -157,17 +157,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ShortRollingStdOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ShortRollingStdOperator.java index 84ca25415a8..dafc9fc35fe 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ShortRollingStdOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingstd/ShortRollingStdOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +29,7 @@ protected class Context extends BaseDoubleUpdateByOperator.Context { protected AggregatingDoubleRingBuffer valueBuffer; protected AggregatingDoubleRingBuffer valueSquareBuffer; + @SuppressWarnings("unused") protected Context(final int affectedChunkSize, final int influencerChunkSize) { super(affectedChunkSize); valueBuffer = new AggregatingDoubleRingBuffer(BUFFER_INITIAL_CAPACITY, 0.0, @@ -157,17 +157,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingStdOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingStdOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingStdOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigDecimalRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigDecimalRollingSumOperator.java index ca885384d31..5c67f14e4b4 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigDecimalRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigDecimalRollingSumOperator.java @@ -7,7 +7,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -97,15 +96,26 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public BigDecimalRollingSumOperator(@NotNull final MatchPair pair, + public BigDecimalRollingSumOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, @NotNull final MathContext mathContext) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.mathContext = mathContext; } + + @Override + public UpdateByOperator copy() { + return new BigDecimalRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + mathContext); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigIntegerRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigIntegerRollingSumOperator.java index cb8b15fbd88..b3fc08ef76e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigIntegerRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/BigIntegerRollingSumOperator.java @@ -7,7 +7,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -94,17 +93,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public BigIntegerRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigInteger.class); - // region constructor - // endregion constructor + public BigIntegerRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigInteger.class); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ByteRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ByteRollingSumOperator.java index 230d0b2f23b..39572518ef9 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ByteRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ByteRollingSumOperator.java @@ -1,6 +1,6 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortRollingSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.rollingsum; @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -105,19 +104,33 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public ByteRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor this.nullValue = nullValue; // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ByteRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/CharRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/CharRollingSumOperator.java new file mode 100644 index 00000000000..4490bce0eef --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/CharRollingSumOperator.java @@ -0,0 +1,127 @@ +package io.deephaven.engine.table.impl.updateby.rollingsum; + +import io.deephaven.base.ringbuffer.CharRingBuffer; +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static io.deephaven.util.QueryConstants.*; + +public class CharRollingSumOperator extends BaseLongUpdateByOperator { + private static final int RING_BUFFER_INITIAL_CAPACITY = 512; + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseLongUpdateByOperator.Context { + protected CharChunk charInfluencerValuesChunk; + protected CharRingBuffer charWindowValues; + + protected Context(final int chunkSize) { + super(chunkSize); + charWindowValues = new CharRingBuffer(RING_BUFFER_INITIAL_CAPACITY, true); + } + + @Override + public void close() { + super.close(); + charWindowValues = null; + } + + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + charInfluencerValuesChunk = valueChunks[0].asCharChunk(); + } + + @Override + public void push(int pos, int count) { + charWindowValues.ensureRemaining(count); + + for (int ii = 0; ii < count; ii++) { + char val = charInfluencerValuesChunk.get(pos + ii); + charWindowValues.addUnsafe(val); + + // increase the running sum + if (val != NULL_CHAR) { + if (curVal == NULL_LONG) { + curVal = val; + } else { + curVal += val; + } + } else { + nullCount++; + } + } + } + + @Override + public void pop(int count) { + Assert.geq(charWindowValues.size(), "charWindowValues.size()", count); + + for (int ii = 0; ii < count; ii++) { + char val = charWindowValues.removeUnsafe(); + + // reduce the running sum + if (val != NULL_CHAR) { + curVal -= val; + } else { + nullCount--; + } + } + } + + @Override + public void writeToOutputChunk(int outIdx) { + if (charWindowValues.size() == nullCount) { + outputValues.set(outIdx, NULL_LONG); + } else { + outputValues.set(outIdx, curVal); + } + } + + @Override + public void reset() { + super.reset(); + charWindowValues.clear(); + } + } + + @NotNull + @Override + public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { + return new Context(affectedChunkSize); + } + + public CharRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new CharRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/DoubleRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/DoubleRollingSumOperator.java index 1b9e576fafe..c787af7fcda 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/DoubleRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/DoubleRollingSumOperator.java @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -21,8 +20,6 @@ public class DoubleRollingSumOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; - // region extra-fields - // endregion extra-fields protected class Context extends BaseDoubleUpdateByOperator.Context { protected DoubleChunk doubleInfluencerValuesChunk; @@ -105,17 +102,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public DoubleRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); - // region constructor - // endregion constructor + public DoubleRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + } + + @Override + public UpdateByOperator copy() { + return new DoubleRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/FloatRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/FloatRollingSumOperator.java index f547c81285c..1f77143b049 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/FloatRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/FloatRollingSumOperator.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,8 +15,6 @@ public class FloatRollingSumOperator extends BaseFloatUpdateByOperator { private static final int BUFFER_INITIAL_SIZE = 64; - // region extra-fields - // endregion extra-fields protected class Context extends BaseFloatUpdateByOperator.Context { protected FloatChunk floatInfluencerValuesChunk; @@ -100,17 +97,22 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public FloatRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); - // region constructor - // endregion constructor + public FloatRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + } + + @Override + public UpdateByOperator copy() { + return new FloatRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits); } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/IntRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/IntRollingSumOperator.java index f5c2b1dedad..eea93f15ffa 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/IntRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/IntRollingSumOperator.java @@ -1,6 +1,6 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortRollingSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.rollingsum; @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -104,17 +103,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public IntRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new IntRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/LongRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/LongRollingSumOperator.java index ae5db18e540..b9904969e33 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/LongRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/LongRollingSumOperator.java @@ -1,6 +1,6 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortRollingSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.rollingsum; @@ -13,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -104,17 +103,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public LongRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new LongRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ShortRollingSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ShortRollingSumOperator.java index 742ebdbd567..77141ed5685 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ShortRollingSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/ShortRollingSumOperator.java @@ -1,3 +1,8 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharRollingSumOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ package io.deephaven.engine.table.impl.updateby.rollingsum; import io.deephaven.base.ringbuffer.ShortRingBuffer; @@ -8,7 +13,6 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -99,17 +103,30 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize); } - public ShortRollingSumOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingSumOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); // region constructor // endregion constructor } + + @Override + public UpdateByOperator copy() { + return new ShortRollingSumOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits + // region extra-copy-args + // endregion extra-copy-args + ); + } } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BasePrimitiveRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BasePrimitiveRollingWAvgOperator.java index a7199595cb6..52ddb4bd185 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BasePrimitiveRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BasePrimitiveRollingWAvgOperator.java @@ -5,7 +5,9 @@ import io.deephaven.chunk.*; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; import io.deephaven.engine.table.impl.util.cast.ToDoubleCast; @@ -17,10 +19,7 @@ abstract class BasePrimitiveRollingWAvgOperator extends BaseDoubleUpdateByOperator { private static final int BUFFER_INITIAL_CAPACITY = 128; final String weightColumnName; - final ColumnSource weightColumnSource; - - // region extra-fields - // endregion extra-fields + ColumnSource weightColumnSource; abstract class Context extends BaseDoubleUpdateByOperator.Context { DoubleChunk influencerWeightValuesChunk; @@ -101,23 +100,22 @@ public void reset() { } } - public BasePrimitiveRollingWAvgOperator(@NotNull final MatchPair pair, + public BasePrimitiveRollingWAvgOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, - forwardWindowScaleUnits, true); + @NotNull final String weightColumnName) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true); this.weightColumnName = weightColumnName; - this.weightColumnSource = weightColumnSource; - // region constructor - // endregion constructor + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + weightColumnSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(weightColumnName)); } /** diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BigDecimalRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BigDecimalRollingWAvgOperator.java index aa66d03202d..f8323e2ee2f 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BigDecimalRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/BigDecimalRollingWAvgOperator.java @@ -7,7 +7,9 @@ import io.deephaven.chunk.attributes.Any; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.sources.ReinterpretUtils; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; import io.deephaven.engine.table.impl.util.RowRedirection; @@ -25,9 +27,9 @@ public class BigDecimalRollingWAvgOperator extends BaseObjectUpdateByOperator @NotNull final String weightColumnName; @NotNull - final ColumnSource weightColumnSource; + protected ColumnSource weightColumnSource; @NotNull - final ColumnSource valueColumnSource; + protected ColumnSource valueColumnSource; protected class Context extends BaseObjectUpdateByOperator.Context { ObjectChunk influencerValuesChunk; @@ -157,27 +159,38 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public BigDecimalRollingWAvgOperator(@NotNull final MatchPair pair, + public BigDecimalRollingWAvgOperator( + @NotNull final MatchPair pair, @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, @Nullable final String timestampColumnName, final long reverseWindowScaleUnits, final long forwardWindowScaleUnits, @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource, - @NotNull final ColumnSource valueColumnSource, - @NotNull final MathContext mathContext - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, + @NotNull final MathContext mathContext) { + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true, BigDecimal.class); this.weightColumnName = weightColumnName; - this.weightColumnSource = weightColumnSource; - this.valueColumnSource = valueColumnSource; this.mathContext = mathContext; - // region constructor - // endregion constructor + } + + @Override + public void initializeSources(@NotNull final Table source, @Nullable final RowRedirection rowRedirection) { + super.initializeSources(source, rowRedirection); + + valueColumnSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(pair.rightColumn)); + weightColumnSource = ReinterpretUtils.maybeConvertToPrimitive(source.getColumnSource(weightColumnName)); + } + + @Override + public UpdateByOperator copy() { + return new BigDecimalRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName, + mathContext); } /** diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ByteRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ByteRollingWAvgOperator.java index b9404256702..8e27780c8fb 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ByteRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ByteRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.ByteChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ByteRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public ByteRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/CharRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/CharRollingWAvgOperator.java index ca49395ef4d..787af3f1faf 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/CharRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/CharRollingWAvgOperator.java @@ -3,10 +3,8 @@ import io.deephaven.chunk.CharChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -59,22 +57,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public CharRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public CharRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new CharRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/DoubleRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/DoubleRollingWAvgOperator.java index 1282167546a..34b06e22db3 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/DoubleRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/DoubleRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.DoubleChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public DoubleRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public DoubleRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new DoubleRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/FloatRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/FloatRollingWAvgOperator.java index cbfbefae13c..730f85b8667 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/FloatRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/FloatRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.FloatChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public FloatRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public FloatRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new FloatRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/IntRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/IntRollingWAvgOperator.java index 321eb3dd071..a8d0c9a1256 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/IntRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/IntRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.IntChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public IntRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public IntRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/LongRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/LongRollingWAvgOperator.java index 1148d8177e2..767e17d5021 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/LongRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/LongRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.LongChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public LongRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public LongRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ShortRollingWAvgOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ShortRollingWAvgOperator.java index e2e9b82a930..ff918108d9e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ShortRollingWAvgOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingwavg/ShortRollingWAvgOperator.java @@ -8,10 +8,8 @@ import io.deephaven.chunk.ShortChunk; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; -import io.deephaven.engine.table.ColumnSource; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,22 +62,35 @@ public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, f return new Context(affectedChunkSize, influencerChunkSize); } - public ShortRollingWAvgOperator(@NotNull final MatchPair pair, - @NotNull final String[] affectingColumns, - @Nullable final RowRedirection rowRedirection, - @Nullable final String timestampColumnName, - final long reverseWindowScaleUnits, - final long forwardWindowScaleUnits, - @NotNull final String weightColumnName, - @NotNull final ColumnSource weightColumnSource - // region extra-constructor-args - // endregion extra-constructor-args + public ShortRollingWAvgOperator( + @NotNull final MatchPair pair, + @NotNull final String[] affectingColumns, + @Nullable final String timestampColumnName, + final long reverseWindowScaleUnits, + final long forwardWindowScaleUnits, + @NotNull final String weightColumnName + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, affectingColumns, rowRedirection, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName, weightColumnSource); + super(pair, affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, weightColumnName); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortRollingWAvgOperator( + pair, + affectingColumns, + timestampColumnName, + reverseWindowScaleUnits, + forwardWindowScaleUnits, + weightColumnName + // region extra-copy-args + // endregion extra-copy-args + ); + } + /** * Get the names of the input column(s) for this operator. * diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigDecimalCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigDecimalCumSumOperator.java index 2e43ec0754e..752c937eca0 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigDecimalCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigDecimalCumSumOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.math.BigDecimal; import java.math.MathContext; @@ -49,13 +47,18 @@ public void push(int pos, int count) { } } - public BigDecimalCumSumOperator(@NotNull final MatchPair inputPair, - @Nullable final RowRedirection rowRedirection, + public BigDecimalCumSumOperator( + @NotNull final MatchPair inputPair, @NotNull final MathContext mathContext) { - super(inputPair, new String[] {inputPair.rightColumn}, rowRedirection, BigDecimal.class); + super(inputPair, new String[] {inputPair.rightColumn}, BigDecimal.class); this.mathContext = mathContext; } + @Override + public UpdateByOperator copy() { + return new BigDecimalCumSumOperator(pair, mathContext); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigIntegerCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigIntegerCumSumOperator.java index e3a29fbe425..dae33cff471 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigIntegerCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/BigIntegerCumSumOperator.java @@ -7,9 +7,7 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseObjectUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.math.BigInteger; @@ -44,9 +42,14 @@ public void push(int pos, int count) { } } - public BigIntegerCumSumOperator(@NotNull final MatchPair inputPair, - @Nullable final RowRedirection rowRedirection) { - super(inputPair, new String[] {inputPair.rightColumn}, rowRedirection, BigInteger.class); + public BigIntegerCumSumOperator( + @NotNull final MatchPair inputPair) { + super(inputPair, new String[] {inputPair.rightColumn}, BigInteger.class); + } + + @Override + public UpdateByOperator copy() { + return new BigIntegerCumSumOperator(pair); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ByteCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ByteCumSumOperator.java index 2bde452a67b..b1cbf0a8e34 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ByteCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ByteCumSumOperator.java @@ -1,23 +1,21 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortCumSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharCumSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.sum; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ByteChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_BYTE; +import static io.deephaven.util.QueryConstants.NULL_LONG; public class ByteCumSumOperator extends BaseLongUpdateByOperator { // region extra-fields @@ -51,18 +49,26 @@ public void push(int pos, int count) { } } - public ByteCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - ,final byte nullValue - // endregion extra-constructor-args + public ByteCumSumOperator(@NotNull final MatchPair pair + // region extra-constructor-args + ,final byte nullValue + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor this.nullValue = nullValue; // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ByteCumSumOperator(pair + // region extra-copy-args + , nullValue + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/CharCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/CharCumSumOperator.java new file mode 100644 index 00000000000..22734bff3dd --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/CharCumSumOperator.java @@ -0,0 +1,68 @@ +package io.deephaven.engine.table.impl.updateby.sum; + +import io.deephaven.base.verify.Assert; +import io.deephaven.chunk.CharChunk; +import io.deephaven.chunk.Chunk; +import io.deephaven.chunk.attributes.Values; +import io.deephaven.engine.table.impl.MatchPair; +import io.deephaven.engine.table.impl.updateby.UpdateByOperator; +import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; +import org.jetbrains.annotations.NotNull; + +import static io.deephaven.util.QueryConstants.NULL_CHAR; +import static io.deephaven.util.QueryConstants.NULL_LONG; + +public class CharCumSumOperator extends BaseLongUpdateByOperator { + // region extra-fields + // endregion extra-fields + + protected class Context extends BaseLongUpdateByOperator.Context { + public CharChunk charValueChunk; + + protected Context(final int chunkSize) { + super(chunkSize); + } + + @Override + public void setValueChunks(@NotNull final Chunk[] valueChunks) { + charValueChunk = valueChunks[0].asCharChunk(); + } + + @Override + public void push(int pos, int count) { + Assert.eq(count, "push count", 1); + + // read the value from the values chunk + final char currentVal = charValueChunk.get(pos); + + if(curVal == NULL_LONG) { + curVal = currentVal == NULL_CHAR ? NULL_LONG : currentVal; + } else if (currentVal != NULL_CHAR) { + curVal += currentVal; + } + } + } + + public CharCumSumOperator(@NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args + ) { + super(pair, new String[] { pair.rightColumn }); + // region constructor + // endregion constructor + } + + @Override + public UpdateByOperator copy() { + return new CharCumSumOperator(pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + + @NotNull + @Override + public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { + return new Context(affectedChunkSize); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/DoubleCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/DoubleCumSumOperator.java index 2090a1a7e8d..ca83d248d99 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/DoubleCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/DoubleCumSumOperator.java @@ -12,15 +12,11 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseDoubleUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_DOUBLE; public class DoubleCumSumOperator extends BaseDoubleUpdateByOperator { - // region extra-fields - // endregion extra-fields protected class Context extends BaseDoubleUpdateByOperator.Context { public DoubleChunk doubleValueChunk; @@ -49,14 +45,13 @@ public void push(int pos, int count) { } } - public DoubleCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); - // region constructor - // endregion constructor + public DoubleCumSumOperator(@NotNull final MatchPair pair) { + super(pair, new String[] { pair.rightColumn }); + } + + @Override + public UpdateByOperator copy() { + return new DoubleCumSumOperator(pair); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/FloatCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/FloatCumSumOperator.java index 6f37549e40d..5316df2d196 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/FloatCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/FloatCumSumOperator.java @@ -7,15 +7,11 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseFloatUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_FLOAT; public class FloatCumSumOperator extends BaseFloatUpdateByOperator { - // region extra-fields - // endregion extra-fields protected class Context extends BaseFloatUpdateByOperator.Context { public FloatChunk floatValueChunk; @@ -44,14 +40,13 @@ public void push(int pos, int count) { } } - public FloatCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args - ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); - // region constructor - // endregion constructor + public FloatCumSumOperator(@NotNull final MatchPair pair) { + super(pair, new String[] { pair.rightColumn }); + } + + @Override + public UpdateByOperator copy() { + return new FloatCumSumOperator(pair); } @NotNull diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/IntCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/IntCumSumOperator.java index ec6d7bcddf5..c6d9936d3a3 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/IntCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/IntCumSumOperator.java @@ -1,23 +1,21 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortCumSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharCumSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.sum; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.IntChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_INT; +import static io.deephaven.util.QueryConstants.NULL_LONG; public class IntCumSumOperator extends BaseLongUpdateByOperator { // region extra-fields @@ -50,16 +48,23 @@ public void push(int pos, int count) { } } - public IntCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public IntCumSumOperator(@NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new IntCumSumOperator(pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/LongCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/LongCumSumOperator.java index 4008ad99a22..704e6e287d5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/LongCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/LongCumSumOperator.java @@ -1,20 +1,18 @@ /* * --------------------------------------------------------------------------------------------------------------------- - * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit ShortCumSumOperator and regenerate + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharCumSumOperator and regenerate * --------------------------------------------------------------------------------------------------------------------- */ package io.deephaven.engine.table.impl.updateby.sum; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.LongChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_LONG; @@ -50,16 +48,23 @@ public void push(int pos, int count) { } } - public LongCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public LongCumSumOperator(@NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new LongCumSumOperator(pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ShortCumSumOperator.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ShortCumSumOperator.java index 1f49fea32fa..8fb989e0ad9 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ShortCumSumOperator.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ShortCumSumOperator.java @@ -1,18 +1,21 @@ +/* + * --------------------------------------------------------------------------------------------------------------------- + * AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharCumSumOperator and regenerate + * --------------------------------------------------------------------------------------------------------------------- + */ package io.deephaven.engine.table.impl.updateby.sum; import io.deephaven.base.verify.Assert; -import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ShortChunk; +import io.deephaven.chunk.Chunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.updateby.UpdateByOperator; import io.deephaven.engine.table.impl.updateby.internal.BaseLongUpdateByOperator; -import io.deephaven.engine.table.impl.util.RowRedirection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import static io.deephaven.util.QueryConstants.NULL_LONG; import static io.deephaven.util.QueryConstants.NULL_SHORT; +import static io.deephaven.util.QueryConstants.NULL_LONG; public class ShortCumSumOperator extends BaseLongUpdateByOperator { // region extra-fields @@ -45,16 +48,23 @@ public void push(int pos, int count) { } } - public ShortCumSumOperator(@NotNull final MatchPair pair, - @Nullable final RowRedirection rowRedirection - // region extra-constructor-args - // endregion extra-constructor-args + public ShortCumSumOperator(@NotNull final MatchPair pair + // region extra-constructor-args + // endregion extra-constructor-args ) { - super(pair, new String[] { pair.rightColumn }, rowRedirection); + super(pair, new String[] { pair.rightColumn }); // region constructor // endregion constructor } + @Override + public UpdateByOperator copy() { + return new ShortCumSumOperator(pair + // region extra-copy-args + // endregion extra-copy-args + ); + } + @NotNull @Override public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestCumSum.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestCumSum.java index 6d97a6b8439..39b851aa5ad 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestCumSum.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestCumSum.java @@ -11,6 +11,8 @@ import io.deephaven.engine.testutil.GenerateTableUpdates; import io.deephaven.engine.testutil.EvalNugget; import io.deephaven.engine.testutil.TstUtils; +import io.deephaven.engine.testutil.generator.CharGenerator; +import io.deephaven.engine.testutil.generator.TestDataGenerator; import io.deephaven.function.Numeric; import io.deephaven.test.types.OutOfBandTest; import org.jetbrains.annotations.NotNull; @@ -40,6 +42,7 @@ public class TestCumSum extends BaseUpdateByTest { @Test public void testStaticZeroKey() { final QueryTable t = createTestTable(100000, false, false, false, 0x31313131).t; + t.setRefreshing(false); final Table summed = t.updateBy(UpdateByOperation.CumSum()); @@ -125,7 +128,9 @@ public void testBucketedAppendOnly() { } private void doTestAppendOnly(boolean bucketed) { - final CreateResult result = createTestTable(10000, bucketed, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, bucketed, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; t.setAttribute(Table.ADD_ONLY_TABLE_ATTRIBUTE, Boolean.TRUE); @@ -149,7 +154,9 @@ protected Table e() { @Test public void testZeroKeyGeneralTicking() { - final CreateResult result = createTestTable(100, false, false, true, 0x31313131); + final CreateResult result = createTestTable(100, false, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -171,7 +178,9 @@ protected Table e() { @Test public void testBucketedGeneralTicking() { - final CreateResult result = createTestTable(100, true, false, true, 0x31313131); + final CreateResult result = createTestTable(100, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingFormula.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingFormula.java new file mode 100644 index 00000000000..34a54defeff --- /dev/null +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingFormula.java @@ -0,0 +1,1316 @@ +package io.deephaven.engine.table.impl.updateby; + +import io.deephaven.api.updateby.UpdateByControl; +import io.deephaven.api.updateby.UpdateByOperation; +import io.deephaven.engine.context.ExecutionContext; +import io.deephaven.engine.context.QueryScope; +import io.deephaven.engine.table.PartitionedTable; +import io.deephaven.engine.table.Table; +import io.deephaven.engine.table.impl.QueryTable; +import io.deephaven.engine.testutil.ControlledUpdateGraph; +import io.deephaven.engine.testutil.EvalNugget; +import io.deephaven.engine.testutil.GenerateTableUpdates; +import io.deephaven.engine.testutil.TstUtils; +import io.deephaven.engine.testutil.generator.*; +import io.deephaven.engine.util.TableDiff; +import io.deephaven.test.types.OutOfBandTest; +import io.deephaven.time.DateTimeUtils; +import io.deephaven.vector.ObjectVector; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.Duration; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + +import static io.deephaven.engine.testutil.GenerateTableUpdates.generateAppends; +import static io.deephaven.engine.testutil.testcase.RefreshingTableTestCase.simulateShiftAwareStep; +import static io.deephaven.function.Basic.isNull; + +@Category(OutOfBandTest.class) +public class TestRollingFormula extends BaseUpdateByTest { + /** + * These are used in the static tests and leverage the Numeric class functions for verification. Additional tests + * are performed on BigInteger/BigDecimal columns as well. + */ + final String[] primitiveColumns = new String[] { + "byteCol", + "shortCol", + "intCol", + "longCol", + "floatCol", + "doubleCol", + }; + + /** + * These are used in the ticking table evaluations where we verify dynamic vs static tables. + */ + final String[] columns = new String[] { + "charCol", + "byteCol", + "shortCol", + "intCol", + "longCol", + "floatCol", + "doubleCol", + "bigIntCol", + "bigDecimalCol", + }; + + final int STATIC_TABLE_SIZE = 1000; + final int DYNAMIC_TABLE_SIZE = 100; + final int DYNAMIC_UPDATE_SIZE = 10; + final int DYNAMIC_UPDATE_STEPS = 20; + + final Function, BigDecimal> sumBigDecimal = bigDecimalObjectVector -> { + if (bigDecimalObjectVector == null) { + return null; + } + + BigDecimal sum = BigDecimal.ZERO; + final long n = bigDecimalObjectVector.size(); + + for (long i = 0; i < n; i++) { + BigDecimal val = bigDecimalObjectVector.get(i); + if (!isNull(val)) { + sum = sum.add(val); + } + } + return sum; + }; + + final Function, BigInteger> sumBigInteger = bigIntegerObjectVector -> { + if (bigIntegerObjectVector == null) { + return null; + } + + BigInteger sum = BigInteger.ZERO; + final long n = bigIntegerObjectVector.size(); + + for (long i = 0; i < n; i++) { + BigInteger val = bigIntegerObjectVector.get(i); + if (!isNull(val)) { + sum = sum.add(val); + } + } + return sum; + }; + + // region Static Zero Key Tests + + @Test + public void testStaticZeroKeyRev() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestStaticZeroKey(prevTicks, postTicks); + } + + @Test + public void testStaticZeroKeyRevExclusive() { + final int prevTicks = 100; + final int postTicks = -50; + + doTestStaticZeroKey(prevTicks, postTicks); + } + + @Test + public void testStaticZeroKeyFwd() { + final int prevTicks = 0; + final int postTicks = 100; + + doTestStaticZeroKey(prevTicks, postTicks); + } + + @Test + public void testStaticZeroKeyFwdExclusive() { + final int prevTicks = -50; + final int postTicks = 100; + + doTestStaticZeroKey(prevTicks, postTicks); + } + + @Test + public void testStaticZeroKeyFwdRevWindow() { + final int prevTicks = 100; + final int postTicks = 100; + + doTestStaticZeroKey(prevTicks, postTicks); + } + + @Test + public void testStaticZeroKeyTimedRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ZERO; + + doTestStaticZeroKeyTimed(prevTime, postTime); + } + + @Test + public void testStaticZeroKeyTimedRevExclusive() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(-5); + + doTestStaticZeroKeyTimed(prevTime, postTime); + } + + @Test + public void testStaticZeroKeyTimedFwd() { + final Duration prevTime = Duration.ZERO; + final Duration postTime = Duration.ofMinutes(10); + + doTestStaticZeroKeyTimed(prevTime, postTime); + } + + @Test + public void testStaticZeroKeyTimedFwdExclusive() { + final Duration prevTime = Duration.ofMinutes(-5); + final Duration postTime = Duration.ofMinutes(10); + + doTestStaticZeroKeyTimed(prevTime, postTime); + } + + @Test + public void testStaticZeroKeyTimedFwdRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(10); + + doTestStaticZeroKeyTimed(prevTime, postTime); + } + + private void doTestStaticZeroKey(final int prevTicks, final int postTicks) { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, false, false, false, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}).t; + + Table actual; + Table expected; + String[] updateStrings; + String[] precomputeColumns; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // sum vs. RollingGroup + sum (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t + .updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=sum(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // avg vs. RollingGroup + avg (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t + .updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x + 1)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // complex problem + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + " * " + c + " + " + c).toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(x)", "x", primitiveColumns)); + expected = t.updateBy(UpdateByOperation.RollingCount(prevTicks, postTicks, primitiveColumns)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Avg vs. RollingAvg + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x)", "x", primitiveColumns)); + + // avg return Double.NaN when the window is empty, so we should adjust our comparison table. + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=isNull(" + c + ") ? Double.NaN : " + c) + .toArray(String[]::new); + expected = t.updateBy(UpdateByOperation.RollingAvg(prevTicks, postTicks, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Identity vs. RollingGroup + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "x", "x", columns)); + expected = t.updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, columns)) + .update(Arrays.stream(columns).map(c -> c + "=" + c + ".getDirect()").toArray(String[]::new)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // BigDecimal / BigInteger custom sum function vs. RollingSum + //////////////////////////////////////////////////////////////////////////////////////////////////// + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + actual = t.updateBy(List.of( + UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", "x", "bigDecimalCol"), + UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigInteger.apply(x)", "x", "bigIntCol"))); + + // RollingSum returns null when the window is empty, replace that with zeros. + expected = t.updateBy(UpdateByOperation.RollingSum(prevTicks, postTicks, "bigDecimalCol", "bigIntCol")) + .update("bigDecimalCol=(Object)(bigDecimalCol == null ? java.math.BigDecimal.ZERO : bigDecimalCol)", + "bigIntCol=(Object)(bigIntCol == null ? java.math.BigInteger.ZERO : bigIntCol)"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Boolean count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(ifelse(x, (long)1, (long)0))", + "x", "boolCol")); + expected = t.updateBy(UpdateByOperation.RollingCount(prevTicks, postTicks, "boolCol")); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + } + + private void doTestStaticZeroKeyTimed(final Duration prevTime, final Duration postTime) { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, false, false, false, 0xFFFABBBC, + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( + DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}).t; + + Table actual; + Table expected; + String[] updateStrings; + String[] precomputeColumns; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // sum vs. RollingGroup + sum (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=sum(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // avg vs. RollingGroup + avg (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x + 1)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // complex problem + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", primitiveColumns)); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + " * " + c + " + " + c).toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "count(x)", "x", primitiveColumns)); + expected = t.updateBy(UpdateByOperation.RollingCount("ts", prevTime, postTime, primitiveColumns)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Avg vs. RollingAvg + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t + .updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x)", "x", primitiveColumns)); + + // avg return Double.NaN when the window is empty, so we should adjust our comparison table. + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=isNull(" + c + ") ? Double.NaN : " + c) + .toArray(String[]::new); + expected = t.updateBy(UpdateByOperation.RollingAvg("ts", prevTime, postTime, primitiveColumns)) + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Identity vs. RollingGroup + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "x", "x", columns)); + expected = t.updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, columns)) + .update(Arrays.stream(columns).map(c -> c + "=" + c + ".getDirect()").toArray(String[]::new)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // BigDecimal / BigInteger custom sum function vs. RollingSum + //////////////////////////////////////////////////////////////////////////////////////////////////// + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + actual = t.updateBy(List.of( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sumBigDecimal.apply(x)", "x", + "bigDecimalCol"), + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sumBigInteger.apply(x)", "x", + "bigIntCol"))); + + // RollingSum returns null when the window is empty, replace that with zeros. + expected = t.updateBy(UpdateByOperation.RollingSum("ts", prevTime, postTime, "bigDecimalCol", "bigIntCol")) + .update("bigDecimalCol=(Object)(bigDecimalCol == null ? java.math.BigDecimal.ZERO : bigDecimalCol)", + "bigIntCol=(Object)(bigIntCol == null ? java.math.BigInteger.ZERO : bigIntCol)"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Boolean count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "count(ifelse(x, (long)1, (long)0))", "x", "boolCol")); + expected = t.updateBy(UpdateByOperation.RollingCount("ts", prevTime, postTime, "boolCol")); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + } + + // endregion + + // region Static Bucketed Tests + + @Test + public void testStaticGroupedBucketed() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestStaticBucketed(true, prevTicks, postTicks); + } + + @Test + public void testStaticGroupedBucketedTimed() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + doTestStaticBucketedTimed(true, prevTime, postTime); + } + + @Test + public void testStaticBucketedRev() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestStaticBucketed(false, prevTicks, postTicks); + } + + @Test + public void testStaticBucketedRevExclusive() { + final int prevTicks = 100; + final int postTicks = -50; + + doTestStaticBucketed(false, prevTicks, postTicks); + } + + @Test + public void testStaticBucketedFwd() { + final int prevTicks = 0; + final int postTicks = 100; + + doTestStaticBucketed(false, prevTicks, postTicks); + } + + @Test + public void testStaticBucketedFwdExclusive() { + final int prevTicks = -50; + final int postTicks = 100; + + doTestStaticBucketed(false, prevTicks, postTicks); + } + + @Test + public void testStaticBucketedTimedRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + doTestStaticBucketedTimed(false, prevTime, postTime); + } + + @Test + public void testStaticBucketedTimedRevExclusive() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(-5); + + doTestStaticBucketedTimed(false, prevTime, postTime); + } + + @Test + public void testStaticBucketedTimedFwd() { + final Duration prevTime = Duration.ofMinutes(0); + final Duration postTime = Duration.ofMinutes(10); + + doTestStaticBucketedTimed(false, prevTime, postTime); + } + + @Test + public void testStaticBucketedTimedFwdExclusive() { + final Duration prevTime = Duration.ofMinutes(-5); + final Duration postTime = Duration.ofMinutes(10); + + doTestStaticBucketedTimed(false, prevTime, postTime); + } + + @Test + public void testStaticBucketedFwdRevWindowTimed() { + final Duration prevTime = Duration.ofMinutes(5); + final Duration postTime = Duration.ofMinutes(5); + + doTestStaticBucketedTimed(false, prevTime, postTime); + } + + private void doTestStaticBucketed(boolean grouped, int prevTicks, int postTicks) { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, true, grouped, false, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}).t; + + Table actual; + Table expected; + String[] updateStrings; + String[] precomputeColumns; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // sum vs. RollingGroup + sum (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", primitiveColumns), + "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=sum(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // avg vs. RollingGroup + avg (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x + 1)", "x", primitiveColumns), + "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // complex problem + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", primitiveColumns), "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + " * " + c + " + " + c).toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(x)", "x", primitiveColumns), + "Sym"); + expected = t.updateBy(UpdateByOperation.RollingCount(prevTicks, postTicks, primitiveColumns), "Sym"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Avg vs. RollingAvg + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x)", "x", primitiveColumns), + "Sym"); + + // avg return Double.NaN when the window is empty, so we should adjust our comparison table. + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=isNull(" + c + ") ? Double.NaN : " + c) + .toArray(String[]::new); + expected = t.updateBy(UpdateByOperation.RollingAvg(prevTicks, postTicks, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Identity vs. RollingGroup + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "x", "x", columns)); + expected = t.updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, columns)) + .update(Arrays.stream(columns).map(c -> c + "=" + c + ".getDirect()").toArray(String[]::new)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // BigDecimal / BigInteger custom sum function vs. RollingSum + //////////////////////////////////////////////////////////////////////////////////////////////////// + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + actual = t.updateBy(List.of( + UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", "x", "bigDecimalCol"), + UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigInteger.apply(x)", "x", "bigIntCol")), + "Sym"); + + // RollingSum returns null when the window is empty, replace that with zeros. + expected = t.updateBy(UpdateByOperation.RollingSum(prevTicks, postTicks, "bigDecimalCol", "bigIntCol"), "Sym") + .update("bigDecimalCol=(Object)(bigDecimalCol == null ? java.math.BigDecimal.ZERO : bigDecimalCol)", + "bigIntCol=(Object)(bigIntCol == null ? java.math.BigInteger.ZERO : bigIntCol)"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Boolean count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(ifelse(x, (long)1, (long)0))", + "x", "boolCol"), "Sym"); + expected = t.updateBy(UpdateByOperation.RollingCount(prevTicks, postTicks, "boolCol"), "Sym"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + } + + private void doTestStaticBucketedTimed(boolean grouped, Duration prevTime, Duration postTime) { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, true, grouped, false, 0xFFFABBBC, + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( + DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}).t; + + Table actual; + Table expected; + String[] updateStrings; + String[] precomputeColumns; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // sum vs. RollingGroup + sum (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", primitiveColumns), "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=sum(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // avg vs. RollingGroup + avg (pre-adding 1 to each value) + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x + 1)", "x", primitiveColumns), "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + "+1").toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // complex problem + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", primitiveColumns), + "Sym"); + + precomputeColumns = Arrays.stream(primitiveColumns) + .map(c -> c + "=" + c + " * " + c + " + " + c).toArray(String[]::new); + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=avg(" + c + ")").toArray(String[]::new); + expected = t.update(precomputeColumns) + .updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "count(x)", "x", primitiveColumns), "Sym"); + expected = t.updateBy(UpdateByOperation.RollingCount("ts", prevTime, postTime, primitiveColumns), "Sym"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Avg vs. RollingAvg + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x)", "x", primitiveColumns), + "Sym"); + + // avg return Double.NaN when the window is empty, so we should adjust our comparison table. + updateStrings = Arrays.stream(primitiveColumns).map(c -> c + "=isNull(" + c + ") ? Double.NaN : " + c) + .toArray(String[]::new); + expected = t.updateBy(UpdateByOperation.RollingAvg("ts", prevTime, postTime, primitiveColumns), "Sym") + .update(updateStrings); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Identity vs. RollingGroup + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "x", "x", columns)); + expected = t.updateBy(UpdateByOperation.RollingGroup("ts", prevTime, postTime, columns)) + .update(Arrays.stream(columns).map(c -> c + "=" + c + ".getDirect()").toArray(String[]::new)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // BigDecimal / BigInteger custom sum function vs. RollingSum + //////////////////////////////////////////////////////////////////////////////////////////////////// + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + actual = t.updateBy(List.of( + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sumBigDecimal.apply(x)", "x", + "bigDecimalCol"), + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sumBigInteger.apply(x)", "x", "bigIntCol")), + "Sym"); + + // RollingSum returns null when the window is empty, replace that with zeros. + expected = t + .updateBy(UpdateByOperation.RollingSum("ts", prevTime, postTime, "bigDecimalCol", "bigIntCol"), "Sym") + .update("bigDecimalCol=(Object)(bigDecimalCol == null ? java.math.BigDecimal.ZERO : bigDecimalCol)", + "bigIntCol=(Object)(bigIntCol == null ? java.math.BigInteger.ZERO : bigIntCol)"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Boolean count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "count(ifelse(x, (long)1, (long)0))", "x", "boolCol"), "Sym"); + expected = t.updateBy(UpdateByOperation.RollingCount("ts", prevTime, postTime, "boolCol"), "Sym"); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + } + + // endregion + + // region Append Only Tests + + @Test + public void testZeroKeyAppendOnlyRev() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestAppendOnly(false, prevTicks, postTicks); + } + + @Test + public void testZeroKeyAppendOnlyRevExclusive() { + final int prevTicks = 100; + final int postTicks = -50; + + doTestAppendOnly(false, prevTicks, postTicks); + } + + @Test + public void testZeroKeyAppendOnlyFwd() { + final int prevTicks = 0; + final int postTicks = 100; + + doTestAppendOnly(false, prevTicks, postTicks); + } + + @Test + public void testZeroKeyAppendOnlyFwdExclusive() { + final int prevTicks = -50; + final int postTicks = 100; + + doTestAppendOnly(false, prevTicks, postTicks); + } + + @Test + public void testZeroKeyAppendOnlyFwdRev() { + final int prevTicks = 50; + final int postTicks = 50; + + doTestAppendOnly(false, prevTicks, postTicks); + } + + @Test + public void testBucketedAppendOnlyRev() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestAppendOnly(true, prevTicks, postTicks); + } + + @Test + public void testBucketedAppendOnlyRevExclusive() { + final int prevTicks = 100; + final int postTicks = -50; + + doTestAppendOnly(true, prevTicks, postTicks); + } + + @Test + public void testBucketedAppendOnlyFwd() { + final int prevTicks = 0; + final int postTicks = 100; + + doTestAppendOnly(true, prevTicks, postTicks); + } + + @Test + public void testBucketedAppendOnlyFwdExclusive() { + final int prevTicks = -50; + final int postTicks = 100; + + doTestAppendOnly(true, prevTicks, postTicks); + } + + @Test + public void testZeroKeyAppendOnlyTimedRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + doTestAppendOnlyTimed(false, prevTime, postTime); + } + + @Test + public void testZeroKeyAppendOnlyTimedRevExclusive() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(-5); + + doTestAppendOnlyTimed(false, prevTime, postTime); + } + + @Test + public void testZeroKeyAppendOnlyTimedFwd() { + final Duration prevTime = Duration.ofMinutes(0); + final Duration postTime = Duration.ofMinutes(10); + + doTestAppendOnlyTimed(false, prevTime, postTime); + } + + @Test + public void testZeroKeyAppendOnlyTimedFwdExclusive() { + final Duration prevTime = Duration.ofMinutes(-5); + final Duration postTime = Duration.ofMinutes(10); + + doTestAppendOnlyTimed(false, prevTime, postTime); + } + + @Test + public void testZeroKeyAppendOnlyTimedFwdRev() { + final Duration prevTime = Duration.ofMinutes(5); + final Duration postTime = Duration.ofMinutes(5); + + doTestAppendOnlyTimed(false, prevTime, postTime); + } + + @Test + public void testBucketedAppendOnlyTimedRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + doTestAppendOnlyTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedAppendOnlyTimedRevExclusive() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(-5); + + doTestAppendOnlyTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedAppendOnlyTimedFwd() { + final Duration prevTime = Duration.ofMinutes(0); + final Duration postTime = Duration.ofMinutes(10); + + doTestAppendOnlyTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedAppendOnlyTimedFwdExclusive() { + final Duration prevTime = Duration.ofMinutes(-5); + final Duration postTime = Duration.ofMinutes(10); + + doTestAppendOnlyTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedAppendOnlyTimedFwdRev() { + final Duration prevTime = Duration.ofMinutes(5); + final Duration postTime = Duration.ofMinutes(5); + + doTestAppendOnlyTimed(true, prevTime, postTime); + } + + private void doTestAppendOnly(boolean bucketed, int prevTicks, int postTicks) { + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, bucketed, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); + final QueryTable t = result.t; + t.setAttribute(Table.APPEND_ONLY_TABLE_ATTRIBUTE, Boolean.TRUE); + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", + "x", "bigDecimalCol"), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", + "x", "bigDecimalCol"))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + ExecutionContext.getContext().getUpdateGraph().cast().runWithinUnitTestCycle( + () -> generateAppends(DYNAMIC_UPDATE_SIZE, billy, t, result.infos)); + TstUtils.validate("Table", nuggets); + } + } + + private void doTestAppendOnlyTimed(boolean bucketed, Duration prevTime, Duration postTime) { + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, bucketed, false, true, 0x31313131, + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( + DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}); + final QueryTable t = result.t; + t.setAttribute(Table.APPEND_ONLY_TABLE_ATTRIBUTE, Boolean.TRUE); + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "sumBigDecimal.apply(x)", "x", "bigDecimalCol"), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "sumBigDecimal.apply(x)", "x", "bigDecimalCol"))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + ExecutionContext.getContext().getUpdateGraph().cast().runWithinUnitTestCycle( + () -> generateAppends(DYNAMIC_UPDATE_SIZE, billy, t, result.infos)); + TstUtils.validate("Table", nuggets); + } + } + + // endregion Append Only Tests + + // region General Ticking Tests + + @Test + public void testZeroKeyGeneralTickingRev() { + final long prevTicks = 100; + final long fwdTicks = 0; + + doTestTicking(false, prevTicks, fwdTicks); + } + + @Test + public void testZeroKeyGeneralTickingRevExclusive() { + final long prevTicks = 100; + final long fwdTicks = -50; + + doTestTicking(false, prevTicks, fwdTicks); + } + + @Test + public void testZeroKeyGeneralTickingFwd() { + final long prevTicks = 0; + final long fwdTicks = 100; + + doTestTicking(false, prevTicks, fwdTicks); + } + + @Test + public void testZeroKeyGeneralTickingFwdExclusive() { + final long prevTicks = -50; + final long fwdTicks = 100; + + doTestTicking(false, prevTicks, fwdTicks); + } + + @Test + public void testBucketedGeneralTickingRev() { + final int prevTicks = 100; + final int postTicks = 0; + + doTestTicking(false, prevTicks, postTicks); + } + + @Test + public void testBucketedGeneralTickingRevExclusive() { + final int prevTicks = 100; + final int postTicks = -50; + + doTestTicking(true, prevTicks, postTicks); + } + + @Test + public void testBucketedGeneralTickingFwd() { + final int prevTicks = 0; + final int postTicks = 100; + + doTestTicking(true, prevTicks, postTicks); + } + + @Test + public void testBucketedGeneralTickingFwdExclusive() { + final int prevTicks = -50; + final int postTicks = 100; + + doTestTicking(true, prevTicks, postTicks); + } + + @Test + public void testBucketedGeneralTickingFwdRev() { + final int prevTicks = 50; + final int postTicks = 50; + + doTestTicking(true, prevTicks, postTicks); + } + + @Test + public void testBucketedGeneralTickingTimedRev() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + doTestTickingTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedGeneralTickingTimedRevExclusive() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(-5); + + doTestTickingTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedGeneralTickingTimedFwd() { + final Duration prevTime = Duration.ofMinutes(0); + final Duration postTime = Duration.ofMinutes(10); + + doTestTickingTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedGeneralTickingTimedFwdExclusive() { + final Duration prevTime = Duration.ofMinutes(-5); + final Duration postTime = Duration.ofMinutes(10); + + doTestTickingTimed(true, prevTime, postTime); + } + + @Test + public void testBucketedGeneralTickingTimedFwdRev() { + final Duration prevTime = Duration.ofMinutes(5); + final Duration postTime = Duration.ofMinutes(5); + + doTestTickingTimed(true, prevTime, postTime); + } + + private void doTestTicking(final boolean bucketed, final long prevTicks, final long postTicks) { + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, bucketed, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); + final QueryTable t = result.t; + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", + "x", "bigDecimalCol"), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "sumBigDecimal.apply(x)", + "x", "bigDecimalCol"))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + ExecutionContext.getContext().getUpdateGraph().cast().runWithinUnitTestCycle( + () -> GenerateTableUpdates.generateTableUpdates(DYNAMIC_UPDATE_SIZE, billy, t, result.infos)); + TstUtils.validate("Table - step " + ii, nuggets); + } + } + + private void doTestTickingTimed(final boolean bucketed, final Duration prevTime, final Duration postTime) { + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, bucketed, false, true, 0x31313131, + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( + DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}); + + final QueryTable t = result.t; + + QueryScope.addParam("sumBigDecimal", sumBigDecimal); + QueryScope.addParam("sumBigInteger", sumBigInteger); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", + primitiveColumns), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", + primitiveColumns))), + EvalNugget.from(() -> bucketed + ? t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "sumBigDecimal.apply(x)", "x", "bigDecimalCol"), "Sym") + : t.updateBy(UpdateByOperation.RollingFormula("ts", prevTime, postTime, + "sumBigDecimal.apply(x)", "x", "bigDecimalCol"))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + ExecutionContext.getContext().getUpdateGraph().cast().runWithinUnitTestCycle( + () -> GenerateTableUpdates.generateTableUpdates(DYNAMIC_UPDATE_SIZE, billy, t, result.infos)); + TstUtils.validate("Table - step " + ii, nuggets); + } + } + + @Test + public void testBucketedGeneralTickingRevRedirected() { + final int prevTicks = 100; + final int postTicks = 0; + + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); + final QueryTable t = result.t; + + final UpdateByControl control = UpdateByControl.builder().useRedirection(true).build(); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> t.updateBy(control, + UpdateByOperation.RollingFormula(prevTicks, postTicks, "sum(x + 1)", "x", primitiveColumns))), + EvalNugget.from(() -> t.updateBy(control, + UpdateByOperation.RollingFormula(prevTicks, postTicks, "avg(x * x + x)", "x", + primitiveColumns))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + try { + simulateShiftAwareStep(DYNAMIC_UPDATE_SIZE, billy, t, result.infos, nuggets); + } catch (Throwable ex) { + System.out.println("Crapped out on step " + ii); + throw ex; + } + } + } + + @Test + public void testBucketedGeneralTickingTimedRevRedirected() { + final Duration prevTime = Duration.ofMinutes(10); + final Duration postTime = Duration.ofMinutes(0); + + final CreateResult result = createTestTable(DYNAMIC_TABLE_SIZE, true, false, true, 0x31313131, + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( + DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}); + + final QueryTable t = result.t; + + final UpdateByControl control = UpdateByControl.builder().useRedirection(true).build(); + + final EvalNugget[] nuggets = new EvalNugget[] { + EvalNugget.from(() -> t.updateBy(control, + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "sum(x + 1)", "x", + primitiveColumns))), + EvalNugget.from(() -> t.updateBy(control, + UpdateByOperation.RollingFormula("ts", prevTime, postTime, "avg(x * x + x)", "x", + primitiveColumns))), + }; + + final Random billy = new Random(0xB177B177); + for (int ii = 0; ii < DYNAMIC_UPDATE_STEPS; ii++) { + try { + simulateShiftAwareStep(DYNAMIC_UPDATE_SIZE, billy, t, result.infos, nuggets); + } catch (Throwable ex) { + System.out.println("Crapped out on step " + ii); + throw ex; + } + } + } + + // endregion + + // region Special Tests + + @Test + public void testRepeatedColumnTypes() { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, false, false, false, 0x31313131, + new String[] {"intCol2", "longCol2"}, + new TestDataGenerator[] { + new IntGenerator(10, 100, .1), + new LongGenerator(10, 100, .1), + }).t; + + final int prevTicks = 100; + final int postTicks = 0; + + Table actual; + Table expected; + + String[] testColumns = new String[] {"intCol", "intCol2", "longCol", "longCol2"}; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Count vs. RollingCount + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(x)", "x", testColumns)); + expected = t.updateBy(UpdateByOperation.RollingCount(prevTicks, postTicks, testColumns)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Identity vs. RollingGroup + //////////////////////////////////////////////////////////////////////////////////////////////////// + + actual = t.updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "x", "x", testColumns)); + expected = t.updateBy(UpdateByOperation.RollingGroup(prevTicks, postTicks, testColumns)) + .update(Arrays.stream(testColumns).map(c -> c + "=" + c + ".getDirect()").toArray(String[]::new)); + + TstUtils.assertTableEquals(expected, actual, TableDiff.DiffItems.DoublesExact); + } + + @Test + public void testProxy() { + final QueryTable t = createTestTable(STATIC_TABLE_SIZE, true, false, false, 0x31313131).t; + + final int prevTicks = 100; + final int postTicks = 0; + + Table actual; + Table expected; + + PartitionedTable pt = t.partitionBy("Sym"); + actual = pt.proxy().updateBy(UpdateByOperation.RollingFormula(prevTicks, postTicks, "count(x)", "x", "intCol")) + .target().merge(); + } + + // endregion +} diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingSum.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingSum.java index 1193ade274b..64501f231af 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingSum.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestRollingSum.java @@ -13,6 +13,7 @@ import io.deephaven.engine.testutil.EvalNugget; import io.deephaven.engine.testutil.GenerateTableUpdates; import io.deephaven.engine.testutil.TstUtils; +import io.deephaven.engine.testutil.generator.CharGenerator; import io.deephaven.engine.testutil.generator.SortedInstantGenerator; import io.deephaven.engine.testutil.generator.TestDataGenerator; import io.deephaven.engine.util.TableDiff; @@ -505,7 +506,9 @@ public void testBucketedAppendOnlyFwdExclusive() { } private void doTestAppendOnly(boolean bucketed, int prevTicks, int postTicks) { - final CreateResult result = createTestTable(10000, bucketed, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, bucketed, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; t.setAttribute(Table.ADD_ONLY_TABLE_ATTRIBUTE, Boolean.TRUE); @@ -564,9 +567,10 @@ public void testZeroKeyAppendOnlyTimedFwdRev() { private void doTestAppendOnlyTimed(boolean bucketed, Duration prevTime, Duration postTime) { final CreateResult result = createTestTable(10000, bucketed, false, true, 0x31313131, - new String[] {"ts"}, new TestDataGenerator[] {new SortedInstantGenerator( + new String[] {"ts", "charCol"}, new TestDataGenerator[] {new SortedInstantGenerator( DateTimeUtils.parseInstant("2022-03-09T09:00:00.000 NY"), - DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY"))}); + DateTimeUtils.parseInstant("2022-03-09T16:30:00.000 NY")), + new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; t.setAttribute(Table.ADD_ONLY_TABLE_ATTRIBUTE, Boolean.TRUE); @@ -627,7 +631,9 @@ public void testBucketedAppendOnlyTimedFwdRev() { @Test public void testZeroKeyGeneralTickingRev() { - final CreateResult result = createTestTable(10000, false, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, false, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final long prevTicks = 100; @@ -652,7 +658,9 @@ protected Table e() { @Test public void testZeroKeyGeneralTickingRevExclusive() { - final CreateResult result = createTestTable(10000, false, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, false, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final long prevTicks = 100; @@ -677,7 +685,9 @@ protected Table e() { @Test public void testZeroKeyGeneralTickingFwd() { - final CreateResult result = createTestTable(10000, false, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, false, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -699,7 +709,9 @@ protected Table e() { @Test public void testZeroKeyGeneralTickingFwdExclusive() { - final CreateResult result = createTestTable(10000, false, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, false, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -724,7 +736,9 @@ public void testBucketedGeneralTickingRev() { final int prevTicks = 100; final int postTicks = 0; - final CreateResult result = createTestTable(10000, true, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -752,7 +766,9 @@ public void testBucketedGeneralTickingRevExclusive() { final int prevTicks = 100; final int postTicks = -50; - final CreateResult result = createTestTable(10000, true, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -780,7 +796,9 @@ public void testBucketedGeneralTickingFwd() { final int prevTicks = 0; final int postTicks = 100; - final CreateResult result = createTestTable(10000, true, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -808,7 +826,9 @@ public void testBucketedGeneralTickingFwdExclusive() { final int prevTicks = -50; final int postTicks = 100; - final CreateResult result = createTestTable(10000, true, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { @@ -836,7 +856,9 @@ public void testBucketedGeneralTickingFwdRev() { final int prevTicks = 50; final int postTicks = 50; - final CreateResult result = createTestTable(10000, true, false, true, 0x31313131); + final CreateResult result = createTestTable(10000, true, false, true, 0x31313131, + new String[] {"charCol"}, + new TestDataGenerator[] {new CharGenerator('A', 'z', 0.1)}); final QueryTable t = result.t; final EvalNugget[] nuggets = new EvalNugget[] { diff --git a/go/internal/proto/table/table.pb.go b/go/internal/proto/table/table.pb.go index eade05eedd5..2650ea00c80 100644 --- a/go/internal/proto/table/table.pb.go +++ b/go/internal/proto/table/table.pb.go @@ -5928,6 +5928,7 @@ type UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec struct { // *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingCount // *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingStd // *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingWavg + // *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingFormula Type isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type `protobuf_oneof:"type"` } @@ -6110,6 +6111,13 @@ func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec) GetRolli return nil } +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec) GetRollingFormula() *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula { + if x, ok := x.GetType().(*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingFormula); ok { + return x.RollingFormula + } + return nil +} + type isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type interface { isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type() } @@ -6194,6 +6202,10 @@ type UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingWavg s RollingWavg *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg `protobuf:"bytes,20,opt,name=rolling_wavg,json=rollingWavg,proto3,oneof"` } +type UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingFormula struct { + RollingFormula *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula `protobuf:"bytes,21,opt,name=rolling_formula,json=rollingFormula,proto3,oneof"` +} + func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Sum) isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type() { } @@ -6254,6 +6266,9 @@ func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingStd) func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingWavg) isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type() { } +func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingFormula) isUpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_Type() { +} + type UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByCumulativeSum struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7283,6 +7298,78 @@ func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByR return "" } +type UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ReverseWindowScale *UpdateByWindowScale `protobuf:"bytes,1,opt,name=reverse_window_scale,json=reverseWindowScale,proto3" json:"reverse_window_scale,omitempty"` + ForwardWindowScale *UpdateByWindowScale `protobuf:"bytes,2,opt,name=forward_window_scale,json=forwardWindowScale,proto3" json:"forward_window_scale,omitempty"` + Formula string `protobuf:"bytes,3,opt,name=formula,proto3" json:"formula,omitempty"` + ParamToken string `protobuf:"bytes,4,opt,name=param_token,json=paramToken,proto3" json:"param_token,omitempty"` +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) Reset() { + *x = UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula{} + if protoimpl.UnsafeEnabled { + mi := &file_deephaven_proto_table_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) ProtoMessage() { +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) ProtoReflect() protoreflect.Message { + mi := &file_deephaven_proto_table_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula.ProtoReflect.Descriptor instead. +func (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) Descriptor() ([]byte, []int) { + return file_deephaven_proto_table_proto_rawDescGZIP(), []int{13, 1, 0, 0, 20} +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) GetReverseWindowScale() *UpdateByWindowScale { + if x != nil { + return x.ReverseWindowScale + } + return nil +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) GetForwardWindowScale() *UpdateByWindowScale { + if x != nil { + return x.ForwardWindowScale + } + return nil +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) GetFormula() string { + if x != nil { + return x.Formula + } + return "" +} + +func (x *UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula) GetParamToken() string { + if x != nil { + return x.ParamToken + } + return "" +} + type ComboAggregateRequest_Aggregate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7298,7 +7385,7 @@ type ComboAggregateRequest_Aggregate struct { func (x *ComboAggregateRequest_Aggregate) Reset() { *x = ComboAggregateRequest_Aggregate{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[87] + mi := &file_deephaven_proto_table_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7311,7 +7398,7 @@ func (x *ComboAggregateRequest_Aggregate) String() string { func (*ComboAggregateRequest_Aggregate) ProtoMessage() {} func (x *ComboAggregateRequest_Aggregate) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[87] + mi := &file_deephaven_proto_table_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7377,7 +7464,7 @@ type AggSpec_AggSpecApproximatePercentile struct { func (x *AggSpec_AggSpecApproximatePercentile) Reset() { *x = AggSpec_AggSpecApproximatePercentile{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[88] + mi := &file_deephaven_proto_table_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7390,7 +7477,7 @@ func (x *AggSpec_AggSpecApproximatePercentile) String() string { func (*AggSpec_AggSpecApproximatePercentile) ProtoMessage() {} func (x *AggSpec_AggSpecApproximatePercentile) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[88] + mi := &file_deephaven_proto_table_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7432,7 +7519,7 @@ type AggSpec_AggSpecCountDistinct struct { func (x *AggSpec_AggSpecCountDistinct) Reset() { *x = AggSpec_AggSpecCountDistinct{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[89] + mi := &file_deephaven_proto_table_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7445,7 +7532,7 @@ func (x *AggSpec_AggSpecCountDistinct) String() string { func (*AggSpec_AggSpecCountDistinct) ProtoMessage() {} func (x *AggSpec_AggSpecCountDistinct) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[89] + mi := &file_deephaven_proto_table_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7480,7 +7567,7 @@ type AggSpec_AggSpecDistinct struct { func (x *AggSpec_AggSpecDistinct) Reset() { *x = AggSpec_AggSpecDistinct{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[90] + mi := &file_deephaven_proto_table_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7493,7 +7580,7 @@ func (x *AggSpec_AggSpecDistinct) String() string { func (*AggSpec_AggSpecDistinct) ProtoMessage() {} func (x *AggSpec_AggSpecDistinct) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[90] + mi := &file_deephaven_proto_table_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7530,7 +7617,7 @@ type AggSpec_AggSpecFormula struct { func (x *AggSpec_AggSpecFormula) Reset() { *x = AggSpec_AggSpecFormula{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[91] + mi := &file_deephaven_proto_table_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7543,7 +7630,7 @@ func (x *AggSpec_AggSpecFormula) String() string { func (*AggSpec_AggSpecFormula) ProtoMessage() {} func (x *AggSpec_AggSpecFormula) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[91] + mi := &file_deephaven_proto_table_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7586,7 +7673,7 @@ type AggSpec_AggSpecMedian struct { func (x *AggSpec_AggSpecMedian) Reset() { *x = AggSpec_AggSpecMedian{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[92] + mi := &file_deephaven_proto_table_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7599,7 +7686,7 @@ func (x *AggSpec_AggSpecMedian) String() string { func (*AggSpec_AggSpecMedian) ProtoMessage() {} func (x *AggSpec_AggSpecMedian) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[92] + mi := &file_deephaven_proto_table_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7637,7 +7724,7 @@ type AggSpec_AggSpecPercentile struct { func (x *AggSpec_AggSpecPercentile) Reset() { *x = AggSpec_AggSpecPercentile{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[93] + mi := &file_deephaven_proto_table_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7650,7 +7737,7 @@ func (x *AggSpec_AggSpecPercentile) String() string { func (*AggSpec_AggSpecPercentile) ProtoMessage() {} func (x *AggSpec_AggSpecPercentile) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[93] + mi := &file_deephaven_proto_table_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7692,7 +7779,7 @@ type AggSpec_AggSpecSorted struct { func (x *AggSpec_AggSpecSorted) Reset() { *x = AggSpec_AggSpecSorted{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[94] + mi := &file_deephaven_proto_table_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7705,7 +7792,7 @@ func (x *AggSpec_AggSpecSorted) String() string { func (*AggSpec_AggSpecSorted) ProtoMessage() {} func (x *AggSpec_AggSpecSorted) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[94] + mi := &file_deephaven_proto_table_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7740,7 +7827,7 @@ type AggSpec_AggSpecSortedColumn struct { func (x *AggSpec_AggSpecSortedColumn) Reset() { *x = AggSpec_AggSpecSortedColumn{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[95] + mi := &file_deephaven_proto_table_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7753,7 +7840,7 @@ func (x *AggSpec_AggSpecSortedColumn) String() string { func (*AggSpec_AggSpecSortedColumn) ProtoMessage() {} func (x *AggSpec_AggSpecSortedColumn) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[95] + mi := &file_deephaven_proto_table_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7789,7 +7876,7 @@ type AggSpec_AggSpecTDigest struct { func (x *AggSpec_AggSpecTDigest) Reset() { *x = AggSpec_AggSpecTDigest{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[96] + mi := &file_deephaven_proto_table_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7802,7 +7889,7 @@ func (x *AggSpec_AggSpecTDigest) String() string { func (*AggSpec_AggSpecTDigest) ProtoMessage() {} func (x *AggSpec_AggSpecTDigest) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[96] + mi := &file_deephaven_proto_table_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7839,7 +7926,7 @@ type AggSpec_AggSpecUnique struct { func (x *AggSpec_AggSpecUnique) Reset() { *x = AggSpec_AggSpecUnique{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[97] + mi := &file_deephaven_proto_table_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7852,7 +7939,7 @@ func (x *AggSpec_AggSpecUnique) String() string { func (*AggSpec_AggSpecUnique) ProtoMessage() {} func (x *AggSpec_AggSpecUnique) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[97] + mi := &file_deephaven_proto_table_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7904,7 +7991,7 @@ type AggSpec_AggSpecNonUniqueSentinel struct { func (x *AggSpec_AggSpecNonUniqueSentinel) Reset() { *x = AggSpec_AggSpecNonUniqueSentinel{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[98] + mi := &file_deephaven_proto_table_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7917,7 +8004,7 @@ func (x *AggSpec_AggSpecNonUniqueSentinel) String() string { func (*AggSpec_AggSpecNonUniqueSentinel) ProtoMessage() {} func (x *AggSpec_AggSpecNonUniqueSentinel) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[98] + mi := &file_deephaven_proto_table_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8089,7 +8176,7 @@ type AggSpec_AggSpecWeighted struct { func (x *AggSpec_AggSpecWeighted) Reset() { *x = AggSpec_AggSpecWeighted{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[99] + mi := &file_deephaven_proto_table_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8102,7 +8189,7 @@ func (x *AggSpec_AggSpecWeighted) String() string { func (*AggSpec_AggSpecWeighted) ProtoMessage() {} func (x *AggSpec_AggSpecWeighted) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[99] + mi := &file_deephaven_proto_table_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8134,7 +8221,7 @@ type AggSpec_AggSpecAbsSum struct { func (x *AggSpec_AggSpecAbsSum) Reset() { *x = AggSpec_AggSpecAbsSum{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[100] + mi := &file_deephaven_proto_table_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8147,7 +8234,7 @@ func (x *AggSpec_AggSpecAbsSum) String() string { func (*AggSpec_AggSpecAbsSum) ProtoMessage() {} func (x *AggSpec_AggSpecAbsSum) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[100] + mi := &file_deephaven_proto_table_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8172,7 +8259,7 @@ type AggSpec_AggSpecAvg struct { func (x *AggSpec_AggSpecAvg) Reset() { *x = AggSpec_AggSpecAvg{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[101] + mi := &file_deephaven_proto_table_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8185,7 +8272,7 @@ func (x *AggSpec_AggSpecAvg) String() string { func (*AggSpec_AggSpecAvg) ProtoMessage() {} func (x *AggSpec_AggSpecAvg) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[101] + mi := &file_deephaven_proto_table_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8210,7 +8297,7 @@ type AggSpec_AggSpecFirst struct { func (x *AggSpec_AggSpecFirst) Reset() { *x = AggSpec_AggSpecFirst{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[102] + mi := &file_deephaven_proto_table_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8223,7 +8310,7 @@ func (x *AggSpec_AggSpecFirst) String() string { func (*AggSpec_AggSpecFirst) ProtoMessage() {} func (x *AggSpec_AggSpecFirst) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[102] + mi := &file_deephaven_proto_table_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8248,7 +8335,7 @@ type AggSpec_AggSpecFreeze struct { func (x *AggSpec_AggSpecFreeze) Reset() { *x = AggSpec_AggSpecFreeze{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[103] + mi := &file_deephaven_proto_table_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8261,7 +8348,7 @@ func (x *AggSpec_AggSpecFreeze) String() string { func (*AggSpec_AggSpecFreeze) ProtoMessage() {} func (x *AggSpec_AggSpecFreeze) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[103] + mi := &file_deephaven_proto_table_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8286,7 +8373,7 @@ type AggSpec_AggSpecGroup struct { func (x *AggSpec_AggSpecGroup) Reset() { *x = AggSpec_AggSpecGroup{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[104] + mi := &file_deephaven_proto_table_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8299,7 +8386,7 @@ func (x *AggSpec_AggSpecGroup) String() string { func (*AggSpec_AggSpecGroup) ProtoMessage() {} func (x *AggSpec_AggSpecGroup) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[104] + mi := &file_deephaven_proto_table_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8324,7 +8411,7 @@ type AggSpec_AggSpecLast struct { func (x *AggSpec_AggSpecLast) Reset() { *x = AggSpec_AggSpecLast{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[105] + mi := &file_deephaven_proto_table_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8337,7 +8424,7 @@ func (x *AggSpec_AggSpecLast) String() string { func (*AggSpec_AggSpecLast) ProtoMessage() {} func (x *AggSpec_AggSpecLast) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[105] + mi := &file_deephaven_proto_table_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8362,7 +8449,7 @@ type AggSpec_AggSpecMax struct { func (x *AggSpec_AggSpecMax) Reset() { *x = AggSpec_AggSpecMax{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[106] + mi := &file_deephaven_proto_table_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8375,7 +8462,7 @@ func (x *AggSpec_AggSpecMax) String() string { func (*AggSpec_AggSpecMax) ProtoMessage() {} func (x *AggSpec_AggSpecMax) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[106] + mi := &file_deephaven_proto_table_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8400,7 +8487,7 @@ type AggSpec_AggSpecMin struct { func (x *AggSpec_AggSpecMin) Reset() { *x = AggSpec_AggSpecMin{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[107] + mi := &file_deephaven_proto_table_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8413,7 +8500,7 @@ func (x *AggSpec_AggSpecMin) String() string { func (*AggSpec_AggSpecMin) ProtoMessage() {} func (x *AggSpec_AggSpecMin) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[107] + mi := &file_deephaven_proto_table_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8438,7 +8525,7 @@ type AggSpec_AggSpecStd struct { func (x *AggSpec_AggSpecStd) Reset() { *x = AggSpec_AggSpecStd{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[108] + mi := &file_deephaven_proto_table_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8451,7 +8538,7 @@ func (x *AggSpec_AggSpecStd) String() string { func (*AggSpec_AggSpecStd) ProtoMessage() {} func (x *AggSpec_AggSpecStd) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[108] + mi := &file_deephaven_proto_table_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8476,7 +8563,7 @@ type AggSpec_AggSpecSum struct { func (x *AggSpec_AggSpecSum) Reset() { *x = AggSpec_AggSpecSum{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[109] + mi := &file_deephaven_proto_table_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8489,7 +8576,7 @@ func (x *AggSpec_AggSpecSum) String() string { func (*AggSpec_AggSpecSum) ProtoMessage() {} func (x *AggSpec_AggSpecSum) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[109] + mi := &file_deephaven_proto_table_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8514,7 +8601,7 @@ type AggSpec_AggSpecVar struct { func (x *AggSpec_AggSpecVar) Reset() { *x = AggSpec_AggSpecVar{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[110] + mi := &file_deephaven_proto_table_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8527,7 +8614,7 @@ func (x *AggSpec_AggSpecVar) String() string { func (*AggSpec_AggSpecVar) ProtoMessage() {} func (x *AggSpec_AggSpecVar) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[110] + mi := &file_deephaven_proto_table_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8555,7 +8642,7 @@ type Aggregation_AggregationColumns struct { func (x *Aggregation_AggregationColumns) Reset() { *x = Aggregation_AggregationColumns{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[111] + mi := &file_deephaven_proto_table_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8568,7 +8655,7 @@ func (x *Aggregation_AggregationColumns) String() string { func (*Aggregation_AggregationColumns) ProtoMessage() {} func (x *Aggregation_AggregationColumns) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[111] + mi := &file_deephaven_proto_table_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8610,7 +8697,7 @@ type Aggregation_AggregationCount struct { func (x *Aggregation_AggregationCount) Reset() { *x = Aggregation_AggregationCount{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[112] + mi := &file_deephaven_proto_table_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8623,7 +8710,7 @@ func (x *Aggregation_AggregationCount) String() string { func (*Aggregation_AggregationCount) ProtoMessage() {} func (x *Aggregation_AggregationCount) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[112] + mi := &file_deephaven_proto_table_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8657,7 +8744,7 @@ type Aggregation_AggregationRowKey struct { func (x *Aggregation_AggregationRowKey) Reset() { *x = Aggregation_AggregationRowKey{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[113] + mi := &file_deephaven_proto_table_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8670,7 +8757,7 @@ func (x *Aggregation_AggregationRowKey) String() string { func (*Aggregation_AggregationRowKey) ProtoMessage() {} func (x *Aggregation_AggregationRowKey) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[113] + mi := &file_deephaven_proto_table_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8705,7 +8792,7 @@ type Aggregation_AggregationPartition struct { func (x *Aggregation_AggregationPartition) Reset() { *x = Aggregation_AggregationPartition{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[114] + mi := &file_deephaven_proto_table_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8718,7 +8805,7 @@ func (x *Aggregation_AggregationPartition) String() string { func (*Aggregation_AggregationPartition) ProtoMessage() {} func (x *Aggregation_AggregationPartition) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[114] + mi := &file_deephaven_proto_table_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8760,7 +8847,7 @@ type RunChartDownsampleRequest_ZoomRange struct { func (x *RunChartDownsampleRequest_ZoomRange) Reset() { *x = RunChartDownsampleRequest_ZoomRange{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[115] + mi := &file_deephaven_proto_table_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8773,7 +8860,7 @@ func (x *RunChartDownsampleRequest_ZoomRange) String() string { func (*RunChartDownsampleRequest_ZoomRange) ProtoMessage() {} func (x *RunChartDownsampleRequest_ZoomRange) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[115] + mi := &file_deephaven_proto_table_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8818,7 +8905,7 @@ type CreateInputTableRequest_InputTableKind struct { func (x *CreateInputTableRequest_InputTableKind) Reset() { *x = CreateInputTableRequest_InputTableKind{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[116] + mi := &file_deephaven_proto_table_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8831,7 +8918,7 @@ func (x *CreateInputTableRequest_InputTableKind) String() string { func (*CreateInputTableRequest_InputTableKind) ProtoMessage() {} func (x *CreateInputTableRequest_InputTableKind) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[116] + mi := &file_deephaven_proto_table_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8910,7 +8997,7 @@ type CreateInputTableRequest_InputTableKind_InMemoryAppendOnly struct { func (x *CreateInputTableRequest_InputTableKind_InMemoryAppendOnly) Reset() { *x = CreateInputTableRequest_InputTableKind_InMemoryAppendOnly{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[117] + mi := &file_deephaven_proto_table_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8923,7 +9010,7 @@ func (x *CreateInputTableRequest_InputTableKind_InMemoryAppendOnly) String() str func (*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly) ProtoMessage() {} func (x *CreateInputTableRequest_InputTableKind_InMemoryAppendOnly) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[117] + mi := &file_deephaven_proto_table_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8951,7 +9038,7 @@ type CreateInputTableRequest_InputTableKind_InMemoryKeyBacked struct { func (x *CreateInputTableRequest_InputTableKind_InMemoryKeyBacked) Reset() { *x = CreateInputTableRequest_InputTableKind_InMemoryKeyBacked{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[118] + mi := &file_deephaven_proto_table_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8964,7 +9051,7 @@ func (x *CreateInputTableRequest_InputTableKind_InMemoryKeyBacked) String() stri func (*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked) ProtoMessage() {} func (x *CreateInputTableRequest_InputTableKind_InMemoryKeyBacked) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[118] + mi := &file_deephaven_proto_table_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8996,7 +9083,7 @@ type CreateInputTableRequest_InputTableKind_Blink struct { func (x *CreateInputTableRequest_InputTableKind_Blink) Reset() { *x = CreateInputTableRequest_InputTableKind_Blink{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[119] + mi := &file_deephaven_proto_table_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9009,7 +9096,7 @@ func (x *CreateInputTableRequest_InputTableKind_Blink) String() string { func (*CreateInputTableRequest_InputTableKind_Blink) ProtoMessage() {} func (x *CreateInputTableRequest_InputTableKind_Blink) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[119] + mi := &file_deephaven_proto_table_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9077,7 +9164,7 @@ type BatchTableRequest_Operation struct { func (x *BatchTableRequest_Operation) Reset() { *x = BatchTableRequest_Operation{} if protoimpl.UnsafeEnabled { - mi := &file_deephaven_proto_table_proto_msgTypes[120] + mi := &file_deephaven_proto_table_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9090,7 +9177,7 @@ func (x *BatchTableRequest_Operation) String() string { func (*BatchTableRequest_Operation) ProtoMessage() {} func (x *BatchTableRequest_Operation) ProtoReflect() protoreflect.Message { - mi := &file_deephaven_proto_table_proto_msgTypes[120] + mi := &file_deephaven_proto_table_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9835,7 +9922,7 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x75, 0x6c, 0x6c, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, - 0x0c, 0x6e, 0x75, 0x6c, 0x6c, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x9c, 0x3b, + 0x0c, 0x6e, 0x75, 0x6c, 0x6c, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0xeb, 0x3e, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, @@ -9898,7 +9985,7 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x73, 0x69, 0x7a, 0x65, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x1a, 0xb6, 0x33, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, + 0x74, 0x6f, 0x72, 0x1a, 0x85, 0x37, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, @@ -9906,7 +9993,7 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x00, - 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1a, 0xa9, 0x32, 0x0a, 0x0e, 0x55, 0x70, 0x64, + 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1a, 0xf8, 0x35, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x74, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x60, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, @@ -9917,7 +10004,7 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x69, - 0x72, 0x73, 0x1a, 0xff, 0x30, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, + 0x72, 0x73, 0x1a, 0xce, 0x34, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x8a, 0x01, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x76, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, @@ -10101,15 +10188,37 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x6d, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x57, 0x41, 0x76, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x57, 0x61, - 0x76, 0x67, 0x1a, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x75, 0x6d, 0x1a, 0x17, 0x0a, 0x15, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x4d, 0x69, 0x6e, 0x1a, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x1a, 0x1b, 0x0a, - 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x1a, 0x0e, 0x0a, 0x0c, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, 0x6c, 0x1a, 0xb8, 0x01, 0x0a, 0x0b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x61, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, + 0x76, 0x67, 0x12, 0xa2, 0x01, 0x0a, 0x0f, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x77, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x46, 0x6f, + 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x46, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x1a, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x79, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x75, 0x6d, + 0x1a, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x1a, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4d, + 0x61, 0x78, 0x1a, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x43, 0x75, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x1a, + 0x0e, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, 0x6c, 0x1a, + 0xb8, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x61, 0x12, + 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xb8, 0x01, 0x0a, 0x0b, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, @@ -10120,91 +10229,94 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xb8, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x42, 0x79, 0x45, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, - 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4d, - 0x69, 0x6e, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x45, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x45, 0x6d, 0x4d, 0x69, 0x6e, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xba, 0x01, - 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4d, 0x61, 0x78, 0x12, - 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x53, 0x74, 0x64, 0x12, 0x4e, 0x0a, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0c, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0x62, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x79, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x51, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xe8, 0x01, 0x0a, 0x12, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x53, - 0x75, 0x6d, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, - 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, + 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, + 0x6d, 0x4d, 0x61, 0x78, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x45, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, - 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xea, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, + 0x6c, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, + 0xba, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, 0x6d, 0x53, 0x74, + 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x45, + 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x59, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, - 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, + 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0x62, 0x0a, 0x0d, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x51, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x44, 0x65, 0x6c, 0x74, 0x61, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x6d, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, + 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, + 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, + 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xea, 0x01, 0x0a, 0x14, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, + 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x67, 0x12, + 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, + 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x67, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, + 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, @@ -10219,7 +10331,7 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x4d, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x6e, 0x67, 0x4d, 0x61, 0x78, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, @@ -10232,38 +10344,38 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x78, - 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xec, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, - 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, - 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, - 0x61, 0x6c, 0x65, 0x1a, 0xea, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x14, + 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xec, 0x01, 0x0a, 0x16, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, + 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xea, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, + 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, + 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x64, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, @@ -10277,93 +10389,84 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x1a, 0xe8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x64, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, - 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, - 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0x8e, 0x02, 0x0a, 0x13, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x57, - 0x41, 0x76, 0x67, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, - 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, - 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x06, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xd2, 0x01, 0x0a, - 0x15, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, - 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x12, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, - 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x1e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, - 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, - 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, - 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x07, 0x6e, 0x75, - 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x22, 0xff, 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, - 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x1a, 0x8e, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x57, 0x41, 0x76, 0x67, 0x12, 0x68, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, + 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x1a, 0xa7, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x6f, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x12, 0x68, 0x0a, 0x14, + 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, + 0x79, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x12, 0x66, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x15, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, + 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x22, 0xcf, 0x01, 0x0a, 0x12, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, + 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x1e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, + 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x64, + 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, @@ -10375,118 +10478,87 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x07, 0x6e, 0x75, 0x6d, - 0x52, 0x6f, 0x77, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, - 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x6c, 0x12, - 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x6e, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xcd, 0x01, - 0x0a, 0x12, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x52, 0x6f, 0x77, 0x73, 0x22, 0xff, 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, + 0x61, 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x0a, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xae, 0x01, - 0x0a, 0x14, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, - 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xfb, - 0x02, 0x0a, 0x18, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, + 0x6f, 0x77, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, + 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, - 0x50, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x69, - 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, - 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xed, 0x02, 0x0a, - 0x16, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, - 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x6c, 0x12, 0x2c, + 0x0a, 0x12, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x6e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xcd, 0x01, 0x0a, + 0x12, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x0a, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xae, 0x01, 0x0a, + 0x14, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, + 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xfb, 0x02, + 0x0a, 0x18, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, - 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x69, 0x74, 0x73, 0x22, 0xcc, 0x02, 0x0a, - 0x18, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, - 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x50, + 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, - 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x22, 0xca, 0x02, 0x0a, 0x16, - 0x45, 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, + 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x16, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, @@ -10506,532 +10578,479 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x22, 0xc9, 0x02, 0x0a, 0x15, 0x4c, 0x65, 0x66, - 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, - 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, + 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x69, 0x74, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x18, + 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, - 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, - 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, - 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, - 0x6f, 0x41, 0x64, 0x64, 0x22, 0x99, 0x04, 0x0a, 0x15, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, - 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, + 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, - 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, + 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x22, 0xca, 0x02, 0x0a, 0x16, 0x45, + 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, + 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, + 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x22, 0xc9, 0x02, 0x0a, 0x15, 0x4c, 0x65, 0x66, 0x74, + 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, - 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, - 0x12, 0x6b, 0x0a, 0x10, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, - 0x61, 0x73, 0x4f, 0x66, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x5d, 0x0a, - 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, - 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x16, - 0x0a, 0x12, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, - 0x51, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, - 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x03, 0x1a, 0x02, 0x18, 0x01, 0x3a, 0x02, 0x18, 0x01, - 0x22, 0xee, 0x02, 0x0a, 0x12, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, - 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, + 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, + 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, + 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, + 0x41, 0x64, 0x64, 0x22, 0x99, 0x04, 0x0a, 0x15, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x61, 0x63, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x61, 0x73, 0x5f, - 0x6f, 0x66, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x73, 0x4f, 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, - 0x64, 0x22, 0xd7, 0x07, 0x0a, 0x16, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, + 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, + 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x12, + 0x6b, 0x0a, 0x10, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, + 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, + 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x61, + 0x73, 0x4f, 0x66, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x5d, 0x0a, 0x09, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x53, + 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a, + 0x12, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, 0x51, + 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x03, 0x1a, 0x02, 0x18, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, + 0xee, 0x02, 0x0a, 0x12, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, + 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, - 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x2e, - 0x0a, 0x13, 0x65, 0x78, 0x61, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2a, - 0x0a, 0x11, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x66, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x72, 0x0a, 0x10, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, - 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0e, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2c, - 0x0a, 0x12, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x6c, 0x0a, 0x0e, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x61, 0x63, 0x74, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x61, 0x73, 0x5f, 0x6f, + 0x66, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x73, 0x4f, 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x41, 0x64, 0x64, + 0x22, 0xd7, 0x07, 0x0a, 0x16, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, - 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x65, - 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x12, 0x52, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, + 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, + 0x13, 0x65, 0x78, 0x61, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2a, 0x0a, + 0x11, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x72, 0x0a, 0x10, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, + 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0e, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2c, 0x0a, + 0x12, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x6c, 0x0a, 0x0e, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, + 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x65, 0x66, + 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x12, 0x52, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x76, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a, + 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, + 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, + 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, + 0x57, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x45, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0x7b, 0x0a, + 0x0c, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x13, 0x0a, + 0x0f, 0x45, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, + 0x41, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, + 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, + 0x29, 0x0a, 0x25, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, + 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x46, + 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0xef, 0x05, 0x0a, 0x15, 0x43, + 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x62, 0x0a, 0x0a, + 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x28, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x1a, 0xe2, 0x01, 0x0a, 0x09, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x62, + 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x41, 0x67, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x67, 0x5f, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x67, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, + 0x22, 0xa5, 0x01, 0x0a, 0x07, 0x41, 0x67, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, + 0x53, 0x55, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x53, 0x5f, 0x53, 0x55, 0x4d, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x07, 0x0a, + 0x03, 0x41, 0x56, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, + 0x04, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, + 0x4c, 0x41, 0x53, 0x54, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x49, 0x4e, 0x10, 0x07, 0x12, + 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, + 0x41, 0x4e, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, 0x49, + 0x4c, 0x45, 0x10, 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x54, 0x44, 0x10, 0x0b, 0x12, 0x07, 0x0a, + 0x03, 0x56, 0x41, 0x52, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x45, 0x49, 0x47, 0x48, 0x54, + 0x45, 0x44, 0x5f, 0x41, 0x56, 0x47, 0x10, 0x0d, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x97, 0x02, 0x0a, + 0x13, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xef, 0x1b, 0x0a, 0x07, 0x41, 0x67, 0x67, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x48, 0x00, 0x52, + 0x06, 0x61, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x80, 0x01, 0x0a, 0x16, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x76, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x16, - 0x0a, 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, - 0x51, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, - 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x4c, - 0x4f, 0x57, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x45, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0x7b, - 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x13, - 0x0a, 0x0f, 0x45, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, - 0x48, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, - 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x02, - 0x12, 0x29, 0x0a, 0x25, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, - 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, - 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0xef, 0x05, 0x0a, 0x15, - 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, - 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x62, 0x0a, - 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, + 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x03, 0x61, 0x76, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x76, 0x67, 0x48, 0x00, + 0x52, 0x03, 0x61, 0x76, 0x67, 0x12, 0x68, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, + 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x48, 0x00, + 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, + 0x58, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x28, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x1a, 0xe2, 0x01, 0x0a, - 0x09, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, - 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x41, 0x67, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x69, 0x72, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, - 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x67, 0x5f, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x67, 0x4d, 0x65, 0x64, 0x69, 0x61, - 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x07, 0x41, 0x67, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, - 0x03, 0x53, 0x55, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x53, 0x5f, 0x53, 0x55, - 0x4d, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x56, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, 0x54, - 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x05, 0x12, 0x08, 0x0a, - 0x04, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x49, 0x4e, 0x10, 0x07, - 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, - 0x49, 0x41, 0x4e, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, - 0x49, 0x4c, 0x45, 0x10, 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x54, 0x44, 0x10, 0x0b, 0x12, 0x07, - 0x0a, 0x03, 0x56, 0x41, 0x52, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x45, 0x49, 0x47, 0x48, - 0x54, 0x45, 0x44, 0x5f, 0x41, 0x56, 0x47, 0x10, 0x0d, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x97, 0x02, - 0x0a, 0x13, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x48, 0x00, 0x52, + 0x08, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x05, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, - 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x69, 0x72, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x07, 0x66, 0x6f, + 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x28, 0x0a, - 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xef, 0x1b, 0x0a, 0x07, 0x41, 0x67, 0x67, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, + 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x48, 0x00, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, + 0x61, 0x12, 0x52, 0x0a, 0x06, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x48, 0x00, 0x52, 0x06, 0x66, + 0x72, 0x65, 0x65, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x48, 0x00, - 0x52, 0x06, 0x61, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x80, 0x01, 0x0a, 0x16, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, - 0x6c, 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x03, 0x61, - 0x76, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x76, 0x67, 0x48, - 0x00, 0x52, 0x03, 0x61, 0x76, 0x67, 0x12, 0x68, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, - 0x65, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x48, - 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, - 0x12, 0x58, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x4c, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, + 0x6c, 0x61, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x78, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, + 0x52, 0x0a, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, + 0x70, 0x65, 0x63, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x64, + 0x69, 0x61, 0x6e, 0x12, 0x49, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x5e, + 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x48, 0x00, - 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x05, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x07, 0x66, - 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x46, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x48, 0x00, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, - 0x6c, 0x61, 0x12, 0x52, 0x0a, 0x06, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x48, 0x00, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x5d, + 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x12, 0x5b, 0x0a, + 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x48, 0x00, 0x52, 0x06, - 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x4c, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x04, 0x6c, 0x61, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x0b, 0x20, 0x01, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, + 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x03, 0x73, 0x74, + 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x74, 0x64, 0x48, 0x00, + 0x52, 0x03, 0x73, 0x74, 0x64, 0x12, 0x49, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x78, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, - 0x12, 0x52, 0x0a, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x6e, 0x12, 0x49, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, - 0x5e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, - 0x65, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, - 0x5d, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x12, 0x5b, - 0x0a, 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x03, 0x73, - 0x74, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x03, 0x73, 0x75, 0x6d, + 0x12, 0x56, 0x0a, 0x08, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x54, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x74, 0x64, 0x48, - 0x00, 0x52, 0x03, 0x73, 0x74, 0x64, 0x12, 0x49, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x03, 0x73, 0x75, - 0x6d, 0x12, 0x56, 0x0a, 0x08, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x54, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x07, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x06, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x5f, 0x0a, - 0x0c, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x18, 0x15, 0x20, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x55, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x5f, 0x0a, 0x0c, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x0b, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x41, 0x76, 0x67, 0x12, 0x5f, 0x0a, + 0x0c, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x0b, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x41, 0x76, 0x67, 0x12, 0x5f, - 0x0a, 0x0c, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, - 0x48, 0x00, 0x52, 0x0b, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, - 0x49, 0x0a, 0x03, 0x76, 0x61, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x56, 0x61, 0x72, 0x48, 0x00, 0x52, 0x03, 0x76, 0x61, 0x72, 0x1a, 0x75, 0x0a, 0x1c, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x00, 0x52, 0x0b, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x49, + 0x0a, 0x03, 0x76, 0x61, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x56, + 0x61, 0x72, 0x48, 0x00, 0x52, 0x03, 0x76, 0x61, 0x72, 0x1a, 0x75, 0x0a, 0x1c, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, + 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x1a, 0x37, 0x0a, 0x14, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x73, 0x1a, 0x36, 0x0a, 0x0f, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x75, 0x6c, 0x6c, + 0x73, 0x1a, 0x4b, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x6f, 0x72, 0x6d, + 0x75, 0x6c, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x45, + 0x0a, 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x12, + 0x34, 0x0a, 0x16, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x6c, + 0x79, 0x5f, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x14, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x69, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, - 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, - 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, - 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x1a, 0x37, 0x0a, 0x14, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x73, 0x1a, 0x36, 0x0a, 0x0f, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x75, 0x6c, - 0x6c, 0x73, 0x1a, 0x4b, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x6f, 0x72, - 0x6d, 0x75, 0x6c, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x12, 0x1f, - 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, - 0x45, 0x0a, 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, - 0x12, 0x34, 0x0a, 0x16, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x6c, 0x79, 0x5f, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x14, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x44, - 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x69, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, - 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x61, - 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x5f, 0x64, 0x69, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x76, 0x65, - 0x72, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, - 0x64, 0x1a, 0x69, 0x0a, 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x12, 0x58, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x36, 0x0a, 0x13, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x47, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x54, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, - 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xa9, 0x01, - 0x0a, 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, - 0x75, 0x6c, 0x6c, 0x73, 0x12, 0x73, 0x0a, 0x13, 0x6e, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x53, 0x65, - 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x52, 0x11, 0x6e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x1a, 0xa8, 0x03, 0x0a, 0x18, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x53, 0x65, - 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x12, 0x4d, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, - 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x6c, 0x6f, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, - 0x01, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, - 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, 0x09, 0x62, - 0x79, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, - 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x63, - 0x68, 0x61, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x11, 0x48, - 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x1a, 0x36, 0x0a, 0x0f, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x57, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1a, 0x0f, 0x0a, 0x0d, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x1a, 0x0c, 0x0a, - 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x76, 0x67, 0x1a, 0x0e, 0x0a, 0x0c, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x69, 0x72, 0x73, 0x74, 0x1a, 0x0f, 0x0a, 0x0d, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x1a, 0x0e, 0x0a, 0x0c, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0d, 0x0a, 0x0b, - 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, - 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x78, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x6e, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, - 0x65, 0x63, 0x53, 0x74, 0x64, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x53, 0x75, 0x6d, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x56, 0x61, - 0x72, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xae, 0x03, 0x0a, 0x10, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5d, 0x0a, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0c, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x76, + 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x5f, 0x64, 0x69, 0x76, + 0x69, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x76, 0x65, 0x72, + 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x6c, 0x79, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x1a, 0x69, 0x0a, 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x12, 0x58, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x28, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xd4, 0x06, 0x0a, 0x0b, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x07, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, - 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x57, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x66, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x12, 0x64, 0x0a, 0x0c, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x36, 0x0a, 0x13, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x1a, 0x47, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x54, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xa9, 0x01, 0x0a, + 0x0d, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x75, + 0x6c, 0x6c, 0x73, 0x12, 0x73, 0x0a, 0x13, 0x6e, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x77, 0x4b, - 0x65, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, - 0x12, 0x63, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x75, 0x0a, 0x12, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x33, 0x0a, 0x10, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x1a, 0x34, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x70, 0x0a, 0x14, 0x41, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x37, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x61, 0x62, 0x73, 0x6f, - 0x6c, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x62, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x4e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x53, 0x65, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x52, 0x11, 0x6e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x1a, 0xa8, 0x03, 0x0a, 0x18, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x4e, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x53, 0x65, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x12, 0x4d, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, - 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0d, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x41, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, - 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x02, 0x22, 0xf3, 0x01, 0x0a, 0x10, 0x53, 0x6f, 0x72, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, 0x08, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, + 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, 0x09, 0x62, 0x79, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, 0x52, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x63, 0x68, + 0x61, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x1a, 0x36, 0x0a, 0x0f, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1a, 0x0f, 0x0a, 0x0d, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x62, 0x73, 0x53, 0x75, 0x6d, 0x1a, 0x0c, 0x0a, 0x0a, + 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x41, 0x76, 0x67, 0x1a, 0x0e, 0x0a, 0x0c, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x69, 0x72, 0x73, 0x74, 0x1a, 0x0f, 0x0a, 0x0d, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x1a, 0x0e, 0x0a, 0x0c, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0d, 0x0a, 0x0b, 0x41, + 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x78, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, + 0x70, 0x65, 0x63, 0x4d, 0x69, 0x6e, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, + 0x63, 0x53, 0x74, 0x64, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x53, + 0x75, 0x6d, 0x1a, 0x0c, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x53, 0x70, 0x65, 0x63, 0x56, 0x61, 0x72, + 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xae, 0x03, 0x0a, 0x10, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, @@ -11041,1047 +11060,1144 @@ var file_deephaven_proto_table_proto_rawDesc = []byte{ 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x73, 0x6f, 0x72, 0x74, 0x73, 0x22, 0xf4, - 0x01, 0x0a, 0x12, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, - 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5d, 0x0a, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x46, 0x0a, - 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xca, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, - 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x77, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x73, 0x65, 0x65, 0x6b, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, - 0x72, 0x64, 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, - 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x77, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, - 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, - 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x12, 0x42, 0x02, 0x30, 0x01, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x61, 0x6e, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x48, - 0x00, 0x52, 0x0d, 0x6e, 0x61, 0x6e, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x46, 0x0a, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0c, 0x61, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x28, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xd4, 0x06, 0x0a, 0x0b, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x07, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, + 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x57, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x66, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x12, 0x64, 0x0a, 0x0c, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x77, 0x4b, 0x65, + 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x12, + 0x63, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x82, 0x06, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x43, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x61, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x02, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x02, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x12, 0x4f, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x02, - 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x75, 0x0a, 0x12, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x4c, - 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x4d, 0x0a, 0x07, - 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x33, 0x0a, 0x10, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x1a, 0x34, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x6f, 0x77, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x70, 0x0a, 0x14, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x84, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x62, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, 0x72, + 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0d, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x41, + 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, + 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x02, 0x22, 0xf3, 0x01, 0x0a, 0x10, 0x53, 0x6f, 0x72, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x73, 0x6f, 0x72, 0x74, 0x73, 0x22, 0xf4, 0x01, + 0x0a, 0x12, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4f, 0x0a, 0x07, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x08, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x06, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x0c, 0x41, 0x6e, 0x64, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x55, - 0x0a, 0x0b, 0x4f, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, - 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x54, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, + 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x22, 0xca, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x25, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x73, 0x65, 0x65, 0x6b, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, + 0x64, 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x72, + 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x77, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0a, + 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, + 0x42, 0x02, 0x30, 0x01, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x61, 0x6e, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x42, 0x02, 0x30, 0x01, 0x48, 0x00, + 0x52, 0x0d, 0x6e, 0x61, 0x6e, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xd2, 0x03, 0x0a, 0x10, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x46, 0x0a, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, 0x52, + 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x82, 0x06, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, + 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, + 0x61, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x02, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x02, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x62, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x03, 0x6c, 0x68, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6c, 0x68, 0x73, 0x12, - 0x3a, 0x0a, 0x03, 0x72, 0x68, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, + 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x02, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x4c, 0x0a, + 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x69, + 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x72, 0x68, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x10, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x00, 0x12, - 0x16, 0x0a, 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, - 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, - 0x41, 0x4c, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x04, - 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x05, - 0x22, 0xc5, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x40, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0a, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x10, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, - 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, - 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x2e, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4f, 0x0a, 0x07, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x08, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x12, + 0x4c, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x76, - 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x5d, - 0x0a, 0x0f, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x06, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x0c, 0x41, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x55, 0x0a, + 0x0b, 0x4f, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x22, 0x54, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xa0, 0x02, - 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xd2, 0x03, 0x0a, 0x10, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x62, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x03, 0x6c, 0x68, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6c, 0x68, 0x73, 0x12, 0x3a, + 0x0a, 0x03, 0x72, 0x68, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x72, 0x68, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x00, 0x12, 0x16, + 0x0a, 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, + 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, + 0x4c, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x04, 0x12, + 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x05, 0x22, + 0xc5, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x40, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, - 0x22, 0xb0, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, - 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x13, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x0e, - 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0a, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x10, 0x63, + 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, + 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x64, 0x22, 0x97, 0x04, 0x0a, 0x19, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, - 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x6f, + 0x6b, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x5d, 0x0a, + 0x0f, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xa0, 0x02, 0x0a, + 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x78, - 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x70, 0x69, 0x78, 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x0a, 0x7a, 0x6f, - 0x6f, 0x6d, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x5a, 0x6f, 0x6f, - 0x6d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x7a, 0x6f, 0x6f, 0x6d, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x78, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x79, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x8f, 0x01, 0x0a, 0x09, - 0x5a, 0x6f, 0x6f, 0x6d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x42, 0x02, 0x30, 0x01, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x65, - 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x42, 0x02, 0x30, 0x01, 0x48, 0x01, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x44, 0x61, 0x74, 0x65, 0x4e, - 0x61, 0x6e, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x22, 0xc3, 0x06, - 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, - 0x64, 0x12, 0x5b, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5d, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xfb, 0x03, 0x0a, 0x0e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x91, 0x01, 0x0a, 0x15, 0x69, - 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x8e, - 0x01, 0x0a, 0x14, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5b, 0x2e, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, - 0x67, 0x0a, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x48, - 0x00, 0x52, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x1a, 0x14, 0x0a, 0x12, 0x49, 0x6e, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x1a, 0x34, - 0x0a, 0x11, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, - 0x6b, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x07, 0x0a, 0x05, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x06, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xb8, 0x02, 0x0a, 0x0e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, + 0xb0, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, + 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, - 0x0a, 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x13, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x46, + 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x22, 0x97, 0x04, 0x0a, 0x19, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, + 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x78, 0x65, + 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, + 0x69, 0x78, 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x0a, 0x7a, 0x6f, 0x6f, + 0x6d, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x5a, 0x6f, 0x6f, 0x6d, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x7a, 0x6f, 0x6f, 0x6d, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x22, 0x0a, 0x0d, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x78, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x79, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x8f, 0x01, 0x0a, 0x09, 0x5a, + 0x6f, 0x6f, 0x6d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x42, 0x02, 0x30, 0x01, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4e, + 0x61, 0x6e, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, + 0x02, 0x30, 0x01, 0x48, 0x01, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x44, 0x61, 0x74, 0x65, 0x4e, 0x61, + 0x6e, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, 0x61, + 0x78, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x22, 0xc3, 0x06, 0x0a, + 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, + 0x12, 0x5b, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0d, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5d, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, + 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xfb, 0x03, 0x0a, 0x0e, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x91, 0x01, 0x0a, 0x15, 0x69, 0x6e, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, + 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x8e, 0x01, + 0x0a, 0x14, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x07, 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, - 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x9c, - 0x02, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x67, + 0x0a, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x12, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, - 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x89, 0x1d, - 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x03, 0x6f, 0x70, 0x73, 0x1a, 0xa1, 0x1c, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x54, 0x0a, 0x0a, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x48, 0x00, + 0x52, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x1a, 0x14, 0x0a, 0x12, 0x49, 0x6e, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x1a, 0x34, 0x0a, + 0x11, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x73, 0x1a, 0x07, 0x0a, 0x05, 0x42, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x06, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0xb8, 0x02, 0x0a, 0x0e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x72, 0x6f, - 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x52, - 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, + 0x07, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x6c, 0x61, 0x7a, 0x79, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x6c, 0x65, 0x66, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x74, + 0x6f, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x9c, 0x02, + 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, + 0x64, 0x12, 0x4e, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x12, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, + 0x52, 0x10, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x89, 0x1d, 0x0a, + 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x50, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x03, 0x6f, 0x70, 0x73, 0x1a, 0xa1, 0x1c, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x7a, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x4e, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x0a, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x72, 0x6f, 0x70, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x52, 0x0a, + 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x12, - 0x5b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, - 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x52, 0x0a, 0x06, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x6c, 0x61, 0x7a, 0x79, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x7a, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4e, + 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x12, 0x63, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, - 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x74, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x75, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x04, - 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, - 0x6f, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, - 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x68, - 0x65, 0x61, 0x64, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x51, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x42, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x42, 0x79, 0x12, 0x51, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x79, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, - 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x74, - 0x61, 0x69, 0x6c, 0x42, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x75, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x4d, 0x0a, 0x05, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x12, 0x5b, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x65, - 0x72, 0x67, 0x65, 0x12, 0x63, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x61, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x6c, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6c, - 0x61, 0x74, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x70, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x5f, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, - 0x72, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x72, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, - 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x73, - 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x60, 0x0a, 0x0c, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, - 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x78, 0x61, 0x63, 0x74, - 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x52, 0x0a, 0x06, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x61, 0x63, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, - 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x65, 0x66, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x0a, - 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, + 0x63, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, + 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x74, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x75, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, + 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, + 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x68, 0x65, + 0x61, 0x64, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, - 0x52, 0x08, 0x61, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x51, + 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x73, 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x1e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x42, + 0x79, 0x12, 0x51, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x79, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, + 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, + 0x69, 0x6c, 0x42, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x75, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x4d, 0x0a, 0x05, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x65, 0x72, + 0x67, 0x65, 0x12, 0x63, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x61, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x6c, 0x61, 0x74, 0x74, + 0x65, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6c, 0x61, + 0x74, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x66, + 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x70, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x68, + 0x61, 0x72, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, - 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x12, 0x4e, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x72, 0x65, - 0x5f, 0x69, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x68, - 0x65, 0x72, 0x65, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x77, 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x12, 0x5d, 0x0a, 0x0d, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, + 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x72, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x6f, + 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x63, 0x72, 0x6f, 0x73, + 0x73, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x73, 0x73, + 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x60, 0x0a, 0x0c, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x5f, + 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x78, 0x61, 0x63, 0x74, 0x5f, + 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, + 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, + 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x65, 0x66, 0x74, 0x4a, 0x6f, + 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x0a, 0x61, + 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, + 0x08, 0x61, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x53, 0x0a, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x73, 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x48, 0x00, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x79, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x12, 0x4e, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x72, 0x65, 0x5f, + 0x69, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x68, 0x65, + 0x72, 0x65, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x77, + 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x12, 0x5d, 0x0a, 0x0d, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x12, 0x62, 0x0a, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x77, - 0x68, 0x65, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x53, 0x0a, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x12, 0x62, 0x0a, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x77, 0x68, + 0x65, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x57, 0x68, 0x65, 0x6e, 0x12, 0x54, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x12, 0x54, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0a, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x47, 0x0a, 0x02, 0x61, 0x6a, 0x18, 0x28, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x02, 0x61, - 0x6a, 0x12, 0x49, 0x0a, 0x03, 0x72, 0x61, 0x6a, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x6a, 0x12, 0x69, 0x0a, 0x11, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x42, 0x04, 0x0a, 0x02, 0x6f, 0x70, 0x4a, 0x04, 0x08, - 0x14, 0x10, 0x15, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x2a, 0x62, 0x0a, 0x0f, 0x42, 0x61, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x1f, - 0x42, 0x41, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x42, 0x45, 0x48, 0x41, 0x56, 0x49, 0x4f, - 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x48, 0x52, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, - 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x4b, 0x49, 0x50, 0x10, - 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x4f, 0x49, 0x53, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x74, 0x0a, - 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x75, 0x6c, 0x6c, 0x42, 0x65, 0x68, - 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x1b, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x42, 0x45, - 0x48, 0x41, 0x56, 0x49, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x44, - 0x4f, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x41, - 0x4c, 0x55, 0x45, 0x5f, 0x44, 0x4f, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, - 0x12, 0x0a, 0x0e, 0x5a, 0x45, 0x52, 0x4f, 0x5f, 0x44, 0x4f, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, - 0x53, 0x10, 0x03, 0x2a, 0x1b, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, - 0x2a, 0x32, 0x0a, 0x0f, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x43, 0x41, 0x53, - 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, - 0x53, 0x45, 0x10, 0x01, 0x2a, 0x26, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, - 0x0a, 0x08, 0x49, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x32, 0xa8, 0x30, 0x0a, - 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x91, 0x01, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x40, 0x2e, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x47, 0x0a, 0x02, 0x61, 0x6a, 0x18, 0x28, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x02, 0x61, 0x6a, + 0x12, 0x49, 0x0a, 0x03, 0x72, 0x61, 0x6a, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x6a, 0x12, 0x69, 0x0a, 0x11, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, - 0x01, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x42, 0x04, 0x0a, 0x02, 0x6f, 0x70, 0x4a, 0x04, 0x08, 0x14, + 0x10, 0x15, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x2a, 0x62, 0x0a, 0x0f, 0x42, 0x61, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x1f, 0x42, + 0x41, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x42, 0x45, 0x48, 0x41, 0x56, 0x49, 0x4f, 0x52, + 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x54, 0x48, 0x52, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, + 0x45, 0x53, 0x45, 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x4b, 0x49, 0x50, 0x10, 0x03, + 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x4f, 0x49, 0x53, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x74, 0x0a, 0x14, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x75, 0x6c, 0x6c, 0x42, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x1b, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x48, + 0x41, 0x56, 0x49, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x44, 0x4f, + 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x44, 0x4f, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x12, + 0x0a, 0x0e, 0x5a, 0x45, 0x52, 0x4f, 0x5f, 0x44, 0x4f, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x53, + 0x10, 0x03, 0x2a, 0x1b, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x0e, 0x0a, 0x0a, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x2a, + 0x32, 0x0a, 0x0f, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x43, 0x41, 0x53, 0x45, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x53, + 0x45, 0x10, 0x01, 0x2a, 0x26, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, + 0x08, 0x49, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x32, 0xa8, 0x30, 0x0a, 0x0c, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x91, 0x01, 0x0a, + 0x20, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x86, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x4c, 0x61, - 0x7a, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8a, 0x01, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x38, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x06, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x12, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, + 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x86, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x38, 0x2e, 0x69, 0x6f, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x4c, 0x61, 0x7a, + 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x38, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8a, 0x01, 0x0a, + 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, 0x65, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x06, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x06, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x9b, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x41, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, - 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, - 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, - 0x01, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x80, 0x01, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, - 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x42, 0x79, 0x12, - 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, + 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x12, + 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x06, - 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, 0x12, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9b, + 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x41, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x04, + 0x53, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, + 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, - 0x72, 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, - 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, + 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x90, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, - 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x12, 0x80, 0x01, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, + 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x94, 0x01, 0x0a, 0x11, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, - 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x61, - 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x42, 0x79, 0x12, 0x36, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x0f, 0x45, - 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x54, + 0x61, 0x69, 0x6c, 0x42, 0x79, 0x12, 0x36, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x72, + 0x54, 0x61, 0x69, 0x6c, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x55, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x90, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x4a, 0x6f, 0x69, + 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, + 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x94, 0x01, 0x0a, 0x11, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, + 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x61, 0x74, + 0x75, 0x72, 0x61, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x0f, 0x45, 0x78, + 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, + 0x0e, 0x4c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, + 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, - 0x0a, 0x0e, 0x4c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, + 0x0a, 0x0e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x65, 0x66, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, - 0x01, 0x0a, 0x0e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x4f, 0x66, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, - 0x02, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x08, 0x41, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, + 0x01, 0x12, 0x85, 0x01, 0x0a, 0x08, 0x41, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x09, 0x52, 0x61, + 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, 0x61, + 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x09, 0x52, - 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6a, 0x52, - 0x61, 0x6a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, - 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, + 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x36, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x62, 0x6f, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, + 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, - 0x6d, 0x62, 0x6f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x36, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x87, 0x01, + 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x37, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x12, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, + 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x46, 0x6c, + 0x61, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x96, 0x01, 0x0a, + 0x12, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, + 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x87, - 0x01, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x37, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x12, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x46, - 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x57, + 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x12, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6c, 0x61, 0x74, 0x74, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, + 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x96, 0x01, - 0x0a, 0x12, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3a, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, + 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x07, - 0x57, 0x68, 0x65, 0x72, 0x65, 0x49, 0x6e, 0x12, 0x31, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x68, 0x65, 0x72, - 0x65, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, - 0x01, 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x2e, + 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, + 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x72, 0x0a, 0x07, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x12, 0x31, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x72, 0x0a, 0x07, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x12, 0x31, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, + 0x63, 0x2e, 0x53, 0x65, 0x65, 0x6b, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x33, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x17, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, + 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x17, - 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, - 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, - 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x41, 0x48, 0x01, 0x50, 0x01, 0x5a, 0x3b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, - 0x76, 0x65, 0x6e, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2d, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x41, 0x48, 0x01, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, + 0x65, 0x6e, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -12097,7 +12213,7 @@ func file_deephaven_proto_table_proto_rawDescGZIP() []byte { } var file_deephaven_proto_table_proto_enumTypes = make([]protoimpl.EnumInfo, 12) -var file_deephaven_proto_table_proto_msgTypes = make([]protoimpl.MessageInfo, 121) +var file_deephaven_proto_table_proto_msgTypes = make([]protoimpl.MessageInfo, 122) var file_deephaven_proto_table_proto_goTypes = []interface{}{ (BadDataBehavior)(0), // 0: io.deephaven.proto.backplane.grpc.BadDataBehavior (UpdateByNullBehavior)(0), // 1: io.deephaven.proto.backplane.grpc.UpdateByNullBehavior @@ -12198,53 +12314,54 @@ var file_deephaven_proto_table_proto_goTypes = []interface{}{ (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingCount)(nil), // 96: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingStd)(nil), // 97: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingWAvg)(nil), // 98: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg - (*ComboAggregateRequest_Aggregate)(nil), // 99: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate - (*AggSpec_AggSpecApproximatePercentile)(nil), // 100: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentile - (*AggSpec_AggSpecCountDistinct)(nil), // 101: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinct - (*AggSpec_AggSpecDistinct)(nil), // 102: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinct - (*AggSpec_AggSpecFormula)(nil), // 103: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormula - (*AggSpec_AggSpecMedian)(nil), // 104: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedian - (*AggSpec_AggSpecPercentile)(nil), // 105: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentile - (*AggSpec_AggSpecSorted)(nil), // 106: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted - (*AggSpec_AggSpecSortedColumn)(nil), // 107: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn - (*AggSpec_AggSpecTDigest)(nil), // 108: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigest - (*AggSpec_AggSpecUnique)(nil), // 109: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique - (*AggSpec_AggSpecNonUniqueSentinel)(nil), // 110: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel - (*AggSpec_AggSpecWeighted)(nil), // 111: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted - (*AggSpec_AggSpecAbsSum)(nil), // 112: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSum - (*AggSpec_AggSpecAvg)(nil), // 113: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvg - (*AggSpec_AggSpecFirst)(nil), // 114: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirst - (*AggSpec_AggSpecFreeze)(nil), // 115: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreeze - (*AggSpec_AggSpecGroup)(nil), // 116: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroup - (*AggSpec_AggSpecLast)(nil), // 117: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLast - (*AggSpec_AggSpecMax)(nil), // 118: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMax - (*AggSpec_AggSpecMin)(nil), // 119: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMin - (*AggSpec_AggSpecStd)(nil), // 120: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStd - (*AggSpec_AggSpecSum)(nil), // 121: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSum - (*AggSpec_AggSpecVar)(nil), // 122: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVar - (*Aggregation_AggregationColumns)(nil), // 123: io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns - (*Aggregation_AggregationCount)(nil), // 124: io.deephaven.proto.backplane.grpc.Aggregation.AggregationCount - (*Aggregation_AggregationRowKey)(nil), // 125: io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey - (*Aggregation_AggregationPartition)(nil), // 126: io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartition - (*RunChartDownsampleRequest_ZoomRange)(nil), // 127: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange - (*CreateInputTableRequest_InputTableKind)(nil), // 128: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind - (*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly)(nil), // 129: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnly - (*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked)(nil), // 130: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBacked - (*CreateInputTableRequest_InputTableKind_Blink)(nil), // 131: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.Blink - (*BatchTableRequest_Operation)(nil), // 132: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation - (*ticket.Ticket)(nil), // 133: io.deephaven.proto.backplane.grpc.Ticket + (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula)(nil), // 99: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula + (*ComboAggregateRequest_Aggregate)(nil), // 100: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate + (*AggSpec_AggSpecApproximatePercentile)(nil), // 101: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentile + (*AggSpec_AggSpecCountDistinct)(nil), // 102: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinct + (*AggSpec_AggSpecDistinct)(nil), // 103: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinct + (*AggSpec_AggSpecFormula)(nil), // 104: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormula + (*AggSpec_AggSpecMedian)(nil), // 105: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedian + (*AggSpec_AggSpecPercentile)(nil), // 106: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentile + (*AggSpec_AggSpecSorted)(nil), // 107: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted + (*AggSpec_AggSpecSortedColumn)(nil), // 108: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn + (*AggSpec_AggSpecTDigest)(nil), // 109: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigest + (*AggSpec_AggSpecUnique)(nil), // 110: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique + (*AggSpec_AggSpecNonUniqueSentinel)(nil), // 111: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel + (*AggSpec_AggSpecWeighted)(nil), // 112: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted + (*AggSpec_AggSpecAbsSum)(nil), // 113: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSum + (*AggSpec_AggSpecAvg)(nil), // 114: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvg + (*AggSpec_AggSpecFirst)(nil), // 115: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirst + (*AggSpec_AggSpecFreeze)(nil), // 116: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreeze + (*AggSpec_AggSpecGroup)(nil), // 117: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroup + (*AggSpec_AggSpecLast)(nil), // 118: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLast + (*AggSpec_AggSpecMax)(nil), // 119: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMax + (*AggSpec_AggSpecMin)(nil), // 120: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMin + (*AggSpec_AggSpecStd)(nil), // 121: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStd + (*AggSpec_AggSpecSum)(nil), // 122: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSum + (*AggSpec_AggSpecVar)(nil), // 123: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVar + (*Aggregation_AggregationColumns)(nil), // 124: io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns + (*Aggregation_AggregationCount)(nil), // 125: io.deephaven.proto.backplane.grpc.Aggregation.AggregationCount + (*Aggregation_AggregationRowKey)(nil), // 126: io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey + (*Aggregation_AggregationPartition)(nil), // 127: io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartition + (*RunChartDownsampleRequest_ZoomRange)(nil), // 128: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange + (*CreateInputTableRequest_InputTableKind)(nil), // 129: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind + (*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly)(nil), // 130: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnly + (*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked)(nil), // 131: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBacked + (*CreateInputTableRequest_InputTableKind_Blink)(nil), // 132: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.Blink + (*BatchTableRequest_Operation)(nil), // 133: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation + (*ticket.Ticket)(nil), // 134: io.deephaven.proto.backplane.grpc.Ticket } var file_deephaven_proto_table_proto_depIdxs = []int32{ - 133, // 0: io.deephaven.proto.backplane.grpc.TableReference.ticket:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 0: io.deephaven.proto.backplane.grpc.TableReference.ticket:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 1: io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse.result_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 2: io.deephaven.proto.backplane.grpc.FetchTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 3: io.deephaven.proto.backplane.grpc.FetchTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 3: io.deephaven.proto.backplane.grpc.FetchTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 4: io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 5: io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket - 133, // 6: io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage.export_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket - 133, // 7: io.deephaven.proto.backplane.grpc.EmptyTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket - 133, // 8: io.deephaven.proto.backplane.grpc.TimeTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket - 133, // 9: io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 5: io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 6: io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage.export_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 7: io.deephaven.proto.backplane.grpc.EmptyTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 8: io.deephaven.proto.backplane.grpc.TimeTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 9: io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 10: io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 5, // 11: io.deephaven.proto.backplane.grpc.MathContext.rounding_mode:type_name -> io.deephaven.proto.backplane.grpc.MathContext.RoundingMode 73, // 12: io.deephaven.proto.backplane.grpc.UpdateByWindowScale.ticks:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale.UpdateByWindowTicks @@ -12256,100 +12373,100 @@ var file_deephaven_proto_table_proto_depIdxs = []int32{ 0, // 18: io.deephaven.proto.backplane.grpc.UpdateByEmOptions.on_zero_delta_time:type_name -> io.deephaven.proto.backplane.grpc.BadDataBehavior 21, // 19: io.deephaven.proto.backplane.grpc.UpdateByEmOptions.big_value_context:type_name -> io.deephaven.proto.backplane.grpc.MathContext 1, // 20: io.deephaven.proto.backplane.grpc.UpdateByDeltaOptions.null_behavior:type_name -> io.deephaven.proto.backplane.grpc.UpdateByNullBehavior - 133, // 21: io.deephaven.proto.backplane.grpc.UpdateByRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 21: io.deephaven.proto.backplane.grpc.UpdateByRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 22: io.deephaven.proto.backplane.grpc.UpdateByRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 75, // 23: io.deephaven.proto.backplane.grpc.UpdateByRequest.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOptions 76, // 24: io.deephaven.proto.backplane.grpc.UpdateByRequest.operations:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation - 133, // 25: io.deephaven.proto.backplane.grpc.SelectDistinctRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 25: io.deephaven.proto.backplane.grpc.SelectDistinctRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 26: io.deephaven.proto.backplane.grpc.SelectDistinctRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 27: io.deephaven.proto.backplane.grpc.DropColumnsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 27: io.deephaven.proto.backplane.grpc.DropColumnsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 28: io.deephaven.proto.backplane.grpc.DropColumnsRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 29: io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 29: io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 30: io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 31: io.deephaven.proto.backplane.grpc.HeadOrTailRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 31: io.deephaven.proto.backplane.grpc.HeadOrTailRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 32: io.deephaven.proto.backplane.grpc.HeadOrTailRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 33: io.deephaven.proto.backplane.grpc.HeadOrTailByRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 33: io.deephaven.proto.backplane.grpc.HeadOrTailByRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 34: io.deephaven.proto.backplane.grpc.HeadOrTailByRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 35: io.deephaven.proto.backplane.grpc.UngroupRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 35: io.deephaven.proto.backplane.grpc.UngroupRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 36: io.deephaven.proto.backplane.grpc.UngroupRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 37: io.deephaven.proto.backplane.grpc.MergeTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 37: io.deephaven.proto.backplane.grpc.MergeTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 38: io.deephaven.proto.backplane.grpc.MergeTablesRequest.source_ids:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 39: io.deephaven.proto.backplane.grpc.SnapshotTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 39: io.deephaven.proto.backplane.grpc.SnapshotTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 40: io.deephaven.proto.backplane.grpc.SnapshotTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 41: io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 41: io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 42: io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest.base_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 43: io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest.trigger_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 44: io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 44: io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 45: io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 46: io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 47: io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 47: io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 48: io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 49: io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 50: io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 50: io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 51: io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 52: io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 53: io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 53: io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 54: io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 55: io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 56: io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 56: io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 57: io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 58: io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 6, // 59: io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.as_of_match_rule:type_name -> io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.MatchRule - 133, // 60: io.deephaven.proto.backplane.grpc.AjRajTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 60: io.deephaven.proto.backplane.grpc.AjRajTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 61: io.deephaven.proto.backplane.grpc.AjRajTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 62: io.deephaven.proto.backplane.grpc.AjRajTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 63: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 63: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 64: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 65: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 7, // 66: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.range_start_rule:type_name -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeStartRule 8, // 67: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.range_end_rule:type_name -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeEndRule 46, // 68: io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.aggregations:type_name -> io.deephaven.proto.backplane.grpc.Aggregation - 133, // 69: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 69: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 70: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 99, // 71: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.aggregates:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate - 133, // 72: io.deephaven.proto.backplane.grpc.AggregateAllRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 100, // 71: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.aggregates:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate + 134, // 72: io.deephaven.proto.backplane.grpc.AggregateAllRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 73: io.deephaven.proto.backplane.grpc.AggregateAllRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 44, // 74: io.deephaven.proto.backplane.grpc.AggregateAllRequest.spec:type_name -> io.deephaven.proto.backplane.grpc.AggSpec - 112, // 75: io.deephaven.proto.backplane.grpc.AggSpec.abs_sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSum - 100, // 76: io.deephaven.proto.backplane.grpc.AggSpec.approximate_percentile:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentile - 113, // 77: io.deephaven.proto.backplane.grpc.AggSpec.avg:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvg - 101, // 78: io.deephaven.proto.backplane.grpc.AggSpec.count_distinct:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinct - 102, // 79: io.deephaven.proto.backplane.grpc.AggSpec.distinct:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinct - 114, // 80: io.deephaven.proto.backplane.grpc.AggSpec.first:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirst - 103, // 81: io.deephaven.proto.backplane.grpc.AggSpec.formula:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormula - 115, // 82: io.deephaven.proto.backplane.grpc.AggSpec.freeze:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreeze - 116, // 83: io.deephaven.proto.backplane.grpc.AggSpec.group:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroup - 117, // 84: io.deephaven.proto.backplane.grpc.AggSpec.last:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLast - 118, // 85: io.deephaven.proto.backplane.grpc.AggSpec.max:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMax - 104, // 86: io.deephaven.proto.backplane.grpc.AggSpec.median:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedian - 119, // 87: io.deephaven.proto.backplane.grpc.AggSpec.min:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMin - 105, // 88: io.deephaven.proto.backplane.grpc.AggSpec.percentile:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentile - 106, // 89: io.deephaven.proto.backplane.grpc.AggSpec.sorted_first:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted - 106, // 90: io.deephaven.proto.backplane.grpc.AggSpec.sorted_last:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted - 120, // 91: io.deephaven.proto.backplane.grpc.AggSpec.std:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStd - 121, // 92: io.deephaven.proto.backplane.grpc.AggSpec.sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSum - 108, // 93: io.deephaven.proto.backplane.grpc.AggSpec.t_digest:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigest - 109, // 94: io.deephaven.proto.backplane.grpc.AggSpec.unique:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique - 111, // 95: io.deephaven.proto.backplane.grpc.AggSpec.weighted_avg:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted - 111, // 96: io.deephaven.proto.backplane.grpc.AggSpec.weighted_sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted - 122, // 97: io.deephaven.proto.backplane.grpc.AggSpec.var:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVar - 133, // 98: io.deephaven.proto.backplane.grpc.AggregateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 113, // 75: io.deephaven.proto.backplane.grpc.AggSpec.abs_sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSum + 101, // 76: io.deephaven.proto.backplane.grpc.AggSpec.approximate_percentile:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentile + 114, // 77: io.deephaven.proto.backplane.grpc.AggSpec.avg:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvg + 102, // 78: io.deephaven.proto.backplane.grpc.AggSpec.count_distinct:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinct + 103, // 79: io.deephaven.proto.backplane.grpc.AggSpec.distinct:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinct + 115, // 80: io.deephaven.proto.backplane.grpc.AggSpec.first:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirst + 104, // 81: io.deephaven.proto.backplane.grpc.AggSpec.formula:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormula + 116, // 82: io.deephaven.proto.backplane.grpc.AggSpec.freeze:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreeze + 117, // 83: io.deephaven.proto.backplane.grpc.AggSpec.group:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroup + 118, // 84: io.deephaven.proto.backplane.grpc.AggSpec.last:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLast + 119, // 85: io.deephaven.proto.backplane.grpc.AggSpec.max:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMax + 105, // 86: io.deephaven.proto.backplane.grpc.AggSpec.median:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedian + 120, // 87: io.deephaven.proto.backplane.grpc.AggSpec.min:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMin + 106, // 88: io.deephaven.proto.backplane.grpc.AggSpec.percentile:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentile + 107, // 89: io.deephaven.proto.backplane.grpc.AggSpec.sorted_first:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted + 107, // 90: io.deephaven.proto.backplane.grpc.AggSpec.sorted_last:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted + 121, // 91: io.deephaven.proto.backplane.grpc.AggSpec.std:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStd + 122, // 92: io.deephaven.proto.backplane.grpc.AggSpec.sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSum + 109, // 93: io.deephaven.proto.backplane.grpc.AggSpec.t_digest:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigest + 110, // 94: io.deephaven.proto.backplane.grpc.AggSpec.unique:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique + 112, // 95: io.deephaven.proto.backplane.grpc.AggSpec.weighted_avg:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted + 112, // 96: io.deephaven.proto.backplane.grpc.AggSpec.weighted_sum:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeighted + 123, // 97: io.deephaven.proto.backplane.grpc.AggSpec.var:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVar + 134, // 98: io.deephaven.proto.backplane.grpc.AggregateRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 99: io.deephaven.proto.backplane.grpc.AggregateRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 100: io.deephaven.proto.backplane.grpc.AggregateRequest.initial_groups_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 46, // 101: io.deephaven.proto.backplane.grpc.AggregateRequest.aggregations:type_name -> io.deephaven.proto.backplane.grpc.Aggregation - 123, // 102: io.deephaven.proto.backplane.grpc.Aggregation.columns:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns - 124, // 103: io.deephaven.proto.backplane.grpc.Aggregation.count:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationCount - 125, // 104: io.deephaven.proto.backplane.grpc.Aggregation.first_row_key:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey - 125, // 105: io.deephaven.proto.backplane.grpc.Aggregation.last_row_key:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey - 126, // 106: io.deephaven.proto.backplane.grpc.Aggregation.partition:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartition + 124, // 102: io.deephaven.proto.backplane.grpc.Aggregation.columns:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns + 125, // 103: io.deephaven.proto.backplane.grpc.Aggregation.count:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationCount + 126, // 104: io.deephaven.proto.backplane.grpc.Aggregation.first_row_key:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey + 126, // 105: io.deephaven.proto.backplane.grpc.Aggregation.last_row_key:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKey + 127, // 106: io.deephaven.proto.backplane.grpc.Aggregation.partition:type_name -> io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartition 10, // 107: io.deephaven.proto.backplane.grpc.SortDescriptor.direction:type_name -> io.deephaven.proto.backplane.grpc.SortDescriptor.SortDirection - 133, // 108: io.deephaven.proto.backplane.grpc.SortTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 108: io.deephaven.proto.backplane.grpc.SortTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 109: io.deephaven.proto.backplane.grpc.SortTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 47, // 110: io.deephaven.proto.backplane.grpc.SortTableRequest.sorts:type_name -> io.deephaven.proto.backplane.grpc.SortDescriptor - 133, // 111: io.deephaven.proto.backplane.grpc.FilterTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 111: io.deephaven.proto.backplane.grpc.FilterTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 112: io.deephaven.proto.backplane.grpc.FilterTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 55, // 113: io.deephaven.proto.backplane.grpc.FilterTableRequest.filters:type_name -> io.deephaven.proto.backplane.grpc.Condition - 133, // 114: io.deephaven.proto.backplane.grpc.SeekRowRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 114: io.deephaven.proto.backplane.grpc.SeekRowRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 53, // 115: io.deephaven.proto.backplane.grpc.SeekRowRequest.seek_value:type_name -> io.deephaven.proto.backplane.grpc.Literal 52, // 116: io.deephaven.proto.backplane.grpc.Value.reference:type_name -> io.deephaven.proto.backplane.grpc.Reference 53, // 117: io.deephaven.proto.backplane.grpc.Value.literal:type_name -> io.deephaven.proto.backplane.grpc.Literal @@ -12384,22 +12501,22 @@ var file_deephaven_proto_table_proto_depIdxs = []int32{ 3, // 146: io.deephaven.proto.backplane.grpc.ContainsCondition.case_sensitivity:type_name -> io.deephaven.proto.backplane.grpc.CaseSensitivity 4, // 147: io.deephaven.proto.backplane.grpc.ContainsCondition.match_type:type_name -> io.deephaven.proto.backplane.grpc.MatchType 52, // 148: io.deephaven.proto.backplane.grpc.SearchCondition.optional_references:type_name -> io.deephaven.proto.backplane.grpc.Reference - 133, // 149: io.deephaven.proto.backplane.grpc.FlattenRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 149: io.deephaven.proto.backplane.grpc.FlattenRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 150: io.deephaven.proto.backplane.grpc.FlattenRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 151: io.deephaven.proto.backplane.grpc.MetaTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 151: io.deephaven.proto.backplane.grpc.MetaTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 152: io.deephaven.proto.backplane.grpc.MetaTableRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 153: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 153: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 154: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 127, // 155: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.zoom_range:type_name -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange - 133, // 156: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 128, // 155: io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.zoom_range:type_name -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange + 134, // 156: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 157: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.source_table_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 128, // 158: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.kind:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind - 133, // 159: io.deephaven.proto.backplane.grpc.WhereInRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 129, // 158: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.kind:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind + 134, // 159: io.deephaven.proto.backplane.grpc.WhereInRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 160: io.deephaven.proto.backplane.grpc.WhereInRequest.left_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference 12, // 161: io.deephaven.proto.backplane.grpc.WhereInRequest.right_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 133, // 162: io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket + 134, // 162: io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket 12, // 163: io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest.source_id:type_name -> io.deephaven.proto.backplane.grpc.TableReference - 132, // 164: io.deephaven.proto.backplane.grpc.BatchTableRequest.ops:type_name -> io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation + 133, // 164: io.deephaven.proto.backplane.grpc.BatchTableRequest.ops:type_name -> io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation 21, // 165: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOptions.math_context:type_name -> io.deephaven.proto.backplane.grpc.MathContext 77, // 166: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.column:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn 78, // 167: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.spec:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec @@ -12423,176 +12540,179 @@ var file_deephaven_proto_table_proto_depIdxs = []int32{ 96, // 185: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_count:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount 97, // 186: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_std:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd 98, // 187: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_wavg:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg - 23, // 188: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEma.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions - 22, // 189: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEma.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 23, // 190: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEms.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions - 22, // 191: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEms.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 23, // 192: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMin.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions - 22, // 193: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMin.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 23, // 194: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMax.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions - 22, // 195: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMax.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 23, // 196: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStd.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions - 22, // 197: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStd.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 24, // 198: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByDelta.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByDeltaOptions - 22, // 199: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSum.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 200: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSum.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 201: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroup.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 202: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroup.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 203: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvg.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 204: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvg.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 205: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMin.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 206: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMin.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 207: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMax.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 208: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMax.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 209: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProduct.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 210: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProduct.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 211: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 212: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 213: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 214: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 215: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 22, // 216: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale - 9, // 217: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate.type:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest.AggType - 107, // 218: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted.columns:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn - 110, // 219: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique.non_unique_sentinel:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel - 2, // 220: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel.null_value:type_name -> io.deephaven.proto.backplane.grpc.NullValue - 44, // 221: io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns.spec:type_name -> io.deephaven.proto.backplane.grpc.AggSpec - 129, // 222: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.in_memory_append_only:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnly - 130, // 223: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.in_memory_key_backed:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBacked - 131, // 224: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.blink:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.Blink - 18, // 225: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.empty_table:type_name -> io.deephaven.proto.backplane.grpc.EmptyTableRequest - 19, // 226: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.time_table:type_name -> io.deephaven.proto.backplane.grpc.TimeTableRequest - 27, // 227: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.drop_columns:type_name -> io.deephaven.proto.backplane.grpc.DropColumnsRequest - 20, // 228: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 229: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.lazy_update:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 230: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.view:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 231: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update_view:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 232: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.select:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 26, // 233: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.select_distinct:type_name -> io.deephaven.proto.backplane.grpc.SelectDistinctRequest - 49, // 234: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.filter:type_name -> io.deephaven.proto.backplane.grpc.FilterTableRequest - 28, // 235: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.unstructured_filter:type_name -> io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest - 48, // 236: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.sort:type_name -> io.deephaven.proto.backplane.grpc.SortTableRequest - 29, // 237: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.head:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest - 29, // 238: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.tail:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest - 30, // 239: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.head_by:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest - 30, // 240: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.tail_by:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest - 31, // 241: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.ungroup:type_name -> io.deephaven.proto.backplane.grpc.UngroupRequest - 32, // 242: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.merge:type_name -> io.deephaven.proto.backplane.grpc.MergeTablesRequest - 42, // 243: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.combo_aggregate:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest - 66, // 244: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.flatten:type_name -> io.deephaven.proto.backplane.grpc.FlattenRequest - 68, // 245: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.run_chart_downsample:type_name -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest - 35, // 246: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.cross_join:type_name -> io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest - 36, // 247: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.natural_join:type_name -> io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest - 37, // 248: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.exact_join:type_name -> io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest - 38, // 249: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.left_join:type_name -> io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest - 39, // 250: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.as_of_join:type_name -> io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest - 14, // 251: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.fetch_table:type_name -> io.deephaven.proto.backplane.grpc.FetchTableRequest - 15, // 252: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.apply_preview_columns:type_name -> io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest - 69, // 253: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.create_input_table:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest - 25, // 254: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update_by:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest - 70, // 255: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.where_in:type_name -> io.deephaven.proto.backplane.grpc.WhereInRequest - 43, // 256: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aggregate_all:type_name -> io.deephaven.proto.backplane.grpc.AggregateAllRequest - 45, // 257: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aggregate:type_name -> io.deephaven.proto.backplane.grpc.AggregateRequest - 33, // 258: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.snapshot:type_name -> io.deephaven.proto.backplane.grpc.SnapshotTableRequest - 34, // 259: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.snapshot_when:type_name -> io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest - 67, // 260: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.meta_table:type_name -> io.deephaven.proto.backplane.grpc.MetaTableRequest - 41, // 261: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.range_join:type_name -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest - 40, // 262: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aj:type_name -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest - 40, // 263: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.raj:type_name -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest - 71, // 264: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.column_statistics:type_name -> io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest - 133, // 265: io.deephaven.proto.backplane.grpc.TableService.GetExportedTableCreationResponse:input_type -> io.deephaven.proto.backplane.grpc.Ticket - 14, // 266: io.deephaven.proto.backplane.grpc.TableService.FetchTable:input_type -> io.deephaven.proto.backplane.grpc.FetchTableRequest - 15, // 267: io.deephaven.proto.backplane.grpc.TableService.ApplyPreviewColumns:input_type -> io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest - 18, // 268: io.deephaven.proto.backplane.grpc.TableService.EmptyTable:input_type -> io.deephaven.proto.backplane.grpc.EmptyTableRequest - 19, // 269: io.deephaven.proto.backplane.grpc.TableService.TimeTable:input_type -> io.deephaven.proto.backplane.grpc.TimeTableRequest - 27, // 270: io.deephaven.proto.backplane.grpc.TableService.DropColumns:input_type -> io.deephaven.proto.backplane.grpc.DropColumnsRequest - 20, // 271: io.deephaven.proto.backplane.grpc.TableService.Update:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 272: io.deephaven.proto.backplane.grpc.TableService.LazyUpdate:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 273: io.deephaven.proto.backplane.grpc.TableService.View:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 274: io.deephaven.proto.backplane.grpc.TableService.UpdateView:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 20, // 275: io.deephaven.proto.backplane.grpc.TableService.Select:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest - 25, // 276: io.deephaven.proto.backplane.grpc.TableService.UpdateBy:input_type -> io.deephaven.proto.backplane.grpc.UpdateByRequest - 26, // 277: io.deephaven.proto.backplane.grpc.TableService.SelectDistinct:input_type -> io.deephaven.proto.backplane.grpc.SelectDistinctRequest - 49, // 278: io.deephaven.proto.backplane.grpc.TableService.Filter:input_type -> io.deephaven.proto.backplane.grpc.FilterTableRequest - 28, // 279: io.deephaven.proto.backplane.grpc.TableService.UnstructuredFilter:input_type -> io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest - 48, // 280: io.deephaven.proto.backplane.grpc.TableService.Sort:input_type -> io.deephaven.proto.backplane.grpc.SortTableRequest - 29, // 281: io.deephaven.proto.backplane.grpc.TableService.Head:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest - 29, // 282: io.deephaven.proto.backplane.grpc.TableService.Tail:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest - 30, // 283: io.deephaven.proto.backplane.grpc.TableService.HeadBy:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest - 30, // 284: io.deephaven.proto.backplane.grpc.TableService.TailBy:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest - 31, // 285: io.deephaven.proto.backplane.grpc.TableService.Ungroup:input_type -> io.deephaven.proto.backplane.grpc.UngroupRequest - 32, // 286: io.deephaven.proto.backplane.grpc.TableService.MergeTables:input_type -> io.deephaven.proto.backplane.grpc.MergeTablesRequest - 35, // 287: io.deephaven.proto.backplane.grpc.TableService.CrossJoinTables:input_type -> io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest - 36, // 288: io.deephaven.proto.backplane.grpc.TableService.NaturalJoinTables:input_type -> io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest - 37, // 289: io.deephaven.proto.backplane.grpc.TableService.ExactJoinTables:input_type -> io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest - 38, // 290: io.deephaven.proto.backplane.grpc.TableService.LeftJoinTables:input_type -> io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest - 39, // 291: io.deephaven.proto.backplane.grpc.TableService.AsOfJoinTables:input_type -> io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest - 40, // 292: io.deephaven.proto.backplane.grpc.TableService.AjTables:input_type -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest - 40, // 293: io.deephaven.proto.backplane.grpc.TableService.RajTables:input_type -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest - 41, // 294: io.deephaven.proto.backplane.grpc.TableService.RangeJoinTables:input_type -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest - 42, // 295: io.deephaven.proto.backplane.grpc.TableService.ComboAggregate:input_type -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest - 43, // 296: io.deephaven.proto.backplane.grpc.TableService.AggregateAll:input_type -> io.deephaven.proto.backplane.grpc.AggregateAllRequest - 45, // 297: io.deephaven.proto.backplane.grpc.TableService.Aggregate:input_type -> io.deephaven.proto.backplane.grpc.AggregateRequest - 33, // 298: io.deephaven.proto.backplane.grpc.TableService.Snapshot:input_type -> io.deephaven.proto.backplane.grpc.SnapshotTableRequest - 34, // 299: io.deephaven.proto.backplane.grpc.TableService.SnapshotWhen:input_type -> io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest - 66, // 300: io.deephaven.proto.backplane.grpc.TableService.Flatten:input_type -> io.deephaven.proto.backplane.grpc.FlattenRequest - 68, // 301: io.deephaven.proto.backplane.grpc.TableService.RunChartDownsample:input_type -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest - 69, // 302: io.deephaven.proto.backplane.grpc.TableService.CreateInputTable:input_type -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest - 70, // 303: io.deephaven.proto.backplane.grpc.TableService.WhereIn:input_type -> io.deephaven.proto.backplane.grpc.WhereInRequest - 72, // 304: io.deephaven.proto.backplane.grpc.TableService.Batch:input_type -> io.deephaven.proto.backplane.grpc.BatchTableRequest - 16, // 305: io.deephaven.proto.backplane.grpc.TableService.ExportedTableUpdates:input_type -> io.deephaven.proto.backplane.grpc.ExportedTableUpdatesRequest - 50, // 306: io.deephaven.proto.backplane.grpc.TableService.SeekRow:input_type -> io.deephaven.proto.backplane.grpc.SeekRowRequest - 67, // 307: io.deephaven.proto.backplane.grpc.TableService.MetaTable:input_type -> io.deephaven.proto.backplane.grpc.MetaTableRequest - 71, // 308: io.deephaven.proto.backplane.grpc.TableService.ComputeColumnStatistics:input_type -> io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest - 13, // 309: io.deephaven.proto.backplane.grpc.TableService.GetExportedTableCreationResponse:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 310: io.deephaven.proto.backplane.grpc.TableService.FetchTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 311: io.deephaven.proto.backplane.grpc.TableService.ApplyPreviewColumns:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 312: io.deephaven.proto.backplane.grpc.TableService.EmptyTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 313: io.deephaven.proto.backplane.grpc.TableService.TimeTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 314: io.deephaven.proto.backplane.grpc.TableService.DropColumns:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 315: io.deephaven.proto.backplane.grpc.TableService.Update:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 316: io.deephaven.proto.backplane.grpc.TableService.LazyUpdate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 317: io.deephaven.proto.backplane.grpc.TableService.View:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 318: io.deephaven.proto.backplane.grpc.TableService.UpdateView:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 319: io.deephaven.proto.backplane.grpc.TableService.Select:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 320: io.deephaven.proto.backplane.grpc.TableService.UpdateBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 321: io.deephaven.proto.backplane.grpc.TableService.SelectDistinct:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 322: io.deephaven.proto.backplane.grpc.TableService.Filter:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 323: io.deephaven.proto.backplane.grpc.TableService.UnstructuredFilter:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 324: io.deephaven.proto.backplane.grpc.TableService.Sort:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 325: io.deephaven.proto.backplane.grpc.TableService.Head:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 326: io.deephaven.proto.backplane.grpc.TableService.Tail:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 327: io.deephaven.proto.backplane.grpc.TableService.HeadBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 328: io.deephaven.proto.backplane.grpc.TableService.TailBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 329: io.deephaven.proto.backplane.grpc.TableService.Ungroup:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 330: io.deephaven.proto.backplane.grpc.TableService.MergeTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 331: io.deephaven.proto.backplane.grpc.TableService.CrossJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 332: io.deephaven.proto.backplane.grpc.TableService.NaturalJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 333: io.deephaven.proto.backplane.grpc.TableService.ExactJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 334: io.deephaven.proto.backplane.grpc.TableService.LeftJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 335: io.deephaven.proto.backplane.grpc.TableService.AsOfJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 336: io.deephaven.proto.backplane.grpc.TableService.AjTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 337: io.deephaven.proto.backplane.grpc.TableService.RajTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 338: io.deephaven.proto.backplane.grpc.TableService.RangeJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 339: io.deephaven.proto.backplane.grpc.TableService.ComboAggregate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 340: io.deephaven.proto.backplane.grpc.TableService.AggregateAll:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 341: io.deephaven.proto.backplane.grpc.TableService.Aggregate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 342: io.deephaven.proto.backplane.grpc.TableService.Snapshot:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 343: io.deephaven.proto.backplane.grpc.TableService.SnapshotWhen:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 344: io.deephaven.proto.backplane.grpc.TableService.Flatten:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 345: io.deephaven.proto.backplane.grpc.TableService.RunChartDownsample:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 346: io.deephaven.proto.backplane.grpc.TableService.CreateInputTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 347: io.deephaven.proto.backplane.grpc.TableService.WhereIn:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 348: io.deephaven.proto.backplane.grpc.TableService.Batch:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 17, // 349: io.deephaven.proto.backplane.grpc.TableService.ExportedTableUpdates:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage - 51, // 350: io.deephaven.proto.backplane.grpc.TableService.SeekRow:output_type -> io.deephaven.proto.backplane.grpc.SeekRowResponse - 13, // 351: io.deephaven.proto.backplane.grpc.TableService.MetaTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 13, // 352: io.deephaven.proto.backplane.grpc.TableService.ComputeColumnStatistics:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse - 309, // [309:353] is the sub-list for method output_type - 265, // [265:309] is the sub-list for method input_type - 265, // [265:265] is the sub-list for extension type_name - 265, // [265:265] is the sub-list for extension extendee - 0, // [0:265] is the sub-list for field type_name + 99, // 188: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.rolling_formula:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula + 23, // 189: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEma.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions + 22, // 190: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEma.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 23, // 191: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEms.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions + 22, // 192: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEms.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 23, // 193: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMin.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions + 22, // 194: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMin.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 23, // 195: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMax.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions + 22, // 196: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMax.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 23, // 197: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStd.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByEmOptions + 22, // 198: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStd.window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 24, // 199: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByDelta.options:type_name -> io.deephaven.proto.backplane.grpc.UpdateByDeltaOptions + 22, // 200: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSum.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 201: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSum.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 202: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroup.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 203: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroup.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 204: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvg.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 205: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvg.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 206: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMin.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 207: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMin.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 208: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMax.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 209: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMax.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 210: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProduct.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 211: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProduct.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 212: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 213: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCount.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 214: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 215: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStd.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 216: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 217: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvg.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 218: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.reverse_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 22, // 219: io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.forward_window_scale:type_name -> io.deephaven.proto.backplane.grpc.UpdateByWindowScale + 9, // 220: io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate.type:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest.AggType + 108, // 221: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSorted.columns:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn + 111, // 222: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUnique.non_unique_sentinel:type_name -> io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel + 2, // 223: io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel.null_value:type_name -> io.deephaven.proto.backplane.grpc.NullValue + 44, // 224: io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumns.spec:type_name -> io.deephaven.proto.backplane.grpc.AggSpec + 130, // 225: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.in_memory_append_only:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnly + 131, // 226: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.in_memory_key_backed:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBacked + 132, // 227: io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.blink:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.Blink + 18, // 228: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.empty_table:type_name -> io.deephaven.proto.backplane.grpc.EmptyTableRequest + 19, // 229: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.time_table:type_name -> io.deephaven.proto.backplane.grpc.TimeTableRequest + 27, // 230: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.drop_columns:type_name -> io.deephaven.proto.backplane.grpc.DropColumnsRequest + 20, // 231: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 232: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.lazy_update:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 233: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.view:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 234: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update_view:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 235: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.select:type_name -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 26, // 236: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.select_distinct:type_name -> io.deephaven.proto.backplane.grpc.SelectDistinctRequest + 49, // 237: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.filter:type_name -> io.deephaven.proto.backplane.grpc.FilterTableRequest + 28, // 238: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.unstructured_filter:type_name -> io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest + 48, // 239: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.sort:type_name -> io.deephaven.proto.backplane.grpc.SortTableRequest + 29, // 240: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.head:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest + 29, // 241: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.tail:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest + 30, // 242: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.head_by:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest + 30, // 243: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.tail_by:type_name -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest + 31, // 244: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.ungroup:type_name -> io.deephaven.proto.backplane.grpc.UngroupRequest + 32, // 245: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.merge:type_name -> io.deephaven.proto.backplane.grpc.MergeTablesRequest + 42, // 246: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.combo_aggregate:type_name -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest + 66, // 247: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.flatten:type_name -> io.deephaven.proto.backplane.grpc.FlattenRequest + 68, // 248: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.run_chart_downsample:type_name -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest + 35, // 249: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.cross_join:type_name -> io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest + 36, // 250: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.natural_join:type_name -> io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest + 37, // 251: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.exact_join:type_name -> io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest + 38, // 252: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.left_join:type_name -> io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest + 39, // 253: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.as_of_join:type_name -> io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest + 14, // 254: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.fetch_table:type_name -> io.deephaven.proto.backplane.grpc.FetchTableRequest + 15, // 255: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.apply_preview_columns:type_name -> io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest + 69, // 256: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.create_input_table:type_name -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest + 25, // 257: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.update_by:type_name -> io.deephaven.proto.backplane.grpc.UpdateByRequest + 70, // 258: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.where_in:type_name -> io.deephaven.proto.backplane.grpc.WhereInRequest + 43, // 259: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aggregate_all:type_name -> io.deephaven.proto.backplane.grpc.AggregateAllRequest + 45, // 260: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aggregate:type_name -> io.deephaven.proto.backplane.grpc.AggregateRequest + 33, // 261: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.snapshot:type_name -> io.deephaven.proto.backplane.grpc.SnapshotTableRequest + 34, // 262: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.snapshot_when:type_name -> io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest + 67, // 263: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.meta_table:type_name -> io.deephaven.proto.backplane.grpc.MetaTableRequest + 41, // 264: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.range_join:type_name -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest + 40, // 265: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.aj:type_name -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest + 40, // 266: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.raj:type_name -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest + 71, // 267: io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation.column_statistics:type_name -> io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest + 134, // 268: io.deephaven.proto.backplane.grpc.TableService.GetExportedTableCreationResponse:input_type -> io.deephaven.proto.backplane.grpc.Ticket + 14, // 269: io.deephaven.proto.backplane.grpc.TableService.FetchTable:input_type -> io.deephaven.proto.backplane.grpc.FetchTableRequest + 15, // 270: io.deephaven.proto.backplane.grpc.TableService.ApplyPreviewColumns:input_type -> io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest + 18, // 271: io.deephaven.proto.backplane.grpc.TableService.EmptyTable:input_type -> io.deephaven.proto.backplane.grpc.EmptyTableRequest + 19, // 272: io.deephaven.proto.backplane.grpc.TableService.TimeTable:input_type -> io.deephaven.proto.backplane.grpc.TimeTableRequest + 27, // 273: io.deephaven.proto.backplane.grpc.TableService.DropColumns:input_type -> io.deephaven.proto.backplane.grpc.DropColumnsRequest + 20, // 274: io.deephaven.proto.backplane.grpc.TableService.Update:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 275: io.deephaven.proto.backplane.grpc.TableService.LazyUpdate:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 276: io.deephaven.proto.backplane.grpc.TableService.View:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 277: io.deephaven.proto.backplane.grpc.TableService.UpdateView:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 20, // 278: io.deephaven.proto.backplane.grpc.TableService.Select:input_type -> io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest + 25, // 279: io.deephaven.proto.backplane.grpc.TableService.UpdateBy:input_type -> io.deephaven.proto.backplane.grpc.UpdateByRequest + 26, // 280: io.deephaven.proto.backplane.grpc.TableService.SelectDistinct:input_type -> io.deephaven.proto.backplane.grpc.SelectDistinctRequest + 49, // 281: io.deephaven.proto.backplane.grpc.TableService.Filter:input_type -> io.deephaven.proto.backplane.grpc.FilterTableRequest + 28, // 282: io.deephaven.proto.backplane.grpc.TableService.UnstructuredFilter:input_type -> io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest + 48, // 283: io.deephaven.proto.backplane.grpc.TableService.Sort:input_type -> io.deephaven.proto.backplane.grpc.SortTableRequest + 29, // 284: io.deephaven.proto.backplane.grpc.TableService.Head:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest + 29, // 285: io.deephaven.proto.backplane.grpc.TableService.Tail:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailRequest + 30, // 286: io.deephaven.proto.backplane.grpc.TableService.HeadBy:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest + 30, // 287: io.deephaven.proto.backplane.grpc.TableService.TailBy:input_type -> io.deephaven.proto.backplane.grpc.HeadOrTailByRequest + 31, // 288: io.deephaven.proto.backplane.grpc.TableService.Ungroup:input_type -> io.deephaven.proto.backplane.grpc.UngroupRequest + 32, // 289: io.deephaven.proto.backplane.grpc.TableService.MergeTables:input_type -> io.deephaven.proto.backplane.grpc.MergeTablesRequest + 35, // 290: io.deephaven.proto.backplane.grpc.TableService.CrossJoinTables:input_type -> io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest + 36, // 291: io.deephaven.proto.backplane.grpc.TableService.NaturalJoinTables:input_type -> io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest + 37, // 292: io.deephaven.proto.backplane.grpc.TableService.ExactJoinTables:input_type -> io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest + 38, // 293: io.deephaven.proto.backplane.grpc.TableService.LeftJoinTables:input_type -> io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest + 39, // 294: io.deephaven.proto.backplane.grpc.TableService.AsOfJoinTables:input_type -> io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest + 40, // 295: io.deephaven.proto.backplane.grpc.TableService.AjTables:input_type -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest + 40, // 296: io.deephaven.proto.backplane.grpc.TableService.RajTables:input_type -> io.deephaven.proto.backplane.grpc.AjRajTablesRequest + 41, // 297: io.deephaven.proto.backplane.grpc.TableService.RangeJoinTables:input_type -> io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest + 42, // 298: io.deephaven.proto.backplane.grpc.TableService.ComboAggregate:input_type -> io.deephaven.proto.backplane.grpc.ComboAggregateRequest + 43, // 299: io.deephaven.proto.backplane.grpc.TableService.AggregateAll:input_type -> io.deephaven.proto.backplane.grpc.AggregateAllRequest + 45, // 300: io.deephaven.proto.backplane.grpc.TableService.Aggregate:input_type -> io.deephaven.proto.backplane.grpc.AggregateRequest + 33, // 301: io.deephaven.proto.backplane.grpc.TableService.Snapshot:input_type -> io.deephaven.proto.backplane.grpc.SnapshotTableRequest + 34, // 302: io.deephaven.proto.backplane.grpc.TableService.SnapshotWhen:input_type -> io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest + 66, // 303: io.deephaven.proto.backplane.grpc.TableService.Flatten:input_type -> io.deephaven.proto.backplane.grpc.FlattenRequest + 68, // 304: io.deephaven.proto.backplane.grpc.TableService.RunChartDownsample:input_type -> io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest + 69, // 305: io.deephaven.proto.backplane.grpc.TableService.CreateInputTable:input_type -> io.deephaven.proto.backplane.grpc.CreateInputTableRequest + 70, // 306: io.deephaven.proto.backplane.grpc.TableService.WhereIn:input_type -> io.deephaven.proto.backplane.grpc.WhereInRequest + 72, // 307: io.deephaven.proto.backplane.grpc.TableService.Batch:input_type -> io.deephaven.proto.backplane.grpc.BatchTableRequest + 16, // 308: io.deephaven.proto.backplane.grpc.TableService.ExportedTableUpdates:input_type -> io.deephaven.proto.backplane.grpc.ExportedTableUpdatesRequest + 50, // 309: io.deephaven.proto.backplane.grpc.TableService.SeekRow:input_type -> io.deephaven.proto.backplane.grpc.SeekRowRequest + 67, // 310: io.deephaven.proto.backplane.grpc.TableService.MetaTable:input_type -> io.deephaven.proto.backplane.grpc.MetaTableRequest + 71, // 311: io.deephaven.proto.backplane.grpc.TableService.ComputeColumnStatistics:input_type -> io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest + 13, // 312: io.deephaven.proto.backplane.grpc.TableService.GetExportedTableCreationResponse:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 313: io.deephaven.proto.backplane.grpc.TableService.FetchTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 314: io.deephaven.proto.backplane.grpc.TableService.ApplyPreviewColumns:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 315: io.deephaven.proto.backplane.grpc.TableService.EmptyTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 316: io.deephaven.proto.backplane.grpc.TableService.TimeTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 317: io.deephaven.proto.backplane.grpc.TableService.DropColumns:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 318: io.deephaven.proto.backplane.grpc.TableService.Update:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 319: io.deephaven.proto.backplane.grpc.TableService.LazyUpdate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 320: io.deephaven.proto.backplane.grpc.TableService.View:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 321: io.deephaven.proto.backplane.grpc.TableService.UpdateView:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 322: io.deephaven.proto.backplane.grpc.TableService.Select:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 323: io.deephaven.proto.backplane.grpc.TableService.UpdateBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 324: io.deephaven.proto.backplane.grpc.TableService.SelectDistinct:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 325: io.deephaven.proto.backplane.grpc.TableService.Filter:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 326: io.deephaven.proto.backplane.grpc.TableService.UnstructuredFilter:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 327: io.deephaven.proto.backplane.grpc.TableService.Sort:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 328: io.deephaven.proto.backplane.grpc.TableService.Head:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 329: io.deephaven.proto.backplane.grpc.TableService.Tail:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 330: io.deephaven.proto.backplane.grpc.TableService.HeadBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 331: io.deephaven.proto.backplane.grpc.TableService.TailBy:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 332: io.deephaven.proto.backplane.grpc.TableService.Ungroup:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 333: io.deephaven.proto.backplane.grpc.TableService.MergeTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 334: io.deephaven.proto.backplane.grpc.TableService.CrossJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 335: io.deephaven.proto.backplane.grpc.TableService.NaturalJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 336: io.deephaven.proto.backplane.grpc.TableService.ExactJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 337: io.deephaven.proto.backplane.grpc.TableService.LeftJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 338: io.deephaven.proto.backplane.grpc.TableService.AsOfJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 339: io.deephaven.proto.backplane.grpc.TableService.AjTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 340: io.deephaven.proto.backplane.grpc.TableService.RajTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 341: io.deephaven.proto.backplane.grpc.TableService.RangeJoinTables:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 342: io.deephaven.proto.backplane.grpc.TableService.ComboAggregate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 343: io.deephaven.proto.backplane.grpc.TableService.AggregateAll:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 344: io.deephaven.proto.backplane.grpc.TableService.Aggregate:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 345: io.deephaven.proto.backplane.grpc.TableService.Snapshot:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 346: io.deephaven.proto.backplane.grpc.TableService.SnapshotWhen:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 347: io.deephaven.proto.backplane.grpc.TableService.Flatten:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 348: io.deephaven.proto.backplane.grpc.TableService.RunChartDownsample:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 349: io.deephaven.proto.backplane.grpc.TableService.CreateInputTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 350: io.deephaven.proto.backplane.grpc.TableService.WhereIn:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 351: io.deephaven.proto.backplane.grpc.TableService.Batch:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 17, // 352: io.deephaven.proto.backplane.grpc.TableService.ExportedTableUpdates:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage + 51, // 353: io.deephaven.proto.backplane.grpc.TableService.SeekRow:output_type -> io.deephaven.proto.backplane.grpc.SeekRowResponse + 13, // 354: io.deephaven.proto.backplane.grpc.TableService.MetaTable:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 13, // 355: io.deephaven.proto.backplane.grpc.TableService.ComputeColumnStatistics:output_type -> io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse + 312, // [312:356] is the sub-list for method output_type + 268, // [268:312] is the sub-list for method input_type + 268, // [268:268] is the sub-list for extension type_name + 268, // [268:268] is the sub-list for extension extendee + 0, // [0:268] is the sub-list for field type_name } func init() { file_deephaven_proto_table_proto_init() } @@ -13646,7 +13766,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComboAggregateRequest_Aggregate); i { + switch v := v.(*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_UpdateByRollingFormula); i { case 0: return &v.state case 1: @@ -13658,7 +13778,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecApproximatePercentile); i { + switch v := v.(*ComboAggregateRequest_Aggregate); i { case 0: return &v.state case 1: @@ -13670,7 +13790,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecCountDistinct); i { + switch v := v.(*AggSpec_AggSpecApproximatePercentile); i { case 0: return &v.state case 1: @@ -13682,7 +13802,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecDistinct); i { + switch v := v.(*AggSpec_AggSpecCountDistinct); i { case 0: return &v.state case 1: @@ -13694,7 +13814,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecFormula); i { + switch v := v.(*AggSpec_AggSpecDistinct); i { case 0: return &v.state case 1: @@ -13706,7 +13826,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecMedian); i { + switch v := v.(*AggSpec_AggSpecFormula); i { case 0: return &v.state case 1: @@ -13718,7 +13838,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecPercentile); i { + switch v := v.(*AggSpec_AggSpecMedian); i { case 0: return &v.state case 1: @@ -13730,7 +13850,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecSorted); i { + switch v := v.(*AggSpec_AggSpecPercentile); i { case 0: return &v.state case 1: @@ -13742,7 +13862,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecSortedColumn); i { + switch v := v.(*AggSpec_AggSpecSorted); i { case 0: return &v.state case 1: @@ -13754,7 +13874,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecTDigest); i { + switch v := v.(*AggSpec_AggSpecSortedColumn); i { case 0: return &v.state case 1: @@ -13766,7 +13886,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecUnique); i { + switch v := v.(*AggSpec_AggSpecTDigest); i { case 0: return &v.state case 1: @@ -13778,7 +13898,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecNonUniqueSentinel); i { + switch v := v.(*AggSpec_AggSpecUnique); i { case 0: return &v.state case 1: @@ -13790,7 +13910,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecWeighted); i { + switch v := v.(*AggSpec_AggSpecNonUniqueSentinel); i { case 0: return &v.state case 1: @@ -13802,7 +13922,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecAbsSum); i { + switch v := v.(*AggSpec_AggSpecWeighted); i { case 0: return &v.state case 1: @@ -13814,7 +13934,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecAvg); i { + switch v := v.(*AggSpec_AggSpecAbsSum); i { case 0: return &v.state case 1: @@ -13826,7 +13946,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecFirst); i { + switch v := v.(*AggSpec_AggSpecAvg); i { case 0: return &v.state case 1: @@ -13838,7 +13958,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecFreeze); i { + switch v := v.(*AggSpec_AggSpecFirst); i { case 0: return &v.state case 1: @@ -13850,7 +13970,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecGroup); i { + switch v := v.(*AggSpec_AggSpecFreeze); i { case 0: return &v.state case 1: @@ -13862,7 +13982,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecLast); i { + switch v := v.(*AggSpec_AggSpecGroup); i { case 0: return &v.state case 1: @@ -13874,7 +13994,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecMax); i { + switch v := v.(*AggSpec_AggSpecLast); i { case 0: return &v.state case 1: @@ -13886,7 +14006,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecMin); i { + switch v := v.(*AggSpec_AggSpecMax); i { case 0: return &v.state case 1: @@ -13898,7 +14018,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecStd); i { + switch v := v.(*AggSpec_AggSpecMin); i { case 0: return &v.state case 1: @@ -13910,7 +14030,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecSum); i { + switch v := v.(*AggSpec_AggSpecStd); i { case 0: return &v.state case 1: @@ -13922,7 +14042,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggSpec_AggSpecVar); i { + switch v := v.(*AggSpec_AggSpecSum); i { case 0: return &v.state case 1: @@ -13934,7 +14054,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Aggregation_AggregationColumns); i { + switch v := v.(*AggSpec_AggSpecVar); i { case 0: return &v.state case 1: @@ -13946,7 +14066,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Aggregation_AggregationCount); i { + switch v := v.(*Aggregation_AggregationColumns); i { case 0: return &v.state case 1: @@ -13958,7 +14078,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Aggregation_AggregationRowKey); i { + switch v := v.(*Aggregation_AggregationCount); i { case 0: return &v.state case 1: @@ -13970,7 +14090,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Aggregation_AggregationPartition); i { + switch v := v.(*Aggregation_AggregationRowKey); i { case 0: return &v.state case 1: @@ -13982,7 +14102,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunChartDownsampleRequest_ZoomRange); i { + switch v := v.(*Aggregation_AggregationPartition); i { case 0: return &v.state case 1: @@ -13994,7 +14114,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInputTableRequest_InputTableKind); i { + switch v := v.(*RunChartDownsampleRequest_ZoomRange); i { case 0: return &v.state case 1: @@ -14006,7 +14126,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly); i { + switch v := v.(*CreateInputTableRequest_InputTableKind); i { case 0: return &v.state case 1: @@ -14018,7 +14138,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked); i { + switch v := v.(*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly); i { case 0: return &v.state case 1: @@ -14030,7 +14150,7 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInputTableRequest_InputTableKind_Blink); i { + switch v := v.(*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked); i { case 0: return &v.state case 1: @@ -14042,6 +14162,18 @@ func file_deephaven_proto_table_proto_init() { } } file_deephaven_proto_table_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateInputTableRequest_InputTableKind_Blink); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_deephaven_proto_table_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BatchTableRequest_Operation); i { case 0: return &v.state @@ -14157,10 +14289,11 @@ func file_deephaven_proto_table_proto_init() { (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingCount)(nil), (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingStd)(nil), (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingWavg)(nil), + (*UpdateByRequest_UpdateByOperation_UpdateByColumn_UpdateBySpec_RollingFormula)(nil), } - file_deephaven_proto_table_proto_msgTypes[88].OneofWrappers = []interface{}{} - file_deephaven_proto_table_proto_msgTypes[96].OneofWrappers = []interface{}{} - file_deephaven_proto_table_proto_msgTypes[98].OneofWrappers = []interface{}{ + file_deephaven_proto_table_proto_msgTypes[89].OneofWrappers = []interface{}{} + file_deephaven_proto_table_proto_msgTypes[97].OneofWrappers = []interface{}{} + file_deephaven_proto_table_proto_msgTypes[99].OneofWrappers = []interface{}{ (*AggSpec_AggSpecNonUniqueSentinel_NullValue)(nil), (*AggSpec_AggSpecNonUniqueSentinel_StringValue)(nil), (*AggSpec_AggSpecNonUniqueSentinel_IntValue)(nil), @@ -14172,13 +14305,13 @@ func file_deephaven_proto_table_proto_init() { (*AggSpec_AggSpecNonUniqueSentinel_ShortValue)(nil), (*AggSpec_AggSpecNonUniqueSentinel_CharValue)(nil), } - file_deephaven_proto_table_proto_msgTypes[115].OneofWrappers = []interface{}{} - file_deephaven_proto_table_proto_msgTypes[116].OneofWrappers = []interface{}{ + file_deephaven_proto_table_proto_msgTypes[116].OneofWrappers = []interface{}{} + file_deephaven_proto_table_proto_msgTypes[117].OneofWrappers = []interface{}{ (*CreateInputTableRequest_InputTableKind_InMemoryAppendOnly_)(nil), (*CreateInputTableRequest_InputTableKind_InMemoryKeyBacked_)(nil), (*CreateInputTableRequest_InputTableKind_Blink_)(nil), } - file_deephaven_proto_table_proto_msgTypes[120].OneofWrappers = []interface{}{ + file_deephaven_proto_table_proto_msgTypes[121].OneofWrappers = []interface{}{ (*BatchTableRequest_Operation_EmptyTable)(nil), (*BatchTableRequest_Operation_TimeTable)(nil), (*BatchTableRequest_Operation_DropColumns)(nil), @@ -14226,7 +14359,7 @@ func file_deephaven_proto_table_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_deephaven_proto_table_proto_rawDesc, NumEnums: 12, - NumMessages: 121, + NumMessages: 122, NumExtensions: 0, NumServices: 1, }, diff --git a/java-client/session/src/main/java/io/deephaven/client/impl/UpdateByBuilder.java b/java-client/session/src/main/java/io/deephaven/client/impl/UpdateByBuilder.java index 9110c1028de..148bcc98483 100644 --- a/java-client/session/src/main/java/io/deephaven/client/impl/UpdateByBuilder.java +++ b/java-client/session/src/main/java/io/deephaven/client/impl/UpdateByBuilder.java @@ -301,6 +301,19 @@ public UpdateByColumn.UpdateBySpec visit(RollingWAvgSpec rs) { .setRollingWavg(builder.build()) .build(); } + + @Override + public UpdateByColumn.UpdateBySpec visit(RollingFormulaSpec rs) { + final UpdateByRollingFormula.Builder builder = + UpdateByRollingFormula.newBuilder() + .setReverseWindowScale(adapt(rs.revWindowScale())) + .setForwardWindowScale(adapt(rs.fwdWindowScale())) + .setFormula(rs.formula()) + .setParamToken(rs.paramToken()); + return UpdateByColumn.UpdateBySpec.newBuilder() + .setRollingFormula(builder.build()) + .build(); + } } static UpdateByColumn.UpdateBySpec adapt(UpdateBySpec spec) { diff --git a/java-client/session/src/test/java/io/deephaven/client/impl/UpdateBySpecBuilderTest.java b/java-client/session/src/test/java/io/deephaven/client/impl/UpdateBySpecBuilderTest.java index 19279169c63..4c9e7bd4d04 100644 --- a/java-client/session/src/test/java/io/deephaven/client/impl/UpdateBySpecBuilderTest.java +++ b/java-client/session/src/test/java/io/deephaven/client/impl/UpdateBySpecBuilderTest.java @@ -299,6 +299,25 @@ public UpdateByColumn.UpdateBySpec visit(RollingWAvgSpec spec) { .build()) .build(); } + + @Override + public UpdateByColumn.UpdateBySpec visit(RollingFormulaSpec spec) { + return UpdateByColumn.UpdateBySpec + .newBuilder().setRollingFormula( + UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.newBuilder() + .setReverseWindowScale(UpdateByWindowScale.newBuilder() + .setTime(UpdateByWindowScale.UpdateByWindowTime.newBuilder() + .setColumn("Timestamp").setNanos(1).build()) + .build()) + .setForwardWindowScale(UpdateByWindowScale.newBuilder() + .setTime(UpdateByWindowScale.UpdateByWindowTime.newBuilder() + .setColumn("Timestamp").setNanos(1).build()) + .build()) + .setFormula("sum(x)") + .setParamToken("x") + .build()) + .build(); + } } @Test @@ -613,6 +632,29 @@ void rollingWAvg() { .build()); } + @Test + void rollingFormula() { + check(RollingFormulaSpec.ofTime("Timestamp", Duration.ofNanos(1), Duration.ofNanos(2), "sum(x)", "x"), + UpdateByColumn.UpdateBySpec.newBuilder().setRollingFormula( + UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.newBuilder() + .setReverseWindowScale(time("Timestamp", 1)) + .setForwardWindowScale(time("Timestamp", 2)) + .setFormula("sum(x)") + .setParamToken("x") + .build()) + .build()); + + check(RollingFormulaSpec.ofTicks(42L, 43L, "sum(x)", "x"), + UpdateByColumn.UpdateBySpec.newBuilder().setRollingFormula( + UpdateByColumn.UpdateBySpec.UpdateByRollingFormula.newBuilder() + .setReverseWindowScale(ticks(42L)) + .setForwardWindowScale(ticks(43L)) + .setFormula("sum(x)") + .setParamToken("x") + .build()) + .build()); + } + private static void check(UpdateBySpec spec) { check(spec, spec.walk(ExpectedSpecVisitor.INSTANCE)); } diff --git a/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/table.proto b/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/table.proto index 2dcdd486f5b..79ff29113f8 100644 --- a/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/table.proto +++ b/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/table.proto @@ -561,6 +561,13 @@ message UpdateByRequest { string weight_column = 3; } + message UpdateByRollingFormula { + UpdateByWindowScale reverse_window_scale = 1; + UpdateByWindowScale forward_window_scale = 2; + string formula = 3; + string param_token = 4; + } + oneof type { UpdateByCumulativeSum sum = 1; UpdateByCumulativeMin min = 2; @@ -582,6 +589,7 @@ message UpdateByRequest { UpdateByRollingCount rolling_count = 18; UpdateByRollingStd rolling_std = 19; UpdateByRollingWAvg rolling_wavg = 20; + UpdateByRollingFormula rolling_formula = 21; } } diff --git a/py/client/pydeephaven/agg.py b/py/client/pydeephaven/agg.py index b50df148f1f..3dca2783650 100644 --- a/py/client/pydeephaven/agg.py +++ b/py/client/pydeephaven/agg.py @@ -172,11 +172,15 @@ def first(cols: Union[str, List[str]] = None) -> Aggregation: def formula(formula: str, formula_param: str, cols: Union[str, List[str]] = None) -> Aggregation: - """Creates a user defined formula aggregation. + """Creates a user defined formula aggregation. This formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions Args: - formula (str): the user defined formula to apply to each group - formula_param (str): the parameter name within the formula + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. cols (Union[str, List[str]]): the column(s) to aggregate on, can be renaming expressions, i.e. "new_col = col"; default is None, only valid when used in Table agg_all_by operation diff --git a/py/client/pydeephaven/proto/table_pb2.py b/py/client/pydeephaven/proto/table_pb2.py index ccf1ea47559..d11bd9b6aa5 100644 --- a/py/client/pydeephaven/proto/table_pb2.py +++ b/py/client/pydeephaven/proto/table_pb2.py @@ -14,7 +14,7 @@ from pydeephaven.proto import ticket_pb2 as deephaven_dot_proto_dot_ticket__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x64\x65\x65phaven/proto/table.proto\x12!io.deephaven.proto.backplane.grpc\x1a\x1c\x64\x65\x65phaven/proto/ticket.proto\"l\n\x0eTableReference\x12;\n\x06ticket\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketH\x00\x12\x16\n\x0c\x62\x61tch_offset\x18\x02 \x01(\x11H\x00\x42\x05\n\x03ref\"\xc6\x01\n\x1d\x45xportedTableCreationResponse\x12\x44\n\tresult_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x12\n\nerror_info\x18\x03 \x01(\t\x12\x15\n\rschema_header\x18\x04 \x01(\x0c\x12\x11\n\tis_static\x18\x05 \x01(\x08\x12\x10\n\x04size\x18\x06 \x01(\x12\x42\x02\x30\x01\"\x97\x01\n\x11\x46\x65tchTableRequest\x12\x44\n\tsource_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12<\n\tresult_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\xa0\x01\n\x1a\x41pplyPreviewColumnsRequest\x12\x44\n\tsource_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12<\n\tresult_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x1d\n\x1b\x45xportedTableUpdatesRequest\"\x8c\x01\n\x1a\x45xportedTableUpdateMessage\x12<\n\texport_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x10\n\x04size\x18\x02 \x01(\x12\x42\x02\x30\x01\x12\x1e\n\x16update_failure_message\x18\x03 \x01(\t\"c\n\x11\x45mptyTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x10\n\x04size\x18\x02 \x01(\x12\x42\x02\x30\x01\"\xef\x01\n\x10TimeTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x1e\n\x10start_time_nanos\x18\x02 \x01(\x12\x42\x02\x30\x01H\x00\x12\x1b\n\x11start_time_string\x18\x05 \x01(\tH\x00\x12\x1a\n\x0cperiod_nanos\x18\x03 \x01(\x12\x42\x02\x30\x01H\x01\x12\x17\n\rperiod_string\x18\x06 \x01(\tH\x01\x12\x13\n\x0b\x62link_table\x18\x04 \x01(\x08\x42\x0c\n\nstart_timeB\x08\n\x06period\"\xb1\x01\n\x15SelectOrUpdateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_specs\x18\x03 \x03(\t\"\x8c\x02\n\x0bMathContext\x12\x11\n\tprecision\x18\x01 \x01(\x11\x12R\n\rrounding_mode\x18\x02 \x01(\x0e\x32;.io.deephaven.proto.backplane.grpc.MathContext.RoundingMode\"\x95\x01\n\x0cRoundingMode\x12\x1f\n\x1bROUNDING_MODE_NOT_SPECIFIED\x10\x00\x12\x06\n\x02UP\x10\x01\x12\x08\n\x04\x44OWN\x10\x02\x12\x0b\n\x07\x43\x45ILING\x10\x03\x12\t\n\x05\x46LOOR\x10\x04\x12\x0b\n\x07HALF_UP\x10\x05\x12\r\n\tHALF_DOWN\x10\x06\x12\r\n\tHALF_EVEN\x10\x07\x12\x0f\n\x0bUNNECESSARY\x10\x08\"\xdb\x02\n\x13UpdateByWindowScale\x12[\n\x05ticks\x18\x01 \x01(\x0b\x32J.io.deephaven.proto.backplane.grpc.UpdateByWindowScale.UpdateByWindowTicksH\x00\x12Y\n\x04time\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.grpc.UpdateByWindowScale.UpdateByWindowTimeH\x00\x1a$\n\x13UpdateByWindowTicks\x12\r\n\x05ticks\x18\x01 \x01(\x01\x1a^\n\x12UpdateByWindowTime\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x13\n\x05nanos\x18\x02 \x01(\x12\x42\x02\x30\x01H\x00\x12\x19\n\x0f\x64uration_string\x18\x03 \x01(\tH\x00\x42\x08\n\x06windowB\x06\n\x04type\"\xe1\x03\n\x11UpdateByEmOptions\x12I\n\ron_null_value\x18\x01 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12H\n\x0con_nan_value\x18\x02 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12H\n\x0con_null_time\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12R\n\x16on_negative_delta_time\x18\x04 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12N\n\x12on_zero_delta_time\x18\x05 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12I\n\x11\x62ig_value_context\x18\x06 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.MathContext\"f\n\x14UpdateByDeltaOptions\x12N\n\rnull_behavior\x18\x01 \x01(\x0e\x32\x37.io.deephaven.proto.backplane.grpc.UpdateByNullBehavior\"\x99\x34\n\x0fUpdateByRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12S\n\x07options\x18\x03 \x01(\x0b\x32\x42.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOptions\x12X\n\noperations\x18\x04 \x03(\x0b\x32\x44.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation\x12\x18\n\x10group_by_columns\x18\x05 \x03(\t\x1a\xc3\x03\n\x0fUpdateByOptions\x12\x1c\n\x0fuse_redirection\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x63hunk_capacity\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12.\n!max_static_sparse_memory_overhead\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12$\n\x17initial_hash_table_size\x18\x04 \x01(\x05H\x03\x88\x01\x01\x12 \n\x13maximum_load_factor\x18\x05 \x01(\x01H\x04\x88\x01\x01\x12\x1f\n\x12target_load_factor\x18\x06 \x01(\x01H\x05\x88\x01\x01\x12\x44\n\x0cmath_context\x18\x07 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.MathContextB\x12\n\x10_use_redirectionB\x11\n\x0f_chunk_capacityB$\n\"_max_static_sparse_memory_overheadB\x1a\n\x18_initial_hash_table_sizeB\x16\n\x14_maximum_load_factorB\x15\n\x13_target_load_factor\x1a\xf2-\n\x11UpdateByOperation\x12\x65\n\x06\x63olumn\x18\x01 \x01(\x0b\x32S.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumnH\x00\x1a\xed,\n\x0eUpdateByColumn\x12n\n\x04spec\x18\x01 \x01(\x0b\x32`.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x1a\xd5+\n\x0cUpdateBySpec\x12\x85\x01\n\x03sum\x18\x01 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeSumH\x00\x12\x85\x01\n\x03min\x18\x02 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeMinH\x00\x12\x85\x01\n\x03max\x18\x03 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeMaxH\x00\x12\x8d\x01\n\x07product\x18\x04 \x01(\x0b\x32z.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeProductH\x00\x12}\n\x04\x66ill\x18\x05 \x01(\x0b\x32m.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByFillH\x00\x12{\n\x03\x65ma\x18\x06 \x01(\x0b\x32l.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmaH\x00\x12\x8a\x01\n\x0brolling_sum\x18\x07 \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSumH\x00\x12\x8e\x01\n\rrolling_group\x18\x08 \x01(\x0b\x32u.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroupH\x00\x12\x8a\x01\n\x0brolling_avg\x18\t \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvgH\x00\x12\x8a\x01\n\x0brolling_min\x18\n \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMinH\x00\x12\x8a\x01\n\x0brolling_max\x18\x0b \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMaxH\x00\x12\x92\x01\n\x0frolling_product\x18\x0c \x01(\x0b\x32w.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProductH\x00\x12\x7f\n\x05\x64\x65lta\x18\r \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByDeltaH\x00\x12{\n\x03\x65ms\x18\x0e \x01(\x0b\x32l.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmsH\x00\x12\x80\x01\n\x06\x65m_min\x18\x0f \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMinH\x00\x12\x80\x01\n\x06\x65m_max\x18\x10 \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMaxH\x00\x12\x80\x01\n\x06\x65m_std\x18\x11 \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStdH\x00\x12\x8e\x01\n\rrolling_count\x18\x12 \x01(\x0b\x32u.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCountH\x00\x12\x8a\x01\n\x0brolling_std\x18\x13 \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStdH\x00\x12\x8c\x01\n\x0crolling_wavg\x18\x14 \x01(\x0b\x32t.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvgH\x00\x1a\x17\n\x15UpdateByCumulativeSum\x1a\x17\n\x15UpdateByCumulativeMin\x1a\x17\n\x15UpdateByCumulativeMax\x1a\x1b\n\x19UpdateByCumulativeProduct\x1a\x0e\n\x0cUpdateByFill\x1a\xa2\x01\n\x0bUpdateByEma\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa2\x01\n\x0bUpdateByEms\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmMin\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmMax\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmStd\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1aY\n\rUpdateByDelta\x12H\n\x07options\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.UpdateByDeltaOptions\x1a\xc0\x01\n\x12UpdateByRollingSum\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc2\x01\n\x14UpdateByRollingGroup\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingAvg\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingMin\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingMax\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc4\x01\n\x16UpdateByRollingProduct\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc2\x01\n\x14UpdateByRollingCount\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingStd\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xd8\x01\n\x13UpdateByRollingWAvg\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12\x15\n\rweight_column\x18\x03 \x01(\tB\x06\n\x04typeB\x06\n\x04type\"\xb1\x01\n\x15SelectDistinctRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_names\x18\x03 \x03(\t\"\xae\x01\n\x12\x44ropColumnsRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_names\x18\x03 \x03(\t\"\xb5\x01\n\x1eUnstructuredFilterTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07\x66ilters\x18\x03 \x03(\t\"\xad\x01\n\x11HeadOrTailRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x08num_rows\x18\x03 \x01(\x12\x42\x02\x30\x01\"\xce\x01\n\x13HeadOrTailByRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x08num_rows\x18\x03 \x01(\x12\x42\x02\x30\x01\x12\x1d\n\x15group_by_column_specs\x18\x04 \x03(\t\"\xc3\x01\n\x0eUngroupRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x11\n\tnull_fill\x18\x03 \x01(\x08\x12\x1a\n\x12\x63olumns_to_ungroup\x18\x04 \x03(\t\"\xad\x01\n\x12MergeTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x45\n\nsource_ids\x18\x02 \x03(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x12\n\nkey_column\x18\x03 \x01(\t\"\x9a\x01\n\x14SnapshotTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\xb1\x02\n\x18SnapshotWhenTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07\x62\x61se_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x45\n\ntrigger_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07initial\x18\x04 \x01(\x08\x12\x13\n\x0bincremental\x18\x05 \x01(\x08\x12\x0f\n\x07history\x18\x06 \x01(\x08\x12\x15\n\rstamp_columns\x18\x07 \x03(\t\"\xa7\x02\n\x16\x43rossJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\x12\x14\n\x0creserve_bits\x18\x06 \x01(\x05\"\x93\x02\n\x18NaturalJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\x91\x02\n\x16\x45xactJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\x90\x02\n\x15LeftJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\xd1\x03\n\x15\x41sOfJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\x12\\\n\x10\x61s_of_match_rule\x18\x07 \x01(\x0e\x32\x42.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.MatchRule\"]\n\tMatchRule\x12\x13\n\x0fLESS_THAN_EQUAL\x10\x00\x12\r\n\tLESS_THAN\x10\x01\x12\x16\n\x12GREATER_THAN_EQUAL\x10\x02\x12\x10\n\x0cGREATER_THAN\x10\x03\x1a\x02\x18\x01:\x02\x18\x01\"\xa6\x02\n\x12\x41jRajTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x1b\n\x13\x65xact_match_columns\x18\x04 \x03(\t\x12\x14\n\x0c\x61s_of_column\x18\x05 \x01(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x06 \x03(\t\"\xcb\x06\n\x16RangeJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x1b\n\x13\x65xact_match_columns\x18\x04 \x03(\t\x12\x19\n\x11left_start_column\x18\x05 \x01(\t\x12\x62\n\x10range_start_rule\x18\x06 \x01(\x0e\x32H.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeStartRule\x12\x1a\n\x12right_range_column\x18\x07 \x01(\t\x12^\n\x0erange_end_rule\x18\x08 \x01(\x0e\x32\x46.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeEndRule\x12\x17\n\x0fleft_end_column\x18\t \x01(\t\x12\x44\n\x0c\x61ggregations\x18\n \x03(\x0b\x32..io.deephaven.proto.backplane.grpc.Aggregation\"v\n\x0eRangeStartRule\x12\x15\n\x11START_UNSPECIFIED\x10\x00\x12\r\n\tLESS_THAN\x10\x01\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x02\x12&\n\"LESS_THAN_OR_EQUAL_ALLOW_PRECEDING\x10\x03\"{\n\x0cRangeEndRule\x12\x13\n\x0f\x45ND_UNSPECIFIED\x10\x00\x12\x10\n\x0cGREATER_THAN\x10\x01\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x02\x12)\n%GREATER_THAN_OR_EQUAL_ALLOW_FOLLOWING\x10\x03\"\xfe\x04\n\x15\x43omboAggregateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12V\n\naggregates\x18\x03 \x03(\x0b\x32\x42.io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate\x12\x18\n\x10group_by_columns\x18\x04 \x03(\t\x12\x13\n\x0b\x66orce_combo\x18\x05 \x01(\x08\x1a\xad\x01\n\tAggregate\x12N\n\x04type\x18\x01 \x01(\x0e\x32@.io.deephaven.proto.backplane.grpc.ComboAggregateRequest.AggType\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12\x12\n\npercentile\x18\x04 \x01(\x01\x12\x12\n\navg_median\x18\x05 \x01(\x08\"\xa5\x01\n\x07\x41ggType\x12\x07\n\x03SUM\x10\x00\x12\x0b\n\x07\x41\x42S_SUM\x10\x01\x12\t\n\x05GROUP\x10\x02\x12\x07\n\x03\x41VG\x10\x03\x12\t\n\x05\x43OUNT\x10\x04\x12\t\n\x05\x46IRST\x10\x05\x12\x08\n\x04LAST\x10\x06\x12\x07\n\x03MIN\x10\x07\x12\x07\n\x03MAX\x10\x08\x12\n\n\x06MEDIAN\x10\t\x12\x0e\n\nPERCENTILE\x10\n\x12\x07\n\x03STD\x10\x0b\x12\x07\n\x03VAR\x10\x0c\x12\x10\n\x0cWEIGHTED_AVG\x10\r:\x02\x18\x01\"\xed\x01\n\x13\x41ggregateAllRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x38\n\x04spec\x18\x03 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.AggSpec\x12\x18\n\x10group_by_columns\x18\x04 \x03(\t\"\xd7\x17\n\x07\x41ggSpec\x12K\n\x07\x61\x62s_sum\x18\x01 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSumH\x00\x12i\n\x16\x61pproximate_percentile\x18\x02 \x01(\x0b\x32G.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentileH\x00\x12\x44\n\x03\x61vg\x18\x03 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvgH\x00\x12Y\n\x0e\x63ount_distinct\x18\x04 \x01(\x0b\x32?.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinctH\x00\x12N\n\x08\x64istinct\x18\x05 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinctH\x00\x12H\n\x05\x66irst\x18\x06 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirstH\x00\x12L\n\x07\x66ormula\x18\x07 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormulaH\x00\x12J\n\x06\x66reeze\x18\x08 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreezeH\x00\x12H\n\x05group\x18\t \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroupH\x00\x12\x46\n\x04last\x18\n \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLastH\x00\x12\x44\n\x03max\x18\x0b \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMaxH\x00\x12J\n\x06median\x18\x0c \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedianH\x00\x12\x44\n\x03min\x18\r \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMinH\x00\x12R\n\npercentile\x18\x0e \x01(\x0b\x32<.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentileH\x00\x12P\n\x0csorted_first\x18\x0f \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedH\x00\x12O\n\x0bsorted_last\x18\x10 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedH\x00\x12\x44\n\x03std\x18\x11 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStdH\x00\x12\x44\n\x03sum\x18\x12 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSumH\x00\x12M\n\x08t_digest\x18\x13 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigestH\x00\x12J\n\x06unique\x18\x14 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUniqueH\x00\x12R\n\x0cweighted_avg\x18\x15 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeightedH\x00\x12R\n\x0cweighted_sum\x18\x16 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeightedH\x00\x12\x44\n\x03var\x18\x17 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVarH\x00\x1a\\\n\x1c\x41ggSpecApproximatePercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\x18\n\x0b\x63ompression\x18\x02 \x01(\x01H\x00\x88\x01\x01\x42\x0e\n\x0c_compression\x1a+\n\x14\x41ggSpecCountDistinct\x12\x13\n\x0b\x63ount_nulls\x18\x01 \x01(\x08\x1a(\n\x0f\x41ggSpecDistinct\x12\x15\n\rinclude_nulls\x18\x01 \x01(\x08\x1a\x36\n\x0e\x41ggSpecFormula\x12\x0f\n\x07\x66ormula\x18\x01 \x01(\t\x12\x13\n\x0bparam_token\x18\x02 \x01(\t\x1a/\n\rAggSpecMedian\x12\x1e\n\x16\x61verage_evenly_divided\x18\x01 \x01(\x08\x1aG\n\x11\x41ggSpecPercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\x1e\n\x16\x61verage_evenly_divided\x18\x02 \x01(\x08\x1a`\n\rAggSpecSorted\x12O\n\x07\x63olumns\x18\x01 \x03(\x0b\x32>.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn\x1a*\n\x13\x41ggSpecSortedColumn\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1a:\n\x0e\x41ggSpecTDigest\x12\x18\n\x0b\x63ompression\x18\x01 \x01(\x01H\x00\x88\x01\x01\x42\x0e\n\x0c_compression\x1a\x88\x01\n\rAggSpecUnique\x12\x15\n\rinclude_nulls\x18\x01 \x01(\x08\x12`\n\x13non_unique_sentinel\x18\x02 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel\x1a\xb5\x02\n\x18\x41ggSpecNonUniqueSentinel\x12\x42\n\nnull_value\x18\x01 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.NullValueH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x11H\x00\x12\x18\n\nlong_value\x18\x04 \x01(\x12\x42\x02\x30\x01H\x00\x12\x15\n\x0b\x66loat_value\x18\x05 \x01(\x02H\x00\x12\x16\n\x0c\x64ouble_value\x18\x06 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x07 \x01(\x08H\x00\x12\x14\n\nbyte_value\x18\x08 \x01(\x11H\x00\x12\x15\n\x0bshort_value\x18\t \x01(\x11H\x00\x12\x14\n\nchar_value\x18\n \x01(\x11H\x00\x42\x06\n\x04type\x1a(\n\x0f\x41ggSpecWeighted\x12\x15\n\rweight_column\x18\x01 \x01(\t\x1a\x0f\n\rAggSpecAbsSum\x1a\x0c\n\nAggSpecAvg\x1a\x0e\n\x0c\x41ggSpecFirst\x1a\x0f\n\rAggSpecFreeze\x1a\x0e\n\x0c\x41ggSpecGroup\x1a\r\n\x0b\x41ggSpecLast\x1a\x0c\n\nAggSpecMax\x1a\x0c\n\nAggSpecMin\x1a\x0c\n\nAggSpecStd\x1a\x0c\n\nAggSpecSum\x1a\x0c\n\nAggSpecVarB\x06\n\x04type\"\xdc\x02\n\x10\x41ggregateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12L\n\x11initial_groups_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x16\n\x0epreserve_empty\x18\x04 \x01(\x08\x12\x44\n\x0c\x61ggregations\x18\x05 \x03(\x0b\x32..io.deephaven.proto.backplane.grpc.Aggregation\x12\x18\n\x10group_by_columns\x18\x06 \x03(\t\"\xd3\x05\n\x0b\x41ggregation\x12T\n\x07\x63olumns\x18\x01 \x01(\x0b\x32\x41.io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumnsH\x00\x12P\n\x05\x63ount\x18\x02 \x01(\x0b\x32?.io.deephaven.proto.backplane.grpc.Aggregation.AggregationCountH\x00\x12Y\n\rfirst_row_key\x18\x03 \x01(\x0b\x32@.io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKeyH\x00\x12X\n\x0clast_row_key\x18\x04 \x01(\x0b\x32@.io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKeyH\x00\x12X\n\tpartition\x18\x05 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartitionH\x00\x1a\x63\n\x12\x41ggregationColumns\x12\x38\n\x04spec\x18\x01 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.AggSpec\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x1a\'\n\x10\x41ggregationCount\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1a(\n\x11\x41ggregationRowKey\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1aM\n\x14\x41ggregationPartition\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12 \n\x18include_group_by_columns\x18\x02 \x01(\x08\x42\x06\n\x04type\"\xe1\x01\n\x0eSortDescriptor\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x13\n\x0bis_absolute\x18\x02 \x01(\x08\x12R\n\tdirection\x18\x03 \x01(\x0e\x32?.io.deephaven.proto.backplane.grpc.SortDescriptor.SortDirection\"Q\n\rSortDirection\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x17\n\nDESCENDING\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\r\n\tASCENDING\x10\x01\x12\x0b\n\x07REVERSE\x10\x02\"\xd8\x01\n\x10SortTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12@\n\x05sorts\x18\x03 \x03(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.SortDescriptor\"\xd7\x01\n\x12\x46ilterTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12=\n\x07\x66ilters\x18\x03 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"\xf9\x01\n\x0eSeekRowRequest\x12<\n\tsource_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x18\n\x0cstarting_row\x18\x02 \x01(\x12\x42\x02\x30\x01\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12>\n\nseek_value\x18\x04 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.Literal\x12\x13\n\x0binsensitive\x18\x05 \x01(\x08\x12\x10\n\x08\x63ontains\x18\x06 \x01(\x08\x12\x13\n\x0bis_backward\x18\x07 \x01(\x08\")\n\x0fSeekRowResponse\x12\x16\n\nresult_row\x18\x01 \x01(\x12\x42\x02\x30\x01\" \n\tReference\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\"\x91\x01\n\x07Literal\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x16\n\x0c\x64ouble_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x18\n\nlong_value\x18\x04 \x01(\x12\x42\x02\x30\x01H\x00\x12\x1d\n\x0fnano_time_value\x18\x05 \x01(\x12\x42\x02\x30\x01H\x00\x42\x07\n\x05value\"\x91\x01\n\x05Value\x12\x41\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.ReferenceH\x00\x12=\n\x07literal\x18\x02 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.LiteralH\x00\x42\x06\n\x04\x64\x61ta\"\xbc\x05\n\tCondition\x12>\n\x03\x61nd\x18\x01 \x01(\x0b\x32/.io.deephaven.proto.backplane.grpc.AndConditionH\x00\x12<\n\x02or\x18\x02 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.OrConditionH\x00\x12>\n\x03not\x18\x03 \x01(\x0b\x32/.io.deephaven.proto.backplane.grpc.NotConditionH\x00\x12\x46\n\x07\x63ompare\x18\x04 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.CompareConditionH\x00\x12<\n\x02in\x18\x05 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.InConditionH\x00\x12\x44\n\x06invoke\x18\x06 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.InvokeConditionH\x00\x12\x45\n\x07is_null\x18\x07 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.IsNullConditionH\x00\x12\x46\n\x07matches\x18\x08 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.MatchesConditionH\x00\x12H\n\x08\x63ontains\x18\t \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.ContainsConditionH\x00\x12\x44\n\x06search\x18\n \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.SearchConditionH\x00\x42\x06\n\x04\x64\x61ta\"M\n\x0c\x41ndCondition\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"L\n\x0bOrCondition\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"L\n\x0cNotCondition\x12<\n\x06\x66ilter\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"\xac\x03\n\x10\x43ompareCondition\x12W\n\toperation\x18\x01 \x01(\x0e\x32\x44.io.deephaven.proto.backplane.grpc.CompareCondition.CompareOperation\x12L\n\x10\x63\x61se_sensitivity\x18\x02 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12\x35\n\x03lhs\x18\x03 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12\x35\n\x03rhs\x18\x04 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\"\x82\x01\n\x10\x43ompareOperation\x12\r\n\tLESS_THAN\x10\x00\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x01\x12\x10\n\x0cGREATER_THAN\x10\x02\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x03\x12\n\n\x06\x45QUALS\x10\x04\x12\x0e\n\nNOT_EQUALS\x10\x05\"\x95\x02\n\x0bInCondition\x12\x38\n\x06target\x18\x01 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12<\n\ncandidates\x18\x02 \x03(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"\x98\x01\n\x0fInvokeCondition\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x38\n\x06target\x18\x02 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12;\n\targuments\x18\x03 \x03(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\"R\n\x0fIsNullCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\"\xf2\x01\n\x10MatchesCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\x12\r\n\x05regex\x18\x02 \x01(\t\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"\xfb\x01\n\x11\x43ontainsCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\x12\x15\n\rsearch_string\x18\x02 \x01(\t\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"s\n\x0fSearchCondition\x12\x15\n\rsearch_string\x18\x01 \x01(\t\x12I\n\x13optional_references\x18\x02 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\"\x94\x01\n\x0e\x46lattenRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\x96\x01\n\x10MetaTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\xb4\x03\n\x19RunChartDownsampleRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x13\n\x0bpixel_count\x18\x03 \x01(\x05\x12Z\n\nzoom_range\x18\x04 \x01(\x0b\x32\x46.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange\x12\x15\n\rx_column_name\x18\x05 \x01(\t\x12\x16\n\x0ey_column_names\x18\x06 \x03(\t\x1as\n\tZoomRange\x12\x1f\n\x0emin_date_nanos\x18\x01 \x01(\x03\x42\x02\x30\x01H\x00\x88\x01\x01\x12\x1f\n\x0emax_date_nanos\x18\x02 \x01(\x03\x42\x02\x30\x01H\x01\x88\x01\x01\x42\x11\n\x0f_min_date_nanosB\x11\n\x0f_max_date_nanos\"\xe0\x05\n\x17\x43reateInputTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12L\n\x0fsource_table_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReferenceH\x00\x12\x10\n\x06schema\x18\x03 \x01(\x0cH\x00\x12W\n\x04kind\x18\x04 \x01(\x0b\x32I.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind\x1a\xbf\x03\n\x0eInputTableKind\x12}\n\x15in_memory_append_only\x18\x01 \x01(\x0b\x32\\.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnlyH\x00\x12{\n\x14in_memory_key_backed\x18\x02 \x01(\x0b\x32[.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBackedH\x00\x12`\n\x05\x62link\x18\x03 \x01(\x0b\x32O.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.BlinkH\x00\x1a\x14\n\x12InMemoryAppendOnly\x1a(\n\x11InMemoryKeyBacked\x12\x13\n\x0bkey_columns\x18\x01 \x03(\t\x1a\x07\n\x05\x42linkB\x06\n\x04kindB\x0c\n\ndefinition\"\x83\x02\n\x0eWhereInRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x10\n\x08inverted\x18\x04 \x01(\x08\x12\x18\n\x10\x63olumns_to_match\x18\x05 \x03(\t\"\xea\x01\n\x17\x43olumnStatisticsRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12\x1f\n\x12unique_value_limit\x18\x04 \x01(\x05H\x00\x88\x01\x01\x42\x15\n\x13_unique_value_limit\"\xc8\x19\n\x11\x42\x61tchTableRequest\x12K\n\x03ops\x18\x01 \x03(\x0b\x32>.io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation\x1a\xe5\x18\n\tOperation\x12K\n\x0b\x65mpty_table\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.EmptyTableRequestH\x00\x12I\n\ntime_table\x18\x02 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.TimeTableRequestH\x00\x12M\n\x0c\x64rop_columns\x18\x03 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.DropColumnsRequestH\x00\x12J\n\x06update\x18\x04 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12O\n\x0blazy_update\x18\x05 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12H\n\x04view\x18\x06 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12O\n\x0bupdate_view\x18\x07 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12J\n\x06select\x18\x08 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12S\n\x0fselect_distinct\x18\t \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectDistinctRequestH\x00\x12G\n\x06\x66ilter\x18\n \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.FilterTableRequestH\x00\x12`\n\x13unstructured_filter\x18\x0b \x01(\x0b\x32\x41.io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequestH\x00\x12\x43\n\x04sort\x18\x0c \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.SortTableRequestH\x00\x12\x44\n\x04head\x18\r \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequestH\x00\x12\x44\n\x04tail\x18\x0e \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequestH\x00\x12I\n\x07head_by\x18\x0f \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequestH\x00\x12I\n\x07tail_by\x18\x10 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequestH\x00\x12\x44\n\x07ungroup\x18\x11 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.UngroupRequestH\x00\x12\x46\n\x05merge\x18\x12 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.MergeTablesRequestH\x00\x12S\n\x0f\x63ombo_aggregate\x18\x13 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.ComboAggregateRequestH\x00\x12\x44\n\x07\x66latten\x18\x15 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.FlattenRequestH\x00\x12\\\n\x14run_chart_downsample\x18\x16 \x01(\x0b\x32<.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequestH\x00\x12O\n\ncross_join\x18\x17 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.CrossJoinTablesRequestH\x00\x12S\n\x0cnatural_join\x18\x18 \x01(\x0b\x32;.io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequestH\x00\x12O\n\nexact_join\x18\x19 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.ExactJoinTablesRequestH\x00\x12M\n\tleft_join\x18\x1a \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.LeftJoinTablesRequestH\x00\x12R\n\nas_of_join\x18\x1b \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequestB\x02\x18\x01H\x00\x12K\n\x0b\x66\x65tch_table\x18\x1c \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.FetchTableRequestH\x00\x12^\n\x15\x61pply_preview_columns\x18\x1e \x01(\x0b\x32=.io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequestH\x00\x12X\n\x12\x63reate_input_table\x18\x1f \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.CreateInputTableRequestH\x00\x12G\n\tupdate_by\x18 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.UpdateByRequestH\x00\x12\x45\n\x08where_in\x18! \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.WhereInRequestH\x00\x12O\n\raggregate_all\x18\" \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.AggregateAllRequestH\x00\x12H\n\taggregate\x18# \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.AggregateRequestH\x00\x12K\n\x08snapshot\x18$ \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.SnapshotTableRequestH\x00\x12T\n\rsnapshot_when\x18% \x01(\x0b\x32;.io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequestH\x00\x12I\n\nmeta_table\x18& \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.MetaTableRequestH\x00\x12O\n\nrange_join\x18\' \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequestH\x00\x12\x43\n\x02\x61j\x18( \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequestH\x00\x12\x44\n\x03raj\x18) \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequestH\x00\x12W\n\x11\x63olumn_statistics\x18* \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.ColumnStatisticsRequestH\x00\x42\x04\n\x02opJ\x04\x08\x14\x10\x15J\x04\x08\x1d\x10\x1e*b\n\x0f\x42\x61\x64\x44\x61taBehavior\x12#\n\x1f\x42\x41\x44_DATA_BEHAVIOR_NOT_SPECIFIED\x10\x00\x12\t\n\x05THROW\x10\x01\x12\t\n\x05RESET\x10\x02\x12\x08\n\x04SKIP\x10\x03\x12\n\n\x06POISON\x10\x04*t\n\x14UpdateByNullBehavior\x12\x1f\n\x1bNULL_BEHAVIOR_NOT_SPECIFIED\x10\x00\x12\x12\n\x0eNULL_DOMINATES\x10\x01\x12\x13\n\x0fVALUE_DOMINATES\x10\x02\x12\x12\n\x0eZERO_DOMINATES\x10\x03*\x1b\n\tNullValue\x12\x0e\n\nNULL_VALUE\x10\x00*2\n\x0f\x43\x61seSensitivity\x12\x0e\n\nMATCH_CASE\x10\x00\x12\x0f\n\x0bIGNORE_CASE\x10\x01*&\n\tMatchType\x12\x0b\n\x07REGULAR\x10\x00\x12\x0c\n\x08INVERTED\x10\x01\x32\xa8\x30\n\x0cTableService\x12\x91\x01\n GetExportedTableCreationResponse\x12).io.deephaven.proto.backplane.grpc.Ticket\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\nFetchTable\x12\x34.io.deephaven.proto.backplane.grpc.FetchTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x98\x01\n\x13\x41pplyPreviewColumns\x12=.io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\nEmptyTable\x12\x34.io.deephaven.proto.backplane.grpc.EmptyTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\tTimeTable\x12\x33.io.deephaven.proto.backplane.grpc.TimeTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x88\x01\n\x0b\x44ropColumns\x12\x35.io.deephaven.proto.backplane.grpc.DropColumnsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\x06Update\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8a\x01\n\nLazyUpdate\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x04View\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8a\x01\n\nUpdateView\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\x06Select\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x82\x01\n\x08UpdateBy\x12\x32.io.deephaven.proto.backplane.grpc.UpdateByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8e\x01\n\x0eSelectDistinct\x12\x38.io.deephaven.proto.backplane.grpc.SelectDistinctRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x83\x01\n\x06\x46ilter\x12\x35.io.deephaven.proto.backplane.grpc.FilterTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x9b\x01\n\x12UnstructuredFilter\x12\x41.io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x7f\n\x04Sort\x12\x33.io.deephaven.proto.backplane.grpc.SortTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x04Head\x12\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x04Tail\x12\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x06HeadBy\x12\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x06TailBy\x12\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07Ungroup\x12\x31.io.deephaven.proto.backplane.grpc.UngroupRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x88\x01\n\x0bMergeTables\x12\x35.io.deephaven.proto.backplane.grpc.MergeTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0f\x43rossJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x94\x01\n\x11NaturalJoinTables\x12;.io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0f\x45xactJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8e\x01\n\x0eLeftJoinTables\x12\x38.io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x91\x01\n\x0e\x41sOfJoinTables\x12\x38.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x03\x88\x02\x01\x12\x85\x01\n\x08\x41jTables\x12\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\tRajTables\x12\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0fRangeJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x91\x01\n\x0e\x43omboAggregate\x12\x38.io.deephaven.proto.backplane.grpc.ComboAggregateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x03\x88\x02\x01\x12\x8a\x01\n\x0c\x41ggregateAll\x12\x36.io.deephaven.proto.backplane.grpc.AggregateAllRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\tAggregate\x12\x33.io.deephaven.proto.backplane.grpc.AggregateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x87\x01\n\x08Snapshot\x12\x37.io.deephaven.proto.backplane.grpc.SnapshotTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8f\x01\n\x0cSnapshotWhen\x12;.io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07\x46latten\x12\x31.io.deephaven.proto.backplane.grpc.FlattenRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x96\x01\n\x12RunChartDownsample\x12<.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x92\x01\n\x10\x43reateInputTable\x12:.io.deephaven.proto.backplane.grpc.CreateInputTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07WhereIn\x12\x31.io.deephaven.proto.backplane.grpc.WhereInRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x83\x01\n\x05\x42\x61tch\x12\x34.io.deephaven.proto.backplane.grpc.BatchTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x30\x01\x12\x99\x01\n\x14\x45xportedTableUpdates\x12>.io.deephaven.proto.backplane.grpc.ExportedTableUpdatesRequest\x1a=.io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage\"\x00\x30\x01\x12r\n\x07SeekRow\x12\x31.io.deephaven.proto.backplane.grpc.SeekRowRequest\x1a\x32.io.deephaven.proto.backplane.grpc.SeekRowResponse\"\x00\x12\x84\x01\n\tMetaTable\x12\x33.io.deephaven.proto.backplane.grpc.MetaTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x99\x01\n\x17\x43omputeColumnStatistics\x12:.io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x42\x41H\x01P\x01Z;github.com/deephaven/deephaven-core/go/internal/proto/tableb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x64\x65\x65phaven/proto/table.proto\x12!io.deephaven.proto.backplane.grpc\x1a\x1c\x64\x65\x65phaven/proto/ticket.proto\"l\n\x0eTableReference\x12;\n\x06ticket\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketH\x00\x12\x16\n\x0c\x62\x61tch_offset\x18\x02 \x01(\x11H\x00\x42\x05\n\x03ref\"\xc6\x01\n\x1d\x45xportedTableCreationResponse\x12\x44\n\tresult_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x12\n\nerror_info\x18\x03 \x01(\t\x12\x15\n\rschema_header\x18\x04 \x01(\x0c\x12\x11\n\tis_static\x18\x05 \x01(\x08\x12\x10\n\x04size\x18\x06 \x01(\x12\x42\x02\x30\x01\"\x97\x01\n\x11\x46\x65tchTableRequest\x12\x44\n\tsource_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12<\n\tresult_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\xa0\x01\n\x1a\x41pplyPreviewColumnsRequest\x12\x44\n\tsource_id\x18\x01 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12<\n\tresult_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x1d\n\x1b\x45xportedTableUpdatesRequest\"\x8c\x01\n\x1a\x45xportedTableUpdateMessage\x12<\n\texport_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x10\n\x04size\x18\x02 \x01(\x12\x42\x02\x30\x01\x12\x1e\n\x16update_failure_message\x18\x03 \x01(\t\"c\n\x11\x45mptyTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x10\n\x04size\x18\x02 \x01(\x12\x42\x02\x30\x01\"\xef\x01\n\x10TimeTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x1e\n\x10start_time_nanos\x18\x02 \x01(\x12\x42\x02\x30\x01H\x00\x12\x1b\n\x11start_time_string\x18\x05 \x01(\tH\x00\x12\x1a\n\x0cperiod_nanos\x18\x03 \x01(\x12\x42\x02\x30\x01H\x01\x12\x17\n\rperiod_string\x18\x06 \x01(\tH\x01\x12\x13\n\x0b\x62link_table\x18\x04 \x01(\x08\x42\x0c\n\nstart_timeB\x08\n\x06period\"\xb1\x01\n\x15SelectOrUpdateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_specs\x18\x03 \x03(\t\"\x8c\x02\n\x0bMathContext\x12\x11\n\tprecision\x18\x01 \x01(\x11\x12R\n\rrounding_mode\x18\x02 \x01(\x0e\x32;.io.deephaven.proto.backplane.grpc.MathContext.RoundingMode\"\x95\x01\n\x0cRoundingMode\x12\x1f\n\x1bROUNDING_MODE_NOT_SPECIFIED\x10\x00\x12\x06\n\x02UP\x10\x01\x12\x08\n\x04\x44OWN\x10\x02\x12\x0b\n\x07\x43\x45ILING\x10\x03\x12\t\n\x05\x46LOOR\x10\x04\x12\x0b\n\x07HALF_UP\x10\x05\x12\r\n\tHALF_DOWN\x10\x06\x12\r\n\tHALF_EVEN\x10\x07\x12\x0f\n\x0bUNNECESSARY\x10\x08\"\xdb\x02\n\x13UpdateByWindowScale\x12[\n\x05ticks\x18\x01 \x01(\x0b\x32J.io.deephaven.proto.backplane.grpc.UpdateByWindowScale.UpdateByWindowTicksH\x00\x12Y\n\x04time\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.grpc.UpdateByWindowScale.UpdateByWindowTimeH\x00\x1a$\n\x13UpdateByWindowTicks\x12\r\n\x05ticks\x18\x01 \x01(\x01\x1a^\n\x12UpdateByWindowTime\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x13\n\x05nanos\x18\x02 \x01(\x12\x42\x02\x30\x01H\x00\x12\x19\n\x0f\x64uration_string\x18\x03 \x01(\tH\x00\x42\x08\n\x06windowB\x06\n\x04type\"\xe1\x03\n\x11UpdateByEmOptions\x12I\n\ron_null_value\x18\x01 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12H\n\x0con_nan_value\x18\x02 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12H\n\x0con_null_time\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12R\n\x16on_negative_delta_time\x18\x04 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12N\n\x12on_zero_delta_time\x18\x05 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.BadDataBehavior\x12I\n\x11\x62ig_value_context\x18\x06 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.MathContext\"f\n\x14UpdateByDeltaOptions\x12N\n\rnull_behavior\x18\x01 \x01(\x0e\x32\x37.io.deephaven.proto.backplane.grpc.UpdateByNullBehavior\"\x9b\x37\n\x0fUpdateByRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12S\n\x07options\x18\x03 \x01(\x0b\x32\x42.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOptions\x12X\n\noperations\x18\x04 \x03(\x0b\x32\x44.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation\x12\x18\n\x10group_by_columns\x18\x05 \x03(\t\x1a\xc3\x03\n\x0fUpdateByOptions\x12\x1c\n\x0fuse_redirection\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x63hunk_capacity\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12.\n!max_static_sparse_memory_overhead\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12$\n\x17initial_hash_table_size\x18\x04 \x01(\x05H\x03\x88\x01\x01\x12 \n\x13maximum_load_factor\x18\x05 \x01(\x01H\x04\x88\x01\x01\x12\x1f\n\x12target_load_factor\x18\x06 \x01(\x01H\x05\x88\x01\x01\x12\x44\n\x0cmath_context\x18\x07 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.MathContextB\x12\n\x10_use_redirectionB\x11\n\x0f_chunk_capacityB$\n\"_max_static_sparse_memory_overheadB\x1a\n\x18_initial_hash_table_sizeB\x16\n\x14_maximum_load_factorB\x15\n\x13_target_load_factor\x1a\xf4\x30\n\x11UpdateByOperation\x12\x65\n\x06\x63olumn\x18\x01 \x01(\x0b\x32S.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumnH\x00\x1a\xef/\n\x0eUpdateByColumn\x12n\n\x04spec\x18\x01 \x01(\x0b\x32`.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x1a\xd7.\n\x0cUpdateBySpec\x12\x85\x01\n\x03sum\x18\x01 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeSumH\x00\x12\x85\x01\n\x03min\x18\x02 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeMinH\x00\x12\x85\x01\n\x03max\x18\x03 \x01(\x0b\x32v.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeMaxH\x00\x12\x8d\x01\n\x07product\x18\x04 \x01(\x0b\x32z.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByCumulativeProductH\x00\x12}\n\x04\x66ill\x18\x05 \x01(\x0b\x32m.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByFillH\x00\x12{\n\x03\x65ma\x18\x06 \x01(\x0b\x32l.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmaH\x00\x12\x8a\x01\n\x0brolling_sum\x18\x07 \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingSumH\x00\x12\x8e\x01\n\rrolling_group\x18\x08 \x01(\x0b\x32u.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingGroupH\x00\x12\x8a\x01\n\x0brolling_avg\x18\t \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingAvgH\x00\x12\x8a\x01\n\x0brolling_min\x18\n \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMinH\x00\x12\x8a\x01\n\x0brolling_max\x18\x0b \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingMaxH\x00\x12\x92\x01\n\x0frolling_product\x18\x0c \x01(\x0b\x32w.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingProductH\x00\x12\x7f\n\x05\x64\x65lta\x18\r \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByDeltaH\x00\x12{\n\x03\x65ms\x18\x0e \x01(\x0b\x32l.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmsH\x00\x12\x80\x01\n\x06\x65m_min\x18\x0f \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMinH\x00\x12\x80\x01\n\x06\x65m_max\x18\x10 \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmMaxH\x00\x12\x80\x01\n\x06\x65m_std\x18\x11 \x01(\x0b\x32n.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByEmStdH\x00\x12\x8e\x01\n\rrolling_count\x18\x12 \x01(\x0b\x32u.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingCountH\x00\x12\x8a\x01\n\x0brolling_std\x18\x13 \x01(\x0b\x32s.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingStdH\x00\x12\x8c\x01\n\x0crolling_wavg\x18\x14 \x01(\x0b\x32t.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingWAvgH\x00\x12\x92\x01\n\x0frolling_formula\x18\x15 \x01(\x0b\x32w.io.deephaven.proto.backplane.grpc.UpdateByRequest.UpdateByOperation.UpdateByColumn.UpdateBySpec.UpdateByRollingFormulaH\x00\x1a\x17\n\x15UpdateByCumulativeSum\x1a\x17\n\x15UpdateByCumulativeMin\x1a\x17\n\x15UpdateByCumulativeMax\x1a\x1b\n\x19UpdateByCumulativeProduct\x1a\x0e\n\x0cUpdateByFill\x1a\xa2\x01\n\x0bUpdateByEma\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa2\x01\n\x0bUpdateByEms\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmMin\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmMax\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xa4\x01\n\rUpdateByEmStd\x12\x45\n\x07options\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.UpdateByEmOptions\x12L\n\x0cwindow_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1aY\n\rUpdateByDelta\x12H\n\x07options\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.UpdateByDeltaOptions\x1a\xc0\x01\n\x12UpdateByRollingSum\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc2\x01\n\x14UpdateByRollingGroup\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingAvg\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingMin\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingMax\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc4\x01\n\x16UpdateByRollingProduct\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc2\x01\n\x14UpdateByRollingCount\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xc0\x01\n\x12UpdateByRollingStd\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x1a\xd8\x01\n\x13UpdateByRollingWAvg\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12\x15\n\rweight_column\x18\x03 \x01(\t\x1a\xea\x01\n\x16UpdateByRollingFormula\x12T\n\x14reverse_window_scale\x18\x01 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12T\n\x14\x66orward_window_scale\x18\x02 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.UpdateByWindowScale\x12\x0f\n\x07\x66ormula\x18\x03 \x01(\t\x12\x13\n\x0bparam_token\x18\x04 \x01(\tB\x06\n\x04typeB\x06\n\x04type\"\xb1\x01\n\x15SelectDistinctRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_names\x18\x03 \x03(\t\"\xae\x01\n\x12\x44ropColumnsRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x0c\x63olumn_names\x18\x03 \x03(\t\"\xb5\x01\n\x1eUnstructuredFilterTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07\x66ilters\x18\x03 \x03(\t\"\xad\x01\n\x11HeadOrTailRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x08num_rows\x18\x03 \x01(\x12\x42\x02\x30\x01\"\xce\x01\n\x13HeadOrTailByRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x14\n\x08num_rows\x18\x03 \x01(\x12\x42\x02\x30\x01\x12\x1d\n\x15group_by_column_specs\x18\x04 \x03(\t\"\xc3\x01\n\x0eUngroupRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x11\n\tnull_fill\x18\x03 \x01(\x08\x12\x1a\n\x12\x63olumns_to_ungroup\x18\x04 \x03(\t\"\xad\x01\n\x12MergeTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x45\n\nsource_ids\x18\x02 \x03(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x12\n\nkey_column\x18\x03 \x01(\t\"\x9a\x01\n\x14SnapshotTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\xb1\x02\n\x18SnapshotWhenTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07\x62\x61se_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x45\n\ntrigger_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x0f\n\x07initial\x18\x04 \x01(\x08\x12\x13\n\x0bincremental\x18\x05 \x01(\x08\x12\x0f\n\x07history\x18\x06 \x01(\x08\x12\x15\n\rstamp_columns\x18\x07 \x03(\t\"\xa7\x02\n\x16\x43rossJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\x12\x14\n\x0creserve_bits\x18\x06 \x01(\x05\"\x93\x02\n\x18NaturalJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\x91\x02\n\x16\x45xactJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\x90\x02\n\x15LeftJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\"\xd1\x03\n\x15\x41sOfJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x18\n\x10\x63olumns_to_match\x18\x04 \x03(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x05 \x03(\t\x12\\\n\x10\x61s_of_match_rule\x18\x07 \x01(\x0e\x32\x42.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest.MatchRule\"]\n\tMatchRule\x12\x13\n\x0fLESS_THAN_EQUAL\x10\x00\x12\r\n\tLESS_THAN\x10\x01\x12\x16\n\x12GREATER_THAN_EQUAL\x10\x02\x12\x10\n\x0cGREATER_THAN\x10\x03\x1a\x02\x18\x01:\x02\x18\x01\"\xa6\x02\n\x12\x41jRajTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x1b\n\x13\x65xact_match_columns\x18\x04 \x03(\t\x12\x14\n\x0c\x61s_of_column\x18\x05 \x01(\t\x12\x16\n\x0e\x63olumns_to_add\x18\x06 \x03(\t\"\xcb\x06\n\x16RangeJoinTablesRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x1b\n\x13\x65xact_match_columns\x18\x04 \x03(\t\x12\x19\n\x11left_start_column\x18\x05 \x01(\t\x12\x62\n\x10range_start_rule\x18\x06 \x01(\x0e\x32H.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeStartRule\x12\x1a\n\x12right_range_column\x18\x07 \x01(\t\x12^\n\x0erange_end_rule\x18\x08 \x01(\x0e\x32\x46.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest.RangeEndRule\x12\x17\n\x0fleft_end_column\x18\t \x01(\t\x12\x44\n\x0c\x61ggregations\x18\n \x03(\x0b\x32..io.deephaven.proto.backplane.grpc.Aggregation\"v\n\x0eRangeStartRule\x12\x15\n\x11START_UNSPECIFIED\x10\x00\x12\r\n\tLESS_THAN\x10\x01\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x02\x12&\n\"LESS_THAN_OR_EQUAL_ALLOW_PRECEDING\x10\x03\"{\n\x0cRangeEndRule\x12\x13\n\x0f\x45ND_UNSPECIFIED\x10\x00\x12\x10\n\x0cGREATER_THAN\x10\x01\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x02\x12)\n%GREATER_THAN_OR_EQUAL_ALLOW_FOLLOWING\x10\x03\"\xfe\x04\n\x15\x43omboAggregateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12V\n\naggregates\x18\x03 \x03(\x0b\x32\x42.io.deephaven.proto.backplane.grpc.ComboAggregateRequest.Aggregate\x12\x18\n\x10group_by_columns\x18\x04 \x03(\t\x12\x13\n\x0b\x66orce_combo\x18\x05 \x01(\x08\x1a\xad\x01\n\tAggregate\x12N\n\x04type\x18\x01 \x01(\x0e\x32@.io.deephaven.proto.backplane.grpc.ComboAggregateRequest.AggType\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12\x12\n\npercentile\x18\x04 \x01(\x01\x12\x12\n\navg_median\x18\x05 \x01(\x08\"\xa5\x01\n\x07\x41ggType\x12\x07\n\x03SUM\x10\x00\x12\x0b\n\x07\x41\x42S_SUM\x10\x01\x12\t\n\x05GROUP\x10\x02\x12\x07\n\x03\x41VG\x10\x03\x12\t\n\x05\x43OUNT\x10\x04\x12\t\n\x05\x46IRST\x10\x05\x12\x08\n\x04LAST\x10\x06\x12\x07\n\x03MIN\x10\x07\x12\x07\n\x03MAX\x10\x08\x12\n\n\x06MEDIAN\x10\t\x12\x0e\n\nPERCENTILE\x10\n\x12\x07\n\x03STD\x10\x0b\x12\x07\n\x03VAR\x10\x0c\x12\x10\n\x0cWEIGHTED_AVG\x10\r:\x02\x18\x01\"\xed\x01\n\x13\x41ggregateAllRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x38\n\x04spec\x18\x03 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.AggSpec\x12\x18\n\x10group_by_columns\x18\x04 \x03(\t\"\xd7\x17\n\x07\x41ggSpec\x12K\n\x07\x61\x62s_sum\x18\x01 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAbsSumH\x00\x12i\n\x16\x61pproximate_percentile\x18\x02 \x01(\x0b\x32G.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecApproximatePercentileH\x00\x12\x44\n\x03\x61vg\x18\x03 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecAvgH\x00\x12Y\n\x0e\x63ount_distinct\x18\x04 \x01(\x0b\x32?.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecCountDistinctH\x00\x12N\n\x08\x64istinct\x18\x05 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecDistinctH\x00\x12H\n\x05\x66irst\x18\x06 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFirstH\x00\x12L\n\x07\x66ormula\x18\x07 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFormulaH\x00\x12J\n\x06\x66reeze\x18\x08 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecFreezeH\x00\x12H\n\x05group\x18\t \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecGroupH\x00\x12\x46\n\x04last\x18\n \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecLastH\x00\x12\x44\n\x03max\x18\x0b \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMaxH\x00\x12J\n\x06median\x18\x0c \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMedianH\x00\x12\x44\n\x03min\x18\r \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecMinH\x00\x12R\n\npercentile\x18\x0e \x01(\x0b\x32<.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecPercentileH\x00\x12P\n\x0csorted_first\x18\x0f \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedH\x00\x12O\n\x0bsorted_last\x18\x10 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedH\x00\x12\x44\n\x03std\x18\x11 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecStdH\x00\x12\x44\n\x03sum\x18\x12 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSumH\x00\x12M\n\x08t_digest\x18\x13 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecTDigestH\x00\x12J\n\x06unique\x18\x14 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecUniqueH\x00\x12R\n\x0cweighted_avg\x18\x15 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeightedH\x00\x12R\n\x0cweighted_sum\x18\x16 \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecWeightedH\x00\x12\x44\n\x03var\x18\x17 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecVarH\x00\x1a\\\n\x1c\x41ggSpecApproximatePercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\x18\n\x0b\x63ompression\x18\x02 \x01(\x01H\x00\x88\x01\x01\x42\x0e\n\x0c_compression\x1a+\n\x14\x41ggSpecCountDistinct\x12\x13\n\x0b\x63ount_nulls\x18\x01 \x01(\x08\x1a(\n\x0f\x41ggSpecDistinct\x12\x15\n\rinclude_nulls\x18\x01 \x01(\x08\x1a\x36\n\x0e\x41ggSpecFormula\x12\x0f\n\x07\x66ormula\x18\x01 \x01(\t\x12\x13\n\x0bparam_token\x18\x02 \x01(\t\x1a/\n\rAggSpecMedian\x12\x1e\n\x16\x61verage_evenly_divided\x18\x01 \x01(\x08\x1aG\n\x11\x41ggSpecPercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\x1e\n\x16\x61verage_evenly_divided\x18\x02 \x01(\x08\x1a`\n\rAggSpecSorted\x12O\n\x07\x63olumns\x18\x01 \x03(\x0b\x32>.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecSortedColumn\x1a*\n\x13\x41ggSpecSortedColumn\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1a:\n\x0e\x41ggSpecTDigest\x12\x18\n\x0b\x63ompression\x18\x01 \x01(\x01H\x00\x88\x01\x01\x42\x0e\n\x0c_compression\x1a\x88\x01\n\rAggSpecUnique\x12\x15\n\rinclude_nulls\x18\x01 \x01(\x08\x12`\n\x13non_unique_sentinel\x18\x02 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.grpc.AggSpec.AggSpecNonUniqueSentinel\x1a\xb5\x02\n\x18\x41ggSpecNonUniqueSentinel\x12\x42\n\nnull_value\x18\x01 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.NullValueH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x11H\x00\x12\x18\n\nlong_value\x18\x04 \x01(\x12\x42\x02\x30\x01H\x00\x12\x15\n\x0b\x66loat_value\x18\x05 \x01(\x02H\x00\x12\x16\n\x0c\x64ouble_value\x18\x06 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x07 \x01(\x08H\x00\x12\x14\n\nbyte_value\x18\x08 \x01(\x11H\x00\x12\x15\n\x0bshort_value\x18\t \x01(\x11H\x00\x12\x14\n\nchar_value\x18\n \x01(\x11H\x00\x42\x06\n\x04type\x1a(\n\x0f\x41ggSpecWeighted\x12\x15\n\rweight_column\x18\x01 \x01(\t\x1a\x0f\n\rAggSpecAbsSum\x1a\x0c\n\nAggSpecAvg\x1a\x0e\n\x0c\x41ggSpecFirst\x1a\x0f\n\rAggSpecFreeze\x1a\x0e\n\x0c\x41ggSpecGroup\x1a\r\n\x0b\x41ggSpecLast\x1a\x0c\n\nAggSpecMax\x1a\x0c\n\nAggSpecMin\x1a\x0c\n\nAggSpecStd\x1a\x0c\n\nAggSpecSum\x1a\x0c\n\nAggSpecVarB\x06\n\x04type\"\xdc\x02\n\x10\x41ggregateRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12L\n\x11initial_groups_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x16\n\x0epreserve_empty\x18\x04 \x01(\x08\x12\x44\n\x0c\x61ggregations\x18\x05 \x03(\x0b\x32..io.deephaven.proto.backplane.grpc.Aggregation\x12\x18\n\x10group_by_columns\x18\x06 \x03(\t\"\xd3\x05\n\x0b\x41ggregation\x12T\n\x07\x63olumns\x18\x01 \x01(\x0b\x32\x41.io.deephaven.proto.backplane.grpc.Aggregation.AggregationColumnsH\x00\x12P\n\x05\x63ount\x18\x02 \x01(\x0b\x32?.io.deephaven.proto.backplane.grpc.Aggregation.AggregationCountH\x00\x12Y\n\rfirst_row_key\x18\x03 \x01(\x0b\x32@.io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKeyH\x00\x12X\n\x0clast_row_key\x18\x04 \x01(\x0b\x32@.io.deephaven.proto.backplane.grpc.Aggregation.AggregationRowKeyH\x00\x12X\n\tpartition\x18\x05 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.grpc.Aggregation.AggregationPartitionH\x00\x1a\x63\n\x12\x41ggregationColumns\x12\x38\n\x04spec\x18\x01 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.AggSpec\x12\x13\n\x0bmatch_pairs\x18\x02 \x03(\t\x1a\'\n\x10\x41ggregationCount\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1a(\n\x11\x41ggregationRowKey\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1aM\n\x14\x41ggregationPartition\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12 \n\x18include_group_by_columns\x18\x02 \x01(\x08\x42\x06\n\x04type\"\xe1\x01\n\x0eSortDescriptor\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x13\n\x0bis_absolute\x18\x02 \x01(\x08\x12R\n\tdirection\x18\x03 \x01(\x0e\x32?.io.deephaven.proto.backplane.grpc.SortDescriptor.SortDirection\"Q\n\rSortDirection\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x17\n\nDESCENDING\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\r\n\tASCENDING\x10\x01\x12\x0b\n\x07REVERSE\x10\x02\"\xd8\x01\n\x10SortTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12@\n\x05sorts\x18\x03 \x03(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.SortDescriptor\"\xd7\x01\n\x12\x46ilterTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12=\n\x07\x66ilters\x18\x03 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"\xf9\x01\n\x0eSeekRowRequest\x12<\n\tsource_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x18\n\x0cstarting_row\x18\x02 \x01(\x12\x42\x02\x30\x01\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12>\n\nseek_value\x18\x04 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.Literal\x12\x13\n\x0binsensitive\x18\x05 \x01(\x08\x12\x10\n\x08\x63ontains\x18\x06 \x01(\x08\x12\x13\n\x0bis_backward\x18\x07 \x01(\x08\")\n\x0fSeekRowResponse\x12\x16\n\nresult_row\x18\x01 \x01(\x12\x42\x02\x30\x01\" \n\tReference\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\"\x91\x01\n\x07Literal\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x16\n\x0c\x64ouble_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x18\n\nlong_value\x18\x04 \x01(\x12\x42\x02\x30\x01H\x00\x12\x1d\n\x0fnano_time_value\x18\x05 \x01(\x12\x42\x02\x30\x01H\x00\x42\x07\n\x05value\"\x91\x01\n\x05Value\x12\x41\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.ReferenceH\x00\x12=\n\x07literal\x18\x02 \x01(\x0b\x32*.io.deephaven.proto.backplane.grpc.LiteralH\x00\x42\x06\n\x04\x64\x61ta\"\xbc\x05\n\tCondition\x12>\n\x03\x61nd\x18\x01 \x01(\x0b\x32/.io.deephaven.proto.backplane.grpc.AndConditionH\x00\x12<\n\x02or\x18\x02 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.OrConditionH\x00\x12>\n\x03not\x18\x03 \x01(\x0b\x32/.io.deephaven.proto.backplane.grpc.NotConditionH\x00\x12\x46\n\x07\x63ompare\x18\x04 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.CompareConditionH\x00\x12<\n\x02in\x18\x05 \x01(\x0b\x32..io.deephaven.proto.backplane.grpc.InConditionH\x00\x12\x44\n\x06invoke\x18\x06 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.InvokeConditionH\x00\x12\x45\n\x07is_null\x18\x07 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.IsNullConditionH\x00\x12\x46\n\x07matches\x18\x08 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.MatchesConditionH\x00\x12H\n\x08\x63ontains\x18\t \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.ContainsConditionH\x00\x12\x44\n\x06search\x18\n \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.SearchConditionH\x00\x42\x06\n\x04\x64\x61ta\"M\n\x0c\x41ndCondition\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"L\n\x0bOrCondition\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"L\n\x0cNotCondition\x12<\n\x06\x66ilter\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Condition\"\xac\x03\n\x10\x43ompareCondition\x12W\n\toperation\x18\x01 \x01(\x0e\x32\x44.io.deephaven.proto.backplane.grpc.CompareCondition.CompareOperation\x12L\n\x10\x63\x61se_sensitivity\x18\x02 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12\x35\n\x03lhs\x18\x03 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12\x35\n\x03rhs\x18\x04 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\"\x82\x01\n\x10\x43ompareOperation\x12\r\n\tLESS_THAN\x10\x00\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x01\x12\x10\n\x0cGREATER_THAN\x10\x02\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x03\x12\n\n\x06\x45QUALS\x10\x04\x12\x0e\n\nNOT_EQUALS\x10\x05\"\x95\x02\n\x0bInCondition\x12\x38\n\x06target\x18\x01 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12<\n\ncandidates\x18\x02 \x03(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"\x98\x01\n\x0fInvokeCondition\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x38\n\x06target\x18\x02 \x01(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\x12;\n\targuments\x18\x03 \x03(\x0b\x32(.io.deephaven.proto.backplane.grpc.Value\"R\n\x0fIsNullCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\"\xf2\x01\n\x10MatchesCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\x12\r\n\x05regex\x18\x02 \x01(\t\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"\xfb\x01\n\x11\x43ontainsCondition\x12?\n\treference\x18\x01 \x01(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\x12\x15\n\rsearch_string\x18\x02 \x01(\t\x12L\n\x10\x63\x61se_sensitivity\x18\x03 \x01(\x0e\x32\x32.io.deephaven.proto.backplane.grpc.CaseSensitivity\x12@\n\nmatch_type\x18\x04 \x01(\x0e\x32,.io.deephaven.proto.backplane.grpc.MatchType\"s\n\x0fSearchCondition\x12\x15\n\rsearch_string\x18\x01 \x01(\t\x12I\n\x13optional_references\x18\x02 \x03(\x0b\x32,.io.deephaven.proto.backplane.grpc.Reference\"\x94\x01\n\x0e\x46lattenRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\x96\x01\n\x10MetaTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\"\xb4\x03\n\x19RunChartDownsampleRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x13\n\x0bpixel_count\x18\x03 \x01(\x05\x12Z\n\nzoom_range\x18\x04 \x01(\x0b\x32\x46.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest.ZoomRange\x12\x15\n\rx_column_name\x18\x05 \x01(\t\x12\x16\n\x0ey_column_names\x18\x06 \x03(\t\x1as\n\tZoomRange\x12\x1f\n\x0emin_date_nanos\x18\x01 \x01(\x03\x42\x02\x30\x01H\x00\x88\x01\x01\x12\x1f\n\x0emax_date_nanos\x18\x02 \x01(\x03\x42\x02\x30\x01H\x01\x88\x01\x01\x42\x11\n\x0f_min_date_nanosB\x11\n\x0f_max_date_nanos\"\xe0\x05\n\x17\x43reateInputTableRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12L\n\x0fsource_table_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReferenceH\x00\x12\x10\n\x06schema\x18\x03 \x01(\x0cH\x00\x12W\n\x04kind\x18\x04 \x01(\x0b\x32I.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind\x1a\xbf\x03\n\x0eInputTableKind\x12}\n\x15in_memory_append_only\x18\x01 \x01(\x0b\x32\\.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryAppendOnlyH\x00\x12{\n\x14in_memory_key_backed\x18\x02 \x01(\x0b\x32[.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.InMemoryKeyBackedH\x00\x12`\n\x05\x62link\x18\x03 \x01(\x0b\x32O.io.deephaven.proto.backplane.grpc.CreateInputTableRequest.InputTableKind.BlinkH\x00\x1a\x14\n\x12InMemoryAppendOnly\x1a(\n\x11InMemoryKeyBacked\x12\x13\n\x0bkey_columns\x18\x01 \x03(\t\x1a\x07\n\x05\x42linkB\x06\n\x04kindB\x0c\n\ndefinition\"\x83\x02\n\x0eWhereInRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x42\n\x07left_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x43\n\x08right_id\x18\x03 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x10\n\x08inverted\x18\x04 \x01(\x08\x12\x18\n\x10\x63olumns_to_match\x18\x05 \x03(\t\"\xea\x01\n\x17\x43olumnStatisticsRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x44\n\tsource_id\x18\x02 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.TableReference\x12\x13\n\x0b\x63olumn_name\x18\x03 \x01(\t\x12\x1f\n\x12unique_value_limit\x18\x04 \x01(\x05H\x00\x88\x01\x01\x42\x15\n\x13_unique_value_limit\"\xc8\x19\n\x11\x42\x61tchTableRequest\x12K\n\x03ops\x18\x01 \x03(\x0b\x32>.io.deephaven.proto.backplane.grpc.BatchTableRequest.Operation\x1a\xe5\x18\n\tOperation\x12K\n\x0b\x65mpty_table\x18\x01 \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.EmptyTableRequestH\x00\x12I\n\ntime_table\x18\x02 \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.TimeTableRequestH\x00\x12M\n\x0c\x64rop_columns\x18\x03 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.DropColumnsRequestH\x00\x12J\n\x06update\x18\x04 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12O\n\x0blazy_update\x18\x05 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12H\n\x04view\x18\x06 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12O\n\x0bupdate_view\x18\x07 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12J\n\x06select\x18\x08 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequestH\x00\x12S\n\x0fselect_distinct\x18\t \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.SelectDistinctRequestH\x00\x12G\n\x06\x66ilter\x18\n \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.FilterTableRequestH\x00\x12`\n\x13unstructured_filter\x18\x0b \x01(\x0b\x32\x41.io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequestH\x00\x12\x43\n\x04sort\x18\x0c \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.SortTableRequestH\x00\x12\x44\n\x04head\x18\r \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequestH\x00\x12\x44\n\x04tail\x18\x0e \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequestH\x00\x12I\n\x07head_by\x18\x0f \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequestH\x00\x12I\n\x07tail_by\x18\x10 \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequestH\x00\x12\x44\n\x07ungroup\x18\x11 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.UngroupRequestH\x00\x12\x46\n\x05merge\x18\x12 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.MergeTablesRequestH\x00\x12S\n\x0f\x63ombo_aggregate\x18\x13 \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.ComboAggregateRequestH\x00\x12\x44\n\x07\x66latten\x18\x15 \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.FlattenRequestH\x00\x12\\\n\x14run_chart_downsample\x18\x16 \x01(\x0b\x32<.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequestH\x00\x12O\n\ncross_join\x18\x17 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.CrossJoinTablesRequestH\x00\x12S\n\x0cnatural_join\x18\x18 \x01(\x0b\x32;.io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequestH\x00\x12O\n\nexact_join\x18\x19 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.ExactJoinTablesRequestH\x00\x12M\n\tleft_join\x18\x1a \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.LeftJoinTablesRequestH\x00\x12R\n\nas_of_join\x18\x1b \x01(\x0b\x32\x38.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequestB\x02\x18\x01H\x00\x12K\n\x0b\x66\x65tch_table\x18\x1c \x01(\x0b\x32\x34.io.deephaven.proto.backplane.grpc.FetchTableRequestH\x00\x12^\n\x15\x61pply_preview_columns\x18\x1e \x01(\x0b\x32=.io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequestH\x00\x12X\n\x12\x63reate_input_table\x18\x1f \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.CreateInputTableRequestH\x00\x12G\n\tupdate_by\x18 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.grpc.UpdateByRequestH\x00\x12\x45\n\x08where_in\x18! \x01(\x0b\x32\x31.io.deephaven.proto.backplane.grpc.WhereInRequestH\x00\x12O\n\raggregate_all\x18\" \x01(\x0b\x32\x36.io.deephaven.proto.backplane.grpc.AggregateAllRequestH\x00\x12H\n\taggregate\x18# \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.AggregateRequestH\x00\x12K\n\x08snapshot\x18$ \x01(\x0b\x32\x37.io.deephaven.proto.backplane.grpc.SnapshotTableRequestH\x00\x12T\n\rsnapshot_when\x18% \x01(\x0b\x32;.io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequestH\x00\x12I\n\nmeta_table\x18& \x01(\x0b\x32\x33.io.deephaven.proto.backplane.grpc.MetaTableRequestH\x00\x12O\n\nrange_join\x18\' \x01(\x0b\x32\x39.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequestH\x00\x12\x43\n\x02\x61j\x18( \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequestH\x00\x12\x44\n\x03raj\x18) \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequestH\x00\x12W\n\x11\x63olumn_statistics\x18* \x01(\x0b\x32:.io.deephaven.proto.backplane.grpc.ColumnStatisticsRequestH\x00\x42\x04\n\x02opJ\x04\x08\x14\x10\x15J\x04\x08\x1d\x10\x1e*b\n\x0f\x42\x61\x64\x44\x61taBehavior\x12#\n\x1f\x42\x41\x44_DATA_BEHAVIOR_NOT_SPECIFIED\x10\x00\x12\t\n\x05THROW\x10\x01\x12\t\n\x05RESET\x10\x02\x12\x08\n\x04SKIP\x10\x03\x12\n\n\x06POISON\x10\x04*t\n\x14UpdateByNullBehavior\x12\x1f\n\x1bNULL_BEHAVIOR_NOT_SPECIFIED\x10\x00\x12\x12\n\x0eNULL_DOMINATES\x10\x01\x12\x13\n\x0fVALUE_DOMINATES\x10\x02\x12\x12\n\x0eZERO_DOMINATES\x10\x03*\x1b\n\tNullValue\x12\x0e\n\nNULL_VALUE\x10\x00*2\n\x0f\x43\x61seSensitivity\x12\x0e\n\nMATCH_CASE\x10\x00\x12\x0f\n\x0bIGNORE_CASE\x10\x01*&\n\tMatchType\x12\x0b\n\x07REGULAR\x10\x00\x12\x0c\n\x08INVERTED\x10\x01\x32\xa8\x30\n\x0cTableService\x12\x91\x01\n GetExportedTableCreationResponse\x12).io.deephaven.proto.backplane.grpc.Ticket\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\nFetchTable\x12\x34.io.deephaven.proto.backplane.grpc.FetchTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x98\x01\n\x13\x41pplyPreviewColumns\x12=.io.deephaven.proto.backplane.grpc.ApplyPreviewColumnsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\nEmptyTable\x12\x34.io.deephaven.proto.backplane.grpc.EmptyTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\tTimeTable\x12\x33.io.deephaven.proto.backplane.grpc.TimeTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x88\x01\n\x0b\x44ropColumns\x12\x35.io.deephaven.proto.backplane.grpc.DropColumnsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\x06Update\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8a\x01\n\nLazyUpdate\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x04View\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8a\x01\n\nUpdateView\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\x06Select\x12\x38.io.deephaven.proto.backplane.grpc.SelectOrUpdateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x82\x01\n\x08UpdateBy\x12\x32.io.deephaven.proto.backplane.grpc.UpdateByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8e\x01\n\x0eSelectDistinct\x12\x38.io.deephaven.proto.backplane.grpc.SelectDistinctRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x83\x01\n\x06\x46ilter\x12\x35.io.deephaven.proto.backplane.grpc.FilterTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x9b\x01\n\x12UnstructuredFilter\x12\x41.io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x7f\n\x04Sort\x12\x33.io.deephaven.proto.backplane.grpc.SortTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x04Head\x12\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x04Tail\x12\x34.io.deephaven.proto.backplane.grpc.HeadOrTailRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x06HeadBy\x12\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\x06TailBy\x12\x36.io.deephaven.proto.backplane.grpc.HeadOrTailByRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07Ungroup\x12\x31.io.deephaven.proto.backplane.grpc.UngroupRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x88\x01\n\x0bMergeTables\x12\x35.io.deephaven.proto.backplane.grpc.MergeTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0f\x43rossJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.CrossJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x94\x01\n\x11NaturalJoinTables\x12;.io.deephaven.proto.backplane.grpc.NaturalJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0f\x45xactJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.ExactJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8e\x01\n\x0eLeftJoinTables\x12\x38.io.deephaven.proto.backplane.grpc.LeftJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x91\x01\n\x0e\x41sOfJoinTables\x12\x38.io.deephaven.proto.backplane.grpc.AsOfJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x03\x88\x02\x01\x12\x85\x01\n\x08\x41jTables\x12\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x86\x01\n\tRajTables\x12\x35.io.deephaven.proto.backplane.grpc.AjRajTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x90\x01\n\x0fRangeJoinTables\x12\x39.io.deephaven.proto.backplane.grpc.RangeJoinTablesRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x91\x01\n\x0e\x43omboAggregate\x12\x38.io.deephaven.proto.backplane.grpc.ComboAggregateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x03\x88\x02\x01\x12\x8a\x01\n\x0c\x41ggregateAll\x12\x36.io.deephaven.proto.backplane.grpc.AggregateAllRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x84\x01\n\tAggregate\x12\x33.io.deephaven.proto.backplane.grpc.AggregateRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x87\x01\n\x08Snapshot\x12\x37.io.deephaven.proto.backplane.grpc.SnapshotTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x8f\x01\n\x0cSnapshotWhen\x12;.io.deephaven.proto.backplane.grpc.SnapshotWhenTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07\x46latten\x12\x31.io.deephaven.proto.backplane.grpc.FlattenRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x96\x01\n\x12RunChartDownsample\x12<.io.deephaven.proto.backplane.grpc.RunChartDownsampleRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x92\x01\n\x10\x43reateInputTable\x12:.io.deephaven.proto.backplane.grpc.CreateInputTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x80\x01\n\x07WhereIn\x12\x31.io.deephaven.proto.backplane.grpc.WhereInRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x83\x01\n\x05\x42\x61tch\x12\x34.io.deephaven.proto.backplane.grpc.BatchTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x30\x01\x12\x99\x01\n\x14\x45xportedTableUpdates\x12>.io.deephaven.proto.backplane.grpc.ExportedTableUpdatesRequest\x1a=.io.deephaven.proto.backplane.grpc.ExportedTableUpdateMessage\"\x00\x30\x01\x12r\n\x07SeekRow\x12\x31.io.deephaven.proto.backplane.grpc.SeekRowRequest\x1a\x32.io.deephaven.proto.backplane.grpc.SeekRowResponse\"\x00\x12\x84\x01\n\tMetaTable\x12\x33.io.deephaven.proto.backplane.grpc.MetaTableRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x12\x99\x01\n\x17\x43omputeColumnStatistics\x12:.io.deephaven.proto.backplane.grpc.ColumnStatisticsRequest\x1a@.io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse\"\x00\x42\x41H\x01P\x01Z;github.com/deephaven/deephaven-core/go/internal/proto/tableb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'deephaven.proto.table_pb2', globals()) @@ -64,16 +64,16 @@ _TABLESERVICE.methods_by_name['AsOfJoinTables']._serialized_options = b'\210\002\001' _TABLESERVICE.methods_by_name['ComboAggregate']._options = None _TABLESERVICE.methods_by_name['ComboAggregate']._serialized_options = b'\210\002\001' - _BADDATABEHAVIOR._serialized_start=27859 - _BADDATABEHAVIOR._serialized_end=27957 - _UPDATEBYNULLBEHAVIOR._serialized_start=27959 - _UPDATEBYNULLBEHAVIOR._serialized_end=28075 - _NULLVALUE._serialized_start=28077 - _NULLVALUE._serialized_end=28104 - _CASESENSITIVITY._serialized_start=28106 - _CASESENSITIVITY._serialized_end=28156 - _MATCHTYPE._serialized_start=28158 - _MATCHTYPE._serialized_end=28196 + _BADDATABEHAVIOR._serialized_start=28245 + _BADDATABEHAVIOR._serialized_end=28343 + _UPDATEBYNULLBEHAVIOR._serialized_start=28345 + _UPDATEBYNULLBEHAVIOR._serialized_end=28461 + _NULLVALUE._serialized_start=28463 + _NULLVALUE._serialized_end=28490 + _CASESENSITIVITY._serialized_start=28492 + _CASESENSITIVITY._serialized_end=28542 + _MATCHTYPE._serialized_start=28544 + _MATCHTYPE._serialized_end=28582 _TABLEREFERENCE._serialized_start=96 _TABLEREFERENCE._serialized_end=204 _EXPORTEDTABLECREATIONRESPONSE._serialized_start=207 @@ -107,229 +107,231 @@ _UPDATEBYDELTAOPTIONS._serialized_start=2526 _UPDATEBYDELTAOPTIONS._serialized_end=2628 _UPDATEBYREQUEST._serialized_start=2631 - _UPDATEBYREQUEST._serialized_end=9312 + _UPDATEBYREQUEST._serialized_end=9698 _UPDATEBYREQUEST_UPDATEBYOPTIONS._serialized_start=2984 _UPDATEBYREQUEST_UPDATEBYOPTIONS._serialized_end=3435 _UPDATEBYREQUEST_UPDATEBYOPERATION._serialized_start=3438 - _UPDATEBYREQUEST_UPDATEBYOPERATION._serialized_end=9312 + _UPDATEBYREQUEST_UPDATEBYOPERATION._serialized_end=9698 _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN._serialized_start=3563 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN._serialized_end=9304 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN._serialized_end=9690 _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC._serialized_start=3715 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC._serialized_end=9304 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVESUM._serialized_start=6469 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVESUM._serialized_end=6492 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMIN._serialized_start=6494 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMIN._serialized_end=6517 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMAX._serialized_start=6519 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMAX._serialized_end=6542 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEPRODUCT._serialized_start=6544 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEPRODUCT._serialized_end=6571 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYFILL._serialized_start=6573 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYFILL._serialized_end=6587 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMA._serialized_start=6590 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMA._serialized_end=6752 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMS._serialized_start=6755 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMS._serialized_end=6917 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMIN._serialized_start=6920 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMIN._serialized_end=7084 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMAX._serialized_start=7087 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMAX._serialized_end=7251 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMSTD._serialized_start=7254 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMSTD._serialized_end=7418 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYDELTA._serialized_start=7420 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYDELTA._serialized_end=7509 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSUM._serialized_start=7512 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSUM._serialized_end=7704 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGGROUP._serialized_start=7707 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGGROUP._serialized_end=7901 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGAVG._serialized_start=7904 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGAVG._serialized_end=8096 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMIN._serialized_start=8099 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMIN._serialized_end=8291 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMAX._serialized_start=8294 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMAX._serialized_end=8486 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGPRODUCT._serialized_start=8489 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGPRODUCT._serialized_end=8685 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGCOUNT._serialized_start=8688 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGCOUNT._serialized_end=8882 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSTD._serialized_start=8885 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSTD._serialized_end=9077 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGWAVG._serialized_start=9080 - _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGWAVG._serialized_end=9296 - _SELECTDISTINCTREQUEST._serialized_start=9315 - _SELECTDISTINCTREQUEST._serialized_end=9492 - _DROPCOLUMNSREQUEST._serialized_start=9495 - _DROPCOLUMNSREQUEST._serialized_end=9669 - _UNSTRUCTUREDFILTERTABLEREQUEST._serialized_start=9672 - _UNSTRUCTUREDFILTERTABLEREQUEST._serialized_end=9853 - _HEADORTAILREQUEST._serialized_start=9856 - _HEADORTAILREQUEST._serialized_end=10029 - _HEADORTAILBYREQUEST._serialized_start=10032 - _HEADORTAILBYREQUEST._serialized_end=10238 - _UNGROUPREQUEST._serialized_start=10241 - _UNGROUPREQUEST._serialized_end=10436 - _MERGETABLESREQUEST._serialized_start=10439 - _MERGETABLESREQUEST._serialized_end=10612 - _SNAPSHOTTABLEREQUEST._serialized_start=10615 - _SNAPSHOTTABLEREQUEST._serialized_end=10769 - _SNAPSHOTWHENTABLEREQUEST._serialized_start=10772 - _SNAPSHOTWHENTABLEREQUEST._serialized_end=11077 - _CROSSJOINTABLESREQUEST._serialized_start=11080 - _CROSSJOINTABLESREQUEST._serialized_end=11375 - _NATURALJOINTABLESREQUEST._serialized_start=11378 - _NATURALJOINTABLESREQUEST._serialized_end=11653 - _EXACTJOINTABLESREQUEST._serialized_start=11656 - _EXACTJOINTABLESREQUEST._serialized_end=11929 - _LEFTJOINTABLESREQUEST._serialized_start=11932 - _LEFTJOINTABLESREQUEST._serialized_end=12204 - _ASOFJOINTABLESREQUEST._serialized_start=12207 - _ASOFJOINTABLESREQUEST._serialized_end=12672 - _ASOFJOINTABLESREQUEST_MATCHRULE._serialized_start=12575 - _ASOFJOINTABLESREQUEST_MATCHRULE._serialized_end=12668 - _AJRAJTABLESREQUEST._serialized_start=12675 - _AJRAJTABLESREQUEST._serialized_end=12969 - _RANGEJOINTABLESREQUEST._serialized_start=12972 - _RANGEJOINTABLESREQUEST._serialized_end=13815 - _RANGEJOINTABLESREQUEST_RANGESTARTRULE._serialized_start=13572 - _RANGEJOINTABLESREQUEST_RANGESTARTRULE._serialized_end=13690 - _RANGEJOINTABLESREQUEST_RANGEENDRULE._serialized_start=13692 - _RANGEJOINTABLESREQUEST_RANGEENDRULE._serialized_end=13815 - _COMBOAGGREGATEREQUEST._serialized_start=13818 - _COMBOAGGREGATEREQUEST._serialized_end=14456 - _COMBOAGGREGATEREQUEST_AGGREGATE._serialized_start=14111 - _COMBOAGGREGATEREQUEST_AGGREGATE._serialized_end=14284 - _COMBOAGGREGATEREQUEST_AGGTYPE._serialized_start=14287 - _COMBOAGGREGATEREQUEST_AGGTYPE._serialized_end=14452 - _AGGREGATEALLREQUEST._serialized_start=14459 - _AGGREGATEALLREQUEST._serialized_end=14696 - _AGGSPEC._serialized_start=14699 - _AGGSPEC._serialized_end=17730 - _AGGSPEC_AGGSPECAPPROXIMATEPERCENTILE._serialized_start=16505 - _AGGSPEC_AGGSPECAPPROXIMATEPERCENTILE._serialized_end=16597 - _AGGSPEC_AGGSPECCOUNTDISTINCT._serialized_start=16599 - _AGGSPEC_AGGSPECCOUNTDISTINCT._serialized_end=16642 - _AGGSPEC_AGGSPECDISTINCT._serialized_start=16644 - _AGGSPEC_AGGSPECDISTINCT._serialized_end=16684 - _AGGSPEC_AGGSPECFORMULA._serialized_start=16686 - _AGGSPEC_AGGSPECFORMULA._serialized_end=16740 - _AGGSPEC_AGGSPECMEDIAN._serialized_start=16742 - _AGGSPEC_AGGSPECMEDIAN._serialized_end=16789 - _AGGSPEC_AGGSPECPERCENTILE._serialized_start=16791 - _AGGSPEC_AGGSPECPERCENTILE._serialized_end=16862 - _AGGSPEC_AGGSPECSORTED._serialized_start=16864 - _AGGSPEC_AGGSPECSORTED._serialized_end=16960 - _AGGSPEC_AGGSPECSORTEDCOLUMN._serialized_start=16962 - _AGGSPEC_AGGSPECSORTEDCOLUMN._serialized_end=17004 - _AGGSPEC_AGGSPECTDIGEST._serialized_start=17006 - _AGGSPEC_AGGSPECTDIGEST._serialized_end=17064 - _AGGSPEC_AGGSPECUNIQUE._serialized_start=17067 - _AGGSPEC_AGGSPECUNIQUE._serialized_end=17203 - _AGGSPEC_AGGSPECNONUNIQUESENTINEL._serialized_start=17206 - _AGGSPEC_AGGSPECNONUNIQUESENTINEL._serialized_end=17515 - _AGGSPEC_AGGSPECWEIGHTED._serialized_start=17517 - _AGGSPEC_AGGSPECWEIGHTED._serialized_end=17557 - _AGGSPEC_AGGSPECABSSUM._serialized_start=17559 - _AGGSPEC_AGGSPECABSSUM._serialized_end=17574 - _AGGSPEC_AGGSPECAVG._serialized_start=17576 - _AGGSPEC_AGGSPECAVG._serialized_end=17588 - _AGGSPEC_AGGSPECFIRST._serialized_start=17590 - _AGGSPEC_AGGSPECFIRST._serialized_end=17604 - _AGGSPEC_AGGSPECFREEZE._serialized_start=17606 - _AGGSPEC_AGGSPECFREEZE._serialized_end=17621 - _AGGSPEC_AGGSPECGROUP._serialized_start=17623 - _AGGSPEC_AGGSPECGROUP._serialized_end=17637 - _AGGSPEC_AGGSPECLAST._serialized_start=17639 - _AGGSPEC_AGGSPECLAST._serialized_end=17652 - _AGGSPEC_AGGSPECMAX._serialized_start=17654 - _AGGSPEC_AGGSPECMAX._serialized_end=17666 - _AGGSPEC_AGGSPECMIN._serialized_start=17668 - _AGGSPEC_AGGSPECMIN._serialized_end=17680 - _AGGSPEC_AGGSPECSTD._serialized_start=17682 - _AGGSPEC_AGGSPECSTD._serialized_end=17694 - _AGGSPEC_AGGSPECSUM._serialized_start=17696 - _AGGSPEC_AGGSPECSUM._serialized_end=17708 - _AGGSPEC_AGGSPECVAR._serialized_start=17710 - _AGGSPEC_AGGSPECVAR._serialized_end=17722 - _AGGREGATEREQUEST._serialized_start=17733 - _AGGREGATEREQUEST._serialized_end=18081 - _AGGREGATION._serialized_start=18084 - _AGGREGATION._serialized_end=18807 - _AGGREGATION_AGGREGATIONCOLUMNS._serialized_start=18538 - _AGGREGATION_AGGREGATIONCOLUMNS._serialized_end=18637 - _AGGREGATION_AGGREGATIONCOUNT._serialized_start=18639 - _AGGREGATION_AGGREGATIONCOUNT._serialized_end=18678 - _AGGREGATION_AGGREGATIONROWKEY._serialized_start=18680 - _AGGREGATION_AGGREGATIONROWKEY._serialized_end=18720 - _AGGREGATION_AGGREGATIONPARTITION._serialized_start=18722 - _AGGREGATION_AGGREGATIONPARTITION._serialized_end=18799 - _SORTDESCRIPTOR._serialized_start=18810 - _SORTDESCRIPTOR._serialized_end=19035 - _SORTDESCRIPTOR_SORTDIRECTION._serialized_start=18954 - _SORTDESCRIPTOR_SORTDIRECTION._serialized_end=19035 - _SORTTABLEREQUEST._serialized_start=19038 - _SORTTABLEREQUEST._serialized_end=19254 - _FILTERTABLEREQUEST._serialized_start=19257 - _FILTERTABLEREQUEST._serialized_end=19472 - _SEEKROWREQUEST._serialized_start=19475 - _SEEKROWREQUEST._serialized_end=19724 - _SEEKROWRESPONSE._serialized_start=19726 - _SEEKROWRESPONSE._serialized_end=19767 - _REFERENCE._serialized_start=19769 - _REFERENCE._serialized_end=19801 - _LITERAL._serialized_start=19804 - _LITERAL._serialized_end=19949 - _VALUE._serialized_start=19952 - _VALUE._serialized_end=20097 - _CONDITION._serialized_start=20100 - _CONDITION._serialized_end=20800 - _ANDCONDITION._serialized_start=20802 - _ANDCONDITION._serialized_end=20879 - _ORCONDITION._serialized_start=20881 - _ORCONDITION._serialized_end=20957 - _NOTCONDITION._serialized_start=20959 - _NOTCONDITION._serialized_end=21035 - _COMPARECONDITION._serialized_start=21038 - _COMPARECONDITION._serialized_end=21466 - _COMPARECONDITION_COMPAREOPERATION._serialized_start=21336 - _COMPARECONDITION_COMPAREOPERATION._serialized_end=21466 - _INCONDITION._serialized_start=21469 - _INCONDITION._serialized_end=21746 - _INVOKECONDITION._serialized_start=21749 - _INVOKECONDITION._serialized_end=21901 - _ISNULLCONDITION._serialized_start=21903 - _ISNULLCONDITION._serialized_end=21985 - _MATCHESCONDITION._serialized_start=21988 - _MATCHESCONDITION._serialized_end=22230 - _CONTAINSCONDITION._serialized_start=22233 - _CONTAINSCONDITION._serialized_end=22484 - _SEARCHCONDITION._serialized_start=22486 - _SEARCHCONDITION._serialized_end=22601 - _FLATTENREQUEST._serialized_start=22604 - _FLATTENREQUEST._serialized_end=22752 - _METATABLEREQUEST._serialized_start=22755 - _METATABLEREQUEST._serialized_end=22905 - _RUNCHARTDOWNSAMPLEREQUEST._serialized_start=22908 - _RUNCHARTDOWNSAMPLEREQUEST._serialized_end=23344 - _RUNCHARTDOWNSAMPLEREQUEST_ZOOMRANGE._serialized_start=23229 - _RUNCHARTDOWNSAMPLEREQUEST_ZOOMRANGE._serialized_end=23344 - _CREATEINPUTTABLEREQUEST._serialized_start=23347 - _CREATEINPUTTABLEREQUEST._serialized_end=24083 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND._serialized_start=23622 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND._serialized_end=24069 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYAPPENDONLY._serialized_start=23990 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYAPPENDONLY._serialized_end=24010 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYKEYBACKED._serialized_start=24012 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYKEYBACKED._serialized_end=24052 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_BLINK._serialized_start=24054 - _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_BLINK._serialized_end=24061 - _WHEREINREQUEST._serialized_start=24086 - _WHEREINREQUEST._serialized_end=24345 - _COLUMNSTATISTICSREQUEST._serialized_start=24348 - _COLUMNSTATISTICSREQUEST._serialized_end=24582 - _BATCHTABLEREQUEST._serialized_start=24585 - _BATCHTABLEREQUEST._serialized_end=27857 - _BATCHTABLEREQUEST_OPERATION._serialized_start=24684 - _BATCHTABLEREQUEST_OPERATION._serialized_end=27857 - _TABLESERVICE._serialized_start=28199 - _TABLESERVICE._serialized_end=34383 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC._serialized_end=9690 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVESUM._serialized_start=6618 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVESUM._serialized_end=6641 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMIN._serialized_start=6643 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMIN._serialized_end=6666 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMAX._serialized_start=6668 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEMAX._serialized_end=6691 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEPRODUCT._serialized_start=6693 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYCUMULATIVEPRODUCT._serialized_end=6720 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYFILL._serialized_start=6722 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYFILL._serialized_end=6736 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMA._serialized_start=6739 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMA._serialized_end=6901 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMS._serialized_start=6904 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMS._serialized_end=7066 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMIN._serialized_start=7069 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMIN._serialized_end=7233 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMAX._serialized_start=7236 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMMAX._serialized_end=7400 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMSTD._serialized_start=7403 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYEMSTD._serialized_end=7567 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYDELTA._serialized_start=7569 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYDELTA._serialized_end=7658 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSUM._serialized_start=7661 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSUM._serialized_end=7853 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGGROUP._serialized_start=7856 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGGROUP._serialized_end=8050 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGAVG._serialized_start=8053 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGAVG._serialized_end=8245 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMIN._serialized_start=8248 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMIN._serialized_end=8440 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMAX._serialized_start=8443 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGMAX._serialized_end=8635 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGPRODUCT._serialized_start=8638 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGPRODUCT._serialized_end=8834 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGCOUNT._serialized_start=8837 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGCOUNT._serialized_end=9031 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSTD._serialized_start=9034 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGSTD._serialized_end=9226 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGWAVG._serialized_start=9229 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGWAVG._serialized_end=9445 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGFORMULA._serialized_start=9448 + _UPDATEBYREQUEST_UPDATEBYOPERATION_UPDATEBYCOLUMN_UPDATEBYSPEC_UPDATEBYROLLINGFORMULA._serialized_end=9682 + _SELECTDISTINCTREQUEST._serialized_start=9701 + _SELECTDISTINCTREQUEST._serialized_end=9878 + _DROPCOLUMNSREQUEST._serialized_start=9881 + _DROPCOLUMNSREQUEST._serialized_end=10055 + _UNSTRUCTUREDFILTERTABLEREQUEST._serialized_start=10058 + _UNSTRUCTUREDFILTERTABLEREQUEST._serialized_end=10239 + _HEADORTAILREQUEST._serialized_start=10242 + _HEADORTAILREQUEST._serialized_end=10415 + _HEADORTAILBYREQUEST._serialized_start=10418 + _HEADORTAILBYREQUEST._serialized_end=10624 + _UNGROUPREQUEST._serialized_start=10627 + _UNGROUPREQUEST._serialized_end=10822 + _MERGETABLESREQUEST._serialized_start=10825 + _MERGETABLESREQUEST._serialized_end=10998 + _SNAPSHOTTABLEREQUEST._serialized_start=11001 + _SNAPSHOTTABLEREQUEST._serialized_end=11155 + _SNAPSHOTWHENTABLEREQUEST._serialized_start=11158 + _SNAPSHOTWHENTABLEREQUEST._serialized_end=11463 + _CROSSJOINTABLESREQUEST._serialized_start=11466 + _CROSSJOINTABLESREQUEST._serialized_end=11761 + _NATURALJOINTABLESREQUEST._serialized_start=11764 + _NATURALJOINTABLESREQUEST._serialized_end=12039 + _EXACTJOINTABLESREQUEST._serialized_start=12042 + _EXACTJOINTABLESREQUEST._serialized_end=12315 + _LEFTJOINTABLESREQUEST._serialized_start=12318 + _LEFTJOINTABLESREQUEST._serialized_end=12590 + _ASOFJOINTABLESREQUEST._serialized_start=12593 + _ASOFJOINTABLESREQUEST._serialized_end=13058 + _ASOFJOINTABLESREQUEST_MATCHRULE._serialized_start=12961 + _ASOFJOINTABLESREQUEST_MATCHRULE._serialized_end=13054 + _AJRAJTABLESREQUEST._serialized_start=13061 + _AJRAJTABLESREQUEST._serialized_end=13355 + _RANGEJOINTABLESREQUEST._serialized_start=13358 + _RANGEJOINTABLESREQUEST._serialized_end=14201 + _RANGEJOINTABLESREQUEST_RANGESTARTRULE._serialized_start=13958 + _RANGEJOINTABLESREQUEST_RANGESTARTRULE._serialized_end=14076 + _RANGEJOINTABLESREQUEST_RANGEENDRULE._serialized_start=14078 + _RANGEJOINTABLESREQUEST_RANGEENDRULE._serialized_end=14201 + _COMBOAGGREGATEREQUEST._serialized_start=14204 + _COMBOAGGREGATEREQUEST._serialized_end=14842 + _COMBOAGGREGATEREQUEST_AGGREGATE._serialized_start=14497 + _COMBOAGGREGATEREQUEST_AGGREGATE._serialized_end=14670 + _COMBOAGGREGATEREQUEST_AGGTYPE._serialized_start=14673 + _COMBOAGGREGATEREQUEST_AGGTYPE._serialized_end=14838 + _AGGREGATEALLREQUEST._serialized_start=14845 + _AGGREGATEALLREQUEST._serialized_end=15082 + _AGGSPEC._serialized_start=15085 + _AGGSPEC._serialized_end=18116 + _AGGSPEC_AGGSPECAPPROXIMATEPERCENTILE._serialized_start=16891 + _AGGSPEC_AGGSPECAPPROXIMATEPERCENTILE._serialized_end=16983 + _AGGSPEC_AGGSPECCOUNTDISTINCT._serialized_start=16985 + _AGGSPEC_AGGSPECCOUNTDISTINCT._serialized_end=17028 + _AGGSPEC_AGGSPECDISTINCT._serialized_start=17030 + _AGGSPEC_AGGSPECDISTINCT._serialized_end=17070 + _AGGSPEC_AGGSPECFORMULA._serialized_start=17072 + _AGGSPEC_AGGSPECFORMULA._serialized_end=17126 + _AGGSPEC_AGGSPECMEDIAN._serialized_start=17128 + _AGGSPEC_AGGSPECMEDIAN._serialized_end=17175 + _AGGSPEC_AGGSPECPERCENTILE._serialized_start=17177 + _AGGSPEC_AGGSPECPERCENTILE._serialized_end=17248 + _AGGSPEC_AGGSPECSORTED._serialized_start=17250 + _AGGSPEC_AGGSPECSORTED._serialized_end=17346 + _AGGSPEC_AGGSPECSORTEDCOLUMN._serialized_start=17348 + _AGGSPEC_AGGSPECSORTEDCOLUMN._serialized_end=17390 + _AGGSPEC_AGGSPECTDIGEST._serialized_start=17392 + _AGGSPEC_AGGSPECTDIGEST._serialized_end=17450 + _AGGSPEC_AGGSPECUNIQUE._serialized_start=17453 + _AGGSPEC_AGGSPECUNIQUE._serialized_end=17589 + _AGGSPEC_AGGSPECNONUNIQUESENTINEL._serialized_start=17592 + _AGGSPEC_AGGSPECNONUNIQUESENTINEL._serialized_end=17901 + _AGGSPEC_AGGSPECWEIGHTED._serialized_start=17903 + _AGGSPEC_AGGSPECWEIGHTED._serialized_end=17943 + _AGGSPEC_AGGSPECABSSUM._serialized_start=17945 + _AGGSPEC_AGGSPECABSSUM._serialized_end=17960 + _AGGSPEC_AGGSPECAVG._serialized_start=17962 + _AGGSPEC_AGGSPECAVG._serialized_end=17974 + _AGGSPEC_AGGSPECFIRST._serialized_start=17976 + _AGGSPEC_AGGSPECFIRST._serialized_end=17990 + _AGGSPEC_AGGSPECFREEZE._serialized_start=17992 + _AGGSPEC_AGGSPECFREEZE._serialized_end=18007 + _AGGSPEC_AGGSPECGROUP._serialized_start=18009 + _AGGSPEC_AGGSPECGROUP._serialized_end=18023 + _AGGSPEC_AGGSPECLAST._serialized_start=18025 + _AGGSPEC_AGGSPECLAST._serialized_end=18038 + _AGGSPEC_AGGSPECMAX._serialized_start=18040 + _AGGSPEC_AGGSPECMAX._serialized_end=18052 + _AGGSPEC_AGGSPECMIN._serialized_start=18054 + _AGGSPEC_AGGSPECMIN._serialized_end=18066 + _AGGSPEC_AGGSPECSTD._serialized_start=18068 + _AGGSPEC_AGGSPECSTD._serialized_end=18080 + _AGGSPEC_AGGSPECSUM._serialized_start=18082 + _AGGSPEC_AGGSPECSUM._serialized_end=18094 + _AGGSPEC_AGGSPECVAR._serialized_start=18096 + _AGGSPEC_AGGSPECVAR._serialized_end=18108 + _AGGREGATEREQUEST._serialized_start=18119 + _AGGREGATEREQUEST._serialized_end=18467 + _AGGREGATION._serialized_start=18470 + _AGGREGATION._serialized_end=19193 + _AGGREGATION_AGGREGATIONCOLUMNS._serialized_start=18924 + _AGGREGATION_AGGREGATIONCOLUMNS._serialized_end=19023 + _AGGREGATION_AGGREGATIONCOUNT._serialized_start=19025 + _AGGREGATION_AGGREGATIONCOUNT._serialized_end=19064 + _AGGREGATION_AGGREGATIONROWKEY._serialized_start=19066 + _AGGREGATION_AGGREGATIONROWKEY._serialized_end=19106 + _AGGREGATION_AGGREGATIONPARTITION._serialized_start=19108 + _AGGREGATION_AGGREGATIONPARTITION._serialized_end=19185 + _SORTDESCRIPTOR._serialized_start=19196 + _SORTDESCRIPTOR._serialized_end=19421 + _SORTDESCRIPTOR_SORTDIRECTION._serialized_start=19340 + _SORTDESCRIPTOR_SORTDIRECTION._serialized_end=19421 + _SORTTABLEREQUEST._serialized_start=19424 + _SORTTABLEREQUEST._serialized_end=19640 + _FILTERTABLEREQUEST._serialized_start=19643 + _FILTERTABLEREQUEST._serialized_end=19858 + _SEEKROWREQUEST._serialized_start=19861 + _SEEKROWREQUEST._serialized_end=20110 + _SEEKROWRESPONSE._serialized_start=20112 + _SEEKROWRESPONSE._serialized_end=20153 + _REFERENCE._serialized_start=20155 + _REFERENCE._serialized_end=20187 + _LITERAL._serialized_start=20190 + _LITERAL._serialized_end=20335 + _VALUE._serialized_start=20338 + _VALUE._serialized_end=20483 + _CONDITION._serialized_start=20486 + _CONDITION._serialized_end=21186 + _ANDCONDITION._serialized_start=21188 + _ANDCONDITION._serialized_end=21265 + _ORCONDITION._serialized_start=21267 + _ORCONDITION._serialized_end=21343 + _NOTCONDITION._serialized_start=21345 + _NOTCONDITION._serialized_end=21421 + _COMPARECONDITION._serialized_start=21424 + _COMPARECONDITION._serialized_end=21852 + _COMPARECONDITION_COMPAREOPERATION._serialized_start=21722 + _COMPARECONDITION_COMPAREOPERATION._serialized_end=21852 + _INCONDITION._serialized_start=21855 + _INCONDITION._serialized_end=22132 + _INVOKECONDITION._serialized_start=22135 + _INVOKECONDITION._serialized_end=22287 + _ISNULLCONDITION._serialized_start=22289 + _ISNULLCONDITION._serialized_end=22371 + _MATCHESCONDITION._serialized_start=22374 + _MATCHESCONDITION._serialized_end=22616 + _CONTAINSCONDITION._serialized_start=22619 + _CONTAINSCONDITION._serialized_end=22870 + _SEARCHCONDITION._serialized_start=22872 + _SEARCHCONDITION._serialized_end=22987 + _FLATTENREQUEST._serialized_start=22990 + _FLATTENREQUEST._serialized_end=23138 + _METATABLEREQUEST._serialized_start=23141 + _METATABLEREQUEST._serialized_end=23291 + _RUNCHARTDOWNSAMPLEREQUEST._serialized_start=23294 + _RUNCHARTDOWNSAMPLEREQUEST._serialized_end=23730 + _RUNCHARTDOWNSAMPLEREQUEST_ZOOMRANGE._serialized_start=23615 + _RUNCHARTDOWNSAMPLEREQUEST_ZOOMRANGE._serialized_end=23730 + _CREATEINPUTTABLEREQUEST._serialized_start=23733 + _CREATEINPUTTABLEREQUEST._serialized_end=24469 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND._serialized_start=24008 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND._serialized_end=24455 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYAPPENDONLY._serialized_start=24376 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYAPPENDONLY._serialized_end=24396 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYKEYBACKED._serialized_start=24398 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_INMEMORYKEYBACKED._serialized_end=24438 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_BLINK._serialized_start=24440 + _CREATEINPUTTABLEREQUEST_INPUTTABLEKIND_BLINK._serialized_end=24447 + _WHEREINREQUEST._serialized_start=24472 + _WHEREINREQUEST._serialized_end=24731 + _COLUMNSTATISTICSREQUEST._serialized_start=24734 + _COLUMNSTATISTICSREQUEST._serialized_end=24968 + _BATCHTABLEREQUEST._serialized_start=24971 + _BATCHTABLEREQUEST._serialized_end=28243 + _BATCHTABLEREQUEST_OPERATION._serialized_start=25070 + _BATCHTABLEREQUEST_OPERATION._serialized_end=28243 + _TABLESERVICE._serialized_start=28585 + _TABLESERVICE._serialized_end=34769 # @@protoc_insertion_point(module_scope) diff --git a/py/client/pydeephaven/updateby.py b/py/client/pydeephaven/updateby.py index af1f1a71edd..09f37e081d3 100644 --- a/py/client/pydeephaven/updateby.py +++ b/py/client/pydeephaven/updateby.py @@ -30,6 +30,7 @@ _GrpcUpdateByRollingCount = _GrpcUpdateBySpec.UpdateByRollingCount _GrpcUpdateByRollingStd = _GrpcUpdateBySpec.UpdateByRollingStd _GrpcUpdateByRollingWAvg = _GrpcUpdateBySpec.UpdateByRollingWAvg +_GrpcUpdateByRollingFormula = _GrpcUpdateBySpec.UpdateByRollingFormula _GrpcUpdateByDeltaOptions = table_pb2.UpdateByDeltaOptions _GrpcUpdateByWindowScale = table_pb2.UpdateByWindowScale _GrpcUpdateByWindowTicks = _GrpcUpdateByWindowScale.UpdateByWindowTicks @@ -612,7 +613,7 @@ def rolling_sum_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -658,7 +659,7 @@ def rolling_sum_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -710,7 +711,7 @@ def rolling_group_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: i Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -756,7 +757,7 @@ def rolling_group_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -808,7 +809,7 @@ def rolling_avg_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling average operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling average operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -854,7 +855,7 @@ def rolling_avg_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -906,7 +907,7 @@ def rolling_min_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling minimum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling minimum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -952,7 +953,7 @@ def rolling_min_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1004,7 +1005,7 @@ def rolling_max_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling maximum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling maximum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1050,7 +1051,7 @@ def rolling_max_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1102,7 +1103,7 @@ def rolling_prod_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: in Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling product operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling product operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1148,7 +1149,7 @@ def rolling_prod_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[ Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1200,7 +1201,7 @@ def rolling_count_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: i Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling count operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling count operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1246,7 +1247,7 @@ def rolling_count_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1301,7 +1302,7 @@ def rolling_std_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sample standard deviation operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sample standard deviation operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1350,7 +1351,7 @@ def rolling_std_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" fwd_time (Union[int, str]): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1402,7 +1403,7 @@ def rolling_wavg_tick(wcol: str, cols: Union[str, List[str]], rev_ticks: int, fw Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling weighted average operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling weighted average operation on all columns. wcol (str): the column containing the weight values rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1450,7 +1451,7 @@ def rolling_wavg_time(ts_col: str, wcol: str, cols: Union[str, List[str]], rev_t Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling weighted average operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling weighted average operation on all columns. wcol (str): the column containing the weight values rev_time (Union[int, str]): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:.001" or "PT5M" @@ -1482,3 +1483,121 @@ def rolling_wavg_time(ts_col: str, wcol: str, cols: Union[str, List[str]], rev_t return UpdateByOperation(ub_column=ub_column) except Exception as e: raise DHError(e, "failed to create a rolling weighted average (time) UpdateByOperation.") from e + + +def rolling_formula_tick(formula: str, formula_param: str, cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int = 0) -> UpdateByOperation: + """Creates a rolling formula UpdateByOperation for the supplied column names, using ticks as the windowing unit. Ticks + are row counts, and you may specify the reverse and forward window in number of rows to include. The current row + is considered to belong to the reverse window but not the forward window. Also, negative values are allowed and + can be used to generate completely forward or completely reverse windows. + + User-defined formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions + + Here are some examples of window values: + | `rev_ticks = 1, fwd_ticks = 0` - contains only the current row + | `rev_ticks = 10, fwd_ticks = 0` - contains 9 previous rows and the current row + | `rev_ticks = 0, fwd_ticks = 10` - contains the following 10 rows, excludes the current row + | `rev_ticks = 10, fwd_ticks = 10` - contains the previous 9 rows, the current row and the 10 rows following + | `rev_ticks = 10, fwd_ticks = -5` - contains 5 rows, beginning at 9 rows before, ending at 5 rows before the + current row (inclusive) + | `rev_ticks = 11, fwd_ticks = -1` - contains 10 rows, beginning at 10 rows before, ending at 1 row before the + current row (inclusive) + | `rev_ticks = -5, fwd_ticks = 10` - contains 5 rows, beginning 5 rows following, ending at 10 rows following the + current row (inclusive) + + Args: + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling formula operation on all columns. + rev_ticks (int): the look-behind window size (in rows/ticks) + fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 + + Returns: + an UpdateByOperation + + Raises: + DHError + """ + try: + rev_window_scale = _GrpcUpdateByWindowScale(ticks=_GrpcUpdateByWindowTicks(ticks=rev_ticks)) + fwd_window_scale = _GrpcUpdateByWindowScale(ticks=_GrpcUpdateByWindowTicks(ticks=fwd_ticks)) + ub_formula = _GrpcUpdateByRollingFormula(reverse_window_scale=rev_window_scale, + forward_window_scale=fwd_window_scale, + formula=formula, + param_token=formula_param) + ub_spec = _GrpcUpdateBySpec(rolling_formula=ub_formula) + ub_column = _GrpcUpdateByColumn(spec=ub_spec, match_pairs=to_list(cols)) + return UpdateByOperation(ub_column=ub_column) + except Exception as e: + raise DHError(e, "failed to create a rolling formula (tick) UpdateByOperation.") from e + + +def rolling_formula_time(ts_col: str, formula: str, formula_param: str, cols: Union[str, List[str]], rev_time: Union[int, str], + fwd_time: Union[int, str] = 0) -> UpdateByOperation: + """Creates a rolling formula UpdateByOperation for the supplied column names, using time as the windowing unit. This + function accepts nanoseconds or time strings as the reverse and forward window parameters. Negative values are + allowed and can be used to generate completely forward or completely reverse windows. A row containing a null in + the timestamp column belongs to no window and will not be considered in the windows of other rows; its output will + be null. + + User-defined formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions + + Here are some examples of window values: + | `rev_time = 0, fwd_time = 0` - contains rows that exactly match the current row timestamp + | `rev_time = "PT00:10:00", fwd_time = "0"` - contains rows from 10m before through the current row timestamp ( + inclusive) + | `rev_time = 0, fwd_time = 600_000_000_000` - contains rows from the current row through 10m following the + current row timestamp (inclusive) + | `rev_time = "PT00:10:00", fwd_time = "PT00:10:00"` - contains rows from 10m before through 10m following + the current row timestamp (inclusive) + | `rev_time = "PT00:10:00", fwd_time = "-PT00:05:00"` - contains rows from 10m before through 5m before the + current row timestamp (inclusive), this is a purely backwards looking window + | `rev_time = "-PT00:05:00", fwd_time = "PT00:10:00"` - contains rows from 5m following through 10m + following the current row timestamp (inclusive), this is a purely forwards looking window + + Args: + ts_col (str): the timestamp column for determining the window + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling formula operation on all columns. + rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time + interval string, e.g. "PT00:00:00.001" or "PT5M" + fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time + interval string, e.g. "PT00:00:00.001" or "PT5M", default is 0 + + Returns: + an UpdateByOperation + + Raises: + DHError + """ + try: + if isinstance(rev_time, str): + rev_window_scale = _GrpcUpdateByWindowScale(time=_GrpcUpdateByWindowTime(column=ts_col, duration_string=rev_time)) + else: + rev_window_scale = _GrpcUpdateByWindowScale(time=_GrpcUpdateByWindowTime(column=ts_col, nanos=rev_time)) + + if isinstance(fwd_time, str): + fwd_window_scale = _GrpcUpdateByWindowScale(time=_GrpcUpdateByWindowTime(column=ts_col, duration_string=fwd_time)) + else: + fwd_window_scale = _GrpcUpdateByWindowScale(time=_GrpcUpdateByWindowTime(column=ts_col, nanos=fwd_time)) + + ub_formula = _GrpcUpdateByRollingFormula(reverse_window_scale=rev_window_scale, + forward_window_scale=fwd_window_scale, + formula=formula, + param_token=formula_param) + ub_spec = _GrpcUpdateBySpec(rolling_formula=ub_formula) + ub_column = _GrpcUpdateByColumn(spec=ub_spec, match_pairs=to_list(cols)) + return UpdateByOperation(ub_column=ub_column) + except Exception as e: + raise DHError(e, "failed to create a rolling formula (time) UpdateByOperation.") from e diff --git a/py/client/tests/test_updateby.py b/py/client/tests/test_updateby.py index fe5d0572be2..87341640a4d 100644 --- a/py/client/tests/test_updateby.py +++ b/py/client/tests/test_updateby.py @@ -11,7 +11,7 @@ cum_sum, cum_prod, cum_min, cum_max, forward_fill, delta, rolling_sum_tick, rolling_sum_time, \ rolling_group_tick, rolling_group_time, rolling_avg_tick, rolling_avg_time, rolling_min_tick, rolling_min_time, \ rolling_max_tick, rolling_max_time, rolling_prod_tick, rolling_prod_time, rolling_count_tick, rolling_count_time, \ - rolling_std_tick, rolling_std_time, rolling_wavg_tick, rolling_wavg_time + rolling_std_tick, rolling_std_time, rolling_wavg_tick, rolling_wavg_time, rolling_formula_tick, rolling_formula_time from tests.testbase import BaseTestCase @@ -161,6 +161,15 @@ def setUpClass(cls) -> None: rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time="PT00:00:10"), rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time=10_000_000_000, fwd_time=-10_000_000_00), rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time="PT30S", fwd_time="-PT00:00:20"), + # rolling formula + rolling_formula_tick(formula="sum(x)", formula_param="x", cols=["formula_a = a", "formula_d = d"], rev_ticks=10), + rolling_formula_tick(formula="avg(x)", formula_param="x", cols=["formula_a = a", "formula_d = d"], rev_ticks=10, fwd_ticks=10), + rolling_formula_time(formula="sum(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time="PT00:00:10"), + rolling_formula_time(formula="avg(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time=10_000_000_000, + fwd_time=-10_000_000_00), + rolling_formula_time(formula="sum(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time="PT30S", + fwd_time="-PT00:00:20"), + ] diff --git a/py/server/deephaven/agg.py b/py/server/deephaven/agg.py index 09e985b5330..565d03c9fe5 100644 --- a/py/server/deephaven/agg.py +++ b/py/server/deephaven/agg.py @@ -159,11 +159,15 @@ def first(cols: Union[str, List[str]] = None) -> Aggregation: def formula(formula: str, formula_param: str, cols: Union[str, List[str]] = None) -> Aggregation: - """Creates a user defined formula aggregation. + """Creates a user defined formula aggregation. This formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions Args: - formula (str): the user defined formula to apply to each group - formula_param (str): the parameter name within the formula + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. cols (Union[str, List[str]]): the column(s) to aggregate on, can be renaming expressions, i.e. "new_col = col"; default is None, only valid when used in Table agg_all_by operation diff --git a/py/server/deephaven/updateby.py b/py/server/deephaven/updateby.py index 56f60a23836..bfd6d9d1860 100644 --- a/py/server/deephaven/updateby.py +++ b/py/server/deephaven/updateby.py @@ -417,7 +417,7 @@ def emstd_tick(decay_ticks: float, cols: Union[str, List[str]], Args: decay_ticks (float): the decay rate in ticks cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the ems operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the ems operation on all columns. op_control (OperationControl): defines how special cases should behave; when None, the default OperationControl settings as specified in :meth:`~OperationControl.__init__` will be used @@ -456,7 +456,7 @@ def emstd_time(ts_col: str, decay_time: Union[int, str], cols: Union[str, List[s decay_time (Union[int, str]): the decay rate, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the ems operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the ems operation on all columns. op_control (OperationControl): defines how special cases should behave; when None, the default OperationControl settings as specified in :meth:`~OperationControl.__init__` will be used @@ -526,7 +526,7 @@ def cum_min(cols: Union[str, List[str]]) -> UpdateByOperation: Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the cumulative minimum operation on all the applicable + i.e. "new_col = col"; when empty, update_by performs the cumulative minimum operation on all the applicable columns. Returns: @@ -569,7 +569,7 @@ def forward_fill(cols: Union[str, List[str]]) -> UpdateByOperation: Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the forward fill operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the forward fill operation on all columns. Returns: an UpdateByOperation @@ -635,7 +635,7 @@ def rolling_sum_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -676,7 +676,7 @@ def rolling_sum_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sum operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -717,7 +717,7 @@ def rolling_group_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: i Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling group operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling group operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -758,7 +758,7 @@ def rolling_group_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling group operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling group operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -799,7 +799,7 @@ def rolling_avg_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling average operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling average operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -840,7 +840,7 @@ def rolling_avg_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling average operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling average operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -881,7 +881,7 @@ def rolling_min_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling minimum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling minimum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -922,7 +922,7 @@ def rolling_min_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling minimum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling minimum operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -963,7 +963,7 @@ def rolling_max_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling maximum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling maximum operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1004,7 +1004,7 @@ def rolling_max_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling maximum operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling maximum operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1045,7 +1045,7 @@ def rolling_prod_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: in Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling product operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling product operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1086,7 +1086,7 @@ def rolling_prod_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[ Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling product operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling product operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1127,7 +1127,7 @@ def rolling_count_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: i Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling count operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling count operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1168,7 +1168,7 @@ def rolling_count_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling count operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling count operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1212,7 +1212,7 @@ def rolling_std_tick(cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int Args: cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sample standard deviation operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sample standard deviation operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1256,7 +1256,7 @@ def rolling_std_time(ts_col: str, cols: Union[str, List[str]], rev_time: Union[i Args: ts_col (str): the timestamp column for determining the window cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling sample standard deviation operation on all columns. + i.e. "new_col = col"; when empty, update_by performs the rolling sample standard deviation operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1296,11 +1296,9 @@ def rolling_wavg_tick(wcol: str, cols: Union[str, List[str]], rev_ticks: int, fw current row (inclusive) Args: - cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling weighted average operation on all columns. - cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling weighted average operation on all columns. wcol (str): the column containing the weight values + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling weighted average operation on all columns. rev_ticks (int): the look-behind window size (in rows/ticks) fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 @@ -1340,9 +1338,9 @@ def rolling_wavg_time(ts_col: str, wcol: str, cols: Union[str, List[str]], rev_t Args: ts_col (str): the timestamp column for determining the window - cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, - i.e. "new_col = col"; when empty, update_by perform the rolling weighted average operation on all columns. wcol (str): the column containing the weight values + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling weighted average operation on all columns. rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time interval string, e.g. "PT00:00:00.001" or "PT5M" fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time @@ -1360,4 +1358,102 @@ def rolling_wavg_time(ts_col: str, wcol: str, cols: Union[str, List[str]], rev_t fwd_time = _JDateTimeUtils.parseDurationNanos(fwd_time) if isinstance(fwd_time, str) else fwd_time return UpdateByOperation(j_updateby_op=_JUpdateByOperation.RollingWAvg(ts_col, rev_time, fwd_time, wcol, *cols)) except Exception as e: - raise DHError(e, "failed to create a rolling weighted average (time) UpdateByOperation.") from e \ No newline at end of file + raise DHError(e, "failed to create a rolling weighted average (time) UpdateByOperation.") from e + + +def rolling_formula_tick(formula: str, formula_param: str, cols: Union[str, List[str]], rev_ticks: int, fwd_ticks: int = 0) -> UpdateByOperation: + """Creates a rolling formula UpdateByOperation for the supplied column names, using ticks as the windowing unit. Ticks + are row counts, and you may specify the reverse and forward window in number of rows to include. The current row + is considered to belong to the reverse window but not the forward window. Also, negative values are allowed and + can be used to generate completely forward or completely reverse windows. + + User-defined formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions + + Here are some examples of window values: + | `rev_ticks = 1, fwd_ticks = 0` - contains only the current row + | `rev_ticks = 10, fwd_ticks = 0` - contains 9 previous rows and the current row + | `rev_ticks = 0, fwd_ticks = 10` - contains the following 10 rows, excludes the current row + | `rev_ticks = 10, fwd_ticks = 10` - contains the previous 9 rows, the current row and the 10 rows following + | `rev_ticks = 10, fwd_ticks = -5` - contains 5 rows, beginning at 9 rows before, ending at 5 rows before the + current row (inclusive) + | `rev_ticks = 11, fwd_ticks = -1` - contains 10 rows, beginning at 10 rows before, ending at 1 row before the + current row (inclusive) + | `rev_ticks = -5, fwd_ticks = 10` - contains 5 rows, beginning 5 rows following, ending at 10 rows following the + current row (inclusive) + + Args: + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling formula operation on all columns. + rev_ticks (int): the look-behind window size (in rows/ticks) + fwd_ticks (int): the look-forward window size (int rows/ticks), default is 0 + + Returns: + an UpdateByOperation + + Raises: + DHError + """ + try: + cols = to_sequence(cols) + return UpdateByOperation(j_updateby_op=_JUpdateByOperation.RollingFormula(rev_ticks, fwd_ticks, formula, formula_param, *cols)) + except Exception as e: + raise DHError(e, "failed to create a rolling formula (tick) UpdateByOperation.") from e + + +def rolling_formula_time(ts_col: str, formula: str, formula_param: str, cols: Union[str, List[str]], rev_time: Union[int, str], + fwd_time: Union[int, str] = 0) -> UpdateByOperation: + """Creates a rolling formula UpdateByOperation for the supplied column names, using time as the windowing unit. This + function accepts nanoseconds or time strings as the reverse and forward window parameters. Negative values are + allowed and can be used to generate completely forward or completely reverse windows. A row containing a null in + the timestamp column belongs to no window and will not be considered in the windows of other rows; its output will + be null. + + User-defined formula can contain a combination of any of the following: + | Built-in functions such as `min`, `max`, etc. + | Mathematical arithmetic such as `*`, `+`, `/`, etc. + | User-defined functions + + Here are some examples of window values: + | `rev_time = 0, fwd_time = 0` - contains rows that exactly match the current row timestamp + | `rev_time = "PT00:10:00", fwd_time = "0"` - contains rows from 10m before through the current row timestamp ( + inclusive) + | `rev_time = 0, fwd_time = 600_000_000_000` - contains rows from the current row through 10m following the + current row timestamp (inclusive) + | `rev_time = "PT00:10:00", fwd_time = "PT00:10:00"` - contains rows from 10m before through 10m following + the current row timestamp (inclusive) + | `rev_time = "PT00:10:00", fwd_time = "-PT00:05:00"` - contains rows from 10m before through 5m before the + current row timestamp (inclusive), this is a purely backwards looking window + | `rev_time = "-PT00:05:00", fwd_time = "PT00:10:00"` - contains rows from 5m following through 10m + following the current row timestamp (inclusive), this is a purely forwards looking window + + Args: + ts_col (str): the timestamp column for determining the window + formula (str): the user defined formula to apply to each group. + formula_param (str): the parameter name for the input column's vector within the formula. If formula is + `max(each)`, then `each` is the formula_param. + cols (Union[str, List[str]]): the column(s) to be operated on, can include expressions to rename the output, + i.e. "new_col = col"; when empty, update_by performs the rolling formula operation on all columns. + rev_time (int): the look-behind window size, can be expressed as an integer in nanoseconds or a time + interval string, e.g. "PT00:00:00.001" or "PT5M" + fwd_time (int): the look-ahead window size, can be expressed as an integer in nanoseconds or a time + interval string, e.g. "PT00:00:00.001" or "PT5M", default is 0 + + Returns: + an UpdateByOperation + + Raises: + DHError + """ + try: + cols = to_sequence(cols) + rev_time = _JDateTimeUtils.parseDurationNanos(rev_time) if isinstance(rev_time, str) else rev_time + fwd_time = _JDateTimeUtils.parseDurationNanos(fwd_time) if isinstance(fwd_time, str) else fwd_time + return UpdateByOperation(j_updateby_op=_JUpdateByOperation.RollingFormula(ts_col, rev_time, fwd_time, formula, formula_param, *cols)) + except Exception as e: + raise DHError(e, "failed to create a rolling formula (time) UpdateByOperation.") from e \ No newline at end of file diff --git a/py/server/tests/test_updateby.py b/py/server/tests/test_updateby.py index a438ef8be49..a3660676154 100644 --- a/py/server/tests/test_updateby.py +++ b/py/server/tests/test_updateby.py @@ -10,10 +10,9 @@ cum_sum, cum_prod, cum_min, cum_max, forward_fill, delta, rolling_sum_tick, rolling_sum_time, \ rolling_group_tick, rolling_group_time, rolling_avg_tick, rolling_avg_time, rolling_min_tick, rolling_min_time, \ rolling_max_tick, rolling_max_time, rolling_prod_tick, rolling_prod_time, rolling_count_tick, rolling_count_time, \ - rolling_std_tick, rolling_std_time, rolling_wavg_tick, rolling_wavg_time + rolling_std_tick, rolling_std_time, rolling_wavg_tick, rolling_wavg_time, rolling_formula_tick, rolling_formula_time from tests.testbase import BaseTestCase -from deephaven.execution_context import get_exec_ctx - +from deephaven.execution_context import get_exec_ctx, make_user_exec_ctx class UpdateByTestCase(BaseTestCase): def setUp(self): @@ -154,6 +153,14 @@ def setUpClass(cls) -> None: rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time="PT00:00:10"), rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time=10_000_000_000, fwd_time=-10_000_000_00), rolling_wavg_time(ts_col="Timestamp", wcol="b", cols=["rwavg_b = b", "rwavg_e = e"], rev_time="PT30S", fwd_time="-PT00:00:20"), + # rolling formula + rolling_formula_tick(formula="sum(x)", formula_param="x", cols=["formula_a = a", "formula_d = d"], rev_ticks=10), + rolling_formula_tick(formula="avg(x)", formula_param="x", cols=["formula_a = a", "formula_d = d"], rev_ticks=10, fwd_ticks=10), + rolling_formula_time(formula="sum(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time="PT00:00:10"), + rolling_formula_time(formula="avg(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time=10_000_000_000, + fwd_time=-10_000_000_00), + rolling_formula_time(formula="sum(x)", formula_param="x", ts_col="Timestamp", cols=["formula_b = b", "formula_e = e"], rev_time="PT30S", + fwd_time="-PT00:00:20"), ] @classmethod @@ -241,6 +248,7 @@ def test_rolling_ops_proxy(self): self.assertEqual(len(rct.columns), 2 + len(ct.columns)) with update_graph.exclusive_lock(self.test_update_graph): self.assertEqual(ct.size, rct.size) + def test_multiple_ops(self): multiple_ops = [ cum_sum(["sum_a=a", "sum_b=b"]), diff --git a/replication/static/src/main/java/io/deephaven/replicators/ReplicateUpdateBy.java b/replication/static/src/main/java/io/deephaven/replicators/ReplicateUpdateBy.java index da86b6cb406..f5b317fea00 100644 --- a/replication/static/src/main/java/io/deephaven/replicators/ReplicateUpdateBy.java +++ b/replication/static/src/main/java/io/deephaven/replicators/ReplicateUpdateBy.java @@ -17,61 +17,69 @@ public class ReplicateUpdateBy { public static void main(String[] args) throws IOException { - List files = ReplicatePrimitiveCode.charToAll( - "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java"); + final String[] exemptions = new String[] { + "long singletonGroup = QueryConstants.NULL_LONG", + "long smallestModifiedKey", + "LongChunk", + "LongChunk<\\? extends RowKeys>", + "long groupPosition", + "long bucketPosition", + "long firstUnmodifiedKey", + "long getFirstReprocessKey" + }; + + List files = ReplicatePrimitiveCode.charToAllButBoolean( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java", + exemptions); for (final String f : files) { if (f.contains("Int")) { fixupInteger(f); } + if (f.contains("Byte")) { + fixupByteBase(f); + } + } + String objectResult = ReplicatePrimitiveCode.charToObject( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java"); + fixupStandardObject(objectResult, "BaseObjectUpdateByOperator", true, + "this\\(pair, affectingColumns, null, 0, 0, false\\);", + "this(pair, affectingColumns, null, 0, 0, false, colType);"); + files = ReplicatePrimitiveCode.charToAll( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java"); + for (final String f : files) { + if (f.contains("Int")) { + fixupInteger(f); + } if (f.contains("Long")) { augmentLongWithReinterps(f); } - if (f.contains("Boolean")) { fixupBoolean(f); } } - String objectResult = ReplicatePrimitiveCode.charToObject( + objectResult = ReplicatePrimitiveCode.charToObject( "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/fill/CharFillByOperator.java"); fixupStandardObject(objectResult, "ObjectFillByOperator", false, - "super\\(fillPair, new String\\[\\] \\{ fillPair.rightColumn \\}, rowRedirection\\);", - "super(fillPair, new String[] { fillPair.rightColumn }, rowRedirection, colType);", + "super\\(pair, new String\\[\\] \\{ pair.rightColumn \\}\\);", + "super(pair, new String[] { pair.rightColumn }, colType);", " BaseObjectUpdateByOperator", " BaseObjectUpdateByOperator", "public ObjectChunk", - "LongChunk<\\? extends RowKeys>", - "long groupPosition", - "long bucketPosition", - "long firstUnmodifiedKey", - "long getFirstReprocessKey" - }; - files = ReplicatePrimitiveCode.charToAllButBoolean( - "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java", + files = ReplicatePrimitiveCode.charToIntegers( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/CharCumSumOperator.java", exemptions); for (final String f : files) { if (f.contains("Int")) { fixupInteger(f); } - if (f.contains("Byte")) { - fixupByteBase(f); + fixupByte(f); } } - objectResult = ReplicatePrimitiveCode.charToObject( - "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/internal/BaseCharUpdateByOperator.java"); - fixupStandardObject(objectResult, "BaseObjectUpdateByOperator", true, - "this\\(pair, affectingColumns, rowRedirection, null, 0, 0, false\\);", - "this(pair, affectingColumns, rowRedirection, null, 0, 0, false, colType);"); - - replicateNumericOperator( - "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/ShortCumSumOperator.java", + ReplicatePrimitiveCode.floatToAllFloatingPoints( "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/sum/FloatCumSumOperator.java"); files = ReplicatePrimitiveCode.shortToAllNumericals( @@ -81,11 +89,9 @@ public static void main(String[] args) throws IOException { if (f.contains("Integer")) { fixupInteger(f); } - if (f.contains("Byte")) { fixupByte(f); } - if (f.contains("Long")) { augmentLongWithReinterps(f); } @@ -115,7 +121,6 @@ public static void main(String[] args) throws IOException { if (f.contains("Int")) { fixupInteger(f); } - if (f.contains("Byte")) { fixupByte(f); } @@ -134,6 +139,21 @@ public static void main(String[] args) throws IOException { } } + files = ReplicatePrimitiveCode.charToIntegers( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/CharRollingSumOperator.java", + exemptions); + for (final String f : files) { + if (f.contains("Int")) { + fixupInteger(f); + } + if (f.contains("Byte")) { + fixupByte(f); + } + } + ReplicatePrimitiveCode.floatToAllFloatingPoints( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingsum/FloatRollingSumOperator.java"); + + files = ReplicatePrimitiveCode.charToIntegers( "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingproduct/CharRollingProductOperator.java", exemptions); @@ -201,12 +221,28 @@ public static void main(String[] args) throws IOException { ReplicatePrimitiveCode.floatToAllFloatingPoints( "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/emstd/FloatEmStdOperator.java"); + files = ReplicatePrimitiveCode.charToAllButBoolean( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/ringbuffervectorwrapper/CharRingBufferVectorWrapper.java"); + for (final String f : files) { + if (f.contains("Integer")) { + fixupInteger(f); + } + } + + files = ReplicatePrimitiveCode.charToAllButBoolean( + "engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingformula/CharRollingFormulaOperator.java"); + for (final String f : files) { + if (f.contains("Int")) { + fixupInteger(f); + } + } + } private static void replicateNumericOperator(@NotNull final String shortClass, @NotNull final String floatClass) throws IOException { for (final String f : ReplicatePrimitiveCode.shortToAllIntegralTypes(shortClass)) { - if (f.contains("Integer")) { + if (f.contains("Int")) { fixupInteger(f); } @@ -329,8 +365,11 @@ private static void fixupByte(String byteResult) throws IOException { List lines = FileUtils.readLines(objectFile, Charset.defaultCharset()); lines = replaceRegion(lines, "extra-fields", Collections.singletonList(" final byte nullValue;")); lines = replaceRegion(lines, "extra-constructor-args", - Collections.singletonList(" ,final byte nullValue")); + Collections.singletonList(" ,final byte nullValue")); lines = replaceRegion(lines, "constructor", Collections.singletonList(" this.nullValue = nullValue;")); + lines = replaceRegion(lines, "extra-copy-args", + Collections.singletonList(" , nullValue")); + lines = ReplicationUtils.globalReplacements(lines, "!= NULL_BYTE", "!= nullValue", "== NULL_BYTE", "== nullValue"); @@ -349,7 +388,8 @@ private static void fixupInteger(String intResult) throws IOException { "IntegerChunk", "IntChunk", "getInteger", "getInt", "IntegerRingBuffer", "IntRingBuffer", - "SizedIntegerChunk", "SizedIntChunk"); + "SizedIntegerChunk", "SizedIntChunk", + "return new Integer", "return new Int"); if (intResult.contains("Integer")) { FileUtils.writeLines(new File(intResult.replaceAll("Integer", "Int")), lines); FileUtils.deleteQuietly(objectFile); @@ -391,7 +431,9 @@ private static void fixupStandardObject(String objectResult, final String classN lines = globalReplacements(lines, extraReplacements); } lines = ReplicationUtils.replaceRegion(lines, "extra-constructor-args", - Collections.singletonList(" , final Class colType")); + Collections.singletonList(" , final Class colType")); + lines = ReplicationUtils.replaceRegion(lines, "extra-copy-args", + Collections.singletonList(" , colType")); lines = ReplicationUtils.replaceRegion(lines, "clear-output", Collections.singletonList( " @Override\n" + @@ -407,7 +449,7 @@ private static void fixupStandardObject(String objectResult, final String classN if (augmentConstructorAndFields) { lines = ReplicationUtils.replaceRegion(lines, "extra-fields", - Collections.singletonList(" private final Class colType;")); + Collections.singletonList(" protected final Class colType;")); lines = ReplicationUtils.replaceRegion(lines, "constructor", Collections.singletonList(" this.colType = colType;")); } @@ -424,7 +466,9 @@ private static void augmentLongWithReinterps(final String longResult) throws IOE lines = replaceRegion(lines, "extra-fields", Collections.singletonList(" private final Class type;")); lines = replaceRegion(lines, "extra-constructor-args", - Collections.singletonList(" ,@NotNull final Class type")); + Collections.singletonList(" ,@NotNull final Class type")); + lines = replaceRegion(lines, "extra-copy-args", + Collections.singletonList(" , type")); lines = replaceRegion(lines, "constructor", Collections.singletonList(" this.type = type;")); lines = replaceRegion(lines, "extra-methods", diff --git a/server/src/main/java/io/deephaven/server/table/ops/UpdateByGrpcImpl.java b/server/src/main/java/io/deephaven/server/table/ops/UpdateByGrpcImpl.java index df765367716..70bc8208282 100644 --- a/server/src/main/java/io/deephaven/server/table/ops/UpdateByGrpcImpl.java +++ b/server/src/main/java/io/deephaven/server/table/ops/UpdateByGrpcImpl.java @@ -170,6 +170,8 @@ private static UpdateBySpec adaptSpec(UpdateByColumn.UpdateBySpec spec) { return adaptRollingStd(spec.getRollingStd()); case ROLLING_WAVG: return adaptRollingWAvg(spec.getRollingWavg()); + case ROLLING_FORMULA: + return adaptRollingFormula(spec.getRollingFormula()); case TYPE_NOT_SET: default: @@ -315,6 +317,13 @@ private static RollingWAvgSpec adaptRollingWAvg(UpdateByRollingWAvg wavg) { wavg.getWeightColumn()); } + private static RollingFormulaSpec adaptRollingFormula(UpdateByRollingFormula formula) { + return RollingFormulaSpec.of( + adaptWindowScale(formula.getReverseWindowScale()), + adaptWindowScale(formula.getForwardWindowScale()), + formula.getFormula(), + formula.getParamToken()); + } private static MathContext adaptMathContext(io.deephaven.proto.backplane.grpc.MathContext bigValueContext) { return new MathContext(bigValueContext.getPrecision(), adaptRoundingMode(bigValueContext.getRoundingMode())); diff --git a/table-api/src/main/java/io/deephaven/api/updateby/UpdateByOperation.java b/table-api/src/main/java/io/deephaven/api/updateby/UpdateByOperation.java index 745b85734cb..cd0e3ee4a40 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/UpdateByOperation.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/UpdateByOperation.java @@ -1906,6 +1906,200 @@ static UpdateByOperation RollingWAvg(String timestampCol, long revTime, long fwd return RollingWAvgSpec.ofTime(timestampCol, revTime, fwdTime, weightCol).clause(pairs); } + + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using ticks as the + * windowing unit. Ticks are row counts and you may specify the previous window in number of rows to include. The + * current row is considered to belong to the reverse window, so calling this with {@code revTicks = 1} will simply + * return the current row. Specifying {@code revTicks = 10} will include the previous 9 rows to this one and this + * row for a total of 10 rows. + * + * @param revTicks the look-behind window size (in rows/ticks) + * @param formula the user-defined formula to apply to each group. This formula can contain any combination of the + * following: + *

    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the parameter name for the input column's vector within the formula. If formula is + * max(each), then each is the formula_param. + * @param pairs The input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(long revTicks, String formula, String paramToken, String... pairs) { + return RollingFormulaSpec.ofTicks(revTicks, formula, paramToken).clause(pairs); + } + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using ticks as the + * windowing unit. Ticks are row counts and you may specify the reverse and forward window in number of rows to + * include. The current row is considered to belong to the reverse window but not the forward window. Also, negative + * values are allowed and can be used to generate completely forward or completely reverse windows. + *

+ * Here are some examples of window values: + *

    + *
  • {@code revTicks = 1, fwdTicks = 0} - contains only the current row
  • + *
  • {@code revTicks = 10, fwdTicks = 0} - contains 9 previous rows and the current row
  • + *
  • {@code revTicks = 0, fwdTicks = 10} - contains the following 10 rows, excludes the current row
  • + *
  • {@code revTicks = 10, fwdTicks = 10} - contains the previous 9 rows, the current row and the 10 rows + * following
  • + *
  • {@code revTicks = 10, fwdTicks = -5} - contains 5 rows, beginning at 9 rows before, ending at 5 rows before + * the current row (inclusive)
  • + *
  • {@code revTicks = 11, fwdTicks = -1} - contains 10 rows, beginning at 10 rows before, ending at 1 row before + * the current row (inclusive)
  • + *
  • {@code revTicks = -5, fwdTicks = 10} - contains 5 rows, beginning 5 rows following, ending at 10 rows + * following the current row (inclusive)
  • + *
+ * + * @param revTicks the look-behind window size (in rows/ticks) + * @param fwdTicks the look-ahead window size (in rows/ticks) + * @param formula the user-defined formula to apply to each group. This formula can contain any combination of the + * following: + *
    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the parameter name for the input column's vector within the formula. If formula is + * max(each), then each is the formula_param. + * @param pairs the input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(long revTicks, long fwdTicks, String formula, String paramToken, + String... pairs) { + return RollingFormulaSpec.ofTicks(revTicks, fwdTicks, formula, paramToken).clause(pairs); + } + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using time as the + * windowing unit. This function accepts {@link Duration duration} as the reverse window parameter. A row containing + * a {@code null} in the timestamp column belongs to no window and will not have a value computed or be considered + * in the windows of other rows. + *

+ * Here are some examples of window values: + *

    + *
  • {@code revDuration = 0m} - contains rows that exactly match the current row timestamp
  • + *
  • {@code revDuration = 10m} - contains rows from 10m earlier through the current row timestamp (inclusive)
  • + *
+ * + * @param timestampCol the name of the timestamp column + * @param revDuration the look-behind window size (in Duration) + * @param formula the user-defined {@link RollingFormulaSpec#formula() formula} to apply to each group. This formula + * can contain any combination of the following: + *
    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the {@link RollingFormulaSpec#paramToken() parameter token} for the input column's vector + * within the formula. If formula is max(each), then each is the formula_param. + * @param pairs The input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(String timestampCol, Duration revDuration, String formula, + String paramToken, String... pairs) { + return RollingFormulaSpec.ofTime(timestampCol, revDuration, formula, paramToken).clause(pairs); + } + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using time as the + * windowing unit. This function accepts {@link Duration durations} as the reverse and forward window parameters. + * Negative values are allowed and can be used to generate completely forward or completely reverse windows. A row + * containing a {@code null} in the timestamp column belongs to no window and will not have a value computed or be + * considered in the windows of other rows. + *

+ * Here are some examples of window values: + *

    + *
  • {@code revDuration = 0m, fwdDuration = 0m} - contains rows that exactly match the current row timestamp
  • + *
  • {@code revDuration = 10m, fwdDuration = 0m} - contains rows from 10m earlier through the current row + * timestamp (inclusive)
  • + *
  • {@code revDuration = 0m, fwdDuration = 10m} - contains rows from the current row through 10m following the + * current row timestamp (inclusive)
  • + *
  • {@code revDuration = 10m, fwdDuration = 10m} - contains rows from 10m earlier through 10m following the + * current row timestamp (inclusive)
  • + *
  • {@code revDuration = 10m, fwdDuration = -5m} - contains rows from 10m earlier through 5m before the current + * row timestamp (inclusive), this is a purely backwards looking window
  • + *
  • {@code revDuration = -5m, fwdDuration = 10m} - contains rows from 5m following through 10m following the + * current row timestamp (inclusive), this is a purely forwards looking window
  • + *
+ * + * @param timestampCol the name of the timestamp column + * @param revDuration the look-behind window size (in Duration) + * @param fwdDuration the look-ahead window size (in Duration) + * @param formula the user-defined {@link RollingFormulaSpec#formula() formula} to apply to each group. This formula + * can contain any combination of the following: + *
    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the {@link RollingFormulaSpec#paramToken() parameter token} for the input column's vector + * within the formula. If formula is max(each), then each is the formula_param. + * @param pairs The input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(String timestampCol, Duration revDuration, Duration fwdDuration, + String formula, String paramToken, String... pairs) { + return RollingFormulaSpec.ofTime(timestampCol, revDuration, fwdDuration, formula, paramToken).clause(pairs); + } + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using time as the + * windowing unit. This function accepts {@code nanoseconds} as the reverse window parameters. A row containing a + * {@code null} in the timestamp column belongs to no window and will not have a value computed or be considered in + * the windows of other rows. + * + * @param timestampCol the name of the timestamp column + * @param revTime the look-behind window size (in nanoseconds) + * @param formula the user-defined formula to apply to each group. This formula can contain any combination of the + * following: + *
    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the parameter name for the input column's vector within the formula. If formula is + * max(each), then each is the formula_param. + * @param pairs The input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(String timestampCol, long revTime, String formula, String paramToken, + String... pairs) { + return RollingFormulaSpec.ofTime(timestampCol, revTime, formula, paramToken).clause(pairs); + } + + /** + * Create a {@link RollingFormulaSpec rolling forumla} for the supplied column name pairs, using time as the + * windowing unit. This function accepts {@code nanoseconds} as the reverse and forward window parameters. Negative + * values are allowed and can be used to generate completely forward or completely reverse windows. A row containing + * a {@code null} in the timestamp column belongs to no window and will not have a value computed or be considered + * in the windows of other rows. + * + * @param timestampCol the name of the timestamp column + * @param revTime the look-behind window size (in nanoseconds) + * @param fwdTime the look-ahead window size (in nanoseconds) + * @param formula the user-defined formula to apply to each group. This formula can contain any combination of the + * following: + *
    + *
  • Built-in functions such as min, max, etc.
  • + *
  • Mathematical arithmetic such as *, +, /, etc.
  • + *
  • User-defined functions
  • + *
+ * @param paramToken the parameter name for the input column's vector within the formula. If formula is + * max(each), then each is the formula_param. + * @param pairs The input/output column name pairs + * @return The aggregation + */ + static UpdateByOperation RollingFormula(String timestampCol, long revTime, long fwdTime, String formula, + String paramToken, + String... pairs) { + return RollingFormulaSpec.ofTime(timestampCol, revTime, fwdTime, formula, paramToken).clause(pairs); + } + + + T walk(Visitor visitor); interface Visitor { diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/CumSumSpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/CumSumSpec.java index f6a2e4676cf..d167c2a74b4 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/spec/CumSumSpec.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/CumSumSpec.java @@ -18,7 +18,7 @@ public final boolean applicableTo(Class inputType) { return // is primitive or boxed numeric? applicableToNumeric(inputType) - + || inputType == char.class || inputType == Character.class // is boolean? || inputType == boolean.class || inputType == Boolean.class; } diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingFormulaSpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingFormulaSpec.java new file mode 100644 index 00000000000..6a058143cac --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingFormulaSpec.java @@ -0,0 +1,94 @@ +package io.deephaven.api.updateby.spec; + +import io.deephaven.annotations.BuildableStyle; +import org.immutables.value.Value; +import org.immutables.value.Value.Immutable; + +import java.time.Duration; + +/** + * An {@link UpdateBySpec} for performing a windowed rolling formula operation. + */ +@Immutable +@BuildableStyle +public abstract class RollingFormulaSpec extends RollingOpSpec { + + public abstract String formula(); + + public abstract String paramToken(); + + public static RollingFormulaSpec ofTicks(long revTicks, String formula, String paramToken) { + return of(WindowScale.ofTicks(revTicks), formula, paramToken); + } + + public static RollingFormulaSpec ofTicks(long revTicks, long fwdTicks, String formula, String paramToken) { + return of(WindowScale.ofTicks(revTicks), WindowScale.ofTicks(fwdTicks), formula, paramToken); + } + + public static RollingFormulaSpec ofTime(final String timestampCol, Duration revDuration, String formula, + String paramToken) { + return of(WindowScale.ofTime(timestampCol, revDuration), formula, paramToken); + } + + public static RollingFormulaSpec ofTime(final String timestampCol, Duration revDuration, Duration fwdDuration, + String formula, String paramToken) { + return of(WindowScale.ofTime(timestampCol, revDuration), + WindowScale.ofTime(timestampCol, fwdDuration), + formula, paramToken); + } + + public static RollingFormulaSpec ofTime(final String timestampCol, long revDuration, String formula, + String paramToken) { + return of(WindowScale.ofTime(timestampCol, revDuration), + formula, paramToken); + } + + public static RollingFormulaSpec ofTime(final String timestampCol, long revDuration, long fwdDuration, + String formula, String paramToken) { + return of(WindowScale.ofTime(timestampCol, revDuration), + WindowScale.ofTime(timestampCol, fwdDuration), + formula, paramToken); + } + + public static RollingFormulaSpec of(WindowScale revWindowScale, String formula, String paramToken) { + return ImmutableRollingFormulaSpec.builder() + .revWindowScale(revWindowScale) + .formula(formula) + .paramToken(paramToken) + .build(); + } + + public static RollingFormulaSpec of(WindowScale revWindowScale, WindowScale fwdWindowScale, String formula, + String paramToken) { + return ImmutableRollingFormulaSpec.builder() + .revWindowScale(revWindowScale) + .fwdWindowScale(fwdWindowScale) + .formula(formula) + .paramToken(paramToken) + .build(); + } + + @Override + public final boolean applicableTo(Class inputType) { + return true; + } + + @Override + public final T walk(Visitor visitor) { + return visitor.visit(this); + } + + @Value.Check + final void checkFormula() { + if (formula().isEmpty()) { + throw new IllegalArgumentException("formula must not be empty"); + } + } + + @Value.Check + final void checkParamToken() { + if (paramToken().isEmpty()) { + throw new IllegalArgumentException("paramToken must not be empty"); + } + } +} diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingMinMaxSpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingMinMaxSpec.java index 0608fce92db..dad63eb40fd 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingMinMaxSpec.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingMinMaxSpec.java @@ -1,7 +1,6 @@ package io.deephaven.api.updateby.spec; import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import java.time.Duration; @@ -50,7 +49,6 @@ public static RollingMinMaxSpec of(boolean isMax, WindowScale revWindowScale, Wi .revWindowScale(revWindowScale).fwdWindowScale(fwdWindowScale).build(); } - @Value.Parameter public abstract boolean isMax(); @Override diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingSumSpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingSumSpec.java index d88958c8d3d..930233e53bd 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingSumSpec.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingSumSpec.java @@ -51,6 +51,7 @@ public final boolean applicableTo(Class inputType) { return // is primitive or boxed numeric applicableToNumeric(inputType) + || inputType == char.class || inputType == Character.class // is boolean? || inputType == boolean.class || inputType == Boolean.class; } diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingWAvgSpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingWAvgSpec.java index 0be69e9a339..b559885fee0 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingWAvgSpec.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/RollingWAvgSpec.java @@ -1,7 +1,6 @@ package io.deephaven.api.updateby.spec; import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import java.time.Duration; @@ -13,7 +12,6 @@ @BuildableStyle public abstract class RollingWAvgSpec extends RollingOpSpec { - @Value.Parameter public abstract String weightCol(); public static RollingWAvgSpec ofTicks(long revTicks, final String weightCol) { diff --git a/table-api/src/main/java/io/deephaven/api/updateby/spec/UpdateBySpec.java b/table-api/src/main/java/io/deephaven/api/updateby/spec/UpdateBySpec.java index 9954135bb17..32cfa6e341f 100644 --- a/table-api/src/main/java/io/deephaven/api/updateby/spec/UpdateBySpec.java +++ b/table-api/src/main/java/io/deephaven/api/updateby/spec/UpdateBySpec.java @@ -95,6 +95,8 @@ interface Visitor { T visit(RollingStdSpec spec); T visit(RollingWAvgSpec w); + + T visit(RollingFormulaSpec w); } // endregion }