diff options
author | tsmax2004 <tsmax2004@yandex-team.com> | 2023-10-30 14:29:05 +0300 |
---|---|---|
committer | tsmax2004 <tsmax2004@yandex-team.com> | 2023-10-30 15:18:24 +0300 |
commit | 1a3fa8de0748a053eccbc972cda52be3fddd329c (patch) | |
tree | 10e5b2c2a36f70bbe8ad38b0dfacf39e4ad105a1 | |
parent | e7869361445b439b37b2045637f731cfe655080b (diff) | |
download | ydb-1a3fa8de0748a053eccbc972cda52be3fddd329c.tar.gz |
YQ Connector:string format for date and time
YQ Connector:string format for date and time
32 files changed, 1127 insertions, 830 deletions
diff --git a/ydb/core/fq/libs/actors/run_actor.cpp b/ydb/core/fq/libs/actors/run_actor.cpp index 4195a17ee39..2e68f5555b1 100644 --- a/ydb/core/fq/libs/actors/run_actor.cpp +++ b/ydb/core/fq/libs/actors/run_actor.cpp @@ -1881,6 +1881,9 @@ private: *gatewaysConfig.MutableS3() = Params.Config.GetGateways().GetS3(); gatewaysConfig.MutableS3()->ClearClusterMapping(); + *gatewaysConfig.MutableGeneric() = Params.Config.GetGateways().GetGeneric(); + gatewaysConfig.MutableGeneric()->ClearClusterMapping(); + THashMap<TString, TString> clusters; TString monitoringEndpoint = Params.Config.GetCommon().GetMonitoringEndpoint(); diff --git a/ydb/core/fq/libs/init/init.cpp b/ydb/core/fq/libs/init/init.cpp index c711e39cb1c..34d11e851f8 100644 --- a/ydb/core/fq/libs/init/init.cpp +++ b/ydb/core/fq/libs/init/init.cpp @@ -177,7 +177,7 @@ void Init( &protoConfig.GetGateways().GetHttpGateway(), yqCounters->GetSubgroup("subcomponent", "http_gateway")); - const auto connectorClient = NYql::NConnector::MakeClientGRPC(protoConfig.GetGateways().GetConnector()); + const auto connectorClient = NYql::NConnector::MakeClientGRPC(protoConfig.GetGateways().GetGeneric().GetConnector()); if (protoConfig.GetTokenAccessor().GetEnabled()) { const auto& tokenAccessorConfig = protoConfig.GetTokenAccessor(); diff --git a/ydb/core/kqp/federated_query/kqp_federated_query_helpers.cpp b/ydb/core/kqp/federated_query/kqp_federated_query_helpers.cpp index e71aa0bf9d4..eee9cd5dd9c 100644 --- a/ydb/core/kqp/federated_query/kqp_federated_query_helpers.cpp +++ b/ydb/core/kqp/federated_query/kqp_federated_query_helpers.cpp @@ -65,12 +65,9 @@ namespace NKikimr::NKqp { } // Initialize Connector client - if (queryServiceConfig.HasConnector()) { - ConnectorClient = NYql::NConnector::MakeClientGRPC(queryServiceConfig.GetConnector()); - - if (queryServiceConfig.HasMdbGateway()) { - MdbGateway = queryServiceConfig.GetMdbGateway(); - } + if (queryServiceConfig.HasGeneric()) { + GenericGatewaysConfig = queryServiceConfig.GetGeneric(); + ConnectorClient = NYql::NConnector::MakeClientGRPC(GenericGatewaysConfig.GetConnector()); if (queryServiceConfig.HasMdbTransformHost()) { MdbEndpointGenerator = NFq::MakeMdbEndpointGeneratorGeneric(queryServiceConfig.GetMdbTransformHost()); @@ -99,15 +96,16 @@ namespace NKikimr::NKqp { ConnectorClient, CredentialsFactory, nullptr, - S3GatewayConfig}; + S3GatewayConfig, + GenericGatewaysConfig}; // Init DatabaseAsyncResolver only if all requirements are met - if (DatabaseResolverActorId && MdbGateway && MdbEndpointGenerator) { + if (DatabaseResolverActorId && GenericGatewaysConfig.HasMdbGateway() && MdbEndpointGenerator) { result.DatabaseAsyncResolver = std::make_shared<NFq::TDatabaseAsyncResolverImpl>( actorSystem, DatabaseResolverActorId.value(), "", // TODO: use YDB Gateway endpoint? - MdbGateway.value(), + GenericGatewaysConfig.GetMdbGateway(), MdbEndpointGenerator); } diff --git a/ydb/core/kqp/federated_query/kqp_federated_query_helpers.h b/ydb/core/kqp/federated_query/kqp_federated_query_helpers.h index 40839709e22..8ae4a177f51 100644 --- a/ydb/core/kqp/federated_query/kqp_federated_query_helpers.h +++ b/ydb/core/kqp/federated_query/kqp_federated_query_helpers.h @@ -17,6 +17,7 @@ namespace NKikimr::NKqp { NYql::ISecuredServiceAccountCredentialsFactory::TPtr CredentialsFactory; NYql::IDatabaseAsyncResolver::TPtr DatabaseAsyncResolver; NYql::TS3GatewayConfig S3GatewayConfig; + NYql::TGenericGatewayConfig GenericGatewayConfig; }; struct IKqpFederatedQuerySetupFactory { @@ -45,11 +46,11 @@ namespace NKikimr::NKqp { NYql::THttpGatewayConfig HttpGatewayConfig; NYql::IHTTPGateway::TPtr HttpGateway; NYql::TS3GatewayConfig S3GatewayConfig; + NYql::TGenericGatewayConfig GenericGatewaysConfig; NYql::ISecuredServiceAccountCredentialsFactory::TPtr CredentialsFactory; NYql::NConnector::IClient::TPtr ConnectorClient; std::optional<NActors::TActorId> DatabaseResolverActorId; NYql::IMdbEndpointGenerator::TPtr MdbEndpointGenerator; - std::optional<TString> MdbGateway; }; struct TKqpFederatedQuerySetupFactoryMock: public IKqpFederatedQuerySetupFactory { @@ -60,18 +61,20 @@ namespace NKikimr::NKqp { NYql::NConnector::IClient::TPtr connectorClient, NYql::ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory, NYql::IDatabaseAsyncResolver::TPtr databaseAsyncResolver, - const NYql::TS3GatewayConfig& s3GatewayConfig) + const NYql::TS3GatewayConfig& s3GatewayConfig, + const NYql::TGenericGatewayConfig& genericGatewayConfig) : HttpGateway(httpGateway) , ConnectorClient(connectorClient) , CredentialsFactory(credentialsFactory) , DatabaseAsyncResolver(databaseAsyncResolver) , S3GatewayConfig(s3GatewayConfig) + , GenericGatewayConfig(genericGatewayConfig) { } std::optional<TKqpFederatedQuerySetup> Make(NActors::TActorSystem*) override { return TKqpFederatedQuerySetup{ - HttpGateway, ConnectorClient, CredentialsFactory, DatabaseAsyncResolver, S3GatewayConfig}; + HttpGateway, ConnectorClient, CredentialsFactory, DatabaseAsyncResolver, S3GatewayConfig, GenericGatewayConfig}; } private: @@ -80,6 +83,7 @@ namespace NKikimr::NKqp { NYql::ISecuredServiceAccountCredentialsFactory::TPtr CredentialsFactory; NYql::IDatabaseAsyncResolver::TPtr DatabaseAsyncResolver; NYql::TS3GatewayConfig S3GatewayConfig; + NYql::TGenericGatewayConfig GenericGatewayConfig; }; IKqpFederatedQuerySetupFactory::TPtr MakeKqpFederatedQuerySetupFactory( diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index c943e099e01..dd7f40f13b1 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -1530,7 +1530,7 @@ private: FuncRegistry, FederatedQuerySetup->DatabaseAsyncResolver, FederatedQuerySetup->ConnectorClient, - nullptr + FederatedQuerySetup->GenericGatewayConfig ); TypesCtx->AddDataSource(NYql::GenericProviderName, NYql::CreateGenericDataSource(state)); diff --git a/ydb/core/kqp/node_service/kqp_node_ut.cpp b/ydb/core/kqp/node_service/kqp_node_ut.cpp index 3c88d82d783..fdcca8f068c 100644 --- a/ydb/core/kqp/node_service/kqp_node_ut.cpp +++ b/ydb/core/kqp/node_service/kqp_node_ut.cpp @@ -184,7 +184,7 @@ public: Runtime->EnableScheduleForActor(ResourceManagerActorId, true); WaitForBootstrap(); - auto FederatedQuerySetup = std::make_optional<TKqpFederatedQuerySetup>({NYql::IHTTPGateway::Make(), nullptr, nullptr, nullptr, {}}); + auto FederatedQuerySetup = std::make_optional<TKqpFederatedQuerySetup>({NYql::IHTTPGateway::Make(), nullptr, nullptr, nullptr, {}, {}}); auto asyncIoFactory = CreateKqpAsyncIoFactory(KqpCounters, FederatedQuerySetup); auto kqpNode = CreateKqpNodeService(config, KqpCounters, CompFactory.Get(), asyncIoFactory); KqpNodeActorId = Runtime->Register(kqpNode); diff --git a/ydb/core/kqp/ut/federated_query/common/common.cpp b/ydb/core/kqp/ut/federated_query/common/common.cpp index a14e59ca1be..f0e791cebd8 100644 --- a/ydb/core/kqp/ut/federated_query/common/common.cpp +++ b/ydb/core/kqp/ut/federated_query/common/common.cpp @@ -31,7 +31,8 @@ namespace NKikimr::NKqp::NFederatedQueryTest { connectorClient, nullptr, databaseAsyncResolver, - appConfig ? appConfig->GetQueryServiceConfig().GetS3() : NYql::TS3GatewayConfig()); + appConfig ? appConfig->GetQueryServiceConfig().GetS3() : NYql::TS3GatewayConfig(), + appConfig ? appConfig->GetQueryServiceConfig().GetGeneric() : NYql::TGenericGatewayConfig()); auto settings = TKikimrSettings() .SetFeatureFlags(featureFlags) diff --git a/ydb/core/kqp/ut/federated_query/generic/kqp_generic_provider_ut.cpp b/ydb/core/kqp/ut/federated_query/generic/kqp_generic_provider_ut.cpp index 54ac7e93355..a484fd8fe0e 100644 --- a/ydb/core/kqp/ut/federated_query/generic/kqp_generic_provider_ut.cpp +++ b/ydb/core/kqp/ut/federated_query/generic/kqp_generic_provider_ut.cpp @@ -51,6 +51,21 @@ namespace NKikimr::NKqp { } } + NKikimrConfig::TAppConfig CreateDefaultAppConfig() { + NKikimrConfig::TAppConfig appConfig; + NYql::TAttr dateTimeFormat; + dateTimeFormat.SetName("DateTimeFormat"); + dateTimeFormat.SetValue("string"); + appConfig.MutableQueryServiceConfig()->MutableGeneric()->MutableDefaultSettings()->Add(std::move(dateTimeFormat)); + return appConfig; + } + + NApi::TTypeMappingSettings MakeTypeMappingSettings(NApi::EDateTimeFormat dateTimeFormat) { + NApi::TTypeMappingSettings settings; + settings.set_date_time_format(dateTimeFormat); + return settings; + } + Y_UNIT_TEST_SUITE(GenericFederatedQuery) { void TestSelectAllFields(EProviderType providerType) { // prepare mock @@ -62,6 +77,7 @@ namespace NKikimr::NKqp { // clang-format off clientMock->ExpectDescribeTable() .DataSourceInstance(dataSourceInstance) + .TypeMappingSettings(MakeTypeMappingSettings(NYql::NConnector::NApi::STRING_FORMAT)) .Response() .Column("col1", Ydb::Type::UINT16); @@ -108,7 +124,8 @@ namespace NKikimr::NKqp { } // run test - auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock); + auto appConfig = CreateDefaultAppConfig(); + auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock, appConfig); CreateExternalDataSource(providerType, kikimr); @@ -157,6 +174,7 @@ namespace NKikimr::NKqp { // clang-format off clientMock->ExpectDescribeTable() .DataSourceInstance(dataSourceInstance) + .TypeMappingSettings(MakeTypeMappingSettings(NYql::NConnector::NApi::STRING_FORMAT)) .Response() .Column("col1", Ydb::Type::UINT16) .Column("col2", Ydb::Type::DOUBLE); @@ -199,7 +217,8 @@ namespace NKikimr::NKqp { } // run test - auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock); + auto appConfig = CreateDefaultAppConfig(); + auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock, appConfig); CreateExternalDataSource(providerType, kikimr); @@ -247,6 +266,7 @@ namespace NKikimr::NKqp { // step 1: DescribeTable clientMock->ExpectDescribeTable() .DataSourceInstance(dataSourceInstance) + .TypeMappingSettings(MakeTypeMappingSettings(NYql::NConnector::NApi::STRING_FORMAT)) .Response() .Column("col1", Ydb::Type::UINT16) .Column("col2", Ydb::Type::DOUBLE); @@ -289,7 +309,8 @@ namespace NKikimr::NKqp { } // run test - auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock); + auto appConfig = CreateDefaultAppConfig(); + auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock, appConfig); CreateExternalDataSource(providerType, kikimr); @@ -348,6 +369,7 @@ namespace NKikimr::NKqp { // clang-format off clientMock->ExpectDescribeTable() .DataSourceInstance(dataSourceInstance) + .TypeMappingSettings(MakeTypeMappingSettings(NYql::NConnector::NApi::STRING_FORMAT)) .Response() .NullableColumn("filtered_column", Ydb::Type::INT32) .NullableColumn("data_column", Ydb::Type::STRING); @@ -391,7 +413,8 @@ namespace NKikimr::NKqp { } // run test - auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock); + auto appConfig = CreateDefaultAppConfig(); + auto kikimr = MakeKikimrRunner(nullptr, clientMock, databaseAsyncResolverMock, appConfig); CreateExternalDataSource(providerType, kikimr); diff --git a/ydb/core/kqp/ut/indexes/kqp_indexes_ut.cpp b/ydb/core/kqp/ut/indexes/kqp_indexes_ut.cpp index 0606d80dab8..e6981743587 100644 --- a/ydb/core/kqp/ut/indexes/kqp_indexes_ut.cpp +++ b/ydb/core/kqp/ut/indexes/kqp_indexes_ut.cpp @@ -52,7 +52,7 @@ TIntrusivePtr<IKqpHost> CreateKikimrQueryProcessor(TIntrusivePtr<IKqpGateway> ga UNIT_ASSERT(TryParseFromTextFormat(defaultSettingsStream, defaultSettings)); kikimrConfig->Init(defaultSettings.GetDefaultSettings(), cluster, settings, true); - auto federatedQuerySetup = std::make_optional<TKqpFederatedQuerySetup>({NYql::IHTTPGateway::Make(), nullptr, nullptr, nullptr, {}}); + auto federatedQuerySetup = std::make_optional<TKqpFederatedQuerySetup>({NYql::IHTTPGateway::Make(), nullptr, nullptr, nullptr, {}, {}}); return NKqp::CreateKqpHost(gateway, cluster, "/Root", kikimrConfig, moduleResolver, federatedQuerySetup, funcRegistry, funcRegistry, keepConfigChanges); } diff --git a/ydb/core/testlib/test_client.cpp b/ydb/core/testlib/test_client.cpp index f47a327560d..c690a131c28 100644 --- a/ydb/core/testlib/test_client.cpp +++ b/ydb/core/testlib/test_client.cpp @@ -860,22 +860,23 @@ namespace Tests { ); std::shared_ptr<NFq::TDatabaseAsyncResolverImpl> databaseAsyncResolver; - if (queryServiceConfig.HasMdbGateway() && queryServiceConfig.HasMdbTransformHost()) { + if (queryServiceConfig.GetGeneric().HasMdbGateway() && queryServiceConfig.HasMdbTransformHost()) { databaseAsyncResolver = std::make_shared<NFq::TDatabaseAsyncResolverImpl>( Runtime->GetActorSystem(nodeIdx), databaseResolverActorId, "", - queryServiceConfig.GetMdbGateway(), + queryServiceConfig.GetGeneric().GetMdbGateway(), NFq::MakeMdbEndpointGeneratorGeneric(queryServiceConfig.GetMdbTransformHost()) ); } federatedQuerySetupFactory = std::make_shared<NKikimr::NKqp::TKqpFederatedQuerySetupFactoryMock>( NYql::IHTTPGateway::Make(&queryServiceConfig.GetHttpGateway()), - NYql::NConnector::MakeClientGRPC(queryServiceConfig.GetConnector()), + NYql::NConnector::MakeClientGRPC(queryServiceConfig.GetGeneric().GetConnector()), nullptr, databaseAsyncResolver, - queryServiceConfig.GetS3() + queryServiceConfig.GetS3(), + queryServiceConfig.GetGeneric() ); } diff --git a/ydb/library/yql/providers/generic/connector/api/service/protos/connector.proto b/ydb/library/yql/providers/generic/connector/api/service/protos/connector.proto index dff86a7e352..a2e8f6daf03 100644 --- a/ydb/library/yql/providers/generic/connector/api/service/protos/connector.proto +++ b/ydb/library/yql/providers/generic/connector/api/service/protos/connector.proto @@ -39,8 +39,22 @@ message TDescribeTableRequest { TDataSourceInstance data_source_instance = 1; // Table to describe string table = 2; + // Rules for type mapping + TTypeMappingSettings type_mapping_settings = 3; } +message TTypeMappingSettings { + // Determines the format of date or time representation + EDateTimeFormat date_time_format = 1; +} + +enum EDateTimeFormat { + DATE_TIME_FORMAT_UNSPECIFIED = 0; + STRING_FORMAT = 1; + YQL_FORMAT = 2; +} + + // TDescribeTableResponse returns table metadata message TDescribeTableResponse { // The whole schema of a table @@ -183,7 +197,7 @@ message TReadSplitsRequest { repeated TSplit splits = 2; enum EMode { - MODE_RESERVED = 0; + MODE_UNSPECIFIED = 0; // Connector will read splits in a single thread one by one. // The data will be returned in the order corresponding to the order of requested splits. ORDERED = 1; @@ -196,7 +210,7 @@ message TReadSplitsRequest { EMode mode = 3; enum EFormat { - FORMAT_RESERVED = 0; + FORMAT_UNSPECIFIED = 0; // Arrow IPC Streaming format: // https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format ARROW_IPC_STREAMING = 2; @@ -359,7 +373,7 @@ message TPredicate { message TComparison { // An operation code. enum EOperation { - RESERVED = 0; + OPERATION_UNSPECIFIED = 0; L = 1; // "$column < value" LE = 2; // "$column <= value" EQ = 3; // "$column = value" diff --git a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/connection_manager.go b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/connection_manager.go index 4d9cd45d5f7..b61cb0378fe 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/connection_manager.go +++ b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/connection_manager.go @@ -21,19 +21,43 @@ type Connection struct { logger utils.QueryLogger } +type rows struct { + *sql.Rows +} + +func (r rows) MakeAcceptors() ([]any, error) { + columns, err := r.ColumnTypes() + if err != nil { + return nil, fmt.Errorf("column types: %w", err) + } + + typeNames := make([]string, 0, len(columns)) + for _, column := range columns { + typeNames = append(typeNames, column.DatabaseTypeName()) + } + + return acceptorsFromSQLTypes(typeNames) +} + func (c Connection) Query(ctx context.Context, query string, args ...any) (utils.Rows, error) { c.logger.Dump(query, args...) - rows, err := c.DB.QueryContext(ctx, query, args...) + out, err := c.DB.QueryContext(ctx, query, args...) if err != nil { return nil, fmt.Errorf("query context: %w", err) } - if err := rows.Err(); err != nil { + if err := out.Err(); err != nil { + defer func() { + if err := out.Close(); err != nil { + c.logger.Error("close rows", log.Error(err)) + } + }() + return nil, fmt.Errorf("rows err: %w", err) } - return rows, nil + return rows{Rows: out}, nil } var _ utils.ConnectionManager[*Connection] = (*connectionManager)(nil) diff --git a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/query_executor.go b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/query_executor.go index 0c09fd84f1b..3bc595bdd8f 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/query_executor.go +++ b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/query_executor.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/ydb-platform/ydb/library/go/core/log" "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/app/server/utils" api_service_protos "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/libgo/service/protos" ) @@ -11,7 +12,11 @@ import ( type queryExecutor struct { } -func (qm queryExecutor) DescribeTable(ctx context.Context, conn *Connection, request *api_service_protos.TDescribeTableRequest) (utils.Rows, error) { +func (qm queryExecutor) DescribeTable( + ctx context.Context, + conn *Connection, + request *api_service_protos.TDescribeTableRequest, +) (utils.Rows, error) { out, err := conn.QueryContext( ctx, "SELECT name, type FROM system.columns WHERE table = ? and database = ?", @@ -24,10 +29,16 @@ func (qm queryExecutor) DescribeTable(ctx context.Context, conn *Connection, req } if err := out.Err(); err != nil { + defer func() { + if err := out.Close(); err != nil { + conn.logger.Error("close rows", log.Error(err)) + } + }() + return nil, fmt.Errorf("rows err: %w", err) } - return out, nil + return rows{Rows: out}, nil } func NewQueryExecutor() utils.QueryExecutor[*Connection] { diff --git a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/type_mapper.go b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/type_mapper.go index eb0ce8197d6..75079c75fae 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/clickhouse/type_mapper.go +++ b/ydb/library/yql/providers/generic/connector/app/server/clickhouse/type_mapper.go @@ -4,23 +4,27 @@ import ( "errors" "fmt" "regexp" - "time" "github.com/apache/arrow/go/v13/arrow/array" "github.com/ydb-platform/ydb-go-genproto/protos/Ydb" "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/app/server/utils" + api_service_protos "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/libgo/service/protos" ) var _ utils.TypeMapper = typeMapper{} type typeMapper struct { isFixedString *regexp.Regexp + isDateTime *regexp.Regexp isDateTime64 *regexp.Regexp isNullable *regexp.Regexp } -func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Column, error) { - var ydbType *Ydb.Type +func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string, rules *api_service_protos.TTypeMappingSettings) (*Ydb.Column, error) { + var ( + ydbType *Ydb.Type + err error + ) // By default all columns in CH are non-nullable, so // we wrap YDB types into Optional type only in such cases: @@ -67,22 +71,29 @@ func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Colum case tm.isFixedString.MatchString(typeName): ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_STRING}} case typeName == "Date": - nullable = true - ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_DATE}} + var overflow bool + ydbType, overflow, err = makeYdbDateTimeType(Ydb.Type_DATE, rules.GetDateTimeFormat()) + nullable = overflow || nullable // FIXME: https://st.yandex-team.ru/YQ-2295 // Date32 is not displayed correctly. // case typeName == "Date32": // nullable = true // ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_DATE}} - case typeName == "DateTime": - nullable = true - ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_DATETIME}} case tm.isDateTime64.MatchString(typeName): // NOTE: ClickHouse's DateTime64 value range is much more wide than YDB's Timestamp value range - nullable = true - ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_TIMESTAMP}} + var overflow bool + ydbType, overflow, err = makeYdbDateTimeType(Ydb.Type_TIMESTAMP, rules.GetDateTimeFormat()) + nullable = overflow || nullable + case tm.isDateTime.MatchString(typeName): + var overflow bool + ydbType, overflow, err = makeYdbDateTimeType(Ydb.Type_DATETIME, rules.GetDateTimeFormat()) + nullable = overflow || nullable default: - return nil, fmt.Errorf("convert type '%s': %w", typeName, utils.ErrDataTypeNotSupported) + err = fmt.Errorf("convert type '%s': %w", typeName, utils.ErrDataTypeNotSupported) + } + + if err != nil { + return nil, err } // If the column is nullable, wrap it into YQL's optional @@ -96,71 +107,68 @@ func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Colum }, nil } -func (tm typeMapper) YDBTypeToAcceptor(ydbType *Ydb.Type) (any, error) { - var ( - acceptor any - err error - ) - - switch t := ydbType.Type.(type) { - // Primitive types - case *Ydb.Type_TypeId: - acceptor, err = acceptorFromPrimitiveYDBType(t.TypeId, false) - if err != nil { - return nil, fmt.Errorf("make acceptor from primitive YDB type: %w", err) - } - case *Ydb.Type_OptionalType: - acceptor, err = acceptorFromPrimitiveYDBType(t.OptionalType.Item.GetTypeId(), true) - if err != nil { - return nil, fmt.Errorf("make acceptor from optional YDB type: %w", err) - } +func makeYdbDateTimeType(ydbTypeID Ydb.Type_PrimitiveTypeId, format api_service_protos.EDateTimeFormat) (*Ydb.Type, bool, error) { + switch format { + case api_service_protos.EDateTimeFormat_YQL_FORMAT: + // type marked as nullable because ClickHouse's type value range is much more wide than YDB's type value range + return &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: ydbTypeID}}, true, nil + case api_service_protos.EDateTimeFormat_STRING_FORMAT: + return &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_STRING}}, false, nil default: - return nil, fmt.Errorf("only primitive types are supported, got '%v' instead", ydbType) + return nil, false, fmt.Errorf("unexpected datetime format '%s': %w", format, utils.ErrDataTypeNotSupported) } - - return acceptor, nil } -func allocatePrimitiveAcceptor[VT utils.ValueType](optional bool) any { - if !optional { - return new(VT) - } else { - return new(*VT) - } -} +func acceptorsFromSQLTypes(typeNames []string) ([]any, error) { + acceptors := make([]any, 0, len(typeNames)) + isNullable := regexp.MustCompile(`Nullable\((?P<Internal>[\w\(\)]+)\)`) + isFixedString := regexp.MustCompile(`FixedString\([0-9]+\)`) + isDateTime := regexp.MustCompile(`DateTime(\('[\w,/]+'\))?`) + isDateTime64 := regexp.MustCompile(`DateTime64\(\d{1}(, '[\w,/]+')?\)`) -func acceptorFromPrimitiveYDBType(typeID Ydb.Type_PrimitiveTypeId, optional bool) (any, error) { - switch typeID { - case Ydb.Type_BOOL: - return allocatePrimitiveAcceptor[bool](optional), nil - case Ydb.Type_INT8: - return allocatePrimitiveAcceptor[int8](optional), nil - case Ydb.Type_INT16: - return allocatePrimitiveAcceptor[int16](optional), nil - case Ydb.Type_INT32: - return allocatePrimitiveAcceptor[int32](optional), nil - case Ydb.Type_INT64: - return allocatePrimitiveAcceptor[int64](optional), nil - case Ydb.Type_UINT8: - return allocatePrimitiveAcceptor[uint8](optional), nil - case Ydb.Type_UINT16: - return allocatePrimitiveAcceptor[uint16](optional), nil - case Ydb.Type_UINT32: - return allocatePrimitiveAcceptor[uint32](optional), nil - case Ydb.Type_UINT64: - return allocatePrimitiveAcceptor[uint64](optional), nil - case Ydb.Type_FLOAT: - return allocatePrimitiveAcceptor[float32](optional), nil - case Ydb.Type_DOUBLE: - return allocatePrimitiveAcceptor[float64](optional), nil - case Ydb.Type_STRING: - // Looks like []byte would be a better choice here, but clickhouse driver prefers string - return allocatePrimitiveAcceptor[string](optional), nil - case Ydb.Type_DATE, Ydb.Type_DATETIME, Ydb.Type_TIMESTAMP: - return allocatePrimitiveAcceptor[time.Time](optional), nil - default: - return nil, fmt.Errorf("unknown type '%v'", typeID) + for _, typeName := range typeNames { + if matches := isNullable.FindStringSubmatch(typeName); len(matches) > 0 { + typeName = matches[1] + } + + switch { + case typeName == "Bool": + acceptors = append(acceptors, new(*bool)) + case typeName == "Int8": + acceptors = append(acceptors, new(*int8)) + case typeName == "Int16": + acceptors = append(acceptors, new(*int16)) + case typeName == "Int32": + acceptors = append(acceptors, new(*int32)) + case typeName == "Int64": + acceptors = append(acceptors, new(*int64)) + case typeName == "UInt8": + acceptors = append(acceptors, new(*uint8)) + case typeName == "UInt16": + acceptors = append(acceptors, new(*uint16)) + case typeName == "UInt32": + acceptors = append(acceptors, new(*uint32)) + case typeName == "UInt64": + acceptors = append(acceptors, new(*uint64)) + case typeName == "Float32": + acceptors = append(acceptors, new(*float32)) + case typeName == "Float64": + acceptors = append(acceptors, new(*float64)) + case typeName == "String", isFixedString.MatchString(typeName): + // Looks like []byte would be a better choice here, but clickhouse driver prefers string + acceptors = append(acceptors, new(*string)) + case typeName == "Date": + acceptors = append(acceptors, new(*utils.Date)) + case isDateTime64.MatchString(typeName): + acceptors = append(acceptors, new(*utils.Timestamp)) + case isDateTime.MatchString(typeName): + acceptors = append(acceptors, new(*utils.Datetime)) + default: + return nil, fmt.Errorf("unknown type '%v'", typeName) + } } + + return acceptors, nil } // AddRow saves a row obtained from the datasource into the buffer @@ -199,24 +207,17 @@ func (tm typeMapper) AddRowToArrowIPCStreaming(ydbTypes []*Ydb.Type, acceptors [ func appendValueToArrowBuilder[IN utils.ValueType, OUT utils.ValueType, AB utils.ArrowBuilder[OUT], CONV utils.ValueConverter[IN, OUT]]( acceptor any, builder array.Builder, - optional bool, ) error { - var value IN - - if optional { - cast := acceptor.(**IN) - if *cast == nil { - builder.AppendNull() + cast := acceptor.(**IN) - return nil - } + if *cast == nil { + builder.AppendNull() - value = **cast - } else { - //nolint:forcetypeassert - value = *acceptor.(*IN) + return nil } + value := **cast + var converter CONV out, err := converter.Convert(value) @@ -247,35 +248,47 @@ func (typeMapper) appendValueToBuilder( switch typeID { case Ydb.Type_BOOL: - err = appendValueToArrowBuilder[bool, uint8, *array.Uint8Builder, utils.BoolConverter](acceptor, builder, optional) + err = appendValueToArrowBuilder[bool, uint8, *array.Uint8Builder, utils.BoolConverter](acceptor, builder) case Ydb.Type_INT8: - err = appendValueToArrowBuilder[int8, int8, *array.Int8Builder, utils.Int8Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[int8, int8, *array.Int8Builder, utils.Int8Converter](acceptor, builder) case Ydb.Type_INT16: - err = appendValueToArrowBuilder[int16, int16, *array.Int16Builder, utils.Int16Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[int16, int16, *array.Int16Builder, utils.Int16Converter](acceptor, builder) case Ydb.Type_INT32: - err = appendValueToArrowBuilder[int32, int32, *array.Int32Builder, utils.Int32Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[int32, int32, *array.Int32Builder, utils.Int32Converter](acceptor, builder) case Ydb.Type_INT64: - err = appendValueToArrowBuilder[int64, int64, *array.Int64Builder, utils.Int64Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[int64, int64, *array.Int64Builder, utils.Int64Converter](acceptor, builder) case Ydb.Type_UINT8: - err = appendValueToArrowBuilder[uint8, uint8, *array.Uint8Builder, utils.Uint8Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[uint8, uint8, *array.Uint8Builder, utils.Uint8Converter](acceptor, builder) case Ydb.Type_UINT16: - err = appendValueToArrowBuilder[uint16, uint16, *array.Uint16Builder, utils.Uint16Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[uint16, uint16, *array.Uint16Builder, utils.Uint16Converter](acceptor, builder) case Ydb.Type_UINT32: - err = appendValueToArrowBuilder[uint32, uint32, *array.Uint32Builder, utils.Uint32Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[uint32, uint32, *array.Uint32Builder, utils.Uint32Converter](acceptor, builder) case Ydb.Type_UINT64: - err = appendValueToArrowBuilder[uint64, uint64, *array.Uint64Builder, utils.Uint64Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[uint64, uint64, *array.Uint64Builder, utils.Uint64Converter](acceptor, builder) case Ydb.Type_FLOAT: - err = appendValueToArrowBuilder[float32, float32, *array.Float32Builder, utils.Float32Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[float32, float32, *array.Float32Builder, utils.Float32Converter](acceptor, builder) case Ydb.Type_DOUBLE: - err = appendValueToArrowBuilder[float64, float64, *array.Float64Builder, utils.Float64Converter](acceptor, builder, optional) + err = appendValueToArrowBuilder[float64, float64, *array.Float64Builder, utils.Float64Converter](acceptor, builder) case Ydb.Type_STRING: - err = appendValueToArrowBuilder[string, []byte, *array.BinaryBuilder, utils.StringToBytesConverter](acceptor, builder, optional) + // depends on date/time representation format + switch acceptor.(type) { + case **string: + err = appendValueToArrowBuilder[string, string, *array.StringBuilder, utils.StringConverter](acceptor, builder) + case **utils.Date: + err = appendValueToArrowBuilder[utils.Date, string, *array.StringBuilder, utils.DateToStringConverter](acceptor, builder) + case **utils.Datetime: + err = appendValueToArrowBuilder[utils.Datetime, string, *array.StringBuilder, utils.DatetimeToStringConverter](acceptor, builder) + case **utils.Timestamp: + err = appendValueToArrowBuilder[utils.Timestamp, string, *array.StringBuilder, utils.TimestampToStringConverter](acceptor, builder) + default: + return fmt.Errorf("unexpected type %v with acceptor type %T: %w", typeID, acceptor, utils.ErrDataTypeNotSupported) + } case Ydb.Type_DATE: - err = appendValueToArrowBuilder[time.Time, uint16, *array.Uint16Builder, utils.DateConverter](acceptor, builder, optional) + err = appendValueToArrowBuilder[utils.Date, uint16, *array.Uint16Builder, utils.DateConverter](acceptor, builder) case Ydb.Type_DATETIME: - err = appendValueToArrowBuilder[time.Time, uint32, *array.Uint32Builder, utils.DatetimeConverter](acceptor, builder, optional) + err = appendValueToArrowBuilder[utils.Datetime, uint32, *array.Uint32Builder, utils.DatetimeConverter](acceptor, builder) case Ydb.Type_TIMESTAMP: - err = appendValueToArrowBuilder[time.Time, uint64, *array.Uint64Builder, utils.TimestampConverter](acceptor, builder, optional) + err = appendValueToArrowBuilder[utils.Timestamp, uint64, *array.Uint64Builder, utils.TimestampConverter](acceptor, builder) default: return fmt.Errorf("unexpected type %v: %w", typeID, utils.ErrDataTypeNotSupported) } @@ -286,7 +299,8 @@ func (typeMapper) appendValueToBuilder( func NewTypeMapper() utils.TypeMapper { return typeMapper{ isFixedString: regexp.MustCompile(`FixedString\([0-9]+\)`), - isDateTime64: regexp.MustCompile(`DateTime64\(\d{1}\)`), - isNullable: regexp.MustCompile(`Nullable\((?P<Internal>\w+)\)`), + isDateTime: regexp.MustCompile(`DateTime(\('[\w,/]+'\))?`), + isDateTime64: regexp.MustCompile(`DateTime64\(\d{1}(, '[\w,/]+')?\)`), + isNullable: regexp.MustCompile(`Nullable\((?P<Internal>[\w\(\)]+)\)`), } } diff --git a/ydb/library/yql/providers/generic/connector/app/server/postgresql/connection_manager.go b/ydb/library/yql/providers/generic/connector/app/server/postgresql/connection_manager.go index 230f7ba740d..cd80d35ceff 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/postgresql/connection_manager.go +++ b/ydb/library/yql/providers/generic/connector/app/server/postgresql/connection_manager.go @@ -24,6 +24,22 @@ func (r rows) Close() error { return nil } +func (r rows) MakeAcceptors() ([]any, error) { + fields := r.FieldDescriptions() + acceptors := make([]any, 0, len(fields)) + + for _, field := range fields { + acceptor, err := acceptorFromOID(field.DataTypeOID) + if err != nil { + return nil, fmt.Errorf("get acceptor from OID: %w", err) + } + + acceptors = append(acceptors, acceptor) + } + + return acceptors, nil +} + type Connection struct { *pgx.Conn logger utils.QueryLogger diff --git a/ydb/library/yql/providers/generic/connector/app/server/postgresql/type_mapper.go b/ydb/library/yql/providers/generic/connector/app/server/postgresql/type_mapper.go index 363714089ca..f478a577343 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/postgresql/type_mapper.go +++ b/ydb/library/yql/providers/generic/connector/app/server/postgresql/type_mapper.go @@ -3,19 +3,19 @@ package postgresql import ( "errors" "fmt" - "time" "github.com/apache/arrow/go/v13/arrow/array" "github.com/jackc/pgx/v5/pgtype" "github.com/ydb-platform/ydb-go-genproto/protos/Ydb" "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/app/server/utils" + api_service_protos "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/libgo/service/protos" ) var _ utils.TypeMapper = typeMapper{} type typeMapper struct{} -func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Column, error) { +func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string, rules *api_service_protos.TTypeMappingSettings) (*Ydb.Column, error) { var ydbType *Ydb.Type // Reference table: https://wiki.yandex-team.ru/rtmapreduce/yql-streams-corner/connectors/lld-02-tipy-dannyx/ @@ -37,13 +37,27 @@ func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Colum case "character", "character varying", "text": ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_UTF8}} case "date": - ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_DATE}} + switch rules.GetDateTimeFormat() { + case api_service_protos.EDateTimeFormat_STRING_FORMAT: + ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_STRING}} + case api_service_protos.EDateTimeFormat_YQL_FORMAT: + ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_DATE}} + default: + return nil, fmt.Errorf("unexpected date format '%s': %w", rules.GetDateTimeFormat(), utils.ErrDataTypeNotSupported) + } // TODO: PostgreSQL `time` data type has no direct counterparts in the YDB's type system; // but it can be supported when the PG-compatible types is added to YDB: // https://st.yandex-team.ru/YQ-2285 // case "time": case "timestamp without time zone": - ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_TIMESTAMP}} + switch rules.GetDateTimeFormat() { + case api_service_protos.EDateTimeFormat_STRING_FORMAT: + ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_STRING}} + case api_service_protos.EDateTimeFormat_YQL_FORMAT: + ydbType = &Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_TIMESTAMP}} + default: + return nil, fmt.Errorf("unexpected timestamp format '%s': %w", rules.GetDateTimeFormat(), utils.ErrDataTypeNotSupported) + } default: return nil, fmt.Errorf("convert type '%s': %w", typeName, utils.ErrDataTypeNotSupported) } @@ -58,61 +72,6 @@ func (tm typeMapper) SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Colum }, nil } -func (tm typeMapper) YDBTypeToAcceptor(ydbType *Ydb.Type) (any, error) { - var ( - acceptor any - err error - ) - - switch t := ydbType.Type.(type) { - // Primitive types - case *Ydb.Type_TypeId: - acceptor, err = acceptorFromPrimitiveYDBType(t.TypeId) - if err != nil { - return nil, fmt.Errorf("make acceptor from primitive YDB type: %w", err) - } - case *Ydb.Type_OptionalType: - acceptor, err = acceptorFromPrimitiveYDBType(t.OptionalType.Item.GetTypeId()) - if err != nil { - return nil, fmt.Errorf("make acceptor from optional YDB type: %w", err) - } - default: - return nil, fmt.Errorf( - "only primitive types are supported, got '%v' instead: %w", - ydbType, - utils.ErrDataTypeNotSupported) - } - - return acceptor, nil -} - -func acceptorFromPrimitiveYDBType(typeID Ydb.Type_PrimitiveTypeId) (any, error) { - switch typeID { - case Ydb.Type_BOOL: - return new(pgtype.Bool), nil - case Ydb.Type_INT16: - return new(pgtype.Int2), nil - case Ydb.Type_INT32: - return new(pgtype.Int4), nil - case Ydb.Type_INT64: - return new(pgtype.Int8), nil - case Ydb.Type_FLOAT: - return new(pgtype.Float4), nil - case Ydb.Type_DOUBLE: - return new(pgtype.Float8), nil - case Ydb.Type_STRING: - return new(*[]byte), nil - case Ydb.Type_UTF8: - return new(pgtype.Text), nil - case Ydb.Type_DATE: - return new(pgtype.Date), nil - case Ydb.Type_TIMESTAMP: - return new(pgtype.Timestamp), nil - default: - return nil, fmt.Errorf("make acceptor for type '%v': %w", typeID, utils.ErrDataTypeNotSupported) - } -} - func appendValueToArrowBuilder[IN utils.ValueType, OUT utils.ValueType, AB utils.ArrowBuilder[OUT], CONV utils.ValueConverter[IN, OUT]]( value IN, builder array.Builder, @@ -145,7 +104,7 @@ func appendValueToArrowBuilder[IN utils.ValueType, OUT utils.ValueType, AB utils // AddRow saves a row obtained from the datasource into the buffer func (tm typeMapper) AddRowToArrowIPCStreaming( - _ []*Ydb.Type, // TODO: use detailed YDB type information when acceptor type is not enough + ydbTypes []*Ydb.Type, acceptors []any, builders []array.Builder, ) error { @@ -154,6 +113,21 @@ func (tm typeMapper) AddRowToArrowIPCStreaming( } for i, acceptor := range acceptors { + var ydbTypeID Ydb.Type_PrimitiveTypeId + switch t := ydbTypes[i].Type.(type) { + case *Ydb.Type_TypeId: + ydbTypeID = t.TypeId + case *Ydb.Type_OptionalType: + switch t.OptionalType.Item.Type.(type) { + case *Ydb.Type_TypeId: + ydbTypeID = t.OptionalType.Item.GetTypeId() + default: + return fmt.Errorf("unexpected type %v: %w", t.OptionalType.Item, utils.ErrDataTypeNotSupported) + } + default: + return fmt.Errorf("unexpected type %v: %w", t, utils.ErrDataTypeNotSupported) + } + var err error switch t := acceptor.(type) { case *pgtype.Bool: @@ -181,9 +155,23 @@ func (tm typeMapper) AddRowToArrowIPCStreaming( builders[i].(*array.BinaryBuilder).AppendNull() } case *pgtype.Date: - err = appendValueToArrowBuilder[time.Time, uint16, *array.Uint16Builder, utils.DateConverter](t.Time, builders[i], t.Valid) + switch ydbTypeID { + case Ydb.Type_STRING: + err = appendValueToArrowBuilder[utils.Date, string, *array.StringBuilder, utils.DateToStringConverter](utils.Date(t.Time), builders[i], t.Valid) + case Ydb.Type_DATE: + err = appendValueToArrowBuilder[utils.Date, uint16, *array.Uint16Builder, utils.DateConverter](utils.Date(t.Time), builders[i], t.Valid) + default: + return fmt.Errorf("unexpected ydb type id %d with acceptor type %T: %w", ydbTypeID, t, utils.ErrDataTypeNotSupported) + } case *pgtype.Timestamp: - err = appendValueToArrowBuilder[time.Time, uint64, *array.Uint64Builder, utils.TimestampConverter](t.Time, builders[i], t.Valid) + switch ydbTypeID { + case Ydb.Type_STRING: + err = appendValueToArrowBuilder[utils.Timestamp, string, *array.StringBuilder, utils.TimestampToStringConverter](utils.Timestamp(t.Time), builders[i], t.Valid) + case Ydb.Type_TIMESTAMP: + err = appendValueToArrowBuilder[utils.Timestamp, uint64, *array.Uint64Builder, utils.TimestampConverter](utils.Timestamp(t.Time), builders[i], t.Valid) + default: + return fmt.Errorf("unexpected ydb type id %d with acceptor type %T: %w", ydbTypeID, t, utils.ErrDataTypeNotSupported) + } default: return fmt.Errorf("item #%d of a type '%T': %w", i, t, utils.ErrDataTypeNotSupported) } @@ -197,3 +185,28 @@ func (tm typeMapper) AddRowToArrowIPCStreaming( } func NewTypeMapper() utils.TypeMapper { return typeMapper{} } + +func acceptorFromOID(oid uint32) (any, error) { + switch oid { + case pgtype.BoolOID: + return new(pgtype.Bool), nil + case pgtype.Int2OID: + return new(pgtype.Int2), nil + case pgtype.Int4OID: + return new(pgtype.Int4), nil + case pgtype.Int8OID: + return new(pgtype.Int8), nil + case pgtype.Float4OID: + return new(pgtype.Float4), nil + case pgtype.Float8OID: + return new(pgtype.Float8), nil + case pgtype.TextOID, pgtype.BPCharOID, pgtype.VarcharOID, pgtype.ByteaOID: + return new(pgtype.Text), nil + case pgtype.DateOID: + return new(pgtype.Date), nil + case pgtype.TimestampOID: + return new(pgtype.Timestamp), nil + default: + return nil, fmt.Errorf("convert type OID %d: %w", oid, utils.ErrDataTypeNotSupported) + } +} diff --git a/ydb/library/yql/providers/generic/connector/app/server/rdbms/handler.go b/ydb/library/yql/providers/generic/connector/app/server/rdbms/handler.go index 33e63b6e2eb..0d972db2a10 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/rdbms/handler.go +++ b/ydb/library/yql/providers/generic/connector/app/server/rdbms/handler.go @@ -5,7 +5,6 @@ import ( "fmt" "strings" - "github.com/ydb-platform/ydb-go-genproto/protos/Ydb" "github.com/ydb-platform/ydb/library/go/core/log" api_common "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/api/common" "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/app/server/paging" @@ -62,7 +61,7 @@ func (h *handlerImpl[CONN]) DescribeTable( typeName string ) - sb := &schemaBuilder{typeMapper: h.typeMapper} + sb := &schemaBuilder{typeMapper: h.typeMapper, typeMappingSettings: request.TypeMappingSettings} for rows.Next() { if err := rows.Scan(&columnName, &typeName); err != nil { @@ -107,9 +106,6 @@ func (h *handlerImpl[CONN]) ReadSplit( sb.WriteString("SELECT ") - // accumulate acceptors - var acceptors []any - columns, err := utils.SelectWhatToYDBColumns(split.Select.What) if err != nil { return fmt.Errorf("convert Select.What.Items to Ydb.Columns: %w", err) @@ -118,17 +114,6 @@ func (h *handlerImpl[CONN]) ReadSplit( // for the case of empty column set select some constant for constructing a valid sql statement if len(columns) == 0 { sb.WriteString("0") - - var acceptor any - - ydbType := Ydb.Type{Type: &Ydb.Type_TypeId{TypeId: Ydb.Type_INT32}} - acceptor, err = h.typeMapper.YDBTypeToAcceptor(&ydbType) - - if err != nil { - return fmt.Errorf("map ydb column to acceptor: %w", err) - } - - acceptors = append(acceptors, acceptor) } else { for i, column := range columns { sb.WriteString(column.GetName()) @@ -136,15 +121,6 @@ func (h *handlerImpl[CONN]) ReadSplit( if i != len(columns)-1 { sb.WriteString(", ") } - - var acceptor any - - acceptor, err = h.typeMapper.YDBTypeToAcceptor(column.GetType()) - if err != nil { - return fmt.Errorf("map ydb column to acceptor: %w", err) - } - - acceptors = append(acceptors, acceptor) } } @@ -158,12 +134,12 @@ func (h *handlerImpl[CONN]) ReadSplit( sb.WriteString(tableName) if split.Select.Where != nil { - statement, err := FormatWhereStatement(split.Select.Where) + clause, err := FormatWhereClause(split.Select.Where) if err != nil { - logger.Error("Failed to format WHERE statement", log.Error(err), log.String("where", split.Select.Where.String())) + logger.Error("Failed to format WHERE clause", log.Error(err), log.String("where", split.Select.Where.String())) } else { sb.WriteString(" ") - sb.WriteString(statement) + sb.WriteString(clause) } } @@ -178,6 +154,11 @@ func (h *handlerImpl[CONN]) ReadSplit( defer func() { utils.LogCloserError(logger, rows, "close rows") }() + acceptors, err := rows.MakeAcceptors() + if err != nil { + return fmt.Errorf("make acceptors: %w", err) + } + for rows.Next() { if err := rows.Scan(acceptors...); err != nil { return fmt.Errorf("rows scan error: %w", err) diff --git a/ydb/library/yql/providers/generic/connector/app/server/rdbms/predicate_builder.go b/ydb/library/yql/providers/generic/connector/app/server/rdbms/predicate_builder.go index 876c0025a61..383873ba85f 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/rdbms/predicate_builder.go +++ b/ydb/library/yql/providers/generic/connector/app/server/rdbms/predicate_builder.go @@ -70,7 +70,7 @@ func FormatPredicate(predicate *api_service_protos.TPredicate) (string, error) { } } -func FormatWhereStatement(where *api_service_protos.TSelect_TWhere) (string, error) { +func FormatWhereClause(where *api_service_protos.TSelect_TWhere) (string, error) { if where.FilterTyped == nil { return "", utils.ErrUnimplemented } diff --git a/ydb/library/yql/providers/generic/connector/app/server/rdbms/schema_builder.go b/ydb/library/yql/providers/generic/connector/app/server/rdbms/schema_builder.go index 5d56a5b9ee6..eccca8bb5b2 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/rdbms/schema_builder.go +++ b/ydb/library/yql/providers/generic/connector/app/server/rdbms/schema_builder.go @@ -17,8 +17,9 @@ type schemaItem struct { } type schemaBuilder struct { - typeMapper utils.TypeMapper - items []*schemaItem + typeMapper utils.TypeMapper + typeMappingSettings *api_service_protos.TTypeMappingSettings + items []*schemaItem } func (sb *schemaBuilder) addColumn(columnName, columnType string) error { @@ -28,7 +29,7 @@ func (sb *schemaBuilder) addColumn(columnName, columnType string) error { } var err error - item.ydbColumn, err = sb.typeMapper.SQLTypeToYDBColumn(columnName, columnType) + item.ydbColumn, err = sb.typeMapper.SQLTypeToYDBColumn(columnName, columnType, sb.typeMappingSettings) if err != nil && !errors.Is(err, utils.ErrDataTypeNotSupported) { return fmt.Errorf("sql type to ydb column (%s, %s): %w", columnName, columnType, err) diff --git a/ydb/library/yql/providers/generic/connector/app/server/utils/arrow_helpers.go b/ydb/library/yql/providers/generic/connector/app/server/utils/arrow_helpers.go index 1cc176d5c69..98fc735c484 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/utils/arrow_helpers.go +++ b/ydb/library/yql/providers/generic/connector/app/server/utils/arrow_helpers.go @@ -105,10 +105,8 @@ func primitiveTypeToArrow(typeID Ydb.Type_PrimitiveTypeId, column *Ydb.Column, a field = arrow.Field{Name: column.Name, Type: arrow.PrimitiveTypes.Float64} builder = array.NewFloat64Builder(arrowAllocator) case Ydb.Type_STRING: - // TODO: what about LargeBinary? - // https://arrow.apache.org/docs/cpp/api/datatype.html#_CPPv4N5arrow4Type4type12LARGE_BINARYE - field = arrow.Field{Name: column.Name, Type: arrow.BinaryTypes.Binary} - builder = array.NewBinaryBuilder(arrowAllocator, arrow.BinaryTypes.Binary) + field = arrow.Field{Name: column.Name, Type: arrow.BinaryTypes.String} + builder = array.NewStringBuilder(arrowAllocator) case Ydb.Type_UTF8: // TODO: what about LargeString? // https://arrow.apache.org/docs/cpp/api/datatype.html#_CPPv4N5arrow4Type4type12LARGE_STRINGE diff --git a/ydb/library/yql/providers/generic/connector/app/server/utils/connection_manager.go b/ydb/library/yql/providers/generic/connector/app/server/utils/connection_manager.go index bf3c2e520c1..624fe6984dd 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/utils/connection_manager.go +++ b/ydb/library/yql/providers/generic/connector/app/server/utils/connection_manager.go @@ -17,6 +17,7 @@ type Rows interface { Err() error Next() bool Scan(dest ...any) error + MakeAcceptors() ([]any, error) } type ConnectionManager[CONN any] interface { diff --git a/ydb/library/yql/providers/generic/connector/app/server/utils/converters.go b/ydb/library/yql/providers/generic/connector/app/server/utils/converters.go index 1387976c3b6..e58c68d1692 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/utils/converters.go +++ b/ydb/library/yql/providers/generic/connector/app/server/utils/converters.go @@ -5,8 +5,12 @@ import ( "time" ) +type Date time.Time +type Datetime time.Time +type Timestamp time.Time + type ValueType interface { - bool | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | float32 | float64 | string | []byte | time.Time + bool | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | float32 | float64 | string | []byte | Date | Datetime | Timestamp } type ValueConverter[IN ValueType, OUT ValueType] interface { @@ -79,8 +83,10 @@ func (BytesConverter) Convert(in []byte) ([]byte, error) { return in, nil } type DateConverter struct{} -func (DateConverter) Convert(in time.Time) (uint16, error) { - out, err := TimeToYDBDate(&in) +func (DateConverter) Convert(in Date) (uint16, error) { + inTime := time.Time(in) + out, err := TimeToYDBDate(&inTime) + if err != nil { return 0, fmt.Errorf("convert time to YDB Date: %w", err) } @@ -88,10 +94,18 @@ func (DateConverter) Convert(in time.Time) (uint16, error) { return out, nil } +type DateToStringConverter struct{} + +func (DateToStringConverter) Convert(in Date) (string, error) { + return time.Time(in).Format("2006-01-02"), nil +} + type DatetimeConverter struct{} -func (DatetimeConverter) Convert(in time.Time) (uint32, error) { - out, err := TimeToYDBDatetime(&in) +func (DatetimeConverter) Convert(in Datetime) (uint32, error) { + inTime := time.Time(in) + out, err := TimeToYDBDatetime(&inTime) + if err != nil { return 0, fmt.Errorf("convert time to YDB Datetime: %w", err) } @@ -99,13 +113,27 @@ func (DatetimeConverter) Convert(in time.Time) (uint32, error) { return out, nil } +type DatetimeToStringConverter struct{} + +func (DatetimeToStringConverter) Convert(in Datetime) (string, error) { + return time.Time(in).UTC().Format("2006-01-02T15:04:05Z"), nil +} + type TimestampConverter struct{} -func (TimestampConverter) Convert(in time.Time) (uint64, error) { - out, err := TimeToYDBTimestamp(&in) +func (TimestampConverter) Convert(in Timestamp) (uint64, error) { + inTime := time.Time(in) + out, err := TimeToYDBTimestamp(&inTime) + if err != nil { return 0, fmt.Errorf("convert time to YDB Timestamp: %w", err) } return out, nil } + +type TimestampToStringConverter struct{} + +func (TimestampToStringConverter) Convert(in Timestamp) (string, error) { + return time.Time(in).UTC().Format("2006-01-02T15:04:05.000Z"), nil +} diff --git a/ydb/library/yql/providers/generic/connector/app/server/utils/logger.go b/ydb/library/yql/providers/generic/connector/app/server/utils/logger.go index 575de397aec..ba53671b7ef 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/utils/logger.go +++ b/ydb/library/yql/providers/generic/connector/app/server/utils/logger.go @@ -91,11 +91,11 @@ func NewQueryLoggerFactory(cfg *config.TLoggerConfig) QueryLoggerFactory { } func (f *QueryLoggerFactory) Make(logger log.Logger) QueryLogger { - return QueryLogger{logger: logger, enabled: f.enableQueryLogging} + return QueryLogger{Logger: logger, enabled: f.enableQueryLogging} } type QueryLogger struct { - logger log.Logger + log.Logger enabled bool } @@ -109,7 +109,7 @@ func (ql *QueryLogger) Dump(query string, args ...any) { logFields = append(logFields, log.Any("args", args)) } - ql.logger.Debug("execute SQL query", logFields...) + ql.Debug("execute SQL query", logFields...) } func convertToZapLogLevel(lvl config.ELogLevel) zapcore.Level { diff --git a/ydb/library/yql/providers/generic/connector/app/server/utils/type_mapper.go b/ydb/library/yql/providers/generic/connector/app/server/utils/type_mapper.go index e04e8274c76..72b963b2d6e 100644 --- a/ydb/library/yql/providers/generic/connector/app/server/utils/type_mapper.go +++ b/ydb/library/yql/providers/generic/connector/app/server/utils/type_mapper.go @@ -3,11 +3,11 @@ package utils import ( "github.com/apache/arrow/go/v13/arrow/array" "github.com/ydb-platform/ydb-go-genproto/protos/Ydb" + api_service_protos "github.com/ydb-platform/ydb/ydb/library/yql/providers/generic/connector/libgo/service/protos" ) type TypeMapper interface { - SQLTypeToYDBColumn(columnName, typeName string) (*Ydb.Column, error) - YDBTypeToAcceptor(ydbType *Ydb.Type) (any, error) + SQLTypeToYDBColumn(columnName, typeName string, rules *api_service_protos.TTypeMappingSettings) (*Ydb.Column, error) AddRowToArrowIPCStreaming( ydbTypes []*Ydb.Type, acceptors []any, diff --git a/ydb/library/yql/providers/generic/connector/libcpp/ut_helpers/connector_client_mock.h b/ydb/library/yql/providers/generic/connector/libcpp/ut_helpers/connector_client_mock.h index 19e9fa06fb3..c87d9648119 100644 --- a/ydb/library/yql/providers/generic/connector/libcpp/ut_helpers/connector_client_mock.h +++ b/ydb/library/yql/providers/generic/connector/libcpp/ut_helpers/connector_client_mock.h @@ -345,6 +345,11 @@ namespace NYql::NConnector::NTest { Response(); } + TBuilder& TypeMappingSettings(const NApi::TTypeMappingSettings& proto) { + *Result_->mutable_type_mapping_settings() = proto; + return *this; + } + private: void SetExpectation() { EXPECT_CALL(*Mock_, DescribeTableImpl(ProtobufRequestMatcher(*Result_))) diff --git a/ydb/library/yql/providers/generic/connector/libgo/service/protos/connector.pb.go b/ydb/library/yql/providers/generic/connector/libgo/service/protos/connector.pb.go index d229e0c3e0d..ff23d2be970 100644 --- a/ydb/library/yql/providers/generic/connector/libgo/service/protos/connector.pb.go +++ b/ydb/library/yql/providers/generic/connector/libgo/service/protos/connector.pb.go @@ -23,6 +23,55 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type EDateTimeFormat int32 + +const ( + EDateTimeFormat_RESERVED EDateTimeFormat = 0 + EDateTimeFormat_STRING_FORMAT EDateTimeFormat = 1 + EDateTimeFormat_YQL_FORMAT EDateTimeFormat = 2 +) + +// Enum value maps for EDateTimeFormat. +var ( + EDateTimeFormat_name = map[int32]string{ + 0: "RESERVED", + 1: "STRING_FORMAT", + 2: "YQL_FORMAT", + } + EDateTimeFormat_value = map[string]int32{ + "RESERVED": 0, + "STRING_FORMAT": 1, + "YQL_FORMAT": 2, + } +) + +func (x EDateTimeFormat) Enum() *EDateTimeFormat { + p := new(EDateTimeFormat) + *p = x + return p +} + +func (x EDateTimeFormat) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EDateTimeFormat) Descriptor() protoreflect.EnumDescriptor { + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[0].Descriptor() +} + +func (EDateTimeFormat) Type() protoreflect.EnumType { + return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[0] +} + +func (x EDateTimeFormat) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EDateTimeFormat.Descriptor instead. +func (EDateTimeFormat) EnumDescriptor() ([]byte, []int) { + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{0} +} + type TReadSplitsRequest_EMode int32 const ( @@ -60,11 +109,11 @@ func (x TReadSplitsRequest_EMode) String() string { } func (TReadSplitsRequest_EMode) Descriptor() protoreflect.EnumDescriptor { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[0].Descriptor() + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[1].Descriptor() } func (TReadSplitsRequest_EMode) Type() protoreflect.EnumType { - return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[0] + return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[1] } func (x TReadSplitsRequest_EMode) Number() protoreflect.EnumNumber { @@ -73,7 +122,7 @@ func (x TReadSplitsRequest_EMode) Number() protoreflect.EnumNumber { // Deprecated: Use TReadSplitsRequest_EMode.Descriptor instead. func (TReadSplitsRequest_EMode) EnumDescriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{9, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10, 0} } type TReadSplitsRequest_EFormat int32 @@ -108,11 +157,11 @@ func (x TReadSplitsRequest_EFormat) String() string { } func (TReadSplitsRequest_EFormat) Descriptor() protoreflect.EnumDescriptor { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[1].Descriptor() + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[2].Descriptor() } func (TReadSplitsRequest_EFormat) Type() protoreflect.EnumType { - return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[1] + return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[2] } func (x TReadSplitsRequest_EFormat) Number() protoreflect.EnumNumber { @@ -121,7 +170,7 @@ func (x TReadSplitsRequest_EFormat) Number() protoreflect.EnumNumber { // Deprecated: Use TReadSplitsRequest_EFormat.Descriptor instead. func (TReadSplitsRequest_EFormat) EnumDescriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{9, 1} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10, 1} } // An operation code. @@ -170,11 +219,11 @@ func (x TPredicate_TComparison_EOperation) String() string { } func (TPredicate_TComparison_EOperation) Descriptor() protoreflect.EnumDescriptor { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[2].Descriptor() + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[3].Descriptor() } func (TPredicate_TComparison_EOperation) Type() protoreflect.EnumType { - return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[2] + return &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes[3] } func (x TPredicate_TComparison_EOperation) Number() protoreflect.EnumNumber { @@ -183,7 +232,7 @@ func (x TPredicate_TComparison_EOperation) Number() protoreflect.EnumNumber { // Deprecated: Use TPredicate_TComparison_EOperation.Descriptor instead. func (TPredicate_TComparison_EOperation) EnumDescriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 7, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 7, 0} } // TListTablesRequest requests the list of tables in a particular database of the data source @@ -335,6 +384,8 @@ type TDescribeTableRequest struct { DataSourceInstance *common.TDataSourceInstance `protobuf:"bytes,1,opt,name=data_source_instance,json=dataSourceInstance,proto3" json:"data_source_instance,omitempty"` // Table to describe Table string `protobuf:"bytes,2,opt,name=table,proto3" json:"table,omitempty"` + // Rules for type mapping + TypeMappingSettings *TTypeMappingSettings `protobuf:"bytes,3,opt,name=type_mapping_settings,json=typeMappingSettings,proto3" json:"type_mapping_settings,omitempty"` } func (x *TDescribeTableRequest) Reset() { @@ -383,6 +434,61 @@ func (x *TDescribeTableRequest) GetTable() string { return "" } +func (x *TDescribeTableRequest) GetTypeMappingSettings() *TTypeMappingSettings { + if x != nil { + return x.TypeMappingSettings + } + return nil +} + +type TTypeMappingSettings struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Determines the format of date or time representation + DateTimeFormat EDateTimeFormat `protobuf:"varint,1,opt,name=date_time_format,json=dateTimeFormat,proto3,enum=NYql.NConnector.NApi.EDateTimeFormat" json:"date_time_format,omitempty"` +} + +func (x *TTypeMappingSettings) Reset() { + *x = TTypeMappingSettings{} + if protoimpl.UnsafeEnabled { + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TTypeMappingSettings) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TTypeMappingSettings) ProtoMessage() {} + +func (x *TTypeMappingSettings) ProtoReflect() protoreflect.Message { + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[3] + 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 TTypeMappingSettings.ProtoReflect.Descriptor instead. +func (*TTypeMappingSettings) Descriptor() ([]byte, []int) { + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{3} +} + +func (x *TTypeMappingSettings) GetDateTimeFormat() EDateTimeFormat { + if x != nil { + return x.DateTimeFormat + } + return EDateTimeFormat_RESERVED +} + // TDescribeTableResponse returns table metadata type TDescribeTableResponse struct { state protoimpl.MessageState @@ -398,7 +504,7 @@ type TDescribeTableResponse struct { func (x *TDescribeTableResponse) Reset() { *x = TDescribeTableResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[3] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -411,7 +517,7 @@ func (x *TDescribeTableResponse) String() string { func (*TDescribeTableResponse) ProtoMessage() {} func (x *TDescribeTableResponse) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[3] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -424,7 +530,7 @@ func (x *TDescribeTableResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TDescribeTableResponse.ProtoReflect.Descriptor instead. func (*TDescribeTableResponse) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{3} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{4} } func (x *TDescribeTableResponse) GetSchema() *TSchema { @@ -454,7 +560,7 @@ type TSchema struct { func (x *TSchema) Reset() { *x = TSchema{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[4] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -467,7 +573,7 @@ func (x *TSchema) String() string { func (*TSchema) ProtoMessage() {} func (x *TSchema) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[4] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -480,7 +586,7 @@ func (x *TSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use TSchema.ProtoReflect.Descriptor instead. func (*TSchema) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{4} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{5} } func (x *TSchema) GetColumns() []*Ydb.Column { @@ -518,7 +624,7 @@ type TListSplitsRequest struct { func (x *TListSplitsRequest) Reset() { *x = TListSplitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[5] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +637,7 @@ func (x *TListSplitsRequest) String() string { func (*TListSplitsRequest) ProtoMessage() {} func (x *TListSplitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[5] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +650,7 @@ func (x *TListSplitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TListSplitsRequest.ProtoReflect.Descriptor instead. func (*TListSplitsRequest) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{5} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{6} } func (x *TListSplitsRequest) GetSelects() []*TSelect { @@ -590,7 +696,7 @@ type TListSplitsResponse struct { func (x *TListSplitsResponse) Reset() { *x = TListSplitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[6] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -603,7 +709,7 @@ func (x *TListSplitsResponse) String() string { func (*TListSplitsResponse) ProtoMessage() {} func (x *TListSplitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[6] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -616,7 +722,7 @@ func (x *TListSplitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TListSplitsResponse.ProtoReflect.Descriptor instead. func (*TListSplitsResponse) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{6} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7} } func (x *TListSplitsResponse) GetSplits() []*TSplit { @@ -663,7 +769,7 @@ type TSelect struct { func (x *TSelect) Reset() { *x = TSelect{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[7] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -676,7 +782,7 @@ func (x *TSelect) String() string { func (*TSelect) ProtoMessage() {} func (x *TSelect) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[7] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -689,7 +795,7 @@ func (x *TSelect) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect.ProtoReflect.Descriptor instead. func (*TSelect) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8} } func (x *TSelect) GetDataSourceInstance() *common.TDataSourceInstance { @@ -745,7 +851,7 @@ type TSplit struct { func (x *TSplit) Reset() { *x = TSplit{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -758,7 +864,7 @@ func (x *TSplit) String() string { func (*TSplit) ProtoMessage() {} func (x *TSplit) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -771,7 +877,7 @@ func (x *TSplit) ProtoReflect() protoreflect.Message { // Deprecated: Use TSplit.ProtoReflect.Descriptor instead. func (*TSplit) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{9} } func (x *TSplit) GetSelect() *TSelect { @@ -835,7 +941,7 @@ type TReadSplitsRequest struct { func (x *TReadSplitsRequest) Reset() { *x = TReadSplitsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -848,7 +954,7 @@ func (x *TReadSplitsRequest) String() string { func (*TReadSplitsRequest) ProtoMessage() {} func (x *TReadSplitsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -861,7 +967,7 @@ func (x *TReadSplitsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TReadSplitsRequest.ProtoReflect.Descriptor instead. func (*TReadSplitsRequest) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{9} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10} } func (x *TReadSplitsRequest) GetDataSourceInstance() *common.TDataSourceInstance { @@ -933,7 +1039,7 @@ type TReadSplitsResponse struct { func (x *TReadSplitsResponse) Reset() { *x = TReadSplitsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -946,7 +1052,7 @@ func (x *TReadSplitsResponse) String() string { func (*TReadSplitsResponse) ProtoMessage() {} func (x *TReadSplitsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -959,7 +1065,7 @@ func (x *TReadSplitsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TReadSplitsResponse.ProtoReflect.Descriptor instead. func (*TReadSplitsResponse) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{11} } func (m *TReadSplitsResponse) GetPayload() isTReadSplitsResponse_Payload { @@ -1064,7 +1170,7 @@ type TPagination struct { func (x *TPagination) Reset() { *x = TPagination{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1077,7 +1183,7 @@ func (x *TPagination) String() string { func (*TPagination) ProtoMessage() {} func (x *TPagination) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1090,7 +1196,7 @@ func (x *TPagination) ProtoReflect() protoreflect.Message { // Deprecated: Use TPagination.ProtoReflect.Descriptor instead. func (*TPagination) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{11} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{12} } func (x *TPagination) GetRows() uint64 { @@ -1125,7 +1231,7 @@ type TContinuation struct { func (x *TContinuation) Reset() { *x = TContinuation{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1138,7 +1244,7 @@ func (x *TContinuation) String() string { func (*TContinuation) ProtoMessage() {} func (x *TContinuation) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1151,7 +1257,7 @@ func (x *TContinuation) ProtoReflect() protoreflect.Message { // Deprecated: Use TContinuation.ProtoReflect.Descriptor instead. func (*TContinuation) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{12} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{13} } func (m *TContinuation) GetPayload() isTContinuation_Payload { @@ -1197,7 +1303,7 @@ type TExpression struct { func (x *TExpression) Reset() { *x = TExpression{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1210,7 +1316,7 @@ func (x *TExpression) String() string { func (*TExpression) ProtoMessage() {} func (x *TExpression) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1223,7 +1329,7 @@ func (x *TExpression) ProtoReflect() protoreflect.Message { // Deprecated: Use TExpression.ProtoReflect.Descriptor instead. func (*TExpression) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{13} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14} } func (m *TExpression) GetPayload() isTExpression_Payload { @@ -1287,7 +1393,7 @@ type TPredicate struct { func (x *TPredicate) Reset() { *x = TPredicate{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1300,7 +1406,7 @@ func (x *TPredicate) String() string { func (*TPredicate) ProtoMessage() {} func (x *TPredicate) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1313,7 +1419,7 @@ func (x *TPredicate) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate.ProtoReflect.Descriptor instead. func (*TPredicate) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15} } func (m *TPredicate) GetPayload() isTPredicate_Payload { @@ -1449,7 +1555,7 @@ type TError struct { func (x *TError) Reset() { *x = TError{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1462,7 +1568,7 @@ func (x *TError) String() string { func (*TError) ProtoMessage() {} func (x *TError) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1475,7 +1581,7 @@ func (x *TError) ProtoReflect() protoreflect.Message { // Deprecated: Use TError.ProtoReflect.Descriptor instead. func (*TError) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{16} } func (x *TError) GetStatus() Ydb.StatusIds_StatusCode { @@ -1516,7 +1622,7 @@ type TAst struct { func (x *TAst) Reset() { *x = TAst{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1529,7 +1635,7 @@ func (x *TAst) String() string { func (*TAst) ProtoMessage() {} func (x *TAst) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1542,7 +1648,7 @@ func (x *TAst) ProtoReflect() protoreflect.Message { // Deprecated: Use TAst.ProtoReflect.Descriptor instead. func (*TAst) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{16} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{17} } func (m *TAst) GetPayload() isTAst_Payload { @@ -1600,7 +1706,7 @@ type TSelect_TWhat struct { func (x *TSelect_TWhat) Reset() { *x = TSelect_TWhat{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1719,7 @@ func (x *TSelect_TWhat) String() string { func (*TSelect_TWhat) ProtoMessage() {} func (x *TSelect_TWhat) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1626,7 +1732,7 @@ func (x *TSelect_TWhat) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect_TWhat.ProtoReflect.Descriptor instead. func (*TSelect_TWhat) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8, 0} } func (x *TSelect_TWhat) GetItems() []*TSelect_TWhat_TItem { @@ -1648,7 +1754,7 @@ type TSelect_TFrom struct { func (x *TSelect_TFrom) Reset() { *x = TSelect_TFrom{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[18] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1661,7 +1767,7 @@ func (x *TSelect_TFrom) String() string { func (*TSelect_TFrom) ProtoMessage() {} func (x *TSelect_TFrom) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[18] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1674,7 +1780,7 @@ func (x *TSelect_TFrom) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect_TFrom.ProtoReflect.Descriptor instead. func (*TSelect_TFrom) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7, 1} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8, 1} } func (x *TSelect_TFrom) GetTable() string { @@ -1699,7 +1805,7 @@ type TSelect_TWhere struct { func (x *TSelect_TWhere) Reset() { *x = TSelect_TWhere{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[19] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1712,7 +1818,7 @@ func (x *TSelect_TWhere) String() string { func (*TSelect_TWhere) ProtoMessage() {} func (x *TSelect_TWhere) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[19] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1725,7 +1831,7 @@ func (x *TSelect_TWhere) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect_TWhere.ProtoReflect.Descriptor instead. func (*TSelect_TWhere) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7, 2} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8, 2} } func (x *TSelect_TWhere) GetFilterTyped() *TPredicate { @@ -1754,7 +1860,7 @@ type TSelect_TLimit struct { func (x *TSelect_TLimit) Reset() { *x = TSelect_TLimit{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[20] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1767,7 +1873,7 @@ func (x *TSelect_TLimit) String() string { func (*TSelect_TLimit) ProtoMessage() {} func (x *TSelect_TLimit) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[20] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1780,7 +1886,7 @@ func (x *TSelect_TLimit) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect_TLimit.ProtoReflect.Descriptor instead. func (*TSelect_TLimit) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7, 3} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8, 3} } func (x *TSelect_TLimit) GetLimit() uint64 { @@ -1813,7 +1919,7 @@ type TSelect_TWhat_TItem struct { func (x *TSelect_TWhat_TItem) Reset() { *x = TSelect_TWhat_TItem{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1826,7 +1932,7 @@ func (x *TSelect_TWhat_TItem) String() string { func (*TSelect_TWhat_TItem) ProtoMessage() {} func (x *TSelect_TWhat_TItem) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1839,7 +1945,7 @@ func (x *TSelect_TWhat_TItem) ProtoReflect() protoreflect.Message { // Deprecated: Use TSelect_TWhat_TItem.ProtoReflect.Descriptor instead. func (*TSelect_TWhat_TItem) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{7, 0, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{8, 0, 0} } func (m *TSelect_TWhat_TItem) GetPayload() isTSelect_TWhat_TItem_Payload { @@ -1881,7 +1987,7 @@ type TReadSplitsResponse_TColumnSet struct { func (x *TReadSplitsResponse_TColumnSet) Reset() { *x = TReadSplitsResponse_TColumnSet{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1894,7 +2000,7 @@ func (x *TReadSplitsResponse_TColumnSet) String() string { func (*TReadSplitsResponse_TColumnSet) ProtoMessage() {} func (x *TReadSplitsResponse_TColumnSet) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +2013,7 @@ func (x *TReadSplitsResponse_TColumnSet) ProtoReflect() protoreflect.Message { // Deprecated: Use TReadSplitsResponse_TColumnSet.ProtoReflect.Descriptor instead. func (*TReadSplitsResponse_TColumnSet) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{11, 0} } func (x *TReadSplitsResponse_TColumnSet) GetMeta() []*Ydb.Column { @@ -1935,7 +2041,7 @@ type TReadSplitsResponse_TColumnSet_TColumn struct { func (x *TReadSplitsResponse_TColumnSet_TColumn) Reset() { *x = TReadSplitsResponse_TColumnSet_TColumn{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[23] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1948,7 +2054,7 @@ func (x *TReadSplitsResponse_TColumnSet_TColumn) String() string { func (*TReadSplitsResponse_TColumnSet_TColumn) ProtoMessage() {} func (x *TReadSplitsResponse_TColumnSet_TColumn) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[23] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1961,7 +2067,7 @@ func (x *TReadSplitsResponse_TColumnSet_TColumn) ProtoReflect() protoreflect.Mes // Deprecated: Use TReadSplitsResponse_TColumnSet_TColumn.ProtoReflect.Descriptor instead. func (*TReadSplitsResponse_TColumnSet_TColumn) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{10, 0, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{11, 0, 0} } func (x *TReadSplitsResponse_TColumnSet_TColumn) GetData() []*Ydb.Value { @@ -1983,7 +2089,7 @@ type TPredicate_TNegation struct { func (x *TPredicate_TNegation) Reset() { *x = TPredicate_TNegation{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[24] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1996,7 +2102,7 @@ func (x *TPredicate_TNegation) String() string { func (*TPredicate_TNegation) ProtoMessage() {} func (x *TPredicate_TNegation) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[24] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2009,7 +2115,7 @@ func (x *TPredicate_TNegation) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TNegation.ProtoReflect.Descriptor instead. func (*TPredicate_TNegation) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 0} } func (x *TPredicate_TNegation) GetOperand() *TPredicate { @@ -2031,7 +2137,7 @@ type TPredicate_TConjunction struct { func (x *TPredicate_TConjunction) Reset() { *x = TPredicate_TConjunction{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[25] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2150,7 @@ func (x *TPredicate_TConjunction) String() string { func (*TPredicate_TConjunction) ProtoMessage() {} func (x *TPredicate_TConjunction) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[25] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2163,7 @@ func (x *TPredicate_TConjunction) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TConjunction.ProtoReflect.Descriptor instead. func (*TPredicate_TConjunction) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 1} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 1} } func (x *TPredicate_TConjunction) GetOperands() []*TPredicate { @@ -2079,7 +2185,7 @@ type TPredicate_TDisjunction struct { func (x *TPredicate_TDisjunction) Reset() { *x = TPredicate_TDisjunction{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[26] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2092,7 +2198,7 @@ func (x *TPredicate_TDisjunction) String() string { func (*TPredicate_TDisjunction) ProtoMessage() {} func (x *TPredicate_TDisjunction) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[26] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2105,7 +2211,7 @@ func (x *TPredicate_TDisjunction) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TDisjunction.ProtoReflect.Descriptor instead. func (*TPredicate_TDisjunction) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 2} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 2} } func (x *TPredicate_TDisjunction) GetOperands() []*TPredicate { @@ -2129,7 +2235,7 @@ type TPredicate_TBetween struct { func (x *TPredicate_TBetween) Reset() { *x = TPredicate_TBetween{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[27] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2142,7 +2248,7 @@ func (x *TPredicate_TBetween) String() string { func (*TPredicate_TBetween) ProtoMessage() {} func (x *TPredicate_TBetween) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[27] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2155,7 +2261,7 @@ func (x *TPredicate_TBetween) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TBetween.ProtoReflect.Descriptor instead. func (*TPredicate_TBetween) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 3} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 3} } func (x *TPredicate_TBetween) GetValue() *TExpression { @@ -2192,7 +2298,7 @@ type TPredicate_TIn struct { func (x *TPredicate_TIn) Reset() { *x = TPredicate_TIn{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[28] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2205,7 +2311,7 @@ func (x *TPredicate_TIn) String() string { func (*TPredicate_TIn) ProtoMessage() {} func (x *TPredicate_TIn) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[28] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2218,7 +2324,7 @@ func (x *TPredicate_TIn) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TIn.ProtoReflect.Descriptor instead. func (*TPredicate_TIn) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 4} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 4} } func (x *TPredicate_TIn) GetValue() *TExpression { @@ -2247,7 +2353,7 @@ type TPredicate_TIsNull struct { func (x *TPredicate_TIsNull) Reset() { *x = TPredicate_TIsNull{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[29] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2260,7 +2366,7 @@ func (x *TPredicate_TIsNull) String() string { func (*TPredicate_TIsNull) ProtoMessage() {} func (x *TPredicate_TIsNull) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[29] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2273,7 +2379,7 @@ func (x *TPredicate_TIsNull) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TIsNull.ProtoReflect.Descriptor instead. func (*TPredicate_TIsNull) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 5} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 5} } func (x *TPredicate_TIsNull) GetValue() *TExpression { @@ -2296,7 +2402,7 @@ type TPredicate_TIsNotNull struct { func (x *TPredicate_TIsNotNull) Reset() { *x = TPredicate_TIsNotNull{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[30] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2309,7 +2415,7 @@ func (x *TPredicate_TIsNotNull) String() string { func (*TPredicate_TIsNotNull) ProtoMessage() {} func (x *TPredicate_TIsNotNull) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[30] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2322,7 +2428,7 @@ func (x *TPredicate_TIsNotNull) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TIsNotNull.ProtoReflect.Descriptor instead. func (*TPredicate_TIsNotNull) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 6} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 6} } func (x *TPredicate_TIsNotNull) GetValue() *TExpression { @@ -2346,7 +2452,7 @@ type TPredicate_TComparison struct { func (x *TPredicate_TComparison) Reset() { *x = TPredicate_TComparison{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[31] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2359,7 +2465,7 @@ func (x *TPredicate_TComparison) String() string { func (*TPredicate_TComparison) ProtoMessage() {} func (x *TPredicate_TComparison) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[31] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2372,7 +2478,7 @@ func (x *TPredicate_TComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use TPredicate_TComparison.ProtoReflect.Descriptor instead. func (*TPredicate_TComparison) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{14, 7} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{15, 7} } func (x *TPredicate_TComparison) GetOperation() TPredicate_TComparison_EOperation { @@ -2407,7 +2513,7 @@ type TAst_TList struct { func (x *TAst_TList) Reset() { *x = TAst_TList{} if protoimpl.UnsafeEnabled { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[32] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2420,7 +2526,7 @@ func (x *TAst_TList) String() string { func (*TAst_TList) ProtoMessage() {} func (x *TAst_TList) ProtoReflect() protoreflect.Message { - mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[32] + mi := &file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2433,7 +2539,7 @@ func (x *TAst_TList) ProtoReflect() protoreflect.Message { // Deprecated: Use TAst_TList.ProtoReflect.Descriptor instead. func (*TAst_TList) Descriptor() ([]byte, []int) { - return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{16, 0} + return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescGZIP(), []int{17, 0} } func (x *TAst_TList) GetChildren() []*TAst { @@ -2481,7 +2587,7 @@ var file_ydb_library_yql_providers_generic_connector_api_service_protos_connecto 0x12, 0x32, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x15, 0x54, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0xea, 0x01, 0x0a, 0x15, 0x54, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, @@ -2490,296 +2596,313 @@ var file_ydb_library_yql_providers_generic_connector_api_service_protos_connecto 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x22, 0x83, 0x01, 0x0a, 0x16, 0x54, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4e, - 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, - 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x30, 0x0a, 0x07, 0x54, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x25, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x12, 0x54, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x37, 0x0a, 0x07, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x52, 0x07, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, - 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x70, - 0x6c, 0x69, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x22, 0x7f, 0x0a, 0x13, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x6c, - 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, - 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, - 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, - 0x70, 0x69, 0x2e, 0x54, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, - 0x73, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xb8, 0x05, 0x0a, 0x07, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x12, 0x5b, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x37, - 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x4e, - 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, - 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x57, 0x68, 0x61, - 0x74, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, - 0x12, 0x3a, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, - 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x12, 0x3a, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x4e, 0x59, + 0x65, 0x12, 0x5e, 0x0a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x74, 0x79, + 0x70, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x22, 0x67, 0x0a, 0x14, 0x54, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x45, 0x44, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x83, 0x01, 0x0a, 0x16, 0x54, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x32, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, - 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x83, 0x01, 0x0a, 0x05, 0x54, 0x57, 0x68, - 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x2e, 0x54, 0x57, 0x68, 0x61, 0x74, 0x2e, 0x54, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x05, 0x54, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x25, 0x0a, 0x06, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x59, - 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x1d, - 0x0a, 0x05, 0x54, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x88, 0x01, - 0x0a, 0x06, 0x54, 0x57, 0x68, 0x65, 0x72, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x64, 0x12, 0x39, 0x0a, - 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x41, 0x73, 0x74, 0x52, 0x09, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x61, 0x77, 0x1a, 0x36, 0x0a, 0x06, 0x54, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x6e, 0x0a, 0x06, 0x54, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4e, 0x59, 0x71, + 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x30, 0x0a, 0x07, 0x54, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x0a, 0x07, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x59, + 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x12, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x6c, 0x69, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, - 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x22, 0xb8, 0x04, 0x0a, 0x12, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x44, 0x61, - 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x02, + 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x07, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, + 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x70, + 0x6c, 0x69, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x73, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x70, 0x6c, + 0x69, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x7f, 0x0a, + 0x13, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x70, 0x6c, - 0x69, 0x74, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, + 0x69, 0x74, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, + 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, + 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xb8, + 0x05, 0x0a, 0x07, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x5b, 0x0a, 0x14, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, + 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, + 0x54, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x57, 0x68, 0x61, 0x74, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, + 0x12, 0x37, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x46, + 0x72, 0x6f, 0x6d, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x3a, 0x0a, 0x05, 0x77, 0x68, 0x65, + 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, - 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x45, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x48, - 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, + 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x05, + 0x77, 0x68, 0x65, 0x72, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x2e, 0x54, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x1a, 0x83, 0x01, 0x0a, 0x05, 0x54, 0x57, 0x68, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, + 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, + 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x54, 0x57, 0x68, 0x61, 0x74, 0x2e, + 0x54, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x05, + 0x54, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x25, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x09, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x1d, 0x0a, 0x05, 0x54, 0x46, 0x72, 0x6f, 0x6d, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x88, 0x01, 0x0a, 0x06, 0x54, 0x57, 0x68, 0x65, 0x72, + 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, + 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x5f, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x4e, 0x59, 0x71, + 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, + 0x69, 0x2e, 0x54, 0x41, 0x73, 0x74, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x61, + 0x77, 0x1a, 0x36, 0x0a, 0x06, 0x54, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6e, 0x0a, 0x06, 0x54, 0x53, 0x70, + 0x6c, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, + 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, + 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xb8, 0x04, 0x0a, 0x12, 0x54, 0x52, + 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x5b, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, - 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, - 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x05, 0x45, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, - 0x0d, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x22, 0x3d, 0x0a, 0x07, - 0x45, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x4f, 0x52, 0x4d, 0x41, - 0x54, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, - 0x41, 0x52, 0x52, 0x4f, 0x57, 0x5f, 0x49, 0x50, 0x43, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, - 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0x81, 0x04, 0x0a, 0x13, - 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, + 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, + 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x52, 0x06, 0x73, 0x70, 0x6c, + 0x69, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2e, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, + 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x4d, 0x6f, 0x64, + 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, - 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, - 0x09, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x72, - 0x72, 0x6f, 0x77, 0x5f, 0x69, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x11, 0x61, 0x72, 0x72, 0x6f, 0x77, - 0x49, 0x70, 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, - 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x50, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x52, 0x65, - 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x2e, 0x54, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x29, 0x0a, 0x07, 0x54, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x37, 0x0a, 0x0b, 0x54, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x72, 0x6f, - 0x77, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x0d, 0x54, 0x43, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x66, 0x0a, 0x0b, 0x54, 0x45, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x59, - 0x64, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x74, 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x22, 0xc4, 0x0c, 0x0a, 0x0a, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, - 0x48, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x2e, 0x54, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, - 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x45, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, + 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, + 0x69, 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, + 0x05, 0x45, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, + 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x52, 0x44, + 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, + 0x52, 0x45, 0x44, 0x10, 0x02, 0x22, 0x3d, 0x0a, 0x07, 0x45, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x52, 0x52, 0x4f, 0x57, 0x5f, 0x49, + 0x50, 0x43, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x04, + 0x08, 0x01, 0x10, 0x01, 0x22, 0x81, 0x04, 0x0a, 0x13, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, + 0x6c, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, + 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x53, 0x65, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x69, 0x70, 0x63, + 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x11, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x49, 0x70, 0x63, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x10, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x4e, 0x59, 0x71, 0x6c, + 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, + 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4e, 0x59, + 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, + 0x70, 0x69, 0x2e, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x65, 0x74, 0x12, + 0x1f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x59, 0x64, 0x62, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, + 0x12, 0x50, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0b, - 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x52, 0x65, 0x61, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x53, 0x65, 0x74, 0x2e, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0x29, 0x0a, 0x07, 0x54, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x1e, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x59, 0x64, + 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x09, 0x0a, + 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x37, 0x0a, 0x0b, 0x54, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x22, 0x3e, 0x0a, 0x0d, 0x54, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x22, 0x66, 0x0a, 0x0b, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x64, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x09, + 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x0c, 0x0a, 0x0a, 0x54, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4e, 0x59, 0x71, + 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, + 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x4e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, + 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6e, 0x6a, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x4e, 0x59, 0x71, + 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, + 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x44, 0x69, + 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x77, + 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, + 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, + 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x42, 0x65, 0x74, + 0x77, 0x65, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x12, + 0x36, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x4e, 0x59, + 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, + 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x49, + 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x43, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6e, 0x75, + 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, + 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, + 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x49, 0x73, 0x4e, 0x75, + 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4d, 0x0a, 0x0b, + 0x69, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x2e, 0x54, 0x44, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x45, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x2e, 0x54, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x49, 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x43, - 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, + 0x61, 0x74, 0x65, 0x2e, 0x54, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x48, 0x00, + 0x52, 0x09, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x2e, 0x54, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, - 0x75, 0x6c, 0x6c, 0x12, 0x4d, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, - 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, - 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, - 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x49, 0x73, 0x4e, 0x6f, - 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x4e, 0x75, - 0x6c, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, + 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x1a, 0x47, 0x0a, 0x09, 0x54, + 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, + 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, + 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x6e, 0x64, 0x1a, 0x4c, 0x0a, 0x0c, 0x54, 0x43, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, - 0x6f, 0x6e, 0x1a, 0x47, 0x0a, 0x09, 0x54, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x1a, 0x4c, 0x0a, 0x0c, 0x54, - 0x43, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x1a, 0x4c, 0x0a, 0x0c, 0x54, 0x44, 0x69, - 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x08, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, - 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, - 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x1a, 0xbb, 0x01, 0x0a, 0x08, 0x54, 0x42, 0x65, 0x74, - 0x77, 0x65, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, - 0x05, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, + 0x64, 0x73, 0x1a, 0x4c, 0x0a, 0x0c, 0x54, 0x44, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, + 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x73, + 0x1a, 0xbb, 0x01, 0x0a, 0x08, 0x54, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x12, 0x37, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, - 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, - 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x73, 0x0a, 0x03, 0x54, 0x49, 0x6e, 0x12, 0x37, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, - 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, - 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x65, 0x74, 0x1a, 0x42, 0x0a, 0x07, 0x54, 0x49, - 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x12, + 0x3d, 0x0a, 0x08, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x73, + 0x0a, 0x03, 0x54, 0x49, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x45, - 0x0a, 0x0a, 0x54, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x37, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, + 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, - 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xb4, 0x02, 0x0a, 0x0b, 0x54, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, - 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, - 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x2e, 0x45, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0a, - 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x42, - 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x48, 0x0a, 0x0a, 0x45, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x05, - 0x0a, 0x01, 0x4c, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x06, 0x0a, - 0x02, 0x45, 0x51, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x45, 0x10, 0x04, 0x12, 0x06, 0x0a, - 0x02, 0x47, 0x45, 0x10, 0x05, 0x12, 0x05, 0x0a, 0x01, 0x47, 0x10, 0x06, 0x42, 0x09, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x06, 0x54, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x49, - 0x64, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2f, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x2e, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, - 0x22, 0xa0, 0x01, 0x0a, 0x04, 0x54, 0x41, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x61, 0x74, 0x6f, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x61, 0x74, 0x6f, 0x6d, 0x12, - 0x36, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x03, + 0x73, 0x65, 0x74, 0x1a, 0x42, 0x0a, 0x07, 0x54, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x37, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x41, 0x73, 0x74, 0x2e, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x3f, 0x0a, 0x05, 0x54, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x36, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x41, 0x73, 0x74, 0x52, 0x08, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x53, 0x5a, 0x51, 0x61, 0x2e, 0x79, 0x61, 0x6e, 0x64, 0x65, 0x78, 0x2d, - 0x74, 0x65, 0x61, 0x6d, 0x2e, 0x72, 0x75, 0x2f, 0x79, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x2f, 0x79, 0x71, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x69, 0x62, 0x67, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x45, 0x0a, 0x0a, 0x54, 0x49, 0x73, 0x4e, 0x6f, + 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xb4, + 0x02, 0x0a, 0x0b, 0x54, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x55, + 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x37, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x2e, 0x54, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x2e, + 0x45, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0a, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, 0x59, 0x71, 0x6c, + 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, + 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, 0x65, + 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4e, + 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, + 0x41, 0x70, 0x69, 0x2e, 0x54, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x48, 0x0a, 0x0a, 0x45, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x4c, 0x10, 0x01, 0x12, 0x06, + 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x03, 0x12, 0x06, + 0x0a, 0x02, 0x4e, 0x45, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x05, 0x12, 0x05, + 0x0a, 0x01, 0x47, 0x10, 0x06, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x86, 0x01, 0x0a, 0x06, 0x54, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x59, 0x64, + 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x49, 0x64, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x59, 0x64, 0x62, 0x2e, 0x49, + 0x73, 0x73, 0x75, 0x65, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x04, 0x54, 0x41, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x61, 0x74, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x04, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x36, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x59, 0x71, 0x6c, 0x2e, 0x4e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, 0x70, 0x69, 0x2e, 0x54, 0x41, + 0x73, 0x74, 0x2e, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, + 0x1a, 0x3f, 0x0a, 0x05, 0x54, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x63, 0x68, 0x69, + 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x4e, 0x59, + 0x71, 0x6c, 0x2e, 0x4e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x41, + 0x70, 0x69, 0x2e, 0x54, 0x41, 0x73, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, + 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2a, 0x42, 0x0a, 0x0f, + 0x45, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, + 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x10, 0x01, + 0x12, 0x0e, 0x0a, 0x0a, 0x59, 0x51, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x10, 0x02, + 0x42, 0x53, 0x5a, 0x51, 0x61, 0x2e, 0x79, 0x61, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x74, 0x65, 0x61, + 0x6d, 0x2e, 0x72, 0x75, 0x2f, 0x79, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x2f, 0x79, 0x71, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2f, 0x6c, 0x69, 0x62, 0x67, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2794,115 +2917,119 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect return file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDescData } -var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_goTypes = []interface{}{ - (TReadSplitsRequest_EMode)(0), // 0: NYql.NConnector.NApi.TReadSplitsRequest.EMode - (TReadSplitsRequest_EFormat)(0), // 1: NYql.NConnector.NApi.TReadSplitsRequest.EFormat - (TPredicate_TComparison_EOperation)(0), // 2: NYql.NConnector.NApi.TPredicate.TComparison.EOperation - (*TListTablesRequest)(nil), // 3: NYql.NConnector.NApi.TListTablesRequest - (*TListTablesResponse)(nil), // 4: NYql.NConnector.NApi.TListTablesResponse - (*TDescribeTableRequest)(nil), // 5: NYql.NConnector.NApi.TDescribeTableRequest - (*TDescribeTableResponse)(nil), // 6: NYql.NConnector.NApi.TDescribeTableResponse - (*TSchema)(nil), // 7: NYql.NConnector.NApi.TSchema - (*TListSplitsRequest)(nil), // 8: NYql.NConnector.NApi.TListSplitsRequest - (*TListSplitsResponse)(nil), // 9: NYql.NConnector.NApi.TListSplitsResponse - (*TSelect)(nil), // 10: NYql.NConnector.NApi.TSelect - (*TSplit)(nil), // 11: NYql.NConnector.NApi.TSplit - (*TReadSplitsRequest)(nil), // 12: NYql.NConnector.NApi.TReadSplitsRequest - (*TReadSplitsResponse)(nil), // 13: NYql.NConnector.NApi.TReadSplitsResponse - (*TPagination)(nil), // 14: NYql.NConnector.NApi.TPagination - (*TContinuation)(nil), // 15: NYql.NConnector.NApi.TContinuation - (*TExpression)(nil), // 16: NYql.NConnector.NApi.TExpression - (*TPredicate)(nil), // 17: NYql.NConnector.NApi.TPredicate - (*TError)(nil), // 18: NYql.NConnector.NApi.TError - (*TAst)(nil), // 19: NYql.NConnector.NApi.TAst - (*TSelect_TWhat)(nil), // 20: NYql.NConnector.NApi.TSelect.TWhat - (*TSelect_TFrom)(nil), // 21: NYql.NConnector.NApi.TSelect.TFrom - (*TSelect_TWhere)(nil), // 22: NYql.NConnector.NApi.TSelect.TWhere - (*TSelect_TLimit)(nil), // 23: NYql.NConnector.NApi.TSelect.TLimit - (*TSelect_TWhat_TItem)(nil), // 24: NYql.NConnector.NApi.TSelect.TWhat.TItem - (*TReadSplitsResponse_TColumnSet)(nil), // 25: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet - (*TReadSplitsResponse_TColumnSet_TColumn)(nil), // 26: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn - (*TPredicate_TNegation)(nil), // 27: NYql.NConnector.NApi.TPredicate.TNegation - (*TPredicate_TConjunction)(nil), // 28: NYql.NConnector.NApi.TPredicate.TConjunction - (*TPredicate_TDisjunction)(nil), // 29: NYql.NConnector.NApi.TPredicate.TDisjunction - (*TPredicate_TBetween)(nil), // 30: NYql.NConnector.NApi.TPredicate.TBetween - (*TPredicate_TIn)(nil), // 31: NYql.NConnector.NApi.TPredicate.TIn - (*TPredicate_TIsNull)(nil), // 32: NYql.NConnector.NApi.TPredicate.TIsNull - (*TPredicate_TIsNotNull)(nil), // 33: NYql.NConnector.NApi.TPredicate.TIsNotNull - (*TPredicate_TComparison)(nil), // 34: NYql.NConnector.NApi.TPredicate.TComparison - (*TAst_TList)(nil), // 35: NYql.NConnector.NApi.TAst.TList - (*common.TDataSourceInstance)(nil), // 36: NYql.NConnector.NApi.TDataSourceInstance - (*Ydb.Column)(nil), // 37: Ydb.Column - (*Ydb.TypedValue)(nil), // 38: Ydb.TypedValue - (Ydb.StatusIds_StatusCode)(0), // 39: Ydb.StatusIds.StatusCode - (*Ydb_Issue.IssueMessage)(nil), // 40: Ydb.Issue.IssueMessage - (*Ydb.Value)(nil), // 41: Ydb.Value + (EDateTimeFormat)(0), // 0: NYql.NConnector.NApi.EDateTimeFormat + (TReadSplitsRequest_EMode)(0), // 1: NYql.NConnector.NApi.TReadSplitsRequest.EMode + (TReadSplitsRequest_EFormat)(0), // 2: NYql.NConnector.NApi.TReadSplitsRequest.EFormat + (TPredicate_TComparison_EOperation)(0), // 3: NYql.NConnector.NApi.TPredicate.TComparison.EOperation + (*TListTablesRequest)(nil), // 4: NYql.NConnector.NApi.TListTablesRequest + (*TListTablesResponse)(nil), // 5: NYql.NConnector.NApi.TListTablesResponse + (*TDescribeTableRequest)(nil), // 6: NYql.NConnector.NApi.TDescribeTableRequest + (*TTypeMappingSettings)(nil), // 7: NYql.NConnector.NApi.TTypeMappingSettings + (*TDescribeTableResponse)(nil), // 8: NYql.NConnector.NApi.TDescribeTableResponse + (*TSchema)(nil), // 9: NYql.NConnector.NApi.TSchema + (*TListSplitsRequest)(nil), // 10: NYql.NConnector.NApi.TListSplitsRequest + (*TListSplitsResponse)(nil), // 11: NYql.NConnector.NApi.TListSplitsResponse + (*TSelect)(nil), // 12: NYql.NConnector.NApi.TSelect + (*TSplit)(nil), // 13: NYql.NConnector.NApi.TSplit + (*TReadSplitsRequest)(nil), // 14: NYql.NConnector.NApi.TReadSplitsRequest + (*TReadSplitsResponse)(nil), // 15: NYql.NConnector.NApi.TReadSplitsResponse + (*TPagination)(nil), // 16: NYql.NConnector.NApi.TPagination + (*TContinuation)(nil), // 17: NYql.NConnector.NApi.TContinuation + (*TExpression)(nil), // 18: NYql.NConnector.NApi.TExpression + (*TPredicate)(nil), // 19: NYql.NConnector.NApi.TPredicate + (*TError)(nil), // 20: NYql.NConnector.NApi.TError + (*TAst)(nil), // 21: NYql.NConnector.NApi.TAst + (*TSelect_TWhat)(nil), // 22: NYql.NConnector.NApi.TSelect.TWhat + (*TSelect_TFrom)(nil), // 23: NYql.NConnector.NApi.TSelect.TFrom + (*TSelect_TWhere)(nil), // 24: NYql.NConnector.NApi.TSelect.TWhere + (*TSelect_TLimit)(nil), // 25: NYql.NConnector.NApi.TSelect.TLimit + (*TSelect_TWhat_TItem)(nil), // 26: NYql.NConnector.NApi.TSelect.TWhat.TItem + (*TReadSplitsResponse_TColumnSet)(nil), // 27: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet + (*TReadSplitsResponse_TColumnSet_TColumn)(nil), // 28: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn + (*TPredicate_TNegation)(nil), // 29: NYql.NConnector.NApi.TPredicate.TNegation + (*TPredicate_TConjunction)(nil), // 30: NYql.NConnector.NApi.TPredicate.TConjunction + (*TPredicate_TDisjunction)(nil), // 31: NYql.NConnector.NApi.TPredicate.TDisjunction + (*TPredicate_TBetween)(nil), // 32: NYql.NConnector.NApi.TPredicate.TBetween + (*TPredicate_TIn)(nil), // 33: NYql.NConnector.NApi.TPredicate.TIn + (*TPredicate_TIsNull)(nil), // 34: NYql.NConnector.NApi.TPredicate.TIsNull + (*TPredicate_TIsNotNull)(nil), // 35: NYql.NConnector.NApi.TPredicate.TIsNotNull + (*TPredicate_TComparison)(nil), // 36: NYql.NConnector.NApi.TPredicate.TComparison + (*TAst_TList)(nil), // 37: NYql.NConnector.NApi.TAst.TList + (*common.TDataSourceInstance)(nil), // 38: NYql.NConnector.NApi.TDataSourceInstance + (*Ydb.Column)(nil), // 39: Ydb.Column + (*Ydb.TypedValue)(nil), // 40: Ydb.TypedValue + (Ydb.StatusIds_StatusCode)(0), // 41: Ydb.StatusIds.StatusCode + (*Ydb_Issue.IssueMessage)(nil), // 42: Ydb.Issue.IssueMessage + (*Ydb.Value)(nil), // 43: Ydb.Value } var file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_depIdxs = []int32{ - 36, // 0: NYql.NConnector.NApi.TListTablesRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance - 18, // 1: NYql.NConnector.NApi.TListTablesResponse.error:type_name -> NYql.NConnector.NApi.TError - 36, // 2: NYql.NConnector.NApi.TDescribeTableRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance - 7, // 3: NYql.NConnector.NApi.TDescribeTableResponse.schema:type_name -> NYql.NConnector.NApi.TSchema - 18, // 4: NYql.NConnector.NApi.TDescribeTableResponse.error:type_name -> NYql.NConnector.NApi.TError - 37, // 5: NYql.NConnector.NApi.TSchema.columns:type_name -> Ydb.Column - 10, // 6: NYql.NConnector.NApi.TListSplitsRequest.selects:type_name -> NYql.NConnector.NApi.TSelect - 11, // 7: NYql.NConnector.NApi.TListSplitsResponse.splits:type_name -> NYql.NConnector.NApi.TSplit - 18, // 8: NYql.NConnector.NApi.TListSplitsResponse.error:type_name -> NYql.NConnector.NApi.TError - 36, // 9: NYql.NConnector.NApi.TSelect.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance - 20, // 10: NYql.NConnector.NApi.TSelect.what:type_name -> NYql.NConnector.NApi.TSelect.TWhat - 21, // 11: NYql.NConnector.NApi.TSelect.from:type_name -> NYql.NConnector.NApi.TSelect.TFrom - 22, // 12: NYql.NConnector.NApi.TSelect.where:type_name -> NYql.NConnector.NApi.TSelect.TWhere - 23, // 13: NYql.NConnector.NApi.TSelect.limit:type_name -> NYql.NConnector.NApi.TSelect.TLimit - 10, // 14: NYql.NConnector.NApi.TSplit.select:type_name -> NYql.NConnector.NApi.TSelect - 36, // 15: NYql.NConnector.NApi.TReadSplitsRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance - 11, // 16: NYql.NConnector.NApi.TReadSplitsRequest.splits:type_name -> NYql.NConnector.NApi.TSplit - 0, // 17: NYql.NConnector.NApi.TReadSplitsRequest.mode:type_name -> NYql.NConnector.NApi.TReadSplitsRequest.EMode - 1, // 18: NYql.NConnector.NApi.TReadSplitsRequest.format:type_name -> NYql.NConnector.NApi.TReadSplitsRequest.EFormat - 14, // 19: NYql.NConnector.NApi.TReadSplitsRequest.pagination:type_name -> NYql.NConnector.NApi.TPagination - 15, // 20: NYql.NConnector.NApi.TReadSplitsRequest.continuation:type_name -> NYql.NConnector.NApi.TContinuation - 25, // 21: NYql.NConnector.NApi.TReadSplitsResponse.column_set:type_name -> NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet - 15, // 22: NYql.NConnector.NApi.TReadSplitsResponse.continuation:type_name -> NYql.NConnector.NApi.TContinuation - 18, // 23: NYql.NConnector.NApi.TReadSplitsResponse.error:type_name -> NYql.NConnector.NApi.TError - 38, // 24: NYql.NConnector.NApi.TExpression.typed_value:type_name -> Ydb.TypedValue - 27, // 25: NYql.NConnector.NApi.TPredicate.negation:type_name -> NYql.NConnector.NApi.TPredicate.TNegation - 28, // 26: NYql.NConnector.NApi.TPredicate.conjunction:type_name -> NYql.NConnector.NApi.TPredicate.TConjunction - 29, // 27: NYql.NConnector.NApi.TPredicate.disjunction:type_name -> NYql.NConnector.NApi.TPredicate.TDisjunction - 30, // 28: NYql.NConnector.NApi.TPredicate.between:type_name -> NYql.NConnector.NApi.TPredicate.TBetween - 31, // 29: NYql.NConnector.NApi.TPredicate.in:type_name -> NYql.NConnector.NApi.TPredicate.TIn - 32, // 30: NYql.NConnector.NApi.TPredicate.is_null:type_name -> NYql.NConnector.NApi.TPredicate.TIsNull - 33, // 31: NYql.NConnector.NApi.TPredicate.is_not_null:type_name -> NYql.NConnector.NApi.TPredicate.TIsNotNull - 34, // 32: NYql.NConnector.NApi.TPredicate.comparison:type_name -> NYql.NConnector.NApi.TPredicate.TComparison - 39, // 33: NYql.NConnector.NApi.TError.status:type_name -> Ydb.StatusIds.StatusCode - 40, // 34: NYql.NConnector.NApi.TError.issues:type_name -> Ydb.Issue.IssueMessage - 35, // 35: NYql.NConnector.NApi.TAst.list:type_name -> NYql.NConnector.NApi.TAst.TList - 24, // 36: NYql.NConnector.NApi.TSelect.TWhat.items:type_name -> NYql.NConnector.NApi.TSelect.TWhat.TItem - 17, // 37: NYql.NConnector.NApi.TSelect.TWhere.filter_typed:type_name -> NYql.NConnector.NApi.TPredicate - 19, // 38: NYql.NConnector.NApi.TSelect.TWhere.filter_raw:type_name -> NYql.NConnector.NApi.TAst - 37, // 39: NYql.NConnector.NApi.TSelect.TWhat.TItem.column:type_name -> Ydb.Column - 37, // 40: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.meta:type_name -> Ydb.Column - 26, // 41: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.data:type_name -> NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn - 41, // 42: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn.data:type_name -> Ydb.Value - 17, // 43: NYql.NConnector.NApi.TPredicate.TNegation.operand:type_name -> NYql.NConnector.NApi.TPredicate - 17, // 44: NYql.NConnector.NApi.TPredicate.TConjunction.operands:type_name -> NYql.NConnector.NApi.TPredicate - 17, // 45: NYql.NConnector.NApi.TPredicate.TDisjunction.operands:type_name -> NYql.NConnector.NApi.TPredicate - 16, // 46: NYql.NConnector.NApi.TPredicate.TBetween.value:type_name -> NYql.NConnector.NApi.TExpression - 16, // 47: NYql.NConnector.NApi.TPredicate.TBetween.least:type_name -> NYql.NConnector.NApi.TExpression - 16, // 48: NYql.NConnector.NApi.TPredicate.TBetween.greatest:type_name -> NYql.NConnector.NApi.TExpression - 16, // 49: NYql.NConnector.NApi.TPredicate.TIn.value:type_name -> NYql.NConnector.NApi.TExpression - 16, // 50: NYql.NConnector.NApi.TPredicate.TIn.set:type_name -> NYql.NConnector.NApi.TExpression - 16, // 51: NYql.NConnector.NApi.TPredicate.TIsNull.value:type_name -> NYql.NConnector.NApi.TExpression - 16, // 52: NYql.NConnector.NApi.TPredicate.TIsNotNull.value:type_name -> NYql.NConnector.NApi.TExpression - 2, // 53: NYql.NConnector.NApi.TPredicate.TComparison.operation:type_name -> NYql.NConnector.NApi.TPredicate.TComparison.EOperation - 16, // 54: NYql.NConnector.NApi.TPredicate.TComparison.left_value:type_name -> NYql.NConnector.NApi.TExpression - 16, // 55: NYql.NConnector.NApi.TPredicate.TComparison.right_value:type_name -> NYql.NConnector.NApi.TExpression - 19, // 56: NYql.NConnector.NApi.TAst.TList.children:type_name -> NYql.NConnector.NApi.TAst - 57, // [57:57] is the sub-list for method output_type - 57, // [57:57] is the sub-list for method input_type - 57, // [57:57] is the sub-list for extension type_name - 57, // [57:57] is the sub-list for extension extendee - 0, // [0:57] is the sub-list for field type_name + 38, // 0: NYql.NConnector.NApi.TListTablesRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance + 20, // 1: NYql.NConnector.NApi.TListTablesResponse.error:type_name -> NYql.NConnector.NApi.TError + 38, // 2: NYql.NConnector.NApi.TDescribeTableRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance + 7, // 3: NYql.NConnector.NApi.TDescribeTableRequest.type_mapping_settings:type_name -> NYql.NConnector.NApi.TTypeMappingSettings + 0, // 4: NYql.NConnector.NApi.TTypeMappingSettings.date_time_format:type_name -> NYql.NConnector.NApi.EDateTimeFormat + 9, // 5: NYql.NConnector.NApi.TDescribeTableResponse.schema:type_name -> NYql.NConnector.NApi.TSchema + 20, // 6: NYql.NConnector.NApi.TDescribeTableResponse.error:type_name -> NYql.NConnector.NApi.TError + 39, // 7: NYql.NConnector.NApi.TSchema.columns:type_name -> Ydb.Column + 12, // 8: NYql.NConnector.NApi.TListSplitsRequest.selects:type_name -> NYql.NConnector.NApi.TSelect + 13, // 9: NYql.NConnector.NApi.TListSplitsResponse.splits:type_name -> NYql.NConnector.NApi.TSplit + 20, // 10: NYql.NConnector.NApi.TListSplitsResponse.error:type_name -> NYql.NConnector.NApi.TError + 38, // 11: NYql.NConnector.NApi.TSelect.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance + 22, // 12: NYql.NConnector.NApi.TSelect.what:type_name -> NYql.NConnector.NApi.TSelect.TWhat + 23, // 13: NYql.NConnector.NApi.TSelect.from:type_name -> NYql.NConnector.NApi.TSelect.TFrom + 24, // 14: NYql.NConnector.NApi.TSelect.where:type_name -> NYql.NConnector.NApi.TSelect.TWhere + 25, // 15: NYql.NConnector.NApi.TSelect.limit:type_name -> NYql.NConnector.NApi.TSelect.TLimit + 12, // 16: NYql.NConnector.NApi.TSplit.select:type_name -> NYql.NConnector.NApi.TSelect + 38, // 17: NYql.NConnector.NApi.TReadSplitsRequest.data_source_instance:type_name -> NYql.NConnector.NApi.TDataSourceInstance + 13, // 18: NYql.NConnector.NApi.TReadSplitsRequest.splits:type_name -> NYql.NConnector.NApi.TSplit + 1, // 19: NYql.NConnector.NApi.TReadSplitsRequest.mode:type_name -> NYql.NConnector.NApi.TReadSplitsRequest.EMode + 2, // 20: NYql.NConnector.NApi.TReadSplitsRequest.format:type_name -> NYql.NConnector.NApi.TReadSplitsRequest.EFormat + 16, // 21: NYql.NConnector.NApi.TReadSplitsRequest.pagination:type_name -> NYql.NConnector.NApi.TPagination + 17, // 22: NYql.NConnector.NApi.TReadSplitsRequest.continuation:type_name -> NYql.NConnector.NApi.TContinuation + 27, // 23: NYql.NConnector.NApi.TReadSplitsResponse.column_set:type_name -> NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet + 17, // 24: NYql.NConnector.NApi.TReadSplitsResponse.continuation:type_name -> NYql.NConnector.NApi.TContinuation + 20, // 25: NYql.NConnector.NApi.TReadSplitsResponse.error:type_name -> NYql.NConnector.NApi.TError + 40, // 26: NYql.NConnector.NApi.TExpression.typed_value:type_name -> Ydb.TypedValue + 29, // 27: NYql.NConnector.NApi.TPredicate.negation:type_name -> NYql.NConnector.NApi.TPredicate.TNegation + 30, // 28: NYql.NConnector.NApi.TPredicate.conjunction:type_name -> NYql.NConnector.NApi.TPredicate.TConjunction + 31, // 29: NYql.NConnector.NApi.TPredicate.disjunction:type_name -> NYql.NConnector.NApi.TPredicate.TDisjunction + 32, // 30: NYql.NConnector.NApi.TPredicate.between:type_name -> NYql.NConnector.NApi.TPredicate.TBetween + 33, // 31: NYql.NConnector.NApi.TPredicate.in:type_name -> NYql.NConnector.NApi.TPredicate.TIn + 34, // 32: NYql.NConnector.NApi.TPredicate.is_null:type_name -> NYql.NConnector.NApi.TPredicate.TIsNull + 35, // 33: NYql.NConnector.NApi.TPredicate.is_not_null:type_name -> NYql.NConnector.NApi.TPredicate.TIsNotNull + 36, // 34: NYql.NConnector.NApi.TPredicate.comparison:type_name -> NYql.NConnector.NApi.TPredicate.TComparison + 41, // 35: NYql.NConnector.NApi.TError.status:type_name -> Ydb.StatusIds.StatusCode + 42, // 36: NYql.NConnector.NApi.TError.issues:type_name -> Ydb.Issue.IssueMessage + 37, // 37: NYql.NConnector.NApi.TAst.list:type_name -> NYql.NConnector.NApi.TAst.TList + 26, // 38: NYql.NConnector.NApi.TSelect.TWhat.items:type_name -> NYql.NConnector.NApi.TSelect.TWhat.TItem + 19, // 39: NYql.NConnector.NApi.TSelect.TWhere.filter_typed:type_name -> NYql.NConnector.NApi.TPredicate + 21, // 40: NYql.NConnector.NApi.TSelect.TWhere.filter_raw:type_name -> NYql.NConnector.NApi.TAst + 39, // 41: NYql.NConnector.NApi.TSelect.TWhat.TItem.column:type_name -> Ydb.Column + 39, // 42: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.meta:type_name -> Ydb.Column + 28, // 43: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.data:type_name -> NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn + 43, // 44: NYql.NConnector.NApi.TReadSplitsResponse.TColumnSet.TColumn.data:type_name -> Ydb.Value + 19, // 45: NYql.NConnector.NApi.TPredicate.TNegation.operand:type_name -> NYql.NConnector.NApi.TPredicate + 19, // 46: NYql.NConnector.NApi.TPredicate.TConjunction.operands:type_name -> NYql.NConnector.NApi.TPredicate + 19, // 47: NYql.NConnector.NApi.TPredicate.TDisjunction.operands:type_name -> NYql.NConnector.NApi.TPredicate + 18, // 48: NYql.NConnector.NApi.TPredicate.TBetween.value:type_name -> NYql.NConnector.NApi.TExpression + 18, // 49: NYql.NConnector.NApi.TPredicate.TBetween.least:type_name -> NYql.NConnector.NApi.TExpression + 18, // 50: NYql.NConnector.NApi.TPredicate.TBetween.greatest:type_name -> NYql.NConnector.NApi.TExpression + 18, // 51: NYql.NConnector.NApi.TPredicate.TIn.value:type_name -> NYql.NConnector.NApi.TExpression + 18, // 52: NYql.NConnector.NApi.TPredicate.TIn.set:type_name -> NYql.NConnector.NApi.TExpression + 18, // 53: NYql.NConnector.NApi.TPredicate.TIsNull.value:type_name -> NYql.NConnector.NApi.TExpression + 18, // 54: NYql.NConnector.NApi.TPredicate.TIsNotNull.value:type_name -> NYql.NConnector.NApi.TExpression + 3, // 55: NYql.NConnector.NApi.TPredicate.TComparison.operation:type_name -> NYql.NConnector.NApi.TPredicate.TComparison.EOperation + 18, // 56: NYql.NConnector.NApi.TPredicate.TComparison.left_value:type_name -> NYql.NConnector.NApi.TExpression + 18, // 57: NYql.NConnector.NApi.TPredicate.TComparison.right_value:type_name -> NYql.NConnector.NApi.TExpression + 21, // 58: NYql.NConnector.NApi.TAst.TList.children:type_name -> NYql.NConnector.NApi.TAst + 59, // [59:59] is the sub-list for method output_type + 59, // [59:59] is the sub-list for method input_type + 59, // [59:59] is the sub-list for extension type_name + 59, // [59:59] is the sub-list for extension extendee + 0, // [0:59] is the sub-list for field type_name } func init() { @@ -2950,7 +3077,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TDescribeTableResponse); i { + switch v := v.(*TTypeMappingSettings); i { case 0: return &v.state case 1: @@ -2962,7 +3089,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSchema); i { + switch v := v.(*TDescribeTableResponse); i { case 0: return &v.state case 1: @@ -2974,7 +3101,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TListSplitsRequest); i { + switch v := v.(*TSchema); i { case 0: return &v.state case 1: @@ -2986,7 +3113,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TListSplitsResponse); i { + switch v := v.(*TListSplitsRequest); i { case 0: return &v.state case 1: @@ -2998,7 +3125,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect); i { + switch v := v.(*TListSplitsResponse); i { case 0: return &v.state case 1: @@ -3010,7 +3137,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSplit); i { + switch v := v.(*TSelect); i { case 0: return &v.state case 1: @@ -3022,7 +3149,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TReadSplitsRequest); i { + switch v := v.(*TSplit); i { case 0: return &v.state case 1: @@ -3034,7 +3161,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TReadSplitsResponse); i { + switch v := v.(*TReadSplitsRequest); i { case 0: return &v.state case 1: @@ -3046,7 +3173,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPagination); i { + switch v := v.(*TReadSplitsResponse); i { case 0: return &v.state case 1: @@ -3058,7 +3185,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TContinuation); i { + switch v := v.(*TPagination); i { case 0: return &v.state case 1: @@ -3070,7 +3197,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TExpression); i { + switch v := v.(*TContinuation); i { case 0: return &v.state case 1: @@ -3082,7 +3209,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate); i { + switch v := v.(*TExpression); i { case 0: return &v.state case 1: @@ -3094,7 +3221,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TError); i { + switch v := v.(*TPredicate); i { case 0: return &v.state case 1: @@ -3106,7 +3233,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TAst); i { + switch v := v.(*TError); i { case 0: return &v.state case 1: @@ -3118,7 +3245,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect_TWhat); i { + switch v := v.(*TAst); i { case 0: return &v.state case 1: @@ -3130,7 +3257,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect_TFrom); i { + switch v := v.(*TSelect_TWhat); i { case 0: return &v.state case 1: @@ -3142,7 +3269,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect_TWhere); i { + switch v := v.(*TSelect_TFrom); i { case 0: return &v.state case 1: @@ -3154,7 +3281,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect_TLimit); i { + switch v := v.(*TSelect_TWhere); i { case 0: return &v.state case 1: @@ -3166,7 +3293,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TSelect_TWhat_TItem); i { + switch v := v.(*TSelect_TLimit); i { case 0: return &v.state case 1: @@ -3178,7 +3305,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TReadSplitsResponse_TColumnSet); i { + switch v := v.(*TSelect_TWhat_TItem); i { case 0: return &v.state case 1: @@ -3190,7 +3317,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TReadSplitsResponse_TColumnSet_TColumn); i { + switch v := v.(*TReadSplitsResponse_TColumnSet); i { case 0: return &v.state case 1: @@ -3202,7 +3329,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TNegation); i { + switch v := v.(*TReadSplitsResponse_TColumnSet_TColumn); i { case 0: return &v.state case 1: @@ -3214,7 +3341,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TConjunction); i { + switch v := v.(*TPredicate_TNegation); i { case 0: return &v.state case 1: @@ -3226,7 +3353,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TDisjunction); i { + switch v := v.(*TPredicate_TConjunction); i { case 0: return &v.state case 1: @@ -3238,7 +3365,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TBetween); i { + switch v := v.(*TPredicate_TDisjunction); i { case 0: return &v.state case 1: @@ -3250,7 +3377,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TIn); i { + switch v := v.(*TPredicate_TBetween); i { case 0: return &v.state case 1: @@ -3262,7 +3389,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TIsNull); i { + switch v := v.(*TPredicate_TIn); i { case 0: return &v.state case 1: @@ -3274,7 +3401,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TIsNotNull); i { + switch v := v.(*TPredicate_TIsNull); i { case 0: return &v.state case 1: @@ -3286,7 +3413,7 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TPredicate_TComparison); i { + switch v := v.(*TPredicate_TIsNotNull); i { case 0: return &v.state case 1: @@ -3298,6 +3425,18 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect } } file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TPredicate_TComparison); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TAst_TList); i { case 0: return &v.state @@ -3313,21 +3452,21 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[0].OneofWrappers = []interface{}{ (*TListTablesRequest_Pattern)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[8].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[9].OneofWrappers = []interface{}{ (*TSplit_Description)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[11].OneofWrappers = []interface{}{ (*TReadSplitsResponse_ColumnSet)(nil), (*TReadSplitsResponse_ArrowIpcStreaming)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13].OneofWrappers = []interface{}{ (*TContinuation_Description)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14].OneofWrappers = []interface{}{ (*TExpression_TypedValue)(nil), (*TExpression_Column)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[15].OneofWrappers = []interface{}{ (*TPredicate_Negation)(nil), (*TPredicate_Conjunction)(nil), (*TPredicate_Disjunction)(nil), @@ -3337,11 +3476,11 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect (*TPredicate_IsNotNull)(nil), (*TPredicate_Comparison)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[16].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[17].OneofWrappers = []interface{}{ (*TAst_Atom)(nil), (*TAst_List)(nil), } - file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[21].OneofWrappers = []interface{}{ + file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_msgTypes[22].OneofWrappers = []interface{}{ (*TSelect_TWhat_TItem_Column)(nil), } type x struct{} @@ -3349,8 +3488,8 @@ func file_ydb_library_yql_providers_generic_connector_api_service_protos_connect File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ydb_library_yql_providers_generic_connector_api_service_protos_connector_proto_rawDesc, - NumEnums: 3, - NumMessages: 33, + NumEnums: 4, + NumMessages: 34, NumExtensions: 0, NumServices: 0, }, diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_load_meta.cpp b/ydb/library/yql/providers/generic/provider/yql_generic_load_meta.cpp index 3baedc42cdf..c61b5007c50 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_load_meta.cpp +++ b/ydb/library/yql/providers/generic/provider/yql_generic_load_meta.cpp @@ -93,74 +93,12 @@ namespace NYql { Results_.reserve(pendingTables.size()); for (const auto& item : pendingTables) { - NConnector::NApi::TDescribeTableRequest request; - const auto& clusterName = item.first; const auto it = State_->Configuration->ClusterNamesToClusterConfigs.find(clusterName); YQL_ENSURE(State_->Configuration->ClusterNamesToClusterConfigs.cend() != it, "cluster not found: " << clusterName); - const auto& clusterConfig = it->second; - const auto dataSourceKind = clusterConfig.GetKind(); - - auto dsi = request.mutable_data_source_instance(); - dsi->mutable_endpoint()->CopyFrom(clusterConfig.GetEndpoint()); - dsi->set_kind(dataSourceKind); - dsi->mutable_credentials()->CopyFrom(clusterConfig.GetCredentials()); - dsi->set_use_tls(clusterConfig.GetUseSsl()); - dsi->set_protocol(clusterConfig.GetProtocol()); - - // for backward compability full path can be used (cluster_name.`db_name.table`) - // TODO: simplify during https://st.yandex-team.ru/YQ-2494 - const auto& tablePath = item.second; - const auto& dbNameFromConfig = clusterConfig.GetDatabaseName(); - TStringBuf dbNameTarget, tableName; - auto isFullPath = TStringBuf(tablePath).TrySplit('.', dbNameTarget, tableName); - - switch (dataSourceKind) { - case NYql::NConnector::NApi::CLICKHOUSE: - break; - case NYql::NConnector::NApi::POSTGRESQL: { - // for backward compability set schema "public" by default - // TODO: simplify during https://st.yandex-team.ru/YQ-2494 - TString schema; - const auto options_it = clusterConfig.GetDataSourceOptions().find(TString("schema")); - if (options_it != clusterConfig.GetDataSourceOptions().end()) { - schema = options_it->second; - } - if (!schema) { - schema = TString("public"); - } - - dsi->mutable_pg_options()->Setschema(schema); - } break; - - default: - ythrow yexception() << "Unexpected data source kind: '" - << NYql::NConnector::NApi::EDataSourceKind_Name(dataSourceKind) << "'"; - } - - if (!dbNameFromConfig.empty()) { - dbNameTarget = dbNameFromConfig; - if (!isFullPath) { - tableName = tablePath; - } - } else if (!isFullPath) { - tableName = tablePath; - switch (dataSourceKind) { - case NYql::NConnector::NApi::CLICKHOUSE: - dbNameTarget = "default"; - break; - case NYql::NConnector::NApi::POSTGRESQL: - dbNameTarget = "postgres"; - break; - default: - ythrow yexception() << "Unexpected data source kind: '" - << NYql::NConnector::NApi::EDataSourceKind_Name(dataSourceKind) << "'"; - } - } // else take database name from table path - - dsi->set_database(TString(dbNameTarget)); - request.set_table(TString(tableName)); + NConnector::NApi::TDescribeTableRequest request; + FillDescribeTableRequest(request, it->second, item.second); auto promise = NThreading::NewPromise(); handles.emplace_back(promise.GetFuture()); @@ -312,6 +250,89 @@ namespace NYql { return nullptr; } + void FillDescribeTableRequest(NConnector::NApi::TDescribeTableRequest& request, const TGenericClusterConfig& clusterConfig, const TString& tablePath) { + const auto dataSourceKind = clusterConfig.GetKind(); + auto dsi = request.mutable_data_source_instance(); + + *dsi->mutable_endpoint() = clusterConfig.GetEndpoint(); + dsi->set_kind(dataSourceKind); + *dsi->mutable_credentials() = clusterConfig.GetCredentials(); + dsi->set_use_tls(clusterConfig.GetUseSsl()); + dsi->set_protocol(clusterConfig.GetProtocol()); + FillTypeMappingSettings(request); + FillDataSourceOptions(request, clusterConfig); + FillTablePath(request, clusterConfig, tablePath); + } + + void FillDataSourceOptions(NConnector::NApi::TDescribeTableRequest& request, const TGenericClusterConfig& clusterConfig) { + const auto dataSourceKind = clusterConfig.GetKind(); + switch (dataSourceKind) { + case NYql::NConnector::NApi::CLICKHOUSE: + break; + case NYql::NConnector::NApi::POSTGRESQL: { + // for backward compability set schema "public" by default + // TODO: simplify during https://st.yandex-team.ru/YQ-2494 + TString schema; + const auto it = clusterConfig.GetDataSourceOptions().find("schema"); + if (it != clusterConfig.GetDataSourceOptions().end()) { + schema = it->second; + } + if (!schema) { + schema = "public"; + } + + request.mutable_data_source_instance()->mutable_pg_options()->set_schema(schema); + } break; + + default: + ythrow yexception() << "Unexpected data source kind: '" + << NYql::NConnector::NApi::EDataSourceKind_Name(dataSourceKind) << "'"; + } + } + + void FillTypeMappingSettings(NConnector::NApi::TDescribeTableRequest& request) { + const auto dateTimeFormat = *State_->Configuration->DateTimeFormat.Get(); + if (dateTimeFormat == "string") { + request.mutable_type_mapping_settings()->set_date_time_format(NConnector::NApi::STRING_FORMAT); + } else if (dateTimeFormat == "YQL") { + request.mutable_type_mapping_settings()->set_date_time_format(NConnector::NApi::YQL_FORMAT); + } else { + ythrow yexception() << "Unexpected date/time format: '" << dateTimeFormat << "'"; + } + } + + void FillTablePath(NConnector::NApi::TDescribeTableRequest& request, const TGenericClusterConfig& clusterConfig, const TString& tablePath) { + // for backward compability full path can be used (cluster_name.`db_name.table`) + // TODO: simplify during https://st.yandex-team.ru/YQ-2494 + const auto dataSourceKind = clusterConfig.GetKind(); + const auto& dbNameFromConfig = clusterConfig.GetDatabaseName(); + TStringBuf dbNameTarget, tableName; + auto isFullPath = TStringBuf(tablePath).TrySplit('.', dbNameTarget, tableName); + + if (!dbNameFromConfig.empty()) { + dbNameTarget = dbNameFromConfig; + if (!isFullPath) { + tableName = tablePath; + } + } else if (!isFullPath) { + tableName = tablePath; + switch (dataSourceKind) { + case NYql::NConnector::NApi::CLICKHOUSE: + dbNameTarget = "default"; + break; + case NYql::NConnector::NApi::POSTGRESQL: + dbNameTarget = "postgres"; + break; + default: + ythrow yexception() << "Unexpected data source kind: '" + << NYql::NConnector::NApi::EDataSourceKind_Name(dataSourceKind) << "'"; + } + } // else take database name from table path + + request.mutable_data_source_instance()->set_database(TString(dbNameTarget)); + request.set_table(TString(tableName)); + } + private: const TGenericState::TPtr State_; diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_predicate_pushdown.cpp b/ydb/library/yql/providers/generic/provider/yql_generic_predicate_pushdown.cpp index 8f24d0f58ae..26b0f3a6372 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_predicate_pushdown.cpp +++ b/ydb/library/yql/providers/generic/provider/yql_generic_predicate_pushdown.cpp @@ -46,7 +46,7 @@ namespace NYql { if (compare.Maybe<TCoCmpEqual>()) { proto->set_operation(TPredicate::TComparison::EQ); } - if (proto->operation() == TPredicate::TComparison::RESERVED) { // Unknown operation + if (proto->operation() == TPredicate::TComparison::OPERATION_UNSPECIFIED) { // Unknown operation err << "unknown operation: " << compare.Raw()->Content(); return false; } diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_provider.cpp b/ydb/library/yql/providers/generic/provider/yql_generic_provider.cpp index d3122f5d938..d2178ccd5b0 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_provider.cpp +++ b/ydb/library/yql/providers/generic/provider/yql_generic_provider.cpp @@ -26,7 +26,7 @@ namespace NYql { functionRegistry, dbResolver, genericClient, - gatewaysConfig); + gatewaysConfig->GetGeneric()); TDataProviderInfo info; diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_settings.cpp b/ydb/library/yql/providers/generic/provider/yql_generic_settings.cpp index 29dfe55f56c..0d399cb84fb 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_settings.cpp +++ b/ydb/library/yql/providers/generic/provider/yql_generic_settings.cpp @@ -9,6 +9,7 @@ namespace NYql { TGenericConfiguration::TGenericConfiguration() { REGISTER_SETTING(*this, UsePredicatePushdown); + REGISTER_SETTING(*this, DateTimeFormat); } void TGenericConfiguration::Init(const NYql::TGenericGatewayConfig& gatewayConfig, diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_settings.h b/ydb/library/yql/providers/generic/provider/yql_generic_settings.h index 639db317d31..62ec0a6da83 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_settings.h +++ b/ydb/library/yql/providers/generic/provider/yql_generic_settings.h @@ -15,6 +15,8 @@ namespace NYql { struct TDefault { static constexpr bool UsePredicatePushdown = false; }; + + NCommon::TConfSetting<TString, false> DateTimeFormat; }; struct TGenericConfiguration: public TGenericSettings, public NCommon::TSettingDispatcher { diff --git a/ydb/library/yql/providers/generic/provider/yql_generic_state.h b/ydb/library/yql/providers/generic/provider/yql_generic_state.h index f1c51892d47..e2362bc5ad2 100644 --- a/ydb/library/yql/providers/generic/provider/yql_generic_state.h +++ b/ydb/library/yql/providers/generic/provider/yql_generic_state.h @@ -31,16 +31,14 @@ namespace NYql { const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry, const std::shared_ptr<NYql::IDatabaseAsyncResolver>& databaseResolver, const NConnector::IClient::TPtr& genericClient, - const TGatewaysConfig* gatewaysConfig = nullptr) + const TGenericGatewayConfig& gatewayConfig) : Types(types) , Configuration(MakeIntrusive<TGenericConfiguration>()) , FunctionRegistry(functionRegistry) , DatabaseResolver(databaseResolver) , GenericClient(genericClient) { - if (gatewaysConfig) { - Configuration->Init(gatewaysConfig->GetGeneric(), databaseResolver, DatabaseAuth, types->Credentials); - } + Configuration->Init(gatewayConfig, databaseResolver, DatabaseAuth, types->Credentials); } void AddTable(const TStringBuf& clusterName, const TStringBuf& tableName, TTableMeta&& tableMeta); |