From b479cd06f1bd0e07b96c29e108a0f77067174c2f Mon Sep 17 00:00:00 2001 From: David Coe Date: Tue, 22 Aug 2023 11:49:18 -0400 Subject: [PATCH 01/61] add Apache drivers; re-organize Flight SQL --- csharp/Apache.Arrow.Adbc.sln | 46 +- csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs | 2 +- .../src/Apache.Arrow.Adbc/IAdbcStatement.cs | 37 + .../Apache.Arrow.Adbc.Drivers.Apache.csproj | 15 + .../Apache/Hive2/HiveServer2Connection.cs | 61 + .../Apache/Hive2/HiveServer2Statement.cs | 123 + .../Drivers/Apache/Impala/ImpalaConnection.cs | 78 + .../Drivers/Apache/Impala/ImpalaDatabase.cs | 38 + .../src/Drivers/Apache/Impala/ImpalaDriver.cs | 29 + .../Drivers/Apache/Impala/ImpalaStatement.cs | 114 + .../Drivers/Apache/Spark/SparkConnection.cs | 117 + .../src/Drivers/Apache/Spark/SparkDatabase.cs | 38 + .../src/Drivers/Apache/Spark/SparkDriver.cs | 29 + .../Drivers/Apache/Spark/SparkStatement.cs | 129 + .../src/Drivers/Apache/Thrift/ChunkStream.cs | 93 + .../Apache/Thrift/IPeekableTransport.cs | 10 + .../Service/Rpc/Thrift/TArrayTypeEntry.cs | 155 + .../Service/Rpc/Thrift/TBinaryColumn.cs | 234 + .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 198 + .../Thrift/Service/Rpc/Thrift/TBoolValue.cs | 178 + .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 196 + .../Thrift/Service/Rpc/Thrift/TByteValue.cs | 178 + .../Thrift/Service/Rpc/Thrift/TCLIService.cs | 9212 +++++++++++++++++ .../Rpc/Thrift/TCLIService2.Constants.cs | 89 + .../Rpc/Thrift/TCLIService2.Extensions.cs | 654 ++ .../Service/Rpc/Thrift/TCacheLookupResult.cs | 24 + .../Rpc/Thrift/TCancelDelegationTokenReq.cs | 210 + .../Rpc/Thrift/TCancelDelegationTokenResp.cs | 168 + .../Service/Rpc/Thrift/TCancelOperationReq.cs | 168 + .../Rpc/Thrift/TCancelOperationResp.cs | 168 + .../Service/Rpc/Thrift/TCloseOperationReq.cs | 168 + .../Service/Rpc/Thrift/TCloseOperationResp.cs | 168 + .../Service/Rpc/Thrift/TCloseSessionReq.cs | 168 + .../Service/Rpc/Thrift/TCloseSessionResp.cs | 168 + .../Rpc/Thrift/TCloudFetchDisabledReason.cs | 28 + .../Thrift/Service/Rpc/Thrift/TColumn.cs | 536 + .../Thrift/Service/Rpc/Thrift/TColumnDesc.cs | 295 + .../Thrift/Service/Rpc/Thrift/TColumnValue.cs | 485 + .../Rpc/Thrift/TDBSqlCloudResultFile.cs | 287 + .../Service/Rpc/Thrift/TDBSqlConfValue.cs | 178 + .../Rpc/Thrift/TDBSqlSessionCapabilities.cs | 178 + .../Service/Rpc/Thrift/TDBSqlSessionConf.cs | 548 + .../Service/Rpc/Thrift/TDBSqlTempView.cs | 346 + .../Service/Rpc/Thrift/TDoubleColumn.cs | 199 + .../Thrift/Service/Rpc/Thrift/TDoubleValue.cs | 178 + .../Service/Rpc/Thrift/TDownloadDataReq.cs | 388 + .../Service/Rpc/Thrift/TDownloadDataResp.cs | 211 + .../Rpc/Thrift/TExecuteStatementReq.cs | 1124 ++ .../Rpc/Thrift/TExecuteStatementResp.cs | 569 + .../Service/Rpc/Thrift/TExpressionInfo.cs | 728 ++ .../Service/Rpc/Thrift/TFetchOrientation.cs | 26 + .../Service/Rpc/Thrift/TFetchResultsReq.cs | 437 + .../Service/Rpc/Thrift/TFetchResultsResp.cs | 372 + .../Service/Rpc/Thrift/TGetCatalogsReq.cs | 373 + .../Service/Rpc/Thrift/TGetCatalogsResp.cs | 274 + .../Service/Rpc/Thrift/TGetColumnsReq.cs | 569 + .../Service/Rpc/Thrift/TGetColumnsResp.cs | 274 + .../Rpc/Thrift/TGetCrossReferenceReq.cs | 667 ++ .../Rpc/Thrift/TGetCrossReferenceResp.cs | 274 + .../Rpc/Thrift/TGetDelegationTokenReq.cs | 252 + .../Rpc/Thrift/TGetDelegationTokenResp.cs | 223 + .../Service/Rpc/Thrift/TGetFunctionsReq.cs | 513 + .../Service/Rpc/Thrift/TGetFunctionsResp.cs | 274 + .../Thrift/Service/Rpc/Thrift/TGetInfoReq.cs | 202 + .../Thrift/Service/Rpc/Thrift/TGetInfoResp.cs | 211 + .../Thrift/Service/Rpc/Thrift/TGetInfoType.cs | 68 + .../Service/Rpc/Thrift/TGetInfoValue.cs | 428 + .../Rpc/Thrift/TGetOperationStatusReq.cs | 223 + .../Rpc/Thrift/TGetOperationStatusResp.cs | 963 ++ .../Service/Rpc/Thrift/TGetPrimaryKeysReq.cs | 520 + .../Service/Rpc/Thrift/TGetPrimaryKeysResp.cs | 274 + .../Service/Rpc/Thrift/TGetQueryIdReq.cs | 168 + .../Service/Rpc/Thrift/TGetQueryIdResp.cs | 167 + .../Rpc/Thrift/TGetResultSetMetadataReq.cs | 223 + .../Rpc/Thrift/TGetResultSetMetadataResp.cs | 779 ++ .../Service/Rpc/Thrift/TGetSchemasReq.cs | 471 + .../Service/Rpc/Thrift/TGetSchemasResp.cs | 274 + .../Service/Rpc/Thrift/TGetTableTypesReq.cs | 373 + .../Service/Rpc/Thrift/TGetTableTypesResp.cs | 274 + .../Service/Rpc/Thrift/TGetTablesReq.cs | 584 ++ .../Service/Rpc/Thrift/TGetTablesResp.cs | 274 + .../Service/Rpc/Thrift/TGetTypeInfoReq.cs | 373 + .../Service/Rpc/Thrift/TGetTypeInfoResp.cs | 274 + .../Service/Rpc/Thrift/THandleIdentifier.cs | 209 + .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 200 + .../Thrift/Service/Rpc/Thrift/TI16Value.cs | 178 + .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 199 + .../Thrift/Service/Rpc/Thrift/TI32Value.cs | 178 + .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 200 + .../Thrift/Service/Rpc/Thrift/TI64Value.cs | 178 + .../Service/Rpc/Thrift/TJobExecutionStatus.cs | 23 + .../Service/Rpc/Thrift/TMapTypeEntry.cs | 185 + .../Thrift/Service/Rpc/Thrift/TNamespace.cs | 228 + .../Service/Rpc/Thrift/TOpenSessionReq.cs | 660 ++ .../Service/Rpc/Thrift/TOpenSessionResp.cs | 489 + .../Service/Rpc/Thrift/TOperationHandle.cs | 287 + .../Rpc/Thrift/TOperationIdempotencyType.cs | 23 + .../Service/Rpc/Thrift/TOperationState.cs | 29 + .../Rpc/Thrift/TOperationTimeoutLevel.cs | 22 + .../Service/Rpc/Thrift/TOperationType.cs | 30 + .../Service/Rpc/Thrift/TPrimitiveTypeEntry.cs | 215 + .../Service/Rpc/Thrift/TProgressUpdateResp.cs | 390 + .../Service/Rpc/Thrift/TProtocolVersion.cs | 38 + .../Rpc/Thrift/TRenewDelegationTokenReq.cs | 210 + .../Rpc/Thrift/TRenewDelegationTokenResp.cs | 168 + .../Rpc/Thrift/TResultPersistenceMode.cs | 23 + .../Apache/Thrift/Service/Rpc/Thrift/TRow.cs | 183 + .../Thrift/Service/Rpc/Thrift/TRowSet.cs | 512 + .../Service/Rpc/Thrift/TSessionHandle.cs | 168 + .../Service/Rpc/Thrift/TSetClientInfoReq.cs | 241 + .../Service/Rpc/Thrift/TSetClientInfoResp.cs | 168 + .../Service/Rpc/Thrift/TSparkArrowBatch.cs | 197 + .../Rpc/Thrift/TSparkArrowResultLink.cs | 287 + .../Service/Rpc/Thrift/TSparkArrowTypes.cs | 328 + .../Service/Rpc/Thrift/TSparkDirectResults.cs | 332 + .../Rpc/Thrift/TSparkGetDirectResults.cs | 210 + .../Service/Rpc/Thrift/TSparkRowSetType.cs | 24 + .../Thrift/Service/Rpc/Thrift/TStatus.cs | 376 + .../Thrift/Service/Rpc/Thrift/TStatusCode.cs | 25 + .../Service/Rpc/Thrift/TStringColumn.cs | 233 + .../Thrift/Service/Rpc/Thrift/TStringValue.cs | 178 + .../Service/Rpc/Thrift/TStructTypeEntry.cs | 185 + .../Thrift/Service/Rpc/Thrift/TTableSchema.cs | 183 + .../Thrift/Service/Rpc/Thrift/TTypeDesc.cs | 183 + .../Thrift/Service/Rpc/Thrift/TTypeEntry.cs | 434 + .../Thrift/Service/Rpc/Thrift/TTypeId.cs | 43 + .../Service/Rpc/Thrift/TTypeQualifierValue.cs | 228 + .../Service/Rpc/Thrift/TTypeQualifiers.cs | 186 + .../Service/Rpc/Thrift/TUnionTypeEntry.cs | 185 + .../Service/Rpc/Thrift/TUploadDataReq.cs | 314 + .../Service/Rpc/Thrift/TUploadDataResp.cs | 211 + .../Rpc/Thrift/TUserDefinedTypeEntry.cs | 167 + .../Apache/Thrift/ThriftSocketTransport.cs | 17 + ...pache.Arrow.Adbc.Drivers.FlightSql.csproj} | 32 +- .../FlightSql}/FlightSqlConnection.cs | 189 +- .../FlightSql}/FlightSqlDatabase.cs | 106 +- .../FlightSql}/FlightSqlDriver.cs | 66 +- .../FlightSql}/FlightSqlParameters.cs | 60 +- .../FlightSql}/FlightSqlResult.cs | 158 +- .../FlightSql}/FlightSqlStatement.cs | 466 +- .../Utils.cs | 53 - .../Apache.Arrow.Adbc.Tests.csproj | 2 + .../TestConfiguration.cs | 30 + .../test/Apache.Arrow.Adbc.Tests/TypeTests.cs | 9 +- csharp/test/Apache.Arrow.Adbc.Tests/Utils.cs | 122 + ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 37 + .../Drivers/Apache/ApacheTestConfiguration.cs | 37 + csharp/test/Drivers/Apache/ImpalaTests.cs | 49 + csharp/test/Drivers/Apache/SparkTests.cs | 77 + csharp/test/Drivers/Apache/SparkTypeTests.cs | 99 + csharp/test/Drivers/Apache/impalaconfig.json | 6 + csharp/test/Drivers/Apache/spark.arrow | Bin 0 -> 5876954 bytes csharp/test/Drivers/Apache/sparkconfig.json | 7 + ...Arrow.Adbc.Tests.Drivers.FlightSql.csproj} | 65 +- .../FlightSql}/ConnectionTests.cs | 251 +- .../FlightSql}/FlightSqlTestConfiguration.cs | 79 +- .../FlightSql}/TypeTests.cs | 152 +- .../FlightSql}/flightsql.arrow | Bin .../FlightSql}/flightsqlconfig.json | 16 +- 159 files changed, 42819 insertions(+), 901 deletions(-) create mode 100644 csharp/src/Apache.Arrow.Adbc/IAdbcStatement.cs create mode 100644 csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj create mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs create mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkConnection.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkDatabase.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkDriver.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkStatement.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/ChunkStream.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs rename csharp/src/{Apache.Arrow.Adbc.FlightSql/Apache.Arrow.Adbc.FlightSql.csproj => Drivers/FlightSql/Apache.Arrow.Adbc.Drivers.FlightSql.csproj} (81%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlConnection.cs (95%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlDatabase.cs (95%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlDriver.cs (94%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlParameters.cs (94%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlResult.cs (96%) rename csharp/src/{Apache.Arrow.Adbc.FlightSql => Drivers/FlightSql}/FlightSqlStatement.cs (96%) delete mode 100644 csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Utils.cs create mode 100644 csharp/test/Apache.Arrow.Adbc.Tests/TestConfiguration.cs create mode 100644 csharp/test/Apache.Arrow.Adbc.Tests/Utils.cs create mode 100644 csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj create mode 100644 csharp/test/Drivers/Apache/ApacheTestConfiguration.cs create mode 100644 csharp/test/Drivers/Apache/ImpalaTests.cs create mode 100644 csharp/test/Drivers/Apache/SparkTests.cs create mode 100644 csharp/test/Drivers/Apache/SparkTypeTests.cs create mode 100644 csharp/test/Drivers/Apache/impalaconfig.json create mode 100644 csharp/test/Drivers/Apache/spark.arrow create mode 100644 csharp/test/Drivers/Apache/sparkconfig.json rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests/Apache.Arrow.Adbc.FlightSql.Tests.csproj => Drivers/FlightSql/Apache.Arrow.Adbc.Tests.Drivers.FlightSql.csproj} (69%) rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests => Drivers/FlightSql}/ConnectionTests.cs (69%) rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests => Drivers/FlightSql}/FlightSqlTestConfiguration.cs (81%) rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests => Drivers/FlightSql}/TypeTests.cs (95%) rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests => Drivers/FlightSql}/flightsql.arrow (100%) rename csharp/test/{Apache.Arrow.Adbc.FlightSql.Tests => Drivers/FlightSql}/flightsqlconfig.json (94%) diff --git a/csharp/Apache.Arrow.Adbc.sln b/csharp/Apache.Arrow.Adbc.sln index 78bc7df8cd..936f6da3d5 100644 --- a/csharp/Apache.Arrow.Adbc.sln +++ b/csharp/Apache.Arrow.Adbc.sln @@ -9,14 +9,22 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Arrow", "Arrow", "{9ADA26E0 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow", "src\arrow\csharp\src\Apache.Arrow\Apache.Arrow.csproj", "{851FBF0D-21A8-4C04-A040-24B6AAE31D2C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.FlightSql", "src\Apache.Arrow.Adbc.FlightSql\Apache.Arrow.Adbc.FlightSql.csproj", "{93D7AD3B-D6DC-4123-9796-63DD35A4708F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests", "test\Apache.Arrow.Adbc.Tests\Apache.Arrow.Adbc.Tests.csproj", "{00C143BA-F1CF-4117-9DE6-E73DC4D208F8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.FlightSql.Tests", "test\Apache.Arrow.Adbc.FlightSql.Tests\Apache.Arrow.Adbc.FlightSql.Tests.csproj", "{23C3952F-2AB8-40B9-AD95-E06ECEB12D7A}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5BD04C26-CE52-4893-8C1A-479705195CEF}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Drivers", "Drivers", "{FEB257A0-4FD3-495E-9A47-9E1649755445}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.Apache", "src\Drivers\Apache\Apache.Arrow.Adbc.Drivers.Apache.csproj", "{20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.FlightSql", "src\Drivers\FlightSql\Apache.Arrow.Adbc.Drivers.FlightSql.csproj", "{19AA450A-2F87-49BD-9122-8AD07D4C6DCE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Drivers", "Drivers", "{C7290227-E925-47E7-8B6B-A8B171645D58}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.FlightSql", "test\Drivers\FlightSql\Apache.Arrow.Adbc.Tests.Drivers.FlightSql.csproj", "{5C15E79C-19C4-4FF4-BB82-28754FE3966B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Apache", "test\Drivers\Apache\Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj", "{4F318A2C-BDB3-4575-8280-35A39362616C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -31,18 +39,26 @@ Global {851FBF0D-21A8-4C04-A040-24B6AAE31D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU {851FBF0D-21A8-4C04-A040-24B6AAE31D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU {851FBF0D-21A8-4C04-A040-24B6AAE31D2C}.Release|Any CPU.Build.0 = Release|Any CPU - {93D7AD3B-D6DC-4123-9796-63DD35A4708F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93D7AD3B-D6DC-4123-9796-63DD35A4708F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93D7AD3B-D6DC-4123-9796-63DD35A4708F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93D7AD3B-D6DC-4123-9796-63DD35A4708F}.Release|Any CPU.Build.0 = Release|Any CPU {00C143BA-F1CF-4117-9DE6-E73DC4D208F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {00C143BA-F1CF-4117-9DE6-E73DC4D208F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {00C143BA-F1CF-4117-9DE6-E73DC4D208F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {00C143BA-F1CF-4117-9DE6-E73DC4D208F8}.Release|Any CPU.Build.0 = Release|Any CPU - {23C3952F-2AB8-40B9-AD95-E06ECEB12D7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23C3952F-2AB8-40B9-AD95-E06ECEB12D7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23C3952F-2AB8-40B9-AD95-E06ECEB12D7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23C3952F-2AB8-40B9-AD95-E06ECEB12D7A}.Release|Any CPU.Build.0 = Release|Any CPU + {20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931}.Release|Any CPU.Build.0 = Release|Any CPU + {19AA450A-2F87-49BD-9122-8AD07D4C6DCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19AA450A-2F87-49BD-9122-8AD07D4C6DCE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19AA450A-2F87-49BD-9122-8AD07D4C6DCE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19AA450A-2F87-49BD-9122-8AD07D4C6DCE}.Release|Any CPU.Build.0 = Release|Any CPU + {5C15E79C-19C4-4FF4-BB82-28754FE3966B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C15E79C-19C4-4FF4-BB82-28754FE3966B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C15E79C-19C4-4FF4-BB82-28754FE3966B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C15E79C-19C4-4FF4-BB82-28754FE3966B}.Release|Any CPU.Build.0 = Release|Any CPU + {4F318A2C-BDB3-4575-8280-35A39362616C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F318A2C-BDB3-4575-8280-35A39362616C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F318A2C-BDB3-4575-8280-35A39362616C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F318A2C-BDB3-4575-8280-35A39362616C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -50,7 +66,11 @@ Global GlobalSection(NestedProjects) = preSolution {851FBF0D-21A8-4C04-A040-24B6AAE31D2C} = {9ADA26E0-F328-4466-908A-2FA506DBDF7D} {00C143BA-F1CF-4117-9DE6-E73DC4D208F8} = {5BD04C26-CE52-4893-8C1A-479705195CEF} - {23C3952F-2AB8-40B9-AD95-E06ECEB12D7A} = {5BD04C26-CE52-4893-8C1A-479705195CEF} + {20C2A6FC-6E12-4C5B-BC8D-FFF4F5B8B931} = {FEB257A0-4FD3-495E-9A47-9E1649755445} + {19AA450A-2F87-49BD-9122-8AD07D4C6DCE} = {FEB257A0-4FD3-495E-9A47-9E1649755445} + {C7290227-E925-47E7-8B6B-A8B171645D58} = {5BD04C26-CE52-4893-8C1A-479705195CEF} + {5C15E79C-19C4-4FF4-BB82-28754FE3966B} = {C7290227-E925-47E7-8B6B-A8B171645D58} + {4F318A2C-BDB3-4575-8280-35A39362616C} = {C7290227-E925-47E7-8B6B-A8B171645D58} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4795CF16-0FDB-4BE0-9768-5CF31564DC03} diff --git a/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs b/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs index 6d491f35d3..6a6d0a1a9e 100644 --- a/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs +++ b/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs @@ -26,7 +26,7 @@ namespace Apache.Arrow.Adbc /// may be used multiple times and can be reconfigured (e.g. they can /// be reused to execute multiple different queries). /// - public abstract class AdbcStatement : IDisposable + public abstract class AdbcStatement : IAdbcStatement, IDisposable { public AdbcStatement() { diff --git a/csharp/src/Apache.Arrow.Adbc/IAdbcStatement.cs b/csharp/src/Apache.Arrow.Adbc/IAdbcStatement.cs new file mode 100644 index 0000000000..b8051432af --- /dev/null +++ b/csharp/src/Apache.Arrow.Adbc/IAdbcStatement.cs @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Threading.Tasks; + +namespace Apache.Arrow.Adbc +{ + public interface IAdbcStatement + { + string SqlQuery { get; set; } + byte[] SubstraitPlan { get; set; } + + void Bind(RecordBatch batch, Schema schema); + PartitionedResult ExecutePartitioned(); + QueryResult ExecuteQuery(); + ValueTask ExecuteQueryAsync(); + UpdateResult ExecuteUpdate(); + Task ExecuteUpdateAsync(); + Schema GetParameterSchema(); + object GetValue(IArrowArray arrowArray, Field field, int index); + void Prepare(); + } +} \ No newline at end of file diff --git a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj new file mode 100644 index 0000000000..1a1b211bcf --- /dev/null +++ b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + + + + + + + + + + + diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs new file mode 100644 index 0000000000..1e737fa8f0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; +using Apache.Arrow.Adbc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 +{ + public abstract class HiveServer2Connection : AdbcConnection + { + const string userAgent = "PowerBiExperimental/0.0"; + + protected IReadOnlyDictionary properties; + internal TTransport transport; + internal TCLIService.Client client; + internal TSessionHandle sessionHandle; + + internal HiveServer2Connection() : this(null) + { + + } + + internal HiveServer2Connection(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public void Open() + { + TProtocol protocol = CreateProtocol(); + this.transport = protocol.Transport; + this.client = new TCLIService.Client(protocol); + + var s0 = this.client.OpenSession(CreateSessionRequest()).Result; + this.sessionHandle = s0.SessionHandle; + } + + protected abstract TProtocol CreateProtocol(); + protected abstract TOpenSessionReq CreateSessionRequest(); + + public override void Dispose() + { + if (this.client != null) + { + TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); + this.client.CloseSession(r6).Wait(); + + this.transport.Close(); + this.client.Dispose(); + this.transport = null; + this.client = null; + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs new file mode 100644 index 0000000000..f1d6c18424 --- /dev/null +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs @@ -0,0 +1,123 @@ +using System; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc; +using Apache.Arrow.Types; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 +{ + public abstract class HiveServer2Statement : AdbcStatement + { + protected HiveServer2Connection connection; + protected TOperationHandle operationHandle; + + protected HiveServer2Statement(HiveServer2Connection connection) + { + this.connection = connection; + } + + protected virtual void SetStatementProperties(TExecuteStatementReq statement) + { + } + + protected void ExecuteStatement() + { + TExecuteStatementReq executeRequest = new TExecuteStatementReq(this.connection.sessionHandle, this.SqlQuery); + SetStatementProperties(executeRequest); + var executeResponse = this.connection.client.ExecuteStatement(executeRequest).Result; + if (executeResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(executeResponse.Status.ErrorMessage); + } + + this.operationHandle = executeResponse.OperationHandle; + } + + protected void PollForResponse() + { + TGetOperationStatusResp statusResponse = null; + do + { + if (statusResponse != null) { Thread.Sleep(500); } + TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); + statusResponse = this.connection.client.GetOperationStatus(request).Result; + } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); + } + + protected Schema GetSchema() + { + TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); + TGetResultSetMetadataResp response = this.connection.client.GetResultSetMetadata(request).Result; + return GetArrowSchema(response.Schema); + } + + public override void Dispose() + { + if (this.operationHandle != null) + { + TCloseOperationReq request = new TCloseOperationReq(this.operationHandle); + this.connection.client.CloseOperation(request).Wait(); + this.operationHandle = null; + } + + base.Dispose(); + } + + static Schema GetArrowSchema(TTableSchema thriftSchema) + { + Field[] fields = new Field[thriftSchema.Columns.Count]; + for (int i = 0; i < thriftSchema.Columns.Count; i++) + { + TColumnDesc column = thriftSchema.Columns[i]; + fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); + } + return new Schema(fields, null); + } + + static IArrowType GetArrowType(TTypeEntry thriftType) + { + if (thriftType.PrimitiveEntry != null) + { + return GetArrowType(thriftType.PrimitiveEntry.Type); + } + throw new InvalidOperationException(); + } + + static IArrowType GetArrowType(TTypeId thriftType) + { + switch (thriftType) + { + case TTypeId.BIGINT_TYPE: return Int64Type.Default; + case TTypeId.BINARY_TYPE: return BinaryType.Default; + case TTypeId.BOOLEAN_TYPE: return BooleanType.Default; + case TTypeId.CHAR_TYPE: return StringType.Default; + case TTypeId.DATE_TYPE: return Date32Type.Default; + case TTypeId.DOUBLE_TYPE: return DoubleType.Default; + case TTypeId.FLOAT_TYPE: return FloatType.Default; + case TTypeId.INT_TYPE: return Int32Type.Default; + case TTypeId.NULL_TYPE: return NullType.Default; + case TTypeId.SMALLINT_TYPE: return Int16Type.Default; + case TTypeId.STRING_TYPE: return StringType.Default; + case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); + case TTypeId.TINYINT_TYPE: return Int8Type.Default; + case TTypeId.VARCHAR_TYPE: return StringType.Default; + + // ??? + case TTypeId.DECIMAL_TYPE: + case TTypeId.INTERVAL_DAY_TIME_TYPE: + case TTypeId.INTERVAL_YEAR_MONTH_TYPE: + return StringType.Default; + + case TTypeId.ARRAY_TYPE: + case TTypeId.MAP_TYPE: + case TTypeId.STRUCT_TYPE: + case TTypeId.UNION_TYPE: + case TTypeId.USER_DEFINED_TYPE: + return StringType.Default; + default: + throw new NotImplementedException(); + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs new file mode 100644 index 0000000000..3ef5c4e556 --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs @@ -0,0 +1,78 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaConnection : HiveServer2Connection + { + internal ImpalaConnection(IReadOnlyDictionary properties) + : base(properties) + { + } + + protected override TProtocol CreateProtocol() + { + string hostName = properties["HostName"]; + string tmp; + int port = 21050; // default? + if (properties.TryGetValue("Port", out tmp)) + { + port = int.Parse(tmp); + } + + TConfiguration config = new TConfiguration(); + TTransport transport = new ThriftSocketTransport(hostName, port, config); + return new TBinaryProtocol(transport); + } + + protected override TOpenSessionReq CreateSessionRequest() + { + return new TOpenSessionReq(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V7) + { + CanUseMultipleCatalogs = true, + }; + } + + public override AdbcStatement CreateStatement() + { + return new ImpalaStatement(this); + } + + public override IArrowArrayStream GetInfo(List codes) + { + throw new System.NotImplementedException(); + } + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + throw new System.NotImplementedException(); + } + + public override IArrowArrayStream GetTableTypes() + { + throw new System.NotImplementedException(); + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs new file mode 100644 index 0000000000..e63fead5bb --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs @@ -0,0 +1,38 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaDatabase : AdbcDatabase + { + readonly IReadOnlyDictionary properties; + + internal ImpalaDatabase(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public override AdbcConnection Connect(IReadOnlyDictionary properties) + { + ImpalaConnection connection = new ImpalaConnection(this.properties); + connection.Open(); + return connection; + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs new file mode 100644 index 0000000000..69674f0f2d --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs @@ -0,0 +1,29 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaDriver : AdbcDriver + { + public override AdbcDatabase Open(IReadOnlyDictionary parameters) + { + return new ImpalaDatabase(parameters); + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs new file mode 100644 index 0000000000..ff89567564 --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs @@ -0,0 +1,114 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport.Client; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaStatement : HiveServer2Statement + { + internal ImpalaStatement(ImpalaConnection connection) + : base(connection) + { + } + + public override QueryResult ExecuteQuery() + { + ExecuteStatement(); + PollForResponse(); + + Schema schema = GetSchema(); + + return new QueryResult(-1, new HiveServer2Reader(this, schema)); + } + + public override UpdateResult ExecuteUpdate() + { + throw new NotImplementedException(); + } + + public override object GetValue(IArrowArray arrowArray, Field field, int index) + { + throw new NotSupportedException(); + } + + class HiveServer2Reader : IArrowArrayStream + { + ImpalaStatement statement; + Schema schema; + int counter; + + public HiveServer2Reader(ImpalaStatement statement, Schema schema) + { + this.statement = statement; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + if (this.statement == null) + { + return new ValueTask((RecordBatch)null); + } + + TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = this.statement.connection.client.FetchResults(request).Result; + + var buffer = new System.IO.MemoryStream(); + response.WriteAsync(new TBinaryProtocol(new TStreamTransport(null, buffer, new TConfiguration())), cancellationToken).Wait(); + System.IO.File.WriteAllBytes(string.Format("d:/src/buffer{0}.bin", this.counter++), buffer.ToArray()); + + RecordBatch result = new RecordBatch(this.schema, response.Results.Columns.Select(GetArray), GetArray(response.Results.Columns[0]).Length); + + if (!response.HasMoreRows) + { + this.statement = null; + } + + return new ValueTask(result); + } + + public void Dispose() + { + } + + static IArrowArray GetArray(TColumn column) + { + return + (IArrowArray)column.BoolVal?.Values ?? + (IArrowArray)column.ByteVal?.Values ?? + (IArrowArray)column.I16Val?.Values ?? + (IArrowArray)column.I32Val?.Values ?? + (IArrowArray)column.I64Val?.Values ?? + (IArrowArray)column.DoubleVal?.Values ?? + (IArrowArray)column.StringVal?.Values ?? + (IArrowArray)column.BinaryVal?.Values; + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs new file mode 100644 index 0000000000..cc9fac5141 --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -0,0 +1,117 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport.Client; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkConnection : HiveServer2Connection + { + const string userAgent = "PowerBiExperimental/0.0"; + + internal static readonly Dictionary timestampConfig = new Dictionary + { + { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } + }; + + public SparkConnection() : this(null) + { + + } + + internal SparkConnection(IReadOnlyDictionary properties) + : base(properties) + { + } + + protected override TProtocol CreateProtocol() + { + string hostName = properties["HostName"]; + string path = properties["Path"]; + string token = properties["Token"]; + + string uri = "https://" + hostName + path; + + HttpClient httpClient = new HttpClient(); + httpClient.BaseAddress = new Uri(uri); + httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent); + httpClient.DefaultRequestHeaders.AcceptEncoding.Clear(); + httpClient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("identity")); + httpClient.DefaultRequestHeaders.ExpectContinue = false; + + TConfiguration config = new TConfiguration(); + + THttpTransport transport = new THttpTransport(httpClient, config); + transport.OpenAsync(CancellationToken.None).Wait(); + return new TBinaryProtocol(transport); + } + + protected override TOpenSessionReq CreateSessionRequest() + { + return new TOpenSessionReq(TProtocolVersion.SPARK_CLI_SERVICE_PROTOCOL_V7) + { + CanUseMultipleCatalogs = true, + Configuration = timestampConfig, + }; + } + + public override AdbcStatement CreateStatement() + { + return new SparkStatement(this); + } + + public override void Dispose() + { + if (this.client != null) + { + TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); + this.client.CloseSession(r6).Wait(); + + this.transport.Close(); + this.client.Dispose(); + this.transport = null; + this.client = null; + } + } + + public override IArrowArrayStream GetInfo(List codes) + { + throw new NotImplementedException(); + } + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + throw new NotImplementedException(); + } + + public override IArrowArrayStream GetTableTypes() + { + throw new NotImplementedException(); + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs b/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs new file mode 100644 index 0000000000..0b7c99dbcf --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs @@ -0,0 +1,38 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkDatabase : AdbcDatabase + { + readonly IReadOnlyDictionary properties; + + public SparkDatabase(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public override AdbcConnection Connect(IReadOnlyDictionary properties) + { + SparkConnection connection = new SparkConnection(this.properties); + connection.Open(); + return connection; + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDriver.cs b/csharp/src/Drivers/Apache/Spark/SparkDriver.cs new file mode 100644 index 0000000000..359f654349 --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkDriver.cs @@ -0,0 +1,29 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkDriver : AdbcDriver + { + public override AdbcDatabase Open(IReadOnlyDictionary parameters) + { + return new SparkDatabase(parameters); + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs new file mode 100644 index 0000000000..358cd3362b --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -0,0 +1,129 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkStatement : HiveServer2Statement + { + internal SparkStatement(SparkConnection connection) + : base(connection) + { + } + + protected override void SetStatementProperties(TExecuteStatementReq statement) + { + statement.CanReadArrowResult = true; + statement.CanDownloadResult = true; + statement.ConfOverlay = SparkConnection.timestampConfig; + statement.UseArrowNativeTypes = new TSparkArrowTypes + { + TimestampAsArrow = true, + DecimalAsArrow = true, + ComplexTypesAsArrow = true, + IntervalTypesAsArrow = false, + }; + } + + public override QueryResult ExecuteQuery() + { + ExecuteStatement(); + PollForResponse(); + + Schema schema = GetSchema(); + + return new QueryResult(-1, new SparkReader(this, schema)); + } + + public override UpdateResult ExecuteUpdate() + { + throw new NotImplementedException(); + } + + public override object GetValue(IArrowArray arrowArray, Field field, int index) + { + throw new NotSupportedException(); + } + + sealed class SparkReader : IArrowArrayStream + { + SparkStatement statement; + Schema schema; + List batches; + int index; + IArrowReader reader; + + public SparkReader(SparkStatement statement, Schema schema) + { + this.statement = statement; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + while (true) + { + if (this.reader != null) + { + RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + if (next != null) + { + return next; + } + this.reader = null; + } + + if (this.batches != null && this.index < this.batches.Count) + { + this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); + continue; + } + + this.batches = null; + this.index = 0; + + if (this.statement == null) + { + return null; + } + + TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = await this.statement.connection.client.FetchResults(request, cancellationToken); + this.batches = response.Results.ArrowBatches; + + if (!response.HasMoreRows) + { + this.statement = null; + } + } + } + + public void Dispose() + { + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs new file mode 100644 index 0000000000..7fc33e0878 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs @@ -0,0 +1,93 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow; +using Apache.Arrow.Ipc; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + internal class ChunkStream : Stream + { + ReadOnlyMemory currentBuffer; + byte[] data; + bool first; + int position; + + public ChunkStream(Schema schema, byte[] data) + { + MemoryStream buffer = new MemoryStream(); + ArrowStreamWriter writer = new ArrowStreamWriter(buffer, schema, leaveOpen: true); + writer.WriteStart(); + writer.WriteEnd(); + writer.Dispose(); + + this.currentBuffer = new ReadOnlyMemory(buffer.GetBuffer(), 0, (int)buffer.Length - 8); + this.data = data; + this.first = true; + } + + public override bool CanRead => true; + + public override bool CanSeek => false; + + public override bool CanWrite => false; + + public override long Length => throw new NotSupportedException(); + + public override long Position { get => throw new NotSupportedException(); set => throw new NotSupportedException(); } + + public override void Flush() + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + int remaining = this.currentBuffer.Length - this.position; + if (remaining == 0) + { + if (this.first) + { + this.first = false; + } + else + { + return 0; + } + this.currentBuffer = new ReadOnlyMemory(this.data); + this.position = 0; + remaining = this.currentBuffer.Length - this.position; + } + + int bytes = Math.Min(remaining, count); + this.currentBuffer.Slice(this.position, bytes).CopyTo(new Memory(buffer, offset, bytes)); + this.position += bytes; + return bytes; + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return base.ReadAsync(buffer, offset, count, cancellationToken); + } + + public override int ReadByte() + { + return base.ReadByte(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs new file mode 100644 index 0000000000..c5b1310634 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs @@ -0,0 +1,10 @@ +using System.IO; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + public interface IPeekableTransport + { + Stream Input { get; } + Stream Output { get; } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs new file mode 100644 index 0000000000..ce59bb03fe --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs @@ -0,0 +1,155 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TArrayTypeEntry : TBase + { + + public int ObjectTypePtr { get; set; } + + public TArrayTypeEntry() + { + } + + public TArrayTypeEntry(int objectTypePtr) : this() + { + this.ObjectTypePtr = objectTypePtr; + } + + public TArrayTypeEntry DeepCopy() + { + var tmp20 = new TArrayTypeEntry(); + tmp20.ObjectTypePtr = this.ObjectTypePtr; + return tmp20; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_objectTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + ObjectTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_objectTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_objectTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp21 = new TStruct("TArrayTypeEntry"); + await oprot.WriteStructBeginAsync(tmp21, cancellationToken); + var tmp22 = new TField(); + tmp22.Name = "objectTypePtr"; + tmp22.Type = TType.I32; + tmp22.ID = 1; + await oprot.WriteFieldBeginAsync(tmp22, cancellationToken); + await oprot.WriteI32Async(ObjectTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TArrayTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(ObjectTypePtr, other.ObjectTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + ObjectTypePtr.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp23 = new StringBuilder("TArrayTypeEntry("); + tmp23.Append(", ObjectTypePtr: "); + ObjectTypePtr.ToString(tmp23); + tmp23.Append(')'); + return tmp23.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs new file mode 100644 index 0000000000..5aee28cf97 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs @@ -0,0 +1,234 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Types; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBinaryColumn : TBase + { + + public BinaryArray Values { get; set; } + + public TBinaryColumn() + { + } + + public TBinaryColumn(BinaryArray values) : this() + { + this.Values = values; + } + + public TBinaryColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.Builder values = null; + byte[] nulls = null; + byte[] offsetBuffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + byte[] preAllocatedBuffer = new byte[65536]; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list196 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list196.Count; + + values = new ArrowBuffer.Builder(); + int offset = 0; + offsetBuffer = new byte[(length + 1) * 4]; + var memory = offsetBuffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); + + for(int _i197 = 0; _i197 < length; ++_i197) + { + typedMemory.Span[_i197] = offset; + var size = await iprot.ReadI32Async(cancellationToken); + offset += size; + + iprot.Transport.CheckReadBytesAvailable(size); + + byte[] tmp; + if (size <= preAllocatedBuffer.Length) + { + tmp = preAllocatedBuffer; + } + else + { + tmp = new byte[size]; + } + + await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); + values.Append(tmp.AsMemory(0, size).Span); + } + typedMemory.Span[length] = offset; + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new BinaryArray(BinaryType.Default, length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp199 = new TStruct("TBinaryColumn"); + await oprot.WriteStructBeginAsync(tmp199, cancellationToken); + var tmp200 = new TField(); + if((Values != null)) + { + tmp200.Name = "values"; + tmp200.Type = TType.List; + tmp200.ID = 1; + await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans + byte[] value = new byte[Values.GetValueLength(i)]; + Values.GetBytes(i).CopyTo(value); + await oprot.WriteBinaryAsync(value, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp200.Name = "nulls"; + tmp200.Type = TType.String; + tmp200.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBinaryColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Values != null)) + { + for (int i = 0; i < Values.Length; i++) + { + hashcode = (hashcode * 397) + Values.GetBytes(i).GetHashCode(); + } + } + } + return hashcode; + } + + public override string ToString() + { + var tmp202 = new StringBuilder("TBinaryColumn("); + if((Values != null)) + { + tmp202.Append(", Values: "); + Values.ToString(tmp202); + } + tmp202.Append(')'); + return tmp202.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs new file mode 100644 index 0000000000..6d284c0f31 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs @@ -0,0 +1,198 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBoolColumn : TBase + { + + public BooleanArray Values { get; set; } + + public TBoolColumn() + { + } + + public TBoolColumn(BooleanArray values) : this() + { + this.Values = values; + } + + public TBoolColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.BitmapBuilder values = null; + byte[] nulls = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list133 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list133.Count; + + byte[] buffer = new byte[length]; + var memory = buffer.AsMemory(); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + + values = new ArrowBuffer.BitmapBuilder(length); + for (int _i134 = 0; _i134 < length; ++_i134) + { + values.Append(buffer[_i134] == 1); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new BooleanArray(values.Build(), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp136 = new TStruct("TBoolColumn"); + await oprot.WriteStructBeginAsync(tmp136, cancellationToken); + var tmp137 = new TField(); + if((Values != null)) + { + tmp137.Name = "values"; + tmp137.Type = TType.List; + tmp137.ID = 1; + await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Bool, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + bool _iter138 = Values.GetValue(i) ?? false; + await oprot.WriteBoolAsync(_iter138, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp137.Name = "nulls"; + tmp137.Type = TType.String; + tmp137.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBoolColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp139 = new StringBuilder("TBoolColumn("); + if((Values != null)) + { + tmp139.Append(", Values: "); + Values.ToString(tmp139); + } + tmp139.Append(')'); + return tmp139.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs new file mode 100644 index 0000000000..ed39088e5c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBoolValue : TBase + { + private bool _value; + + public bool Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TBoolValue() + { + } + + public TBoolValue DeepCopy() + { + var tmp83 = new TBoolValue(); + if(__isset.@value) + { + tmp83.Value = this.Value; + } + tmp83.__isset.@value = this.__isset.@value; + return tmp83; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + Value = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp84 = new TStruct("TBoolValue"); + await oprot.WriteStructBeginAsync(tmp84, cancellationToken); + var tmp85 = new TField(); + if(__isset.@value) + { + tmp85.Name = "value"; + tmp85.Type = TType.Bool; + tmp85.ID = 1; + await oprot.WriteFieldBeginAsync(tmp85, cancellationToken); + await oprot.WriteBoolAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBoolValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp86 = new StringBuilder("TBoolValue("); + int tmp87 = 0; + if(__isset.@value) + { + if(0 < tmp87++) { tmp86.Append(", "); } + tmp86.Append("Value: "); + Value.ToString(tmp86); + } + tmp86.Append(')'); + return tmp86.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs new file mode 100644 index 0000000000..ce579c37a7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs @@ -0,0 +1,196 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TByteColumn : TBase + { + + public Int8Array Values { get; set; } + + public TByteColumn() + { + } + + public TByteColumn(Int8Array values) : this() + { + this.Values = values; + } + + public TByteColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list142 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list142.Count; + + buffer = new byte[length]; + var memory = buffer.AsMemory(); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int8Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp145 = new TStruct("TByteColumn"); + await oprot.WriteStructBeginAsync(tmp145, cancellationToken); + var tmp146 = new TField(); + if((Values != null)) + { + tmp146.Name = "values"; + tmp146.Type = TType.List; + tmp146.ID = 1; + await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Byte, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + sbyte _iter147 = Values.GetValue(i) ?? 0; + await oprot.WriteByteAsync(_iter147, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp146.Name = "nulls"; + tmp146.Type = TType.String; + tmp146.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TByteColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp148 = new StringBuilder("TByteColumn("); + if((Values != null)) + { + tmp148.Append(", Values: "); + Values.ToString(tmp148); + } + tmp148.Append(')'); + return tmp148.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs new file mode 100644 index 0000000000..d9b15e8ee1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TByteValue : TBase + { + private sbyte _value; + + public sbyte Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TByteValue() + { + } + + public TByteValue DeepCopy() + { + var tmp88 = new TByteValue(); + if(__isset.@value) + { + tmp88.Value = this.Value; + } + tmp88.__isset.@value = this.__isset.@value; + return tmp88; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Byte) + { + Value = await iprot.ReadByteAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp89 = new TStruct("TByteValue"); + await oprot.WriteStructBeginAsync(tmp89, cancellationToken); + var tmp90 = new TField(); + if(__isset.@value) + { + tmp90.Name = "value"; + tmp90.Type = TType.Byte; + tmp90.ID = 1; + await oprot.WriteFieldBeginAsync(tmp90, cancellationToken); + await oprot.WriteByteAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TByteValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp91 = new StringBuilder("TByteValue("); + int tmp92 = 0; + if(__isset.@value) + { + if(0 < tmp92++) { tmp91.Append(", "); } + tmp91.Append("Value: "); + Value.ToString(tmp91); + } + tmp91.Append(')'); + return tmp91.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs new file mode 100644 index 0000000000..a62f77f790 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs @@ -0,0 +1,9212 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public partial class TCLIService + { + public interface IAsync + { + global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default); + + } + + + public class Client : TBaseClient, IDisposable, IAsync + { + public Client(TProtocol protocol) : this(protocol, protocol) + { + } + + public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputProtocol, outputProtocol) + { + } + + public async global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) + { + await send_OpenSession(req, cancellationToken); + return await recv_OpenSession(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Call, SeqId), cancellationToken); + + var tmp655 = new InternalStructs.OpenSession_args() { + Req = req, + }; + + await tmp655.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_OpenSession(CancellationToken cancellationToken = default) + { + + var tmp656 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp656.Type == TMessageType.Exception) + { + var tmp657 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp657; + } + + var tmp658 = new InternalStructs.OpenSession_result(); + await tmp658.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp658.__isset.success) + { + return tmp658.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "OpenSession failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) + { + await send_CloseSession(req, cancellationToken); + return await recv_CloseSession(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Call, SeqId), cancellationToken); + + var tmp659 = new InternalStructs.CloseSession_args() { + Req = req, + }; + + await tmp659.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CloseSession(CancellationToken cancellationToken = default) + { + + var tmp660 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp660.Type == TMessageType.Exception) + { + var tmp661 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp661; + } + + var tmp662 = new InternalStructs.CloseSession_result(); + await tmp662.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp662.__isset.success) + { + return tmp662.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseSession failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) + { + await send_GetInfo(req, cancellationToken); + return await recv_GetInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp663 = new InternalStructs.GetInfo_args() { + Req = req, + }; + + await tmp663.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetInfo(CancellationToken cancellationToken = default) + { + + var tmp664 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp664.Type == TMessageType.Exception) + { + var tmp665 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp665; + } + + var tmp666 = new InternalStructs.GetInfo_result(); + await tmp666.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp666.__isset.success) + { + return tmp666.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) + { + await send_ExecuteStatement(req, cancellationToken); + return await recv_ExecuteStatement(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Call, SeqId), cancellationToken); + + var tmp667 = new InternalStructs.ExecuteStatement_args() { + Req = req, + }; + + await tmp667.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_ExecuteStatement(CancellationToken cancellationToken = default) + { + + var tmp668 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp668.Type == TMessageType.Exception) + { + var tmp669 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp669; + } + + var tmp670 = new InternalStructs.ExecuteStatement_result(); + await tmp670.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp670.__isset.success) + { + return tmp670.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "ExecuteStatement failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) + { + await send_GetTypeInfo(req, cancellationToken); + return await recv_GetTypeInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp671 = new InternalStructs.GetTypeInfo_args() { + Req = req, + }; + + await tmp671.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTypeInfo(CancellationToken cancellationToken = default) + { + + var tmp672 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp672.Type == TMessageType.Exception) + { + var tmp673 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp673; + } + + var tmp674 = new InternalStructs.GetTypeInfo_result(); + await tmp674.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp674.__isset.success) + { + return tmp674.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTypeInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) + { + await send_GetCatalogs(req, cancellationToken); + return await recv_GetCatalogs(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Call, SeqId), cancellationToken); + + var tmp675 = new InternalStructs.GetCatalogs_args() { + Req = req, + }; + + await tmp675.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetCatalogs(CancellationToken cancellationToken = default) + { + + var tmp676 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp676.Type == TMessageType.Exception) + { + var tmp677 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp677; + } + + var tmp678 = new InternalStructs.GetCatalogs_result(); + await tmp678.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp678.__isset.success) + { + return tmp678.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCatalogs failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) + { + await send_GetSchemas(req, cancellationToken); + return await recv_GetSchemas(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Call, SeqId), cancellationToken); + + var tmp679 = new InternalStructs.GetSchemas_args() { + Req = req, + }; + + await tmp679.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetSchemas(CancellationToken cancellationToken = default) + { + + var tmp680 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp680.Type == TMessageType.Exception) + { + var tmp681 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp681; + } + + var tmp682 = new InternalStructs.GetSchemas_result(); + await tmp682.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp682.__isset.success) + { + return tmp682.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetSchemas failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) + { + await send_GetTables(req, cancellationToken); + return await recv_GetTables(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Call, SeqId), cancellationToken); + + var tmp683 = new InternalStructs.GetTables_args() { + Req = req, + }; + + await tmp683.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTables(CancellationToken cancellationToken = default) + { + + var tmp684 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp684.Type == TMessageType.Exception) + { + var tmp685 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp685; + } + + var tmp686 = new InternalStructs.GetTables_result(); + await tmp686.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp686.__isset.success) + { + return tmp686.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTables failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) + { + await send_GetTableTypes(req, cancellationToken); + return await recv_GetTableTypes(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Call, SeqId), cancellationToken); + + var tmp687 = new InternalStructs.GetTableTypes_args() { + Req = req, + }; + + await tmp687.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTableTypes(CancellationToken cancellationToken = default) + { + + var tmp688 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp688.Type == TMessageType.Exception) + { + var tmp689 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp689; + } + + var tmp690 = new InternalStructs.GetTableTypes_result(); + await tmp690.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp690.__isset.success) + { + return tmp690.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTableTypes failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) + { + await send_GetColumns(req, cancellationToken); + return await recv_GetColumns(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Call, SeqId), cancellationToken); + + var tmp691 = new InternalStructs.GetColumns_args() { + Req = req, + }; + + await tmp691.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetColumns(CancellationToken cancellationToken = default) + { + + var tmp692 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp692.Type == TMessageType.Exception) + { + var tmp693 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp693; + } + + var tmp694 = new InternalStructs.GetColumns_result(); + await tmp694.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp694.__isset.success) + { + return tmp694.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetColumns failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) + { + await send_GetFunctions(req, cancellationToken); + return await recv_GetFunctions(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Call, SeqId), cancellationToken); + + var tmp695 = new InternalStructs.GetFunctions_args() { + Req = req, + }; + + await tmp695.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetFunctions(CancellationToken cancellationToken = default) + { + + var tmp696 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp696.Type == TMessageType.Exception) + { + var tmp697 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp697; + } + + var tmp698 = new InternalStructs.GetFunctions_result(); + await tmp698.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp698.__isset.success) + { + return tmp698.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetFunctions failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) + { + await send_GetPrimaryKeys(req, cancellationToken); + return await recv_GetPrimaryKeys(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Call, SeqId), cancellationToken); + + var tmp699 = new InternalStructs.GetPrimaryKeys_args() { + Req = req, + }; + + await tmp699.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetPrimaryKeys(CancellationToken cancellationToken = default) + { + + var tmp700 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp700.Type == TMessageType.Exception) + { + var tmp701 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp701; + } + + var tmp702 = new InternalStructs.GetPrimaryKeys_result(); + await tmp702.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp702.__isset.success) + { + return tmp702.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetPrimaryKeys failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) + { + await send_GetCrossReference(req, cancellationToken); + return await recv_GetCrossReference(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Call, SeqId), cancellationToken); + + var tmp703 = new InternalStructs.GetCrossReference_args() { + Req = req, + }; + + await tmp703.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetCrossReference(CancellationToken cancellationToken = default) + { + + var tmp704 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp704.Type == TMessageType.Exception) + { + var tmp705 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp705; + } + + var tmp706 = new InternalStructs.GetCrossReference_result(); + await tmp706.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp706.__isset.success) + { + return tmp706.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCrossReference failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) + { + await send_GetOperationStatus(req, cancellationToken); + return await recv_GetOperationStatus(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Call, SeqId), cancellationToken); + + var tmp707 = new InternalStructs.GetOperationStatus_args() { + Req = req, + }; + + await tmp707.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetOperationStatus(CancellationToken cancellationToken = default) + { + + var tmp708 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp708.Type == TMessageType.Exception) + { + var tmp709 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp709; + } + + var tmp710 = new InternalStructs.GetOperationStatus_result(); + await tmp710.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp710.__isset.success) + { + return tmp710.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetOperationStatus failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) + { + await send_CancelOperation(req, cancellationToken); + return await recv_CancelOperation(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Call, SeqId), cancellationToken); + + var tmp711 = new InternalStructs.CancelOperation_args() { + Req = req, + }; + + await tmp711.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CancelOperation(CancellationToken cancellationToken = default) + { + + var tmp712 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp712.Type == TMessageType.Exception) + { + var tmp713 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp713; + } + + var tmp714 = new InternalStructs.CancelOperation_result(); + await tmp714.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp714.__isset.success) + { + return tmp714.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelOperation failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) + { + await send_CloseOperation(req, cancellationToken); + return await recv_CloseOperation(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Call, SeqId), cancellationToken); + + var tmp715 = new InternalStructs.CloseOperation_args() { + Req = req, + }; + + await tmp715.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CloseOperation(CancellationToken cancellationToken = default) + { + + var tmp716 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp716.Type == TMessageType.Exception) + { + var tmp717 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp717; + } + + var tmp718 = new InternalStructs.CloseOperation_result(); + await tmp718.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp718.__isset.success) + { + return tmp718.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseOperation failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) + { + await send_GetResultSetMetadata(req, cancellationToken); + return await recv_GetResultSetMetadata(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Call, SeqId), cancellationToken); + + var tmp719 = new InternalStructs.GetResultSetMetadata_args() { + Req = req, + }; + + await tmp719.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetResultSetMetadata(CancellationToken cancellationToken = default) + { + + var tmp720 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp720.Type == TMessageType.Exception) + { + var tmp721 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp721; + } + + var tmp722 = new InternalStructs.GetResultSetMetadata_result(); + await tmp722.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp722.__isset.success) + { + return tmp722.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetResultSetMetadata failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) + { + await send_FetchResults(req, cancellationToken); + return await recv_FetchResults(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Call, SeqId), cancellationToken); + + var tmp723 = new InternalStructs.FetchResults_args() { + Req = req, + }; + + await tmp723.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_FetchResults(CancellationToken cancellationToken = default) + { + + var tmp724 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp724.Type == TMessageType.Exception) + { + var tmp725 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp725; + } + + var tmp726 = new InternalStructs.FetchResults_result(); + await tmp726.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp726.__isset.success) + { + return tmp726.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "FetchResults failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_GetDelegationToken(req, cancellationToken); + return await recv_GetDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp727 = new InternalStructs.GetDelegationToken_args() { + Req = req, + }; + + await tmp727.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp728 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp728.Type == TMessageType.Exception) + { + var tmp729 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp729; + } + + var tmp730 = new InternalStructs.GetDelegationToken_result(); + await tmp730.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp730.__isset.success) + { + return tmp730.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_CancelDelegationToken(req, cancellationToken); + return await recv_CancelDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp731 = new InternalStructs.CancelDelegationToken_args() { + Req = req, + }; + + await tmp731.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CancelDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp732 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp732.Type == TMessageType.Exception) + { + var tmp733 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp733; + } + + var tmp734 = new InternalStructs.CancelDelegationToken_result(); + await tmp734.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp734.__isset.success) + { + return tmp734.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_RenewDelegationToken(req, cancellationToken); + return await recv_RenewDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp735 = new InternalStructs.RenewDelegationToken_args() { + Req = req, + }; + + await tmp735.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_RenewDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp736 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp736.Type == TMessageType.Exception) + { + var tmp737 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp737; + } + + var tmp738 = new InternalStructs.RenewDelegationToken_result(); + await tmp738.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp738.__isset.success) + { + return tmp738.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "RenewDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) + { + await send_GetQueryId(req, cancellationToken); + return await recv_GetQueryId(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Call, SeqId), cancellationToken); + + var tmp739 = new InternalStructs.GetQueryId_args() { + Req = req, + }; + + await tmp739.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetQueryId(CancellationToken cancellationToken = default) + { + + var tmp740 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp740.Type == TMessageType.Exception) + { + var tmp741 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp741; + } + + var tmp742 = new InternalStructs.GetQueryId_result(); + await tmp742.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp742.__isset.success) + { + return tmp742.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetQueryId failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) + { + await send_SetClientInfo(req, cancellationToken); + return await recv_SetClientInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp743 = new InternalStructs.SetClientInfo_args() { + Req = req, + }; + + await tmp743.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_SetClientInfo(CancellationToken cancellationToken = default) + { + + var tmp744 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp744.Type == TMessageType.Exception) + { + var tmp745 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp745; + } + + var tmp746 = new InternalStructs.SetClientInfo_result(); + await tmp746.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp746.__isset.success) + { + return tmp746.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "SetClientInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) + { + await send_UploadData(req, cancellationToken); + return await recv_UploadData(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Call, SeqId), cancellationToken); + + var tmp747 = new InternalStructs.UploadData_args() { + Req = req, + }; + + await tmp747.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_UploadData(CancellationToken cancellationToken = default) + { + + var tmp748 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp748.Type == TMessageType.Exception) + { + var tmp749 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp749; + } + + var tmp750 = new InternalStructs.UploadData_result(); + await tmp750.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp750.__isset.success) + { + return tmp750.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "UploadData failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) + { + await send_DownloadData(req, cancellationToken); + return await recv_DownloadData(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Call, SeqId), cancellationToken); + + var tmp751 = new InternalStructs.DownloadData_args() { + Req = req, + }; + + await tmp751.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_DownloadData(CancellationToken cancellationToken = default) + { + + var tmp752 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp752.Type == TMessageType.Exception) + { + var tmp753 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp753; + } + + var tmp754 = new InternalStructs.DownloadData_result(); + await tmp754.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp754.__isset.success) + { + return tmp754.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "DownloadData failed: unknown result"); + } + + } + + public class AsyncProcessor : ITAsyncProcessor + { + private readonly IAsync _iAsync; + private readonly ILogger _logger; + + public AsyncProcessor(IAsync iAsync, ILogger logger = default) + { + _iAsync = iAsync ?? throw new ArgumentNullException(nameof(iAsync)); + _logger = logger; + processMap_["OpenSession"] = OpenSession_ProcessAsync; + processMap_["CloseSession"] = CloseSession_ProcessAsync; + processMap_["GetInfo"] = GetInfo_ProcessAsync; + processMap_["ExecuteStatement"] = ExecuteStatement_ProcessAsync; + processMap_["GetTypeInfo"] = GetTypeInfo_ProcessAsync; + processMap_["GetCatalogs"] = GetCatalogs_ProcessAsync; + processMap_["GetSchemas"] = GetSchemas_ProcessAsync; + processMap_["GetTables"] = GetTables_ProcessAsync; + processMap_["GetTableTypes"] = GetTableTypes_ProcessAsync; + processMap_["GetColumns"] = GetColumns_ProcessAsync; + processMap_["GetFunctions"] = GetFunctions_ProcessAsync; + processMap_["GetPrimaryKeys"] = GetPrimaryKeys_ProcessAsync; + processMap_["GetCrossReference"] = GetCrossReference_ProcessAsync; + processMap_["GetOperationStatus"] = GetOperationStatus_ProcessAsync; + processMap_["CancelOperation"] = CancelOperation_ProcessAsync; + processMap_["CloseOperation"] = CloseOperation_ProcessAsync; + processMap_["GetResultSetMetadata"] = GetResultSetMetadata_ProcessAsync; + processMap_["FetchResults"] = FetchResults_ProcessAsync; + processMap_["GetDelegationToken"] = GetDelegationToken_ProcessAsync; + processMap_["CancelDelegationToken"] = CancelDelegationToken_ProcessAsync; + processMap_["RenewDelegationToken"] = RenewDelegationToken_ProcessAsync; + processMap_["GetQueryId"] = GetQueryId_ProcessAsync; + processMap_["SetClientInfo"] = SetClientInfo_ProcessAsync; + processMap_["UploadData"] = UploadData_ProcessAsync; + processMap_["DownloadData"] = DownloadData_ProcessAsync; + } + + protected delegate global::System.Threading.Tasks.Task ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken); + protected Dictionary processMap_ = new Dictionary(); + + public async Task ProcessAsync(TProtocol iprot, TProtocol oprot) + { + return await ProcessAsync(iprot, oprot, CancellationToken.None); + } + + public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + try + { + var msg = await iprot.ReadMessageBeginAsync(cancellationToken); + + processMap_.TryGetValue(msg.Name, out var fn); + + if (fn == null) + { + await TProtocolUtil.SkipAsync(iprot, TType.Struct, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var x = new TApplicationException (TApplicationException.ExceptionType.UnknownMethod, "Invalid method name: '" + msg.Name + "'"); + await oprot.WriteMessageBeginAsync(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID), cancellationToken); + await x.WriteAsync(oprot, cancellationToken); + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + return true; + } + + await fn(msg.SeqID, iprot, oprot, cancellationToken); + + } + catch (IOException) + { + return false; + } + + return true; + } + + public async global::System.Threading.Tasks.Task OpenSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp755 = new InternalStructs.OpenSession_args(); + await tmp755.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp756 = new InternalStructs.OpenSession_result(); + try + { + tmp756.Success = await _iAsync.OpenSession(tmp755.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Reply, seqid), cancellationToken); + await tmp756.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp757) + { + var tmp758 = $"Error occurred in {GetType().FullName}: {tmp757.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp757, tmp758); + else + Console.Error.WriteLine(tmp758); + var tmp759 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Exception, seqid), cancellationToken); + await tmp759.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CloseSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp760 = new InternalStructs.CloseSession_args(); + await tmp760.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp761 = new InternalStructs.CloseSession_result(); + try + { + tmp761.Success = await _iAsync.CloseSession(tmp760.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Reply, seqid), cancellationToken); + await tmp761.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp762) + { + var tmp763 = $"Error occurred in {GetType().FullName}: {tmp762.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp762, tmp763); + else + Console.Error.WriteLine(tmp763); + var tmp764 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Exception, seqid), cancellationToken); + await tmp764.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp765 = new InternalStructs.GetInfo_args(); + await tmp765.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp766 = new InternalStructs.GetInfo_result(); + try + { + tmp766.Success = await _iAsync.GetInfo(tmp765.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp766.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp767) + { + var tmp768 = $"Error occurred in {GetType().FullName}: {tmp767.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp767, tmp768); + else + Console.Error.WriteLine(tmp768); + var tmp769 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp769.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task ExecuteStatement_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp770 = new InternalStructs.ExecuteStatement_args(); + await tmp770.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp771 = new InternalStructs.ExecuteStatement_result(); + try + { + tmp771.Success = await _iAsync.ExecuteStatement(tmp770.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Reply, seqid), cancellationToken); + await tmp771.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp772) + { + var tmp773 = $"Error occurred in {GetType().FullName}: {tmp772.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp772, tmp773); + else + Console.Error.WriteLine(tmp773); + var tmp774 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Exception, seqid), cancellationToken); + await tmp774.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTypeInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp775 = new InternalStructs.GetTypeInfo_args(); + await tmp775.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp776 = new InternalStructs.GetTypeInfo_result(); + try + { + tmp776.Success = await _iAsync.GetTypeInfo(tmp775.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp776.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp777) + { + var tmp778 = $"Error occurred in {GetType().FullName}: {tmp777.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp777, tmp778); + else + Console.Error.WriteLine(tmp778); + var tmp779 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp779.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetCatalogs_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp780 = new InternalStructs.GetCatalogs_args(); + await tmp780.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp781 = new InternalStructs.GetCatalogs_result(); + try + { + tmp781.Success = await _iAsync.GetCatalogs(tmp780.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Reply, seqid), cancellationToken); + await tmp781.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp782) + { + var tmp783 = $"Error occurred in {GetType().FullName}: {tmp782.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp782, tmp783); + else + Console.Error.WriteLine(tmp783); + var tmp784 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Exception, seqid), cancellationToken); + await tmp784.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetSchemas_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp785 = new InternalStructs.GetSchemas_args(); + await tmp785.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp786 = new InternalStructs.GetSchemas_result(); + try + { + tmp786.Success = await _iAsync.GetSchemas(tmp785.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Reply, seqid), cancellationToken); + await tmp786.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp787) + { + var tmp788 = $"Error occurred in {GetType().FullName}: {tmp787.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp787, tmp788); + else + Console.Error.WriteLine(tmp788); + var tmp789 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Exception, seqid), cancellationToken); + await tmp789.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTables_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp790 = new InternalStructs.GetTables_args(); + await tmp790.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp791 = new InternalStructs.GetTables_result(); + try + { + tmp791.Success = await _iAsync.GetTables(tmp790.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Reply, seqid), cancellationToken); + await tmp791.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp792) + { + var tmp793 = $"Error occurred in {GetType().FullName}: {tmp792.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp792, tmp793); + else + Console.Error.WriteLine(tmp793); + var tmp794 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Exception, seqid), cancellationToken); + await tmp794.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTableTypes_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp795 = new InternalStructs.GetTableTypes_args(); + await tmp795.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp796 = new InternalStructs.GetTableTypes_result(); + try + { + tmp796.Success = await _iAsync.GetTableTypes(tmp795.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Reply, seqid), cancellationToken); + await tmp796.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp797) + { + var tmp798 = $"Error occurred in {GetType().FullName}: {tmp797.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp797, tmp798); + else + Console.Error.WriteLine(tmp798); + var tmp799 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Exception, seqid), cancellationToken); + await tmp799.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetColumns_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp800 = new InternalStructs.GetColumns_args(); + await tmp800.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp801 = new InternalStructs.GetColumns_result(); + try + { + tmp801.Success = await _iAsync.GetColumns(tmp800.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Reply, seqid), cancellationToken); + await tmp801.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp802) + { + var tmp803 = $"Error occurred in {GetType().FullName}: {tmp802.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp802, tmp803); + else + Console.Error.WriteLine(tmp803); + var tmp804 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Exception, seqid), cancellationToken); + await tmp804.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetFunctions_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp805 = new InternalStructs.GetFunctions_args(); + await tmp805.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp806 = new InternalStructs.GetFunctions_result(); + try + { + tmp806.Success = await _iAsync.GetFunctions(tmp805.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Reply, seqid), cancellationToken); + await tmp806.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp807) + { + var tmp808 = $"Error occurred in {GetType().FullName}: {tmp807.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp807, tmp808); + else + Console.Error.WriteLine(tmp808); + var tmp809 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Exception, seqid), cancellationToken); + await tmp809.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetPrimaryKeys_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp810 = new InternalStructs.GetPrimaryKeys_args(); + await tmp810.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp811 = new InternalStructs.GetPrimaryKeys_result(); + try + { + tmp811.Success = await _iAsync.GetPrimaryKeys(tmp810.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Reply, seqid), cancellationToken); + await tmp811.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp812) + { + var tmp813 = $"Error occurred in {GetType().FullName}: {tmp812.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp812, tmp813); + else + Console.Error.WriteLine(tmp813); + var tmp814 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Exception, seqid), cancellationToken); + await tmp814.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetCrossReference_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp815 = new InternalStructs.GetCrossReference_args(); + await tmp815.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp816 = new InternalStructs.GetCrossReference_result(); + try + { + tmp816.Success = await _iAsync.GetCrossReference(tmp815.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Reply, seqid), cancellationToken); + await tmp816.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp817) + { + var tmp818 = $"Error occurred in {GetType().FullName}: {tmp817.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp817, tmp818); + else + Console.Error.WriteLine(tmp818); + var tmp819 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Exception, seqid), cancellationToken); + await tmp819.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetOperationStatus_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp820 = new InternalStructs.GetOperationStatus_args(); + await tmp820.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp821 = new InternalStructs.GetOperationStatus_result(); + try + { + tmp821.Success = await _iAsync.GetOperationStatus(tmp820.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Reply, seqid), cancellationToken); + await tmp821.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp822) + { + var tmp823 = $"Error occurred in {GetType().FullName}: {tmp822.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp822, tmp823); + else + Console.Error.WriteLine(tmp823); + var tmp824 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Exception, seqid), cancellationToken); + await tmp824.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CancelOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp825 = new InternalStructs.CancelOperation_args(); + await tmp825.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp826 = new InternalStructs.CancelOperation_result(); + try + { + tmp826.Success = await _iAsync.CancelOperation(tmp825.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Reply, seqid), cancellationToken); + await tmp826.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp827) + { + var tmp828 = $"Error occurred in {GetType().FullName}: {tmp827.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp827, tmp828); + else + Console.Error.WriteLine(tmp828); + var tmp829 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Exception, seqid), cancellationToken); + await tmp829.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CloseOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp830 = new InternalStructs.CloseOperation_args(); + await tmp830.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp831 = new InternalStructs.CloseOperation_result(); + try + { + tmp831.Success = await _iAsync.CloseOperation(tmp830.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Reply, seqid), cancellationToken); + await tmp831.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp832) + { + var tmp833 = $"Error occurred in {GetType().FullName}: {tmp832.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp832, tmp833); + else + Console.Error.WriteLine(tmp833); + var tmp834 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Exception, seqid), cancellationToken); + await tmp834.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetResultSetMetadata_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp835 = new InternalStructs.GetResultSetMetadata_args(); + await tmp835.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp836 = new InternalStructs.GetResultSetMetadata_result(); + try + { + tmp836.Success = await _iAsync.GetResultSetMetadata(tmp835.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Reply, seqid), cancellationToken); + await tmp836.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp837) + { + var tmp838 = $"Error occurred in {GetType().FullName}: {tmp837.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp837, tmp838); + else + Console.Error.WriteLine(tmp838); + var tmp839 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Exception, seqid), cancellationToken); + await tmp839.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task FetchResults_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp840 = new InternalStructs.FetchResults_args(); + await tmp840.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp841 = new InternalStructs.FetchResults_result(); + try + { + tmp841.Success = await _iAsync.FetchResults(tmp840.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Reply, seqid), cancellationToken); + await tmp841.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp842) + { + var tmp843 = $"Error occurred in {GetType().FullName}: {tmp842.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp842, tmp843); + else + Console.Error.WriteLine(tmp843); + var tmp844 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Exception, seqid), cancellationToken); + await tmp844.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp845 = new InternalStructs.GetDelegationToken_args(); + await tmp845.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp846 = new InternalStructs.GetDelegationToken_result(); + try + { + tmp846.Success = await _iAsync.GetDelegationToken(tmp845.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp846.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp847) + { + var tmp848 = $"Error occurred in {GetType().FullName}: {tmp847.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp847, tmp848); + else + Console.Error.WriteLine(tmp848); + var tmp849 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp849.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CancelDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp850 = new InternalStructs.CancelDelegationToken_args(); + await tmp850.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp851 = new InternalStructs.CancelDelegationToken_result(); + try + { + tmp851.Success = await _iAsync.CancelDelegationToken(tmp850.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp851.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp852) + { + var tmp853 = $"Error occurred in {GetType().FullName}: {tmp852.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp852, tmp853); + else + Console.Error.WriteLine(tmp853); + var tmp854 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp854.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task RenewDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp855 = new InternalStructs.RenewDelegationToken_args(); + await tmp855.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp856 = new InternalStructs.RenewDelegationToken_result(); + try + { + tmp856.Success = await _iAsync.RenewDelegationToken(tmp855.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp856.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp857) + { + var tmp858 = $"Error occurred in {GetType().FullName}: {tmp857.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp857, tmp858); + else + Console.Error.WriteLine(tmp858); + var tmp859 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp859.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetQueryId_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp860 = new InternalStructs.GetQueryId_args(); + await tmp860.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp861 = new InternalStructs.GetQueryId_result(); + try + { + tmp861.Success = await _iAsync.GetQueryId(tmp860.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Reply, seqid), cancellationToken); + await tmp861.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp862) + { + var tmp863 = $"Error occurred in {GetType().FullName}: {tmp862.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp862, tmp863); + else + Console.Error.WriteLine(tmp863); + var tmp864 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Exception, seqid), cancellationToken); + await tmp864.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task SetClientInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp865 = new InternalStructs.SetClientInfo_args(); + await tmp865.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp866 = new InternalStructs.SetClientInfo_result(); + try + { + tmp866.Success = await _iAsync.SetClientInfo(tmp865.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp866.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp867) + { + var tmp868 = $"Error occurred in {GetType().FullName}: {tmp867.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp867, tmp868); + else + Console.Error.WriteLine(tmp868); + var tmp869 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp869.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task UploadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp870 = new InternalStructs.UploadData_args(); + await tmp870.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp871 = new InternalStructs.UploadData_result(); + try + { + tmp871.Success = await _iAsync.UploadData(tmp870.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Reply, seqid), cancellationToken); + await tmp871.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp872) + { + var tmp873 = $"Error occurred in {GetType().FullName}: {tmp872.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp872, tmp873); + else + Console.Error.WriteLine(tmp873); + var tmp874 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Exception, seqid), cancellationToken); + await tmp874.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task DownloadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp875 = new InternalStructs.DownloadData_args(); + await tmp875.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp876 = new InternalStructs.DownloadData_result(); + try + { + tmp876.Success = await _iAsync.DownloadData(tmp875.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Reply, seqid), cancellationToken); + await tmp876.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp877) + { + var tmp878 = $"Error occurred in {GetType().FullName}: {tmp877.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp877, tmp878); + else + Console.Error.WriteLine(tmp878); + var tmp879 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Exception, seqid), cancellationToken); + await tmp879.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + } + + public class InternalStructs + { + + public partial class OpenSession_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public OpenSession_args() + { + } + + public OpenSession_args DeepCopy() + { + var tmp880 = new OpenSession_args(); + if((Req != null) && __isset.req) + { + tmp880.Req = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq)this.Req.DeepCopy(); + } + tmp880.__isset.req = this.__isset.req; + return tmp880; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp881 = new TStruct("OpenSession_args"); + await oprot.WriteStructBeginAsync(tmp881, cancellationToken); + var tmp882 = new TField(); + if((Req != null) && __isset.req) + { + tmp882.Name = "req"; + tmp882.Type = TType.Struct; + tmp882.ID = 1; + await oprot.WriteFieldBeginAsync(tmp882, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is OpenSession_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp883 = new StringBuilder("OpenSession_args("); + int tmp884 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp884++) { tmp883.Append(", "); } + tmp883.Append("Req: "); + Req.ToString(tmp883); + } + tmp883.Append(')'); + return tmp883.ToString(); + } + } + + + public partial class OpenSession_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public OpenSession_result() + { + } + + public OpenSession_result DeepCopy() + { + var tmp885 = new OpenSession_result(); + if((Success != null) && __isset.success) + { + tmp885.Success = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp)this.Success.DeepCopy(); + } + tmp885.__isset.success = this.__isset.success; + return tmp885; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp886 = new TStruct("OpenSession_result"); + await oprot.WriteStructBeginAsync(tmp886, cancellationToken); + var tmp887 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp887.Name = "Success"; + tmp887.Type = TType.Struct; + tmp887.ID = 0; + await oprot.WriteFieldBeginAsync(tmp887, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is OpenSession_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp888 = new StringBuilder("OpenSession_result("); + int tmp889 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp889++) { tmp888.Append(", "); } + tmp888.Append("Success: "); + Success.ToString(tmp888); + } + tmp888.Append(')'); + return tmp888.ToString(); + } + } + + + public partial class CloseSession_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CloseSession_args() + { + } + + public CloseSession_args DeepCopy() + { + var tmp890 = new CloseSession_args(); + if((Req != null) && __isset.req) + { + tmp890.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq)this.Req.DeepCopy(); + } + tmp890.__isset.req = this.__isset.req; + return tmp890; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp891 = new TStruct("CloseSession_args"); + await oprot.WriteStructBeginAsync(tmp891, cancellationToken); + var tmp892 = new TField(); + if((Req != null) && __isset.req) + { + tmp892.Name = "req"; + tmp892.Type = TType.Struct; + tmp892.ID = 1; + await oprot.WriteFieldBeginAsync(tmp892, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseSession_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp893 = new StringBuilder("CloseSession_args("); + int tmp894 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp894++) { tmp893.Append(", "); } + tmp893.Append("Req: "); + Req.ToString(tmp893); + } + tmp893.Append(')'); + return tmp893.ToString(); + } + } + + + public partial class CloseSession_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CloseSession_result() + { + } + + public CloseSession_result DeepCopy() + { + var tmp895 = new CloseSession_result(); + if((Success != null) && __isset.success) + { + tmp895.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp)this.Success.DeepCopy(); + } + tmp895.__isset.success = this.__isset.success; + return tmp895; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp896 = new TStruct("CloseSession_result"); + await oprot.WriteStructBeginAsync(tmp896, cancellationToken); + var tmp897 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp897.Name = "Success"; + tmp897.Type = TType.Struct; + tmp897.ID = 0; + await oprot.WriteFieldBeginAsync(tmp897, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseSession_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp898 = new StringBuilder("CloseSession_result("); + int tmp899 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp899++) { tmp898.Append(", "); } + tmp898.Append("Success: "); + Success.ToString(tmp898); + } + tmp898.Append(')'); + return tmp898.ToString(); + } + } + + + public partial class GetInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetInfo_args() + { + } + + public GetInfo_args DeepCopy() + { + var tmp900 = new GetInfo_args(); + if((Req != null) && __isset.req) + { + tmp900.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq)this.Req.DeepCopy(); + } + tmp900.__isset.req = this.__isset.req; + return tmp900; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp901 = new TStruct("GetInfo_args"); + await oprot.WriteStructBeginAsync(tmp901, cancellationToken); + var tmp902 = new TField(); + if((Req != null) && __isset.req) + { + tmp902.Name = "req"; + tmp902.Type = TType.Struct; + tmp902.ID = 1; + await oprot.WriteFieldBeginAsync(tmp902, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp903 = new StringBuilder("GetInfo_args("); + int tmp904 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp904++) { tmp903.Append(", "); } + tmp903.Append("Req: "); + Req.ToString(tmp903); + } + tmp903.Append(')'); + return tmp903.ToString(); + } + } + + + public partial class GetInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetInfo_result() + { + } + + public GetInfo_result DeepCopy() + { + var tmp905 = new GetInfo_result(); + if((Success != null) && __isset.success) + { + tmp905.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp)this.Success.DeepCopy(); + } + tmp905.__isset.success = this.__isset.success; + return tmp905; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp906 = new TStruct("GetInfo_result"); + await oprot.WriteStructBeginAsync(tmp906, cancellationToken); + var tmp907 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp907.Name = "Success"; + tmp907.Type = TType.Struct; + tmp907.ID = 0; + await oprot.WriteFieldBeginAsync(tmp907, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp908 = new StringBuilder("GetInfo_result("); + int tmp909 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp909++) { tmp908.Append(", "); } + tmp908.Append("Success: "); + Success.ToString(tmp908); + } + tmp908.Append(')'); + return tmp908.ToString(); + } + } + + + public partial class ExecuteStatement_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public ExecuteStatement_args() + { + } + + public ExecuteStatement_args DeepCopy() + { + var tmp910 = new ExecuteStatement_args(); + if((Req != null) && __isset.req) + { + tmp910.Req = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq)this.Req.DeepCopy(); + } + tmp910.__isset.req = this.__isset.req; + return tmp910; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp911 = new TStruct("ExecuteStatement_args"); + await oprot.WriteStructBeginAsync(tmp911, cancellationToken); + var tmp912 = new TField(); + if((Req != null) && __isset.req) + { + tmp912.Name = "req"; + tmp912.Type = TType.Struct; + tmp912.ID = 1; + await oprot.WriteFieldBeginAsync(tmp912, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is ExecuteStatement_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp913 = new StringBuilder("ExecuteStatement_args("); + int tmp914 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp914++) { tmp913.Append(", "); } + tmp913.Append("Req: "); + Req.ToString(tmp913); + } + tmp913.Append(')'); + return tmp913.ToString(); + } + } + + + public partial class ExecuteStatement_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public ExecuteStatement_result() + { + } + + public ExecuteStatement_result DeepCopy() + { + var tmp915 = new ExecuteStatement_result(); + if((Success != null) && __isset.success) + { + tmp915.Success = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp)this.Success.DeepCopy(); + } + tmp915.__isset.success = this.__isset.success; + return tmp915; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp916 = new TStruct("ExecuteStatement_result"); + await oprot.WriteStructBeginAsync(tmp916, cancellationToken); + var tmp917 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp917.Name = "Success"; + tmp917.Type = TType.Struct; + tmp917.ID = 0; + await oprot.WriteFieldBeginAsync(tmp917, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is ExecuteStatement_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp918 = new StringBuilder("ExecuteStatement_result("); + int tmp919 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp919++) { tmp918.Append(", "); } + tmp918.Append("Success: "); + Success.ToString(tmp918); + } + tmp918.Append(')'); + return tmp918.ToString(); + } + } + + + public partial class GetTypeInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTypeInfo_args() + { + } + + public GetTypeInfo_args DeepCopy() + { + var tmp920 = new GetTypeInfo_args(); + if((Req != null) && __isset.req) + { + tmp920.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq)this.Req.DeepCopy(); + } + tmp920.__isset.req = this.__isset.req; + return tmp920; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp921 = new TStruct("GetTypeInfo_args"); + await oprot.WriteStructBeginAsync(tmp921, cancellationToken); + var tmp922 = new TField(); + if((Req != null) && __isset.req) + { + tmp922.Name = "req"; + tmp922.Type = TType.Struct; + tmp922.ID = 1; + await oprot.WriteFieldBeginAsync(tmp922, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTypeInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp923 = new StringBuilder("GetTypeInfo_args("); + int tmp924 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp924++) { tmp923.Append(", "); } + tmp923.Append("Req: "); + Req.ToString(tmp923); + } + tmp923.Append(')'); + return tmp923.ToString(); + } + } + + + public partial class GetTypeInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTypeInfo_result() + { + } + + public GetTypeInfo_result DeepCopy() + { + var tmp925 = new GetTypeInfo_result(); + if((Success != null) && __isset.success) + { + tmp925.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp)this.Success.DeepCopy(); + } + tmp925.__isset.success = this.__isset.success; + return tmp925; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp926 = new TStruct("GetTypeInfo_result"); + await oprot.WriteStructBeginAsync(tmp926, cancellationToken); + var tmp927 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp927.Name = "Success"; + tmp927.Type = TType.Struct; + tmp927.ID = 0; + await oprot.WriteFieldBeginAsync(tmp927, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTypeInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp928 = new StringBuilder("GetTypeInfo_result("); + int tmp929 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp929++) { tmp928.Append(", "); } + tmp928.Append("Success: "); + Success.ToString(tmp928); + } + tmp928.Append(')'); + return tmp928.ToString(); + } + } + + + public partial class GetCatalogs_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetCatalogs_args() + { + } + + public GetCatalogs_args DeepCopy() + { + var tmp930 = new GetCatalogs_args(); + if((Req != null) && __isset.req) + { + tmp930.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq)this.Req.DeepCopy(); + } + tmp930.__isset.req = this.__isset.req; + return tmp930; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp931 = new TStruct("GetCatalogs_args"); + await oprot.WriteStructBeginAsync(tmp931, cancellationToken); + var tmp932 = new TField(); + if((Req != null) && __isset.req) + { + tmp932.Name = "req"; + tmp932.Type = TType.Struct; + tmp932.ID = 1; + await oprot.WriteFieldBeginAsync(tmp932, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCatalogs_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp933 = new StringBuilder("GetCatalogs_args("); + int tmp934 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp934++) { tmp933.Append(", "); } + tmp933.Append("Req: "); + Req.ToString(tmp933); + } + tmp933.Append(')'); + return tmp933.ToString(); + } + } + + + public partial class GetCatalogs_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetCatalogs_result() + { + } + + public GetCatalogs_result DeepCopy() + { + var tmp935 = new GetCatalogs_result(); + if((Success != null) && __isset.success) + { + tmp935.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp)this.Success.DeepCopy(); + } + tmp935.__isset.success = this.__isset.success; + return tmp935; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp936 = new TStruct("GetCatalogs_result"); + await oprot.WriteStructBeginAsync(tmp936, cancellationToken); + var tmp937 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp937.Name = "Success"; + tmp937.Type = TType.Struct; + tmp937.ID = 0; + await oprot.WriteFieldBeginAsync(tmp937, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCatalogs_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp938 = new StringBuilder("GetCatalogs_result("); + int tmp939 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp939++) { tmp938.Append(", "); } + tmp938.Append("Success: "); + Success.ToString(tmp938); + } + tmp938.Append(')'); + return tmp938.ToString(); + } + } + + + public partial class GetSchemas_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetSchemas_args() + { + } + + public GetSchemas_args DeepCopy() + { + var tmp940 = new GetSchemas_args(); + if((Req != null) && __isset.req) + { + tmp940.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq)this.Req.DeepCopy(); + } + tmp940.__isset.req = this.__isset.req; + return tmp940; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp941 = new TStruct("GetSchemas_args"); + await oprot.WriteStructBeginAsync(tmp941, cancellationToken); + var tmp942 = new TField(); + if((Req != null) && __isset.req) + { + tmp942.Name = "req"; + tmp942.Type = TType.Struct; + tmp942.ID = 1; + await oprot.WriteFieldBeginAsync(tmp942, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetSchemas_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp943 = new StringBuilder("GetSchemas_args("); + int tmp944 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp944++) { tmp943.Append(", "); } + tmp943.Append("Req: "); + Req.ToString(tmp943); + } + tmp943.Append(')'); + return tmp943.ToString(); + } + } + + + public partial class GetSchemas_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetSchemas_result() + { + } + + public GetSchemas_result DeepCopy() + { + var tmp945 = new GetSchemas_result(); + if((Success != null) && __isset.success) + { + tmp945.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp)this.Success.DeepCopy(); + } + tmp945.__isset.success = this.__isset.success; + return tmp945; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp946 = new TStruct("GetSchemas_result"); + await oprot.WriteStructBeginAsync(tmp946, cancellationToken); + var tmp947 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp947.Name = "Success"; + tmp947.Type = TType.Struct; + tmp947.ID = 0; + await oprot.WriteFieldBeginAsync(tmp947, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetSchemas_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp948 = new StringBuilder("GetSchemas_result("); + int tmp949 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp949++) { tmp948.Append(", "); } + tmp948.Append("Success: "); + Success.ToString(tmp948); + } + tmp948.Append(')'); + return tmp948.ToString(); + } + } + + + public partial class GetTables_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTables_args() + { + } + + public GetTables_args DeepCopy() + { + var tmp950 = new GetTables_args(); + if((Req != null) && __isset.req) + { + tmp950.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq)this.Req.DeepCopy(); + } + tmp950.__isset.req = this.__isset.req; + return tmp950; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp951 = new TStruct("GetTables_args"); + await oprot.WriteStructBeginAsync(tmp951, cancellationToken); + var tmp952 = new TField(); + if((Req != null) && __isset.req) + { + tmp952.Name = "req"; + tmp952.Type = TType.Struct; + tmp952.ID = 1; + await oprot.WriteFieldBeginAsync(tmp952, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTables_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp953 = new StringBuilder("GetTables_args("); + int tmp954 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp954++) { tmp953.Append(", "); } + tmp953.Append("Req: "); + Req.ToString(tmp953); + } + tmp953.Append(')'); + return tmp953.ToString(); + } + } + + + public partial class GetTables_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTables_result() + { + } + + public GetTables_result DeepCopy() + { + var tmp955 = new GetTables_result(); + if((Success != null) && __isset.success) + { + tmp955.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp)this.Success.DeepCopy(); + } + tmp955.__isset.success = this.__isset.success; + return tmp955; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp956 = new TStruct("GetTables_result"); + await oprot.WriteStructBeginAsync(tmp956, cancellationToken); + var tmp957 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp957.Name = "Success"; + tmp957.Type = TType.Struct; + tmp957.ID = 0; + await oprot.WriteFieldBeginAsync(tmp957, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTables_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp958 = new StringBuilder("GetTables_result("); + int tmp959 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp959++) { tmp958.Append(", "); } + tmp958.Append("Success: "); + Success.ToString(tmp958); + } + tmp958.Append(')'); + return tmp958.ToString(); + } + } + + + public partial class GetTableTypes_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTableTypes_args() + { + } + + public GetTableTypes_args DeepCopy() + { + var tmp960 = new GetTableTypes_args(); + if((Req != null) && __isset.req) + { + tmp960.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq)this.Req.DeepCopy(); + } + tmp960.__isset.req = this.__isset.req; + return tmp960; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp961 = new TStruct("GetTableTypes_args"); + await oprot.WriteStructBeginAsync(tmp961, cancellationToken); + var tmp962 = new TField(); + if((Req != null) && __isset.req) + { + tmp962.Name = "req"; + tmp962.Type = TType.Struct; + tmp962.ID = 1; + await oprot.WriteFieldBeginAsync(tmp962, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTableTypes_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp963 = new StringBuilder("GetTableTypes_args("); + int tmp964 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp964++) { tmp963.Append(", "); } + tmp963.Append("Req: "); + Req.ToString(tmp963); + } + tmp963.Append(')'); + return tmp963.ToString(); + } + } + + + public partial class GetTableTypes_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTableTypes_result() + { + } + + public GetTableTypes_result DeepCopy() + { + var tmp965 = new GetTableTypes_result(); + if((Success != null) && __isset.success) + { + tmp965.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp)this.Success.DeepCopy(); + } + tmp965.__isset.success = this.__isset.success; + return tmp965; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp966 = new TStruct("GetTableTypes_result"); + await oprot.WriteStructBeginAsync(tmp966, cancellationToken); + var tmp967 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp967.Name = "Success"; + tmp967.Type = TType.Struct; + tmp967.ID = 0; + await oprot.WriteFieldBeginAsync(tmp967, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTableTypes_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp968 = new StringBuilder("GetTableTypes_result("); + int tmp969 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp969++) { tmp968.Append(", "); } + tmp968.Append("Success: "); + Success.ToString(tmp968); + } + tmp968.Append(')'); + return tmp968.ToString(); + } + } + + + public partial class GetColumns_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetColumns_args() + { + } + + public GetColumns_args DeepCopy() + { + var tmp970 = new GetColumns_args(); + if((Req != null) && __isset.req) + { + tmp970.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq)this.Req.DeepCopy(); + } + tmp970.__isset.req = this.__isset.req; + return tmp970; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp971 = new TStruct("GetColumns_args"); + await oprot.WriteStructBeginAsync(tmp971, cancellationToken); + var tmp972 = new TField(); + if((Req != null) && __isset.req) + { + tmp972.Name = "req"; + tmp972.Type = TType.Struct; + tmp972.ID = 1; + await oprot.WriteFieldBeginAsync(tmp972, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetColumns_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp973 = new StringBuilder("GetColumns_args("); + int tmp974 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp974++) { tmp973.Append(", "); } + tmp973.Append("Req: "); + Req.ToString(tmp973); + } + tmp973.Append(')'); + return tmp973.ToString(); + } + } + + + public partial class GetColumns_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetColumns_result() + { + } + + public GetColumns_result DeepCopy() + { + var tmp975 = new GetColumns_result(); + if((Success != null) && __isset.success) + { + tmp975.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp)this.Success.DeepCopy(); + } + tmp975.__isset.success = this.__isset.success; + return tmp975; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp976 = new TStruct("GetColumns_result"); + await oprot.WriteStructBeginAsync(tmp976, cancellationToken); + var tmp977 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp977.Name = "Success"; + tmp977.Type = TType.Struct; + tmp977.ID = 0; + await oprot.WriteFieldBeginAsync(tmp977, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetColumns_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp978 = new StringBuilder("GetColumns_result("); + int tmp979 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp979++) { tmp978.Append(", "); } + tmp978.Append("Success: "); + Success.ToString(tmp978); + } + tmp978.Append(')'); + return tmp978.ToString(); + } + } + + + public partial class GetFunctions_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetFunctions_args() + { + } + + public GetFunctions_args DeepCopy() + { + var tmp980 = new GetFunctions_args(); + if((Req != null) && __isset.req) + { + tmp980.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq)this.Req.DeepCopy(); + } + tmp980.__isset.req = this.__isset.req; + return tmp980; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp981 = new TStruct("GetFunctions_args"); + await oprot.WriteStructBeginAsync(tmp981, cancellationToken); + var tmp982 = new TField(); + if((Req != null) && __isset.req) + { + tmp982.Name = "req"; + tmp982.Type = TType.Struct; + tmp982.ID = 1; + await oprot.WriteFieldBeginAsync(tmp982, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetFunctions_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp983 = new StringBuilder("GetFunctions_args("); + int tmp984 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp984++) { tmp983.Append(", "); } + tmp983.Append("Req: "); + Req.ToString(tmp983); + } + tmp983.Append(')'); + return tmp983.ToString(); + } + } + + + public partial class GetFunctions_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetFunctions_result() + { + } + + public GetFunctions_result DeepCopy() + { + var tmp985 = new GetFunctions_result(); + if((Success != null) && __isset.success) + { + tmp985.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp)this.Success.DeepCopy(); + } + tmp985.__isset.success = this.__isset.success; + return tmp985; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp986 = new TStruct("GetFunctions_result"); + await oprot.WriteStructBeginAsync(tmp986, cancellationToken); + var tmp987 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp987.Name = "Success"; + tmp987.Type = TType.Struct; + tmp987.ID = 0; + await oprot.WriteFieldBeginAsync(tmp987, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetFunctions_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp988 = new StringBuilder("GetFunctions_result("); + int tmp989 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp989++) { tmp988.Append(", "); } + tmp988.Append("Success: "); + Success.ToString(tmp988); + } + tmp988.Append(')'); + return tmp988.ToString(); + } + } + + + public partial class GetPrimaryKeys_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetPrimaryKeys_args() + { + } + + public GetPrimaryKeys_args DeepCopy() + { + var tmp990 = new GetPrimaryKeys_args(); + if((Req != null) && __isset.req) + { + tmp990.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq)this.Req.DeepCopy(); + } + tmp990.__isset.req = this.__isset.req; + return tmp990; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp991 = new TStruct("GetPrimaryKeys_args"); + await oprot.WriteStructBeginAsync(tmp991, cancellationToken); + var tmp992 = new TField(); + if((Req != null) && __isset.req) + { + tmp992.Name = "req"; + tmp992.Type = TType.Struct; + tmp992.ID = 1; + await oprot.WriteFieldBeginAsync(tmp992, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetPrimaryKeys_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp993 = new StringBuilder("GetPrimaryKeys_args("); + int tmp994 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp994++) { tmp993.Append(", "); } + tmp993.Append("Req: "); + Req.ToString(tmp993); + } + tmp993.Append(')'); + return tmp993.ToString(); + } + } + + + public partial class GetPrimaryKeys_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetPrimaryKeys_result() + { + } + + public GetPrimaryKeys_result DeepCopy() + { + var tmp995 = new GetPrimaryKeys_result(); + if((Success != null) && __isset.success) + { + tmp995.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp)this.Success.DeepCopy(); + } + tmp995.__isset.success = this.__isset.success; + return tmp995; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp996 = new TStruct("GetPrimaryKeys_result"); + await oprot.WriteStructBeginAsync(tmp996, cancellationToken); + var tmp997 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp997.Name = "Success"; + tmp997.Type = TType.Struct; + tmp997.ID = 0; + await oprot.WriteFieldBeginAsync(tmp997, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetPrimaryKeys_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp998 = new StringBuilder("GetPrimaryKeys_result("); + int tmp999 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp999++) { tmp998.Append(", "); } + tmp998.Append("Success: "); + Success.ToString(tmp998); + } + tmp998.Append(')'); + return tmp998.ToString(); + } + } + + + public partial class GetCrossReference_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetCrossReference_args() + { + } + + public GetCrossReference_args DeepCopy() + { + var tmp1000 = new GetCrossReference_args(); + if((Req != null) && __isset.req) + { + tmp1000.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq)this.Req.DeepCopy(); + } + tmp1000.__isset.req = this.__isset.req; + return tmp1000; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1001 = new TStruct("GetCrossReference_args"); + await oprot.WriteStructBeginAsync(tmp1001, cancellationToken); + var tmp1002 = new TField(); + if((Req != null) && __isset.req) + { + tmp1002.Name = "req"; + tmp1002.Type = TType.Struct; + tmp1002.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1002, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCrossReference_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1003 = new StringBuilder("GetCrossReference_args("); + int tmp1004 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1004++) { tmp1003.Append(", "); } + tmp1003.Append("Req: "); + Req.ToString(tmp1003); + } + tmp1003.Append(')'); + return tmp1003.ToString(); + } + } + + + public partial class GetCrossReference_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetCrossReference_result() + { + } + + public GetCrossReference_result DeepCopy() + { + var tmp1005 = new GetCrossReference_result(); + if((Success != null) && __isset.success) + { + tmp1005.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp)this.Success.DeepCopy(); + } + tmp1005.__isset.success = this.__isset.success; + return tmp1005; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1006 = new TStruct("GetCrossReference_result"); + await oprot.WriteStructBeginAsync(tmp1006, cancellationToken); + var tmp1007 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1007.Name = "Success"; + tmp1007.Type = TType.Struct; + tmp1007.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1007, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCrossReference_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1008 = new StringBuilder("GetCrossReference_result("); + int tmp1009 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1009++) { tmp1008.Append(", "); } + tmp1008.Append("Success: "); + Success.ToString(tmp1008); + } + tmp1008.Append(')'); + return tmp1008.ToString(); + } + } + + + public partial class GetOperationStatus_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetOperationStatus_args() + { + } + + public GetOperationStatus_args DeepCopy() + { + var tmp1010 = new GetOperationStatus_args(); + if((Req != null) && __isset.req) + { + tmp1010.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq)this.Req.DeepCopy(); + } + tmp1010.__isset.req = this.__isset.req; + return tmp1010; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1011 = new TStruct("GetOperationStatus_args"); + await oprot.WriteStructBeginAsync(tmp1011, cancellationToken); + var tmp1012 = new TField(); + if((Req != null) && __isset.req) + { + tmp1012.Name = "req"; + tmp1012.Type = TType.Struct; + tmp1012.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1012, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetOperationStatus_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1013 = new StringBuilder("GetOperationStatus_args("); + int tmp1014 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1014++) { tmp1013.Append(", "); } + tmp1013.Append("Req: "); + Req.ToString(tmp1013); + } + tmp1013.Append(')'); + return tmp1013.ToString(); + } + } + + + public partial class GetOperationStatus_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetOperationStatus_result() + { + } + + public GetOperationStatus_result DeepCopy() + { + var tmp1015 = new GetOperationStatus_result(); + if((Success != null) && __isset.success) + { + tmp1015.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.Success.DeepCopy(); + } + tmp1015.__isset.success = this.__isset.success; + return tmp1015; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1016 = new TStruct("GetOperationStatus_result"); + await oprot.WriteStructBeginAsync(tmp1016, cancellationToken); + var tmp1017 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1017.Name = "Success"; + tmp1017.Type = TType.Struct; + tmp1017.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1017, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetOperationStatus_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1018 = new StringBuilder("GetOperationStatus_result("); + int tmp1019 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1019++) { tmp1018.Append(", "); } + tmp1018.Append("Success: "); + Success.ToString(tmp1018); + } + tmp1018.Append(')'); + return tmp1018.ToString(); + } + } + + + public partial class CancelOperation_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CancelOperation_args() + { + } + + public CancelOperation_args DeepCopy() + { + var tmp1020 = new CancelOperation_args(); + if((Req != null) && __isset.req) + { + tmp1020.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq)this.Req.DeepCopy(); + } + tmp1020.__isset.req = this.__isset.req; + return tmp1020; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1021 = new TStruct("CancelOperation_args"); + await oprot.WriteStructBeginAsync(tmp1021, cancellationToken); + var tmp1022 = new TField(); + if((Req != null) && __isset.req) + { + tmp1022.Name = "req"; + tmp1022.Type = TType.Struct; + tmp1022.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1022, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelOperation_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1023 = new StringBuilder("CancelOperation_args("); + int tmp1024 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1024++) { tmp1023.Append(", "); } + tmp1023.Append("Req: "); + Req.ToString(tmp1023); + } + tmp1023.Append(')'); + return tmp1023.ToString(); + } + } + + + public partial class CancelOperation_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CancelOperation_result() + { + } + + public CancelOperation_result DeepCopy() + { + var tmp1025 = new CancelOperation_result(); + if((Success != null) && __isset.success) + { + tmp1025.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp)this.Success.DeepCopy(); + } + tmp1025.__isset.success = this.__isset.success; + return tmp1025; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1026 = new TStruct("CancelOperation_result"); + await oprot.WriteStructBeginAsync(tmp1026, cancellationToken); + var tmp1027 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1027.Name = "Success"; + tmp1027.Type = TType.Struct; + tmp1027.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1027, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelOperation_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1028 = new StringBuilder("CancelOperation_result("); + int tmp1029 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1029++) { tmp1028.Append(", "); } + tmp1028.Append("Success: "); + Success.ToString(tmp1028); + } + tmp1028.Append(')'); + return tmp1028.ToString(); + } + } + + + public partial class CloseOperation_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CloseOperation_args() + { + } + + public CloseOperation_args DeepCopy() + { + var tmp1030 = new CloseOperation_args(); + if((Req != null) && __isset.req) + { + tmp1030.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq)this.Req.DeepCopy(); + } + tmp1030.__isset.req = this.__isset.req; + return tmp1030; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1031 = new TStruct("CloseOperation_args"); + await oprot.WriteStructBeginAsync(tmp1031, cancellationToken); + var tmp1032 = new TField(); + if((Req != null) && __isset.req) + { + tmp1032.Name = "req"; + tmp1032.Type = TType.Struct; + tmp1032.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1032, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseOperation_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1033 = new StringBuilder("CloseOperation_args("); + int tmp1034 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1034++) { tmp1033.Append(", "); } + tmp1033.Append("Req: "); + Req.ToString(tmp1033); + } + tmp1033.Append(')'); + return tmp1033.ToString(); + } + } + + + public partial class CloseOperation_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CloseOperation_result() + { + } + + public CloseOperation_result DeepCopy() + { + var tmp1035 = new CloseOperation_result(); + if((Success != null) && __isset.success) + { + tmp1035.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.Success.DeepCopy(); + } + tmp1035.__isset.success = this.__isset.success; + return tmp1035; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1036 = new TStruct("CloseOperation_result"); + await oprot.WriteStructBeginAsync(tmp1036, cancellationToken); + var tmp1037 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1037.Name = "Success"; + tmp1037.Type = TType.Struct; + tmp1037.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1037, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseOperation_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1038 = new StringBuilder("CloseOperation_result("); + int tmp1039 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1039++) { tmp1038.Append(", "); } + tmp1038.Append("Success: "); + Success.ToString(tmp1038); + } + tmp1038.Append(')'); + return tmp1038.ToString(); + } + } + + + public partial class GetResultSetMetadata_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetResultSetMetadata_args() + { + } + + public GetResultSetMetadata_args DeepCopy() + { + var tmp1040 = new GetResultSetMetadata_args(); + if((Req != null) && __isset.req) + { + tmp1040.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq)this.Req.DeepCopy(); + } + tmp1040.__isset.req = this.__isset.req; + return tmp1040; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1041 = new TStruct("GetResultSetMetadata_args"); + await oprot.WriteStructBeginAsync(tmp1041, cancellationToken); + var tmp1042 = new TField(); + if((Req != null) && __isset.req) + { + tmp1042.Name = "req"; + tmp1042.Type = TType.Struct; + tmp1042.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1042, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetResultSetMetadata_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1043 = new StringBuilder("GetResultSetMetadata_args("); + int tmp1044 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1044++) { tmp1043.Append(", "); } + tmp1043.Append("Req: "); + Req.ToString(tmp1043); + } + tmp1043.Append(')'); + return tmp1043.ToString(); + } + } + + + public partial class GetResultSetMetadata_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetResultSetMetadata_result() + { + } + + public GetResultSetMetadata_result DeepCopy() + { + var tmp1045 = new GetResultSetMetadata_result(); + if((Success != null) && __isset.success) + { + tmp1045.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.Success.DeepCopy(); + } + tmp1045.__isset.success = this.__isset.success; + return tmp1045; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1046 = new TStruct("GetResultSetMetadata_result"); + await oprot.WriteStructBeginAsync(tmp1046, cancellationToken); + var tmp1047 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1047.Name = "Success"; + tmp1047.Type = TType.Struct; + tmp1047.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1047, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetResultSetMetadata_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1048 = new StringBuilder("GetResultSetMetadata_result("); + int tmp1049 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1049++) { tmp1048.Append(", "); } + tmp1048.Append("Success: "); + Success.ToString(tmp1048); + } + tmp1048.Append(')'); + return tmp1048.ToString(); + } + } + + + public partial class FetchResults_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public FetchResults_args() + { + } + + public FetchResults_args DeepCopy() + { + var tmp1050 = new FetchResults_args(); + if((Req != null) && __isset.req) + { + tmp1050.Req = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq)this.Req.DeepCopy(); + } + tmp1050.__isset.req = this.__isset.req; + return tmp1050; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1051 = new TStruct("FetchResults_args"); + await oprot.WriteStructBeginAsync(tmp1051, cancellationToken); + var tmp1052 = new TField(); + if((Req != null) && __isset.req) + { + tmp1052.Name = "req"; + tmp1052.Type = TType.Struct; + tmp1052.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1052, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is FetchResults_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1053 = new StringBuilder("FetchResults_args("); + int tmp1054 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1054++) { tmp1053.Append(", "); } + tmp1053.Append("Req: "); + Req.ToString(tmp1053); + } + tmp1053.Append(')'); + return tmp1053.ToString(); + } + } + + + public partial class FetchResults_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public FetchResults_result() + { + } + + public FetchResults_result DeepCopy() + { + var tmp1055 = new FetchResults_result(); + if((Success != null) && __isset.success) + { + tmp1055.Success = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.Success.DeepCopy(); + } + tmp1055.__isset.success = this.__isset.success; + return tmp1055; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1056 = new TStruct("FetchResults_result"); + await oprot.WriteStructBeginAsync(tmp1056, cancellationToken); + var tmp1057 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1057.Name = "Success"; + tmp1057.Type = TType.Struct; + tmp1057.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1057, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is FetchResults_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1058 = new StringBuilder("FetchResults_result("); + int tmp1059 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1059++) { tmp1058.Append(", "); } + tmp1058.Append("Success: "); + Success.ToString(tmp1058); + } + tmp1058.Append(')'); + return tmp1058.ToString(); + } + } + + + public partial class GetDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetDelegationToken_args() + { + } + + public GetDelegationToken_args DeepCopy() + { + var tmp1060 = new GetDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1060.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1060.__isset.req = this.__isset.req; + return tmp1060; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1061 = new TStruct("GetDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1061, cancellationToken); + var tmp1062 = new TField(); + if((Req != null) && __isset.req) + { + tmp1062.Name = "req"; + tmp1062.Type = TType.Struct; + tmp1062.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1062, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1063 = new StringBuilder("GetDelegationToken_args("); + int tmp1064 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1064++) { tmp1063.Append(", "); } + tmp1063.Append("Req: "); + Req.ToString(tmp1063); + } + tmp1063.Append(')'); + return tmp1063.ToString(); + } + } + + + public partial class GetDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetDelegationToken_result() + { + } + + public GetDelegationToken_result DeepCopy() + { + var tmp1065 = new GetDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1065.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1065.__isset.success = this.__isset.success; + return tmp1065; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1066 = new TStruct("GetDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1066, cancellationToken); + var tmp1067 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1067.Name = "Success"; + tmp1067.Type = TType.Struct; + tmp1067.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1067, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1068 = new StringBuilder("GetDelegationToken_result("); + int tmp1069 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1069++) { tmp1068.Append(", "); } + tmp1068.Append("Success: "); + Success.ToString(tmp1068); + } + tmp1068.Append(')'); + return tmp1068.ToString(); + } + } + + + public partial class CancelDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CancelDelegationToken_args() + { + } + + public CancelDelegationToken_args DeepCopy() + { + var tmp1070 = new CancelDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1070.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1070.__isset.req = this.__isset.req; + return tmp1070; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1071 = new TStruct("CancelDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1071, cancellationToken); + var tmp1072 = new TField(); + if((Req != null) && __isset.req) + { + tmp1072.Name = "req"; + tmp1072.Type = TType.Struct; + tmp1072.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1072, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1073 = new StringBuilder("CancelDelegationToken_args("); + int tmp1074 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1074++) { tmp1073.Append(", "); } + tmp1073.Append("Req: "); + Req.ToString(tmp1073); + } + tmp1073.Append(')'); + return tmp1073.ToString(); + } + } + + + public partial class CancelDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CancelDelegationToken_result() + { + } + + public CancelDelegationToken_result DeepCopy() + { + var tmp1075 = new CancelDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1075.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1075.__isset.success = this.__isset.success; + return tmp1075; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1076 = new TStruct("CancelDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1076, cancellationToken); + var tmp1077 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1077.Name = "Success"; + tmp1077.Type = TType.Struct; + tmp1077.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1077, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1078 = new StringBuilder("CancelDelegationToken_result("); + int tmp1079 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1079++) { tmp1078.Append(", "); } + tmp1078.Append("Success: "); + Success.ToString(tmp1078); + } + tmp1078.Append(')'); + return tmp1078.ToString(); + } + } + + + public partial class RenewDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public RenewDelegationToken_args() + { + } + + public RenewDelegationToken_args DeepCopy() + { + var tmp1080 = new RenewDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1080.Req = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1080.__isset.req = this.__isset.req; + return tmp1080; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1081 = new TStruct("RenewDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1081, cancellationToken); + var tmp1082 = new TField(); + if((Req != null) && __isset.req) + { + tmp1082.Name = "req"; + tmp1082.Type = TType.Struct; + tmp1082.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1082, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is RenewDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1083 = new StringBuilder("RenewDelegationToken_args("); + int tmp1084 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1084++) { tmp1083.Append(", "); } + tmp1083.Append("Req: "); + Req.ToString(tmp1083); + } + tmp1083.Append(')'); + return tmp1083.ToString(); + } + } + + + public partial class RenewDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public RenewDelegationToken_result() + { + } + + public RenewDelegationToken_result DeepCopy() + { + var tmp1085 = new RenewDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1085.Success = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1085.__isset.success = this.__isset.success; + return tmp1085; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1086 = new TStruct("RenewDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1086, cancellationToken); + var tmp1087 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1087.Name = "Success"; + tmp1087.Type = TType.Struct; + tmp1087.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1087, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is RenewDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1088 = new StringBuilder("RenewDelegationToken_result("); + int tmp1089 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1089++) { tmp1088.Append(", "); } + tmp1088.Append("Success: "); + Success.ToString(tmp1088); + } + tmp1088.Append(')'); + return tmp1088.ToString(); + } + } + + + public partial class GetQueryId_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetQueryId_args() + { + } + + public GetQueryId_args DeepCopy() + { + var tmp1090 = new GetQueryId_args(); + if((Req != null) && __isset.req) + { + tmp1090.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq)this.Req.DeepCopy(); + } + tmp1090.__isset.req = this.__isset.req; + return tmp1090; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1091 = new TStruct("GetQueryId_args"); + await oprot.WriteStructBeginAsync(tmp1091, cancellationToken); + var tmp1092 = new TField(); + if((Req != null) && __isset.req) + { + tmp1092.Name = "req"; + tmp1092.Type = TType.Struct; + tmp1092.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1092, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetQueryId_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1093 = new StringBuilder("GetQueryId_args("); + int tmp1094 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1094++) { tmp1093.Append(", "); } + tmp1093.Append("Req: "); + Req.ToString(tmp1093); + } + tmp1093.Append(')'); + return tmp1093.ToString(); + } + } + + + public partial class GetQueryId_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetQueryId_result() + { + } + + public GetQueryId_result DeepCopy() + { + var tmp1095 = new GetQueryId_result(); + if((Success != null) && __isset.success) + { + tmp1095.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp)this.Success.DeepCopy(); + } + tmp1095.__isset.success = this.__isset.success; + return tmp1095; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1096 = new TStruct("GetQueryId_result"); + await oprot.WriteStructBeginAsync(tmp1096, cancellationToken); + var tmp1097 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1097.Name = "Success"; + tmp1097.Type = TType.Struct; + tmp1097.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1097, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetQueryId_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1098 = new StringBuilder("GetQueryId_result("); + int tmp1099 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1099++) { tmp1098.Append(", "); } + tmp1098.Append("Success: "); + Success.ToString(tmp1098); + } + tmp1098.Append(')'); + return tmp1098.ToString(); + } + } + + + public partial class SetClientInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public SetClientInfo_args() + { + } + + public SetClientInfo_args DeepCopy() + { + var tmp1100 = new SetClientInfo_args(); + if((Req != null) && __isset.req) + { + tmp1100.Req = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq)this.Req.DeepCopy(); + } + tmp1100.__isset.req = this.__isset.req; + return tmp1100; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1101 = new TStruct("SetClientInfo_args"); + await oprot.WriteStructBeginAsync(tmp1101, cancellationToken); + var tmp1102 = new TField(); + if((Req != null) && __isset.req) + { + tmp1102.Name = "req"; + tmp1102.Type = TType.Struct; + tmp1102.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1102, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is SetClientInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1103 = new StringBuilder("SetClientInfo_args("); + int tmp1104 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1104++) { tmp1103.Append(", "); } + tmp1103.Append("Req: "); + Req.ToString(tmp1103); + } + tmp1103.Append(')'); + return tmp1103.ToString(); + } + } + + + public partial class SetClientInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public SetClientInfo_result() + { + } + + public SetClientInfo_result DeepCopy() + { + var tmp1105 = new SetClientInfo_result(); + if((Success != null) && __isset.success) + { + tmp1105.Success = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp)this.Success.DeepCopy(); + } + tmp1105.__isset.success = this.__isset.success; + return tmp1105; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1106 = new TStruct("SetClientInfo_result"); + await oprot.WriteStructBeginAsync(tmp1106, cancellationToken); + var tmp1107 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1107.Name = "Success"; + tmp1107.Type = TType.Struct; + tmp1107.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1107, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is SetClientInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1108 = new StringBuilder("SetClientInfo_result("); + int tmp1109 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1109++) { tmp1108.Append(", "); } + tmp1108.Append("Success: "); + Success.ToString(tmp1108); + } + tmp1108.Append(')'); + return tmp1108.ToString(); + } + } + + + public partial class UploadData_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public UploadData_args() + { + } + + public UploadData_args DeepCopy() + { + var tmp1110 = new UploadData_args(); + if((Req != null) && __isset.req) + { + tmp1110.Req = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq)this.Req.DeepCopy(); + } + tmp1110.__isset.req = this.__isset.req; + return tmp1110; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1111 = new TStruct("UploadData_args"); + await oprot.WriteStructBeginAsync(tmp1111, cancellationToken); + var tmp1112 = new TField(); + if((Req != null) && __isset.req) + { + tmp1112.Name = "req"; + tmp1112.Type = TType.Struct; + tmp1112.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1112, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is UploadData_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1113 = new StringBuilder("UploadData_args("); + int tmp1114 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1114++) { tmp1113.Append(", "); } + tmp1113.Append("Req: "); + Req.ToString(tmp1113); + } + tmp1113.Append(')'); + return tmp1113.ToString(); + } + } + + + public partial class UploadData_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public UploadData_result() + { + } + + public UploadData_result DeepCopy() + { + var tmp1115 = new UploadData_result(); + if((Success != null) && __isset.success) + { + tmp1115.Success = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp)this.Success.DeepCopy(); + } + tmp1115.__isset.success = this.__isset.success; + return tmp1115; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1116 = new TStruct("UploadData_result"); + await oprot.WriteStructBeginAsync(tmp1116, cancellationToken); + var tmp1117 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1117.Name = "Success"; + tmp1117.Type = TType.Struct; + tmp1117.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1117, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is UploadData_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1118 = new StringBuilder("UploadData_result("); + int tmp1119 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1119++) { tmp1118.Append(", "); } + tmp1118.Append("Success: "); + Success.ToString(tmp1118); + } + tmp1118.Append(')'); + return tmp1118.ToString(); + } + } + + + public partial class DownloadData_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public DownloadData_args() + { + } + + public DownloadData_args DeepCopy() + { + var tmp1120 = new DownloadData_args(); + if((Req != null) && __isset.req) + { + tmp1120.Req = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq)this.Req.DeepCopy(); + } + tmp1120.__isset.req = this.__isset.req; + return tmp1120; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1121 = new TStruct("DownloadData_args"); + await oprot.WriteStructBeginAsync(tmp1121, cancellationToken); + var tmp1122 = new TField(); + if((Req != null) && __isset.req) + { + tmp1122.Name = "req"; + tmp1122.Type = TType.Struct; + tmp1122.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1122, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is DownloadData_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1123 = new StringBuilder("DownloadData_args("); + int tmp1124 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1124++) { tmp1123.Append(", "); } + tmp1123.Append("Req: "); + Req.ToString(tmp1123); + } + tmp1123.Append(')'); + return tmp1123.ToString(); + } + } + + + public partial class DownloadData_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public DownloadData_result() + { + } + + public DownloadData_result DeepCopy() + { + var tmp1125 = new DownloadData_result(); + if((Success != null) && __isset.success) + { + tmp1125.Success = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp)this.Success.DeepCopy(); + } + tmp1125.__isset.success = this.__isset.success; + return tmp1125; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1126 = new TStruct("DownloadData_result"); + await oprot.WriteStructBeginAsync(tmp1126, cancellationToken); + var tmp1127 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1127.Name = "Success"; + tmp1127.Type = TType.Struct; + tmp1127.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1127, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is DownloadData_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1128 = new StringBuilder("DownloadData_result("); + int tmp1129 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1129++) { tmp1128.Append(", "); } + tmp1128.Append("Success: "); + Success.ToString(tmp1128); + } + tmp1128.Append(')'); + return tmp1128.ToString(); + } + } + + } + + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs new file mode 100644 index 0000000000..b6c46ba763 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs @@ -0,0 +1,89 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public static class TCLIService2Constants + { + public static HashSet PRIMITIVE_TYPES = new HashSet(); + public static HashSet COMPLEX_TYPES = new HashSet(); + public static HashSet COLLECTION_TYPES = new HashSet(); + public static Dictionary TYPE_NAMES = new Dictionary(); + public const string CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength"; + public const string PRECISION = "precision"; + public const string SCALE = "scale"; + static TCLIService2Constants() + { + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.USER_DEFINED_TYPE); + COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); + COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE] = "ARRAY"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE] = "BIGINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE] = "BINARY"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE] = "BOOLEAN"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE] = "CHAR"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE] = "DATE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE] = "DECIMAL"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE] = "DOUBLE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE] = "FLOAT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE] = "INTERVAL_DAY_TIME"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE] = "INTERVAL_YEAR_MONTH"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE] = "INT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE] = "MAP"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE] = "NULL"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE] = "SMALLINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE] = "STRING"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE] = "STRUCT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE] = "TIMESTAMP WITH LOCAL TIME ZONE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE] = "TIMESTAMP"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE] = "TINYINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE] = "UNIONTYPE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE] = "VARCHAR"; + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs new file mode 100644 index 0000000000..25c611993a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs @@ -0,0 +1,654 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public static class TCLIService2Extensions + { + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1130 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1130.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); + return tmp1130; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1131 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1131.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); + return tmp1131; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1132 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1132.Add((pair.Key != null) ? pair.Key : null, pair.Value); + return tmp1132; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1133 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1133.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value : null); + return tmp1133; + } + + + public static bool Equals(this List> instance, object that) + { + if (!(that is List> other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List> instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List> DeepCopy(this List> source) + { + if (source == null) + return null; + + var tmp1134 = new List>(source.Count); + foreach (var elem in source) + tmp1134.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1134; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1135 = new List(source.Count); + foreach (var elem in source) + tmp1135.Add(elem); + return tmp1135; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1136 = new List(source.Count); + foreach (var elem in source) + tmp1136.Add((elem != null) ? elem.ToArray() : null); + return tmp1136; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1137 = new List(source.Count); + foreach (var elem in source) + tmp1137.Add(elem); + return tmp1137; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1138 = new List(source.Count); + foreach (var elem in source) + tmp1138.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1138; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1139 = new List(source.Count); + foreach (var elem in source) + tmp1139.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1139; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1140 = new List(source.Count); + foreach (var elem in source) + tmp1140.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1140; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1141 = new List(source.Count); + foreach (var elem in source) + tmp1141.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1141; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1142 = new List(source.Count); + foreach (var elem in source) + tmp1142.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1142; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1143 = new List(source.Count); + foreach (var elem in source) + tmp1143.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1143; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1144 = new List(source.Count); + foreach (var elem in source) + tmp1144.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1144; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1145 = new List(source.Count); + foreach (var elem in source) + tmp1145.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1145; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1146 = new List(source.Count); + foreach (var elem in source) + tmp1146.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1146; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1147 = new List(source.Count); + foreach (var elem in source) + tmp1147.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1147; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1148 = new List(source.Count); + foreach (var elem in source) + tmp1148.Add(elem); + return tmp1148; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1149 = new List(source.Count); + foreach (var elem in source) + tmp1149.Add(elem); + return tmp1149; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1150 = new List(source.Count); + foreach (var elem in source) + tmp1150.Add(elem); + return tmp1150; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1151 = new List(source.Count); + foreach (var elem in source) + tmp1151.Add(elem); + return tmp1151; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1152 = new List(source.Count); + foreach (var elem in source) + tmp1152.Add((elem != null) ? elem : null); + return tmp1152; + } + + + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs new file mode 100644 index 0000000000..2debd21b4d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs @@ -0,0 +1,24 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TCacheLookupResult + { + CACHE_INELIGIBLE = 0, + LOCAL_CACHE_HIT = 1, + REMOTE_CACHE_HIT = 2, + CACHE_MISS = 3, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs new file mode 100644 index 0000000000..a5fb396318 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string DelegationToken { get; set; } + + public TCancelDelegationTokenReq() + { + } + + public TCancelDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() + { + this.SessionHandle = sessionHandle; + this.DelegationToken = delegationToken; + } + + public TCancelDelegationTokenReq DeepCopy() + { + var tmp608 = new TCancelDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp608.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((DelegationToken != null)) + { + tmp608.DelegationToken = this.DelegationToken; + } + return tmp608; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_delegationToken = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + isset_delegationToken = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_delegationToken) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp609 = new TStruct("TCancelDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp609, cancellationToken); + var tmp610 = new TField(); + if((SessionHandle != null)) + { + tmp610.Name = "sessionHandle"; + tmp610.Type = TType.Struct; + tmp610.ID = 1; + await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null)) + { + tmp610.Name = "delegationToken"; + tmp610.Type = TType.String; + tmp610.ID = 2; + await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(DelegationToken, other.DelegationToken); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((DelegationToken != null)) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp611 = new StringBuilder("TCancelDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp611.Append(", SessionHandle: "); + SessionHandle.ToString(tmp611); + } + if((DelegationToken != null)) + { + tmp611.Append(", DelegationToken: "); + DelegationToken.ToString(tmp611); + } + tmp611.Append(')'); + return tmp611.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs new file mode 100644 index 0000000000..441914745c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelDelegationTokenResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCancelDelegationTokenResp() + { + } + + public TCancelDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCancelDelegationTokenResp DeepCopy() + { + var tmp613 = new TCancelDelegationTokenResp(); + if((Status != null)) + { + tmp613.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp613; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp614 = new TStruct("TCancelDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp614, cancellationToken); + var tmp615 = new TField(); + if((Status != null)) + { + tmp615.Name = "status"; + tmp615.Type = TType.Struct; + tmp615.ID = 1; + await oprot.WriteFieldBeginAsync(tmp615, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp616 = new StringBuilder("TCancelDelegationTokenResp("); + if((Status != null)) + { + tmp616.Append(", Status: "); + Status.ToString(tmp616); + } + tmp616.Append(')'); + return tmp616.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs new file mode 100644 index 0000000000..578ea6b882 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelOperationReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TCancelOperationReq() + { + } + + public TCancelOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TCancelOperationReq DeepCopy() + { + var tmp549 = new TCancelOperationReq(); + if((OperationHandle != null)) + { + tmp549.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp549; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp550 = new TStruct("TCancelOperationReq"); + await oprot.WriteStructBeginAsync(tmp550, cancellationToken); + var tmp551 = new TField(); + if((OperationHandle != null)) + { + tmp551.Name = "operationHandle"; + tmp551.Type = TType.Struct; + tmp551.ID = 1; + await oprot.WriteFieldBeginAsync(tmp551, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelOperationReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp552 = new StringBuilder("TCancelOperationReq("); + if((OperationHandle != null)) + { + tmp552.Append(", OperationHandle: "); + OperationHandle.ToString(tmp552); + } + tmp552.Append(')'); + return tmp552.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs new file mode 100644 index 0000000000..4a76a9a56a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelOperationResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCancelOperationResp() + { + } + + public TCancelOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCancelOperationResp DeepCopy() + { + var tmp554 = new TCancelOperationResp(); + if((Status != null)) + { + tmp554.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp554; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp555 = new TStruct("TCancelOperationResp"); + await oprot.WriteStructBeginAsync(tmp555, cancellationToken); + var tmp556 = new TField(); + if((Status != null)) + { + tmp556.Name = "status"; + tmp556.Type = TType.Struct; + tmp556.ID = 1; + await oprot.WriteFieldBeginAsync(tmp556, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelOperationResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp557 = new StringBuilder("TCancelOperationResp("); + if((Status != null)) + { + tmp557.Append(", Status: "); + Status.ToString(tmp557); + } + tmp557.Append(')'); + return tmp557.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs new file mode 100644 index 0000000000..dfa4947412 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseOperationReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TCloseOperationReq() + { + } + + public TCloseOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TCloseOperationReq DeepCopy() + { + var tmp559 = new TCloseOperationReq(); + if((OperationHandle != null)) + { + tmp559.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp559; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp560 = new TStruct("TCloseOperationReq"); + await oprot.WriteStructBeginAsync(tmp560, cancellationToken); + var tmp561 = new TField(); + if((OperationHandle != null)) + { + tmp561.Name = "operationHandle"; + tmp561.Type = TType.Struct; + tmp561.ID = 1; + await oprot.WriteFieldBeginAsync(tmp561, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseOperationReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp562 = new StringBuilder("TCloseOperationReq("); + if((OperationHandle != null)) + { + tmp562.Append(", OperationHandle: "); + OperationHandle.ToString(tmp562); + } + tmp562.Append(')'); + return tmp562.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs new file mode 100644 index 0000000000..56d2a25f52 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseOperationResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCloseOperationResp() + { + } + + public TCloseOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCloseOperationResp DeepCopy() + { + var tmp564 = new TCloseOperationResp(); + if((Status != null)) + { + tmp564.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp564; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp565 = new TStruct("TCloseOperationResp"); + await oprot.WriteStructBeginAsync(tmp565, cancellationToken); + var tmp566 = new TField(); + if((Status != null)) + { + tmp566.Name = "status"; + tmp566.Type = TType.Struct; + tmp566.ID = 1; + await oprot.WriteFieldBeginAsync(tmp566, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseOperationResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp567 = new StringBuilder("TCloseOperationResp("); + if((Status != null)) + { + tmp567.Append(", Status: "); + Status.ToString(tmp567); + } + tmp567.Append(')'); + return tmp567.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs new file mode 100644 index 0000000000..2b0d50c4df --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseSessionReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public TCloseSessionReq() + { + } + + public TCloseSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TCloseSessionReq DeepCopy() + { + var tmp332 = new TCloseSessionReq(); + if((SessionHandle != null)) + { + tmp332.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + return tmp332; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp333 = new TStruct("TCloseSessionReq"); + await oprot.WriteStructBeginAsync(tmp333, cancellationToken); + var tmp334 = new TField(); + if((SessionHandle != null)) + { + tmp334.Name = "sessionHandle"; + tmp334.Type = TType.Struct; + tmp334.ID = 1; + await oprot.WriteFieldBeginAsync(tmp334, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseSessionReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp335 = new StringBuilder("TCloseSessionReq("); + if((SessionHandle != null)) + { + tmp335.Append(", SessionHandle: "); + SessionHandle.ToString(tmp335); + } + tmp335.Append(')'); + return tmp335.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs new file mode 100644 index 0000000000..27667a4bbd --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseSessionResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCloseSessionResp() + { + } + + public TCloseSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCloseSessionResp DeepCopy() + { + var tmp337 = new TCloseSessionResp(); + if((Status != null)) + { + tmp337.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp337; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp338 = new TStruct("TCloseSessionResp"); + await oprot.WriteStructBeginAsync(tmp338, cancellationToken); + var tmp339 = new TField(); + if((Status != null)) + { + tmp339.Name = "status"; + tmp339.Type = TType.Struct; + tmp339.ID = 1; + await oprot.WriteFieldBeginAsync(tmp339, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseSessionResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp340 = new StringBuilder("TCloseSessionResp("); + if((Status != null)) + { + tmp340.Append(", Status: "); + Status.ToString(tmp340); + } + tmp340.Append(')'); + return tmp340.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs new file mode 100644 index 0000000000..4dea57487b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs @@ -0,0 +1,28 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TCloudFetchDisabledReason + { + ARROW_SUPPORT = 0, + CLOUD_FETCH_SUPPORT = 1, + PROTOCOL_VERSION = 2, + REGION_SUPPORT = 3, + BLOCKLISTED_OPERATION = 4, + SMALL_RESULT_SIZE = 5, + CUSTOMER_STORAGE_SUPPORT = 6, + UNKNOWN = 7, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs new file mode 100644 index 0000000000..59126847b5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs @@ -0,0 +1,536 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumn : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn _boolVal; + private global::Apache.Hive.Service.Rpc.Thrift.TByteColumn _byteVal; + private global::Apache.Hive.Service.Rpc.Thrift.TI16Column _i16Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI32Column _i32Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI64Column _i64Val; + private global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn _doubleVal; + private global::Apache.Hive.Service.Rpc.Thrift.TStringColumn _stringVal; + private global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn _binaryVal; + + public global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn BoolVal + { + get + { + return _boolVal; + } + set + { + __isset.boolVal = true; + this._boolVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TByteColumn ByteVal + { + get + { + return _byteVal; + } + set + { + __isset.byteVal = true; + this._byteVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI16Column I16Val + { + get + { + return _i16Val; + } + set + { + __isset.i16Val = true; + this._i16Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI32Column I32Val + { + get + { + return _i32Val; + } + set + { + __isset.i32Val = true; + this._i32Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI64Column I64Val + { + get + { + return _i64Val; + } + set + { + __isset.i64Val = true; + this._i64Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn DoubleVal + { + get + { + return _doubleVal; + } + set + { + __isset.doubleVal = true; + this._doubleVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStringColumn StringVal + { + get + { + return _stringVal; + } + set + { + __isset.stringVal = true; + this._stringVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn BinaryVal + { + get + { + return _binaryVal; + } + set + { + __isset.binaryVal = true; + this._binaryVal = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool boolVal; + public bool byteVal; + public bool i16Val; + public bool i32Val; + public bool i64Val; + public bool doubleVal; + public bool stringVal; + public bool binaryVal; + } + + public TColumn() + { + } + + public TColumn DeepCopy() + { + var tmp204 = new TColumn(); + if((BoolVal != null) && __isset.boolVal) + { + tmp204.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn)this.BoolVal.DeepCopy(); + } + tmp204.__isset.boolVal = this.__isset.boolVal; + if((ByteVal != null) && __isset.byteVal) + { + tmp204.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteColumn)this.ByteVal.DeepCopy(); + } + tmp204.__isset.byteVal = this.__isset.byteVal; + if((I16Val != null) && __isset.i16Val) + { + tmp204.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Column)this.I16Val.DeepCopy(); + } + tmp204.__isset.i16Val = this.__isset.i16Val; + if((I32Val != null) && __isset.i32Val) + { + tmp204.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Column)this.I32Val.DeepCopy(); + } + tmp204.__isset.i32Val = this.__isset.i32Val; + if((I64Val != null) && __isset.i64Val) + { + tmp204.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Column)this.I64Val.DeepCopy(); + } + tmp204.__isset.i64Val = this.__isset.i64Val; + if((DoubleVal != null) && __isset.doubleVal) + { + tmp204.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn)this.DoubleVal.DeepCopy(); + } + tmp204.__isset.doubleVal = this.__isset.doubleVal; + if((StringVal != null) && __isset.stringVal) + { + tmp204.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringColumn)this.StringVal.DeepCopy(); + } + tmp204.__isset.stringVal = this.__isset.stringVal; + if((BinaryVal != null) && __isset.binaryVal) + { + tmp204.BinaryVal = (global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn)this.BinaryVal.DeepCopy(); + } + tmp204.__isset.binaryVal = this.__isset.binaryVal; + return tmp204; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn(); + await BoolVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteColumn(); + await ByteVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Column(); + await I16Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Column(); + await I32Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Column(); + await I64Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn(); + await DoubleVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Struct) + { + StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringColumn(); + await StringVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.Struct) + { + BinaryVal = new global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn(); + await BinaryVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp205 = new TStruct("TColumn"); + await oprot.WriteStructBeginAsync(tmp205, cancellationToken); + var tmp206 = new TField(); + if((BoolVal != null) && __isset.boolVal) + { + tmp206.Name = "boolVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 1; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await BoolVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ByteVal != null) && __isset.byteVal) + { + tmp206.Name = "byteVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 2; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await ByteVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I16Val != null) && __isset.i16Val) + { + tmp206.Name = "i16Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 3; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I16Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I32Val != null) && __isset.i32Val) + { + tmp206.Name = "i32Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 4; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I32Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I64Val != null) && __isset.i64Val) + { + tmp206.Name = "i64Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 5; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I64Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DoubleVal != null) && __isset.doubleVal) + { + tmp206.Name = "doubleVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 6; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await DoubleVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringVal != null) && __isset.stringVal) + { + tmp206.Name = "stringVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 7; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await StringVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((BinaryVal != null) && __isset.binaryVal) + { + tmp206.Name = "binaryVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 8; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await BinaryVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) + && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) + && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) + && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) + && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) + && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) + && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))) + && ((__isset.binaryVal == other.__isset.binaryVal) && ((!__isset.binaryVal) || (global::System.Object.Equals(BinaryVal, other.BinaryVal)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((BoolVal != null) && __isset.boolVal) + { + hashcode = (hashcode * 397) + BoolVal.GetHashCode(); + } + if((ByteVal != null) && __isset.byteVal) + { + hashcode = (hashcode * 397) + ByteVal.GetHashCode(); + } + if((I16Val != null) && __isset.i16Val) + { + hashcode = (hashcode * 397) + I16Val.GetHashCode(); + } + if((I32Val != null) && __isset.i32Val) + { + hashcode = (hashcode * 397) + I32Val.GetHashCode(); + } + if((I64Val != null) && __isset.i64Val) + { + hashcode = (hashcode * 397) + I64Val.GetHashCode(); + } + if((DoubleVal != null) && __isset.doubleVal) + { + hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); + } + if((StringVal != null) && __isset.stringVal) + { + hashcode = (hashcode * 397) + StringVal.GetHashCode(); + } + if((BinaryVal != null) && __isset.binaryVal) + { + hashcode = (hashcode * 397) + BinaryVal.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp207 = new StringBuilder("TColumn("); + int tmp208 = 0; + if((BoolVal != null) && __isset.boolVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("BoolVal: "); + BoolVal.ToString(tmp207); + } + if((ByteVal != null) && __isset.byteVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("ByteVal: "); + ByteVal.ToString(tmp207); + } + if((I16Val != null) && __isset.i16Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I16Val: "); + I16Val.ToString(tmp207); + } + if((I32Val != null) && __isset.i32Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I32Val: "); + I32Val.ToString(tmp207); + } + if((I64Val != null) && __isset.i64Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I64Val: "); + I64Val.ToString(tmp207); + } + if((DoubleVal != null) && __isset.doubleVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("DoubleVal: "); + DoubleVal.ToString(tmp207); + } + if((StringVal != null) && __isset.stringVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("StringVal: "); + StringVal.ToString(tmp207); + } + if((BinaryVal != null) && __isset.binaryVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("BinaryVal: "); + BinaryVal.ToString(tmp207); + } + tmp207.Append(')'); + return tmp207.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs new file mode 100644 index 0000000000..9c27cbeb1d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs @@ -0,0 +1,295 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumnDesc : TBase + { + private string _comment; + + public string ColumnName { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc TypeDesc { get; set; } + + public int Position { get; set; } + + public string Comment + { + get + { + return _comment; + } + set + { + __isset.comment = true; + this._comment = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool comment; + } + + public TColumnDesc() + { + } + + public TColumnDesc(string columnName, global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc typeDesc, int position) : this() + { + this.ColumnName = columnName; + this.TypeDesc = typeDesc; + this.Position = position; + } + + public TColumnDesc DeepCopy() + { + var tmp69 = new TColumnDesc(); + if((ColumnName != null)) + { + tmp69.ColumnName = this.ColumnName; + } + if((TypeDesc != null)) + { + tmp69.TypeDesc = (global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc)this.TypeDesc.DeepCopy(); + } + tmp69.Position = this.Position; + if((Comment != null) && __isset.comment) + { + tmp69.Comment = this.Comment; + } + tmp69.__isset.comment = this.__isset.comment; + return tmp69; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_columnName = false; + bool isset_typeDesc = false; + bool isset_position = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + ColumnName = await iprot.ReadStringAsync(cancellationToken); + isset_columnName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + TypeDesc = new global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc(); + await TypeDesc.ReadAsync(iprot, cancellationToken); + isset_typeDesc = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I32) + { + Position = await iprot.ReadI32Async(cancellationToken); + isset_position = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Comment = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_columnName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_typeDesc) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_position) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp70 = new TStruct("TColumnDesc"); + await oprot.WriteStructBeginAsync(tmp70, cancellationToken); + var tmp71 = new TField(); + if((ColumnName != null)) + { + tmp71.Name = "columnName"; + tmp71.Type = TType.String; + tmp71.ID = 1; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteStringAsync(ColumnName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TypeDesc != null)) + { + tmp71.Name = "typeDesc"; + tmp71.Type = TType.Struct; + tmp71.ID = 2; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await TypeDesc.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp71.Name = "position"; + tmp71.Type = TType.I32; + tmp71.ID = 3; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteI32Async(Position, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Comment != null) && __isset.comment) + { + tmp71.Name = "comment"; + tmp71.Type = TType.String; + tmp71.ID = 4; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteStringAsync(Comment, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumnDesc other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(ColumnName, other.ColumnName) + && global::System.Object.Equals(TypeDesc, other.TypeDesc) + && global::System.Object.Equals(Position, other.Position) + && ((__isset.comment == other.__isset.comment) && ((!__isset.comment) || (global::System.Object.Equals(Comment, other.Comment)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ColumnName != null)) + { + hashcode = (hashcode * 397) + ColumnName.GetHashCode(); + } + if((TypeDesc != null)) + { + hashcode = (hashcode * 397) + TypeDesc.GetHashCode(); + } + hashcode = (hashcode * 397) + Position.GetHashCode(); + if((Comment != null) && __isset.comment) + { + hashcode = (hashcode * 397) + Comment.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp72 = new StringBuilder("TColumnDesc("); + if((ColumnName != null)) + { + tmp72.Append(", ColumnName: "); + ColumnName.ToString(tmp72); + } + if((TypeDesc != null)) + { + tmp72.Append(", TypeDesc: "); + TypeDesc.ToString(tmp72); + } + tmp72.Append(", Position: "); + Position.ToString(tmp72); + if((Comment != null) && __isset.comment) + { + tmp72.Append(", Comment: "); + Comment.ToString(tmp72); + } + tmp72.Append(')'); + return tmp72.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs new file mode 100644 index 0000000000..012db5de92 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs @@ -0,0 +1,485 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumnValue : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TBoolValue _boolVal; + private global::Apache.Hive.Service.Rpc.Thrift.TByteValue _byteVal; + private global::Apache.Hive.Service.Rpc.Thrift.TI16Value _i16Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI32Value _i32Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI64Value _i64Val; + private global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue _doubleVal; + private global::Apache.Hive.Service.Rpc.Thrift.TStringValue _stringVal; + + public global::Apache.Hive.Service.Rpc.Thrift.TBoolValue BoolVal + { + get + { + return _boolVal; + } + set + { + __isset.boolVal = true; + this._boolVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TByteValue ByteVal + { + get + { + return _byteVal; + } + set + { + __isset.byteVal = true; + this._byteVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI16Value I16Val + { + get + { + return _i16Val; + } + set + { + __isset.i16Val = true; + this._i16Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI32Value I32Val + { + get + { + return _i32Val; + } + set + { + __isset.i32Val = true; + this._i32Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI64Value I64Val + { + get + { + return _i64Val; + } + set + { + __isset.i64Val = true; + this._i64Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue DoubleVal + { + get + { + return _doubleVal; + } + set + { + __isset.doubleVal = true; + this._doubleVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStringValue StringVal + { + get + { + return _stringVal; + } + set + { + __isset.stringVal = true; + this._stringVal = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool boolVal; + public bool byteVal; + public bool i16Val; + public bool i32Val; + public bool i64Val; + public bool doubleVal; + public bool stringVal; + } + + public TColumnValue() + { + } + + public TColumnValue DeepCopy() + { + var tmp118 = new TColumnValue(); + if((BoolVal != null) && __isset.boolVal) + { + tmp118.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolValue)this.BoolVal.DeepCopy(); + } + tmp118.__isset.boolVal = this.__isset.boolVal; + if((ByteVal != null) && __isset.byteVal) + { + tmp118.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteValue)this.ByteVal.DeepCopy(); + } + tmp118.__isset.byteVal = this.__isset.byteVal; + if((I16Val != null) && __isset.i16Val) + { + tmp118.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Value)this.I16Val.DeepCopy(); + } + tmp118.__isset.i16Val = this.__isset.i16Val; + if((I32Val != null) && __isset.i32Val) + { + tmp118.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Value)this.I32Val.DeepCopy(); + } + tmp118.__isset.i32Val = this.__isset.i32Val; + if((I64Val != null) && __isset.i64Val) + { + tmp118.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Value)this.I64Val.DeepCopy(); + } + tmp118.__isset.i64Val = this.__isset.i64Val; + if((DoubleVal != null) && __isset.doubleVal) + { + tmp118.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue)this.DoubleVal.DeepCopy(); + } + tmp118.__isset.doubleVal = this.__isset.doubleVal; + if((StringVal != null) && __isset.stringVal) + { + tmp118.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringValue)this.StringVal.DeepCopy(); + } + tmp118.__isset.stringVal = this.__isset.stringVal; + return tmp118; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolValue(); + await BoolVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteValue(); + await ByteVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Value(); + await I16Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Value(); + await I32Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Value(); + await I64Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue(); + await DoubleVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Struct) + { + StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringValue(); + await StringVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp119 = new TStruct("TColumnValue"); + await oprot.WriteStructBeginAsync(tmp119, cancellationToken); + var tmp120 = new TField(); + if((BoolVal != null) && __isset.boolVal) + { + tmp120.Name = "boolVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 1; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await BoolVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ByteVal != null) && __isset.byteVal) + { + tmp120.Name = "byteVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 2; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await ByteVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I16Val != null) && __isset.i16Val) + { + tmp120.Name = "i16Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 3; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I16Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I32Val != null) && __isset.i32Val) + { + tmp120.Name = "i32Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 4; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I32Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I64Val != null) && __isset.i64Val) + { + tmp120.Name = "i64Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 5; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I64Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DoubleVal != null) && __isset.doubleVal) + { + tmp120.Name = "doubleVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 6; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await DoubleVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringVal != null) && __isset.stringVal) + { + tmp120.Name = "stringVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 7; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await StringVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumnValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) + && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) + && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) + && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) + && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) + && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) + && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((BoolVal != null) && __isset.boolVal) + { + hashcode = (hashcode * 397) + BoolVal.GetHashCode(); + } + if((ByteVal != null) && __isset.byteVal) + { + hashcode = (hashcode * 397) + ByteVal.GetHashCode(); + } + if((I16Val != null) && __isset.i16Val) + { + hashcode = (hashcode * 397) + I16Val.GetHashCode(); + } + if((I32Val != null) && __isset.i32Val) + { + hashcode = (hashcode * 397) + I32Val.GetHashCode(); + } + if((I64Val != null) && __isset.i64Val) + { + hashcode = (hashcode * 397) + I64Val.GetHashCode(); + } + if((DoubleVal != null) && __isset.doubleVal) + { + hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); + } + if((StringVal != null) && __isset.stringVal) + { + hashcode = (hashcode * 397) + StringVal.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp121 = new StringBuilder("TColumnValue("); + int tmp122 = 0; + if((BoolVal != null) && __isset.boolVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("BoolVal: "); + BoolVal.ToString(tmp121); + } + if((ByteVal != null) && __isset.byteVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("ByteVal: "); + ByteVal.ToString(tmp121); + } + if((I16Val != null) && __isset.i16Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I16Val: "); + I16Val.ToString(tmp121); + } + if((I32Val != null) && __isset.i32Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I32Val: "); + I32Val.ToString(tmp121); + } + if((I64Val != null) && __isset.i64Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I64Val: "); + I64Val.ToString(tmp121); + } + if((DoubleVal != null) && __isset.doubleVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("DoubleVal: "); + DoubleVal.ToString(tmp121); + } + if((StringVal != null) && __isset.stringVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("StringVal: "); + StringVal.ToString(tmp121); + } + tmp121.Append(')'); + return tmp121.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs new file mode 100644 index 0000000000..eae1a362ec --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlCloudResultFile : TBase + { + + public string FilePath { get; set; } + + public long StartRowOffset { get; set; } + + public long RowCount { get; set; } + + public long UncompressedBytes { get; set; } + + public long CompressedBytes { get; set; } + + public TDBSqlCloudResultFile() + { + } + + public TDBSqlCloudResultFile(string filePath, long startRowOffset, long rowCount, long uncompressedBytes, long compressedBytes) : this() + { + this.FilePath = filePath; + this.StartRowOffset = startRowOffset; + this.RowCount = rowCount; + this.UncompressedBytes = uncompressedBytes; + this.CompressedBytes = compressedBytes; + } + + public TDBSqlCloudResultFile DeepCopy() + { + var tmp583 = new TDBSqlCloudResultFile(); + if((FilePath != null)) + { + tmp583.FilePath = this.FilePath; + } + tmp583.StartRowOffset = this.StartRowOffset; + tmp583.RowCount = this.RowCount; + tmp583.UncompressedBytes = this.UncompressedBytes; + tmp583.CompressedBytes = this.CompressedBytes; + return tmp583; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_filePath = false; + bool isset_startRowOffset = false; + bool isset_rowCount = false; + bool isset_uncompressedBytes = false; + bool isset_compressedBytes = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + FilePath = await iprot.ReadStringAsync(cancellationToken); + isset_filePath = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I64) + { + UncompressedBytes = await iprot.ReadI64Async(cancellationToken); + isset_uncompressedBytes = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + CompressedBytes = await iprot.ReadI64Async(cancellationToken); + isset_compressedBytes = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_filePath) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_uncompressedBytes) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_compressedBytes) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp584 = new TStruct("TDBSqlCloudResultFile"); + await oprot.WriteStructBeginAsync(tmp584, cancellationToken); + var tmp585 = new TField(); + if((FilePath != null)) + { + tmp585.Name = "filePath"; + tmp585.Type = TType.String; + tmp585.ID = 1; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteStringAsync(FilePath, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp585.Name = "startRowOffset"; + tmp585.Type = TType.I64; + tmp585.ID = 2; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "rowCount"; + tmp585.Type = TType.I64; + tmp585.ID = 3; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "uncompressedBytes"; + tmp585.Type = TType.I64; + tmp585.ID = 4; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(UncompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "compressedBytes"; + tmp585.Type = TType.I64; + tmp585.ID = 5; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(CompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlCloudResultFile other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(FilePath, other.FilePath) + && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && global::System.Object.Equals(RowCount, other.RowCount) + && global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes) + && global::System.Object.Equals(CompressedBytes, other.CompressedBytes); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((FilePath != null)) + { + hashcode = (hashcode * 397) + FilePath.GetHashCode(); + } + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); + hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp586 = new StringBuilder("TDBSqlCloudResultFile("); + if((FilePath != null)) + { + tmp586.Append(", FilePath: "); + FilePath.ToString(tmp586); + } + tmp586.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp586); + tmp586.Append(", RowCount: "); + RowCount.ToString(tmp586); + tmp586.Append(", UncompressedBytes: "); + UncompressedBytes.ToString(tmp586); + tmp586.Append(", CompressedBytes: "); + CompressedBytes.ToString(tmp586); + tmp586.Append(')'); + return tmp586.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs new file mode 100644 index 0000000000..9249cec0c9 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlConfValue : TBase + { + private string _value; + + public string Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TDBSqlConfValue() + { + } + + public TDBSqlConfValue DeepCopy() + { + var tmp405 = new TDBSqlConfValue(); + if((Value != null) && __isset.@value) + { + tmp405.Value = this.Value; + } + tmp405.__isset.@value = this.__isset.@value; + return tmp405; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Value = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp406 = new TStruct("TDBSqlConfValue"); + await oprot.WriteStructBeginAsync(tmp406, cancellationToken); + var tmp407 = new TField(); + if((Value != null) && __isset.@value) + { + tmp407.Name = "value"; + tmp407.Type = TType.String; + tmp407.ID = 1; + await oprot.WriteFieldBeginAsync(tmp407, cancellationToken); + await oprot.WriteStringAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlConfValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Value != null) && __isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp408 = new StringBuilder("TDBSqlConfValue("); + int tmp409 = 0; + if((Value != null) && __isset.@value) + { + if(0 < tmp409++) { tmp408.Append(", "); } + tmp408.Append("Value: "); + Value.ToString(tmp408); + } + tmp408.Append(')'); + return tmp408.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs new file mode 100644 index 0000000000..50d2d295e0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlSessionCapabilities : TBase + { + private bool _supportsMultipleCatalogs; + + public bool SupportsMultipleCatalogs + { + get + { + return _supportsMultipleCatalogs; + } + set + { + __isset.supportsMultipleCatalogs = true; + this._supportsMultipleCatalogs = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool supportsMultipleCatalogs; + } + + public TDBSqlSessionCapabilities() + { + } + + public TDBSqlSessionCapabilities DeepCopy() + { + var tmp400 = new TDBSqlSessionCapabilities(); + if(__isset.supportsMultipleCatalogs) + { + tmp400.SupportsMultipleCatalogs = this.SupportsMultipleCatalogs; + } + tmp400.__isset.supportsMultipleCatalogs = this.__isset.supportsMultipleCatalogs; + return tmp400; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + SupportsMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp401 = new TStruct("TDBSqlSessionCapabilities"); + await oprot.WriteStructBeginAsync(tmp401, cancellationToken); + var tmp402 = new TField(); + if(__isset.supportsMultipleCatalogs) + { + tmp402.Name = "supportsMultipleCatalogs"; + tmp402.Type = TType.Bool; + tmp402.ID = 1; + await oprot.WriteFieldBeginAsync(tmp402, cancellationToken); + await oprot.WriteBoolAsync(SupportsMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlSessionCapabilities other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.supportsMultipleCatalogs == other.__isset.supportsMultipleCatalogs) && ((!__isset.supportsMultipleCatalogs) || (global::System.Object.Equals(SupportsMultipleCatalogs, other.SupportsMultipleCatalogs)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.supportsMultipleCatalogs) + { + hashcode = (hashcode * 397) + SupportsMultipleCatalogs.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp403 = new StringBuilder("TDBSqlSessionCapabilities("); + int tmp404 = 0; + if(__isset.supportsMultipleCatalogs) + { + if(0 < tmp404++) { tmp403.Append(", "); } + tmp403.Append("SupportsMultipleCatalogs: "); + SupportsMultipleCatalogs.ToString(tmp403); + } + tmp403.Append(')'); + return tmp403.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs new file mode 100644 index 0000000000..35ee4d908e --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs @@ -0,0 +1,548 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlSessionConf : TBase + { + private Dictionary _confs; + private List _tempViews; + private string _currentDatabase; + private string _currentCatalog; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities _sessionCapabilities; + private List _expressionsInfos; + private Dictionary _internalConfs; + + public Dictionary Confs + { + get + { + return _confs; + } + set + { + __isset.confs = true; + this._confs = value; + } + } + + public List TempViews + { + get + { + return _tempViews; + } + set + { + __isset.tempViews = true; + this._tempViews = value; + } + } + + public string CurrentDatabase + { + get + { + return _currentDatabase; + } + set + { + __isset.currentDatabase = true; + this._currentDatabase = value; + } + } + + public string CurrentCatalog + { + get + { + return _currentCatalog; + } + set + { + __isset.currentCatalog = true; + this._currentCatalog = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities SessionCapabilities + { + get + { + return _sessionCapabilities; + } + set + { + __isset.sessionCapabilities = true; + this._sessionCapabilities = value; + } + } + + public List ExpressionsInfos + { + get + { + return _expressionsInfos; + } + set + { + __isset.expressionsInfos = true; + this._expressionsInfos = value; + } + } + + public Dictionary InternalConfs + { + get + { + return _internalConfs; + } + set + { + __isset.internalConfs = true; + this._internalConfs = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool confs; + public bool tempViews; + public bool currentDatabase; + public bool currentCatalog; + public bool sessionCapabilities; + public bool expressionsInfos; + public bool internalConfs; + } + + public TDBSqlSessionConf() + { + } + + public TDBSqlSessionConf DeepCopy() + { + var tmp367 = new TDBSqlSessionConf(); + if((Confs != null) && __isset.confs) + { + tmp367.Confs = this.Confs.DeepCopy(); + } + tmp367.__isset.confs = this.__isset.confs; + if((TempViews != null) && __isset.tempViews) + { + tmp367.TempViews = this.TempViews.DeepCopy(); + } + tmp367.__isset.tempViews = this.__isset.tempViews; + if((CurrentDatabase != null) && __isset.currentDatabase) + { + tmp367.CurrentDatabase = this.CurrentDatabase; + } + tmp367.__isset.currentDatabase = this.__isset.currentDatabase; + if((CurrentCatalog != null) && __isset.currentCatalog) + { + tmp367.CurrentCatalog = this.CurrentCatalog; + } + tmp367.__isset.currentCatalog = this.__isset.currentCatalog; + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + tmp367.SessionCapabilities = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities)this.SessionCapabilities.DeepCopy(); + } + tmp367.__isset.sessionCapabilities = this.__isset.sessionCapabilities; + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + tmp367.ExpressionsInfos = this.ExpressionsInfos.DeepCopy(); + } + tmp367.__isset.expressionsInfos = this.__isset.expressionsInfos; + if((InternalConfs != null) && __isset.internalConfs) + { + tmp367.InternalConfs = this.InternalConfs.DeepCopy(); + } + tmp367.__isset.internalConfs = this.__isset.internalConfs; + return tmp367; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map368 = await iprot.ReadMapBeginAsync(cancellationToken); + Confs = new Dictionary(_map368.Count); + for(int _i369 = 0; _i369 < _map368.Count; ++_i369) + { + string _key370; + string _val371; + _key370 = await iprot.ReadStringAsync(cancellationToken); + _val371 = await iprot.ReadStringAsync(cancellationToken); + Confs[_key370] = _val371; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list372 = await iprot.ReadListBeginAsync(cancellationToken); + TempViews = new List(_list372.Count); + for(int _i373 = 0; _i373 < _list372.Count; ++_i373) + { + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _elem374; + _elem374 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView(); + await _elem374.ReadAsync(iprot, cancellationToken); + TempViews.Add(_elem374); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + CurrentDatabase = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + CurrentCatalog = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + SessionCapabilities = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities(); + await SessionCapabilities.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.List) + { + { + var _list375 = await iprot.ReadListBeginAsync(cancellationToken); + ExpressionsInfos = new List(_list375.Count); + for(int _i376 = 0; _i376 < _list375.Count; ++_i376) + { + global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _elem377; + _elem377 = new global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo(); + await _elem377.ReadAsync(iprot, cancellationToken); + ExpressionsInfos.Add(_elem377); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Map) + { + { + var _map378 = await iprot.ReadMapBeginAsync(cancellationToken); + InternalConfs = new Dictionary(_map378.Count); + for(int _i379 = 0; _i379 < _map378.Count; ++_i379) + { + string _key380; + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue _val381; + _key380 = await iprot.ReadStringAsync(cancellationToken); + _val381 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue(); + await _val381.ReadAsync(iprot, cancellationToken); + InternalConfs[_key380] = _val381; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp382 = new TStruct("TDBSqlSessionConf"); + await oprot.WriteStructBeginAsync(tmp382, cancellationToken); + var tmp383 = new TField(); + if((Confs != null) && __isset.confs) + { + tmp383.Name = "confs"; + tmp383.Type = TType.Map; + tmp383.ID = 1; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Confs.Count), cancellationToken); + foreach (string _iter384 in Confs.Keys) + { + await oprot.WriteStringAsync(_iter384, cancellationToken); + await oprot.WriteStringAsync(Confs[_iter384], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TempViews != null) && __isset.tempViews) + { + tmp383.Name = "tempViews"; + tmp383.Type = TType.List; + tmp383.ID = 2; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, TempViews.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _iter385 in TempViews) + { + await _iter385.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + tmp383.Name = "currentDatabase"; + tmp383.Type = TType.String; + tmp383.ID = 3; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteStringAsync(CurrentDatabase, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + tmp383.Name = "currentCatalog"; + tmp383.Type = TType.String; + tmp383.ID = 4; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteStringAsync(CurrentCatalog, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + tmp383.Name = "sessionCapabilities"; + tmp383.Type = TType.Struct; + tmp383.ID = 5; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await SessionCapabilities.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + tmp383.Name = "expressionsInfos"; + tmp383.Type = TType.List; + tmp383.ID = 6; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ExpressionsInfos.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _iter386 in ExpressionsInfos) + { + await _iter386.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InternalConfs != null) && __isset.internalConfs) + { + tmp383.Name = "internalConfs"; + tmp383.Type = TType.Map; + tmp383.ID = 7; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, InternalConfs.Count), cancellationToken); + foreach (string _iter387 in InternalConfs.Keys) + { + await oprot.WriteStringAsync(_iter387, cancellationToken); + await InternalConfs[_iter387].WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlSessionConf other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.confs == other.__isset.confs) && ((!__isset.confs) || (TCollections.Equals(Confs, other.Confs)))) + && ((__isset.tempViews == other.__isset.tempViews) && ((!__isset.tempViews) || (TCollections.Equals(TempViews, other.TempViews)))) + && ((__isset.currentDatabase == other.__isset.currentDatabase) && ((!__isset.currentDatabase) || (global::System.Object.Equals(CurrentDatabase, other.CurrentDatabase)))) + && ((__isset.currentCatalog == other.__isset.currentCatalog) && ((!__isset.currentCatalog) || (global::System.Object.Equals(CurrentCatalog, other.CurrentCatalog)))) + && ((__isset.sessionCapabilities == other.__isset.sessionCapabilities) && ((!__isset.sessionCapabilities) || (global::System.Object.Equals(SessionCapabilities, other.SessionCapabilities)))) + && ((__isset.expressionsInfos == other.__isset.expressionsInfos) && ((!__isset.expressionsInfos) || (TCollections.Equals(ExpressionsInfos, other.ExpressionsInfos)))) + && ((__isset.internalConfs == other.__isset.internalConfs) && ((!__isset.internalConfs) || (TCollections.Equals(InternalConfs, other.InternalConfs)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Confs != null) && __isset.confs) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Confs); + } + if((TempViews != null) && __isset.tempViews) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(TempViews); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + hashcode = (hashcode * 397) + CurrentDatabase.GetHashCode(); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + hashcode = (hashcode * 397) + CurrentCatalog.GetHashCode(); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + hashcode = (hashcode * 397) + SessionCapabilities.GetHashCode(); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ExpressionsInfos); + } + if((InternalConfs != null) && __isset.internalConfs) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(InternalConfs); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp388 = new StringBuilder("TDBSqlSessionConf("); + int tmp389 = 0; + if((Confs != null) && __isset.confs) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("Confs: "); + Confs.ToString(tmp388); + } + if((TempViews != null) && __isset.tempViews) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("TempViews: "); + TempViews.ToString(tmp388); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("CurrentDatabase: "); + CurrentDatabase.ToString(tmp388); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("CurrentCatalog: "); + CurrentCatalog.ToString(tmp388); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("SessionCapabilities: "); + SessionCapabilities.ToString(tmp388); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("ExpressionsInfos: "); + ExpressionsInfos.ToString(tmp388); + } + if((InternalConfs != null) && __isset.internalConfs) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("InternalConfs: "); + InternalConfs.ToString(tmp388); + } + tmp388.Append(')'); + return tmp388.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs new file mode 100644 index 0000000000..f542caf0b5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs @@ -0,0 +1,346 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlTempView : TBase + { + private string _name; + private string _sqlStatement; + private Dictionary _properties; + private string _viewSchema; + + public string Name + { + get + { + return _name; + } + set + { + __isset.name = true; + this._name = value; + } + } + + public string SqlStatement + { + get + { + return _sqlStatement; + } + set + { + __isset.sqlStatement = true; + this._sqlStatement = value; + } + } + + public Dictionary Properties + { + get + { + return _properties; + } + set + { + __isset.properties = true; + this._properties = value; + } + } + + public string ViewSchema + { + get + { + return _viewSchema; + } + set + { + __isset.viewSchema = true; + this._viewSchema = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool name; + public bool sqlStatement; + public bool properties; + public bool viewSchema; + } + + public TDBSqlTempView() + { + } + + public TDBSqlTempView DeepCopy() + { + var tmp390 = new TDBSqlTempView(); + if((Name != null) && __isset.name) + { + tmp390.Name = this.Name; + } + tmp390.__isset.name = this.__isset.name; + if((SqlStatement != null) && __isset.sqlStatement) + { + tmp390.SqlStatement = this.SqlStatement; + } + tmp390.__isset.sqlStatement = this.__isset.sqlStatement; + if((Properties != null) && __isset.properties) + { + tmp390.Properties = this.Properties.DeepCopy(); + } + tmp390.__isset.properties = this.__isset.properties; + if((ViewSchema != null) && __isset.viewSchema) + { + tmp390.ViewSchema = this.ViewSchema; + } + tmp390.__isset.viewSchema = this.__isset.viewSchema; + return tmp390; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Name = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + SqlStatement = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Map) + { + { + var _map391 = await iprot.ReadMapBeginAsync(cancellationToken); + Properties = new Dictionary(_map391.Count); + for(int _i392 = 0; _i392 < _map391.Count; ++_i392) + { + string _key393; + string _val394; + _key393 = await iprot.ReadStringAsync(cancellationToken); + _val394 = await iprot.ReadStringAsync(cancellationToken); + Properties[_key393] = _val394; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + ViewSchema = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp395 = new TStruct("TDBSqlTempView"); + await oprot.WriteStructBeginAsync(tmp395, cancellationToken); + var tmp396 = new TField(); + if((Name != null) && __isset.name) + { + tmp396.Name = "name"; + tmp396.Type = TType.String; + tmp396.ID = 1; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(Name, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + tmp396.Name = "sqlStatement"; + tmp396.Type = TType.String; + tmp396.ID = 2; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(SqlStatement, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Properties != null) && __isset.properties) + { + tmp396.Name = "properties"; + tmp396.Type = TType.Map; + tmp396.ID = 3; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Properties.Count), cancellationToken); + foreach (string _iter397 in Properties.Keys) + { + await oprot.WriteStringAsync(_iter397, cancellationToken); + await oprot.WriteStringAsync(Properties[_iter397], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ViewSchema != null) && __isset.viewSchema) + { + tmp396.Name = "viewSchema"; + tmp396.Type = TType.String; + tmp396.ID = 4; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(ViewSchema, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlTempView other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) + && ((__isset.sqlStatement == other.__isset.sqlStatement) && ((!__isset.sqlStatement) || (global::System.Object.Equals(SqlStatement, other.SqlStatement)))) + && ((__isset.properties == other.__isset.properties) && ((!__isset.properties) || (TCollections.Equals(Properties, other.Properties)))) + && ((__isset.viewSchema == other.__isset.viewSchema) && ((!__isset.viewSchema) || (global::System.Object.Equals(ViewSchema, other.ViewSchema)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Name != null) && __isset.name) + { + hashcode = (hashcode * 397) + Name.GetHashCode(); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + hashcode = (hashcode * 397) + SqlStatement.GetHashCode(); + } + if((Properties != null) && __isset.properties) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Properties); + } + if((ViewSchema != null) && __isset.viewSchema) + { + hashcode = (hashcode * 397) + ViewSchema.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp398 = new StringBuilder("TDBSqlTempView("); + int tmp399 = 0; + if((Name != null) && __isset.name) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("Name: "); + Name.ToString(tmp398); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("SqlStatement: "); + SqlStatement.ToString(tmp398); + } + if((Properties != null) && __isset.properties) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("Properties: "); + Properties.ToString(tmp398); + } + if((ViewSchema != null) && __isset.viewSchema) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("ViewSchema: "); + ViewSchema.ToString(tmp398); + } + tmp398.Append(')'); + return tmp398.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs new file mode 100644 index 0000000000..c2bd55a682 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs @@ -0,0 +1,199 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDoubleColumn : TBase + { + + public DoubleArray Values { get; set; } + + public TDoubleColumn() + { + } + + public TDoubleColumn(DoubleArray values) : this() + { + this.Values = values; + } + + public TDoubleColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list178 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list178.Count; + + buffer = new byte[length * 8]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i179 = 0; _i179 < length; ++_i179) + { + typedMemory.Span[_i179] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i179]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new DoubleArray(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp181 = new TStruct("TDoubleColumn"); + await oprot.WriteStructBeginAsync(tmp181, cancellationToken); + var tmp182 = new TField(); + if((Values != null)) + { + tmp182.Name = "values"; + tmp182.Type = TType.List; + tmp182.ID = 1; + await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Double, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + double _iter183 = Values.GetValue(i) ?? 0.0; + await oprot.WriteDoubleAsync(_iter183, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp182.Name = "nulls"; + tmp182.Type = TType.String; + tmp182.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDoubleColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp184 = new StringBuilder("TDoubleColumn("); + if((Values != null)) + { + tmp184.Append(", Values: "); + Values.ToString(tmp184); + } + tmp184.Append(')'); + return tmp184.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs new file mode 100644 index 0000000000..5a313862f5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDoubleValue : TBase + { + private double _value; + + public double Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TDoubleValue() + { + } + + public TDoubleValue DeepCopy() + { + var tmp108 = new TDoubleValue(); + if(__isset.@value) + { + tmp108.Value = this.Value; + } + tmp108.__isset.@value = this.__isset.@value; + return tmp108; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Double) + { + Value = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp109 = new TStruct("TDoubleValue"); + await oprot.WriteStructBeginAsync(tmp109, cancellationToken); + var tmp110 = new TField(); + if(__isset.@value) + { + tmp110.Name = "value"; + tmp110.Type = TType.Double; + tmp110.ID = 1; + await oprot.WriteFieldBeginAsync(tmp110, cancellationToken); + await oprot.WriteDoubleAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDoubleValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp111 = new StringBuilder("TDoubleValue("); + int tmp112 = 0; + if(__isset.@value) + { + if(0 < tmp112++) { tmp111.Append(", "); } + tmp111.Append("Value: "); + Value.ToString(tmp111); + } + tmp111.Append(')'); + return tmp111.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs new file mode 100644 index 0000000000..030fb5ec39 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs @@ -0,0 +1,388 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDownloadDataReq : TBase + { + private string _tableName; + private string _query; + private string _format; + private Dictionary _downloadOptions; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string Query + { + get + { + return _query; + } + set + { + __isset.query = true; + this._query = value; + } + } + + public string Format + { + get + { + return _format; + } + set + { + __isset.format = true; + this._format = value; + } + } + + public Dictionary DownloadOptions + { + get + { + return _downloadOptions; + } + set + { + __isset.downloadOptions = true; + this._downloadOptions = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool tableName; + public bool query; + public bool format; + public bool downloadOptions; + } + + public TDownloadDataReq() + { + } + + public TDownloadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TDownloadDataReq DeepCopy() + { + var tmp440 = new TDownloadDataReq(); + if((SessionHandle != null)) + { + tmp440.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((TableName != null) && __isset.tableName) + { + tmp440.TableName = this.TableName; + } + tmp440.__isset.tableName = this.__isset.tableName; + if((Query != null) && __isset.query) + { + tmp440.Query = this.Query; + } + tmp440.__isset.query = this.__isset.query; + if((Format != null) && __isset.format) + { + tmp440.Format = this.Format; + } + tmp440.__isset.format = this.__isset.format; + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp440.DownloadOptions = this.DownloadOptions.DeepCopy(); + } + tmp440.__isset.downloadOptions = this.__isset.downloadOptions; + return tmp440; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Query = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Format = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Map) + { + { + var _map441 = await iprot.ReadMapBeginAsync(cancellationToken); + DownloadOptions = new Dictionary(_map441.Count); + for(int _i442 = 0; _i442 < _map441.Count; ++_i442) + { + string _key443; + string _val444; + _key443 = await iprot.ReadStringAsync(cancellationToken); + _val444 = await iprot.ReadStringAsync(cancellationToken); + DownloadOptions[_key443] = _val444; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp445 = new TStruct("TDownloadDataReq"); + await oprot.WriteStructBeginAsync(tmp445, cancellationToken); + var tmp446 = new TField(); + if((SessionHandle != null)) + { + tmp446.Name = "sessionHandle"; + tmp446.Type = TType.Struct; + tmp446.ID = 1; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp446.Name = "tableName"; + tmp446.Type = TType.String; + tmp446.ID = 2; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Query != null) && __isset.query) + { + tmp446.Name = "query"; + tmp446.Type = TType.String; + tmp446.ID = 3; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(Query, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Format != null) && __isset.format) + { + tmp446.Name = "format"; + tmp446.Type = TType.String; + tmp446.ID = 4; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(Format, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp446.Name = "downloadOptions"; + tmp446.Type = TType.Map; + tmp446.ID = 5; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, DownloadOptions.Count), cancellationToken); + foreach (string _iter447 in DownloadOptions.Keys) + { + await oprot.WriteStringAsync(_iter447, cancellationToken); + await oprot.WriteStringAsync(DownloadOptions[_iter447], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDownloadDataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.query == other.__isset.query) && ((!__isset.query) || (global::System.Object.Equals(Query, other.Query)))) + && ((__isset.format == other.__isset.format) && ((!__isset.format) || (global::System.Object.Equals(Format, other.Format)))) + && ((__isset.downloadOptions == other.__isset.downloadOptions) && ((!__isset.downloadOptions) || (TCollections.Equals(DownloadOptions, other.DownloadOptions)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((Query != null) && __isset.query) + { + hashcode = (hashcode * 397) + Query.GetHashCode(); + } + if((Format != null) && __isset.format) + { + hashcode = (hashcode * 397) + Format.GetHashCode(); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(DownloadOptions); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp448 = new StringBuilder("TDownloadDataReq("); + if((SessionHandle != null)) + { + tmp448.Append(", SessionHandle: "); + SessionHandle.ToString(tmp448); + } + if((TableName != null) && __isset.tableName) + { + tmp448.Append(", TableName: "); + TableName.ToString(tmp448); + } + if((Query != null) && __isset.query) + { + tmp448.Append(", Query: "); + Query.ToString(tmp448); + } + if((Format != null) && __isset.format) + { + tmp448.Append(", Format: "); + Format.ToString(tmp448); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp448.Append(", DownloadOptions: "); + DownloadOptions.ToString(tmp448); + } + tmp448.Append(')'); + return tmp448.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs new file mode 100644 index 0000000000..75cbf209df --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDownloadDataResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TDownloadDataResp() + { + } + + public TDownloadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.Status = status; + this.OperationHandle = operationHandle; + } + + public TDownloadDataResp DeepCopy() + { + var tmp450 = new TDownloadDataResp(); + if((Status != null)) + { + tmp450.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null)) + { + tmp450.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp450; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp451 = new TStruct("TDownloadDataResp"); + await oprot.WriteStructBeginAsync(tmp451, cancellationToken); + var tmp452 = new TField(); + if((Status != null)) + { + tmp452.Name = "status"; + tmp452.Type = TType.Struct; + tmp452.ID = 1; + await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null)) + { + tmp452.Name = "operationHandle"; + tmp452.Type = TType.Struct; + tmp452.ID = 2; + await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDownloadDataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp453 = new StringBuilder("TDownloadDataResp("); + if((Status != null)) + { + tmp453.Append(", Status: "); + Status.ToString(tmp453); + } + if((OperationHandle != null)) + { + tmp453.Append(", OperationHandle: "); + OperationHandle.ToString(tmp453); + } + tmp453.Append(')'); + return tmp453.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs new file mode 100644 index 0000000000..b6e5795e83 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs @@ -0,0 +1,1124 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExecuteStatementReq : TBase + { + private Dictionary _confOverlay; + private bool _runAsync; + private long _queryTimeout; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _canReadArrowResult; + private bool _canDownloadResult; + private bool _canDecompressLZ4Result; + private long _maxBytesPerFile; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes _useArrowNativeTypes; + private long _resultRowLimit; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + private bool _rejectHighCostQueries; + private double _estimatedCost; + private short _executionVersion; + private string _requestValidation; + private int _resultPersistenceMode; + private bool _trimArrowBatchesToLimit; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string Statement { get; set; } + + public Dictionary ConfOverlay + { + get + { + return _confOverlay; + } + set + { + __isset.confOverlay = true; + this._confOverlay = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public long QueryTimeout + { + get + { + return _queryTimeout; + } + set + { + __isset.queryTimeout = true; + this._queryTimeout = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool CanReadArrowResult + { + get + { + return _canReadArrowResult; + } + set + { + __isset.canReadArrowResult = true; + this._canReadArrowResult = value; + } + } + + public bool CanDownloadResult + { + get + { + return _canDownloadResult; + } + set + { + __isset.canDownloadResult = true; + this._canDownloadResult = value; + } + } + + public bool CanDecompressLZ4Result + { + get + { + return _canDecompressLZ4Result; + } + set + { + __isset.canDecompressLZ4Result = true; + this._canDecompressLZ4Result = value; + } + } + + public long MaxBytesPerFile + { + get + { + return _maxBytesPerFile; + } + set + { + __isset.maxBytesPerFile = true; + this._maxBytesPerFile = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes UseArrowNativeTypes + { + get + { + return _useArrowNativeTypes; + } + set + { + __isset.useArrowNativeTypes = true; + this._useArrowNativeTypes = value; + } + } + + public long ResultRowLimit + { + get + { + return _resultRowLimit; + } + set + { + __isset.resultRowLimit = true; + this._resultRowLimit = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + public bool RejectHighCostQueries + { + get + { + return _rejectHighCostQueries; + } + set + { + __isset.rejectHighCostQueries = true; + this._rejectHighCostQueries = value; + } + } + + public double EstimatedCost + { + get + { + return _estimatedCost; + } + set + { + __isset.estimatedCost = true; + this._estimatedCost = value; + } + } + + public short ExecutionVersion + { + get + { + return _executionVersion; + } + set + { + __isset.executionVersion = true; + this._executionVersion = value; + } + } + + public string RequestValidation + { + get + { + return _requestValidation; + } + set + { + __isset.requestValidation = true; + this._requestValidation = value; + } + } + + public int ResultPersistenceMode + { + get + { + return _resultPersistenceMode; + } + set + { + __isset.resultPersistenceMode = true; + this._resultPersistenceMode = value; + } + } + + public bool TrimArrowBatchesToLimit + { + get + { + return _trimArrowBatchesToLimit; + } + set + { + __isset.trimArrowBatchesToLimit = true; + this._trimArrowBatchesToLimit = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool confOverlay; + public bool runAsync; + public bool queryTimeout; + public bool getDirectResults; + public bool canReadArrowResult; + public bool canDownloadResult; + public bool canDecompressLZ4Result; + public bool maxBytesPerFile; + public bool useArrowNativeTypes; + public bool resultRowLimit; + public bool operationId; + public bool sessionConf; + public bool rejectHighCostQueries; + public bool estimatedCost; + public bool executionVersion; + public bool requestValidation; + public bool resultPersistenceMode; + public bool trimArrowBatchesToLimit; + } + + public TExecuteStatementReq() + { + this._runAsync = false; + this.__isset.runAsync = true; + this._queryTimeout = 0; + this.__isset.queryTimeout = true; + } + + public TExecuteStatementReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string statement) : this() + { + this.SessionHandle = sessionHandle; + this.Statement = statement; + } + + public TExecuteStatementReq DeepCopy() + { + var tmp357 = new TExecuteStatementReq(); + if((SessionHandle != null)) + { + tmp357.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Statement != null)) + { + tmp357.Statement = this.Statement; + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp357.ConfOverlay = this.ConfOverlay.DeepCopy(); + } + tmp357.__isset.confOverlay = this.__isset.confOverlay; + if(__isset.runAsync) + { + tmp357.RunAsync = this.RunAsync; + } + tmp357.__isset.runAsync = this.__isset.runAsync; + if(__isset.queryTimeout) + { + tmp357.QueryTimeout = this.QueryTimeout; + } + tmp357.__isset.queryTimeout = this.__isset.queryTimeout; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp357.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp357.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.canReadArrowResult) + { + tmp357.CanReadArrowResult = this.CanReadArrowResult; + } + tmp357.__isset.canReadArrowResult = this.__isset.canReadArrowResult; + if(__isset.canDownloadResult) + { + tmp357.CanDownloadResult = this.CanDownloadResult; + } + tmp357.__isset.canDownloadResult = this.__isset.canDownloadResult; + if(__isset.canDecompressLZ4Result) + { + tmp357.CanDecompressLZ4Result = this.CanDecompressLZ4Result; + } + tmp357.__isset.canDecompressLZ4Result = this.__isset.canDecompressLZ4Result; + if(__isset.maxBytesPerFile) + { + tmp357.MaxBytesPerFile = this.MaxBytesPerFile; + } + tmp357.__isset.maxBytesPerFile = this.__isset.maxBytesPerFile; + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp357.UseArrowNativeTypes = (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes)this.UseArrowNativeTypes.DeepCopy(); + } + tmp357.__isset.useArrowNativeTypes = this.__isset.useArrowNativeTypes; + if(__isset.resultRowLimit) + { + tmp357.ResultRowLimit = this.ResultRowLimit; + } + tmp357.__isset.resultRowLimit = this.__isset.resultRowLimit; + if((OperationId != null) && __isset.operationId) + { + tmp357.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp357.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp357.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp357.__isset.sessionConf = this.__isset.sessionConf; + if(__isset.rejectHighCostQueries) + { + tmp357.RejectHighCostQueries = this.RejectHighCostQueries; + } + tmp357.__isset.rejectHighCostQueries = this.__isset.rejectHighCostQueries; + if(__isset.estimatedCost) + { + tmp357.EstimatedCost = this.EstimatedCost; + } + tmp357.__isset.estimatedCost = this.__isset.estimatedCost; + if(__isset.executionVersion) + { + tmp357.ExecutionVersion = this.ExecutionVersion; + } + tmp357.__isset.executionVersion = this.__isset.executionVersion; + if((RequestValidation != null) && __isset.requestValidation) + { + tmp357.RequestValidation = this.RequestValidation; + } + tmp357.__isset.requestValidation = this.__isset.requestValidation; + if(__isset.resultPersistenceMode) + { + tmp357.ResultPersistenceMode = this.ResultPersistenceMode; + } + tmp357.__isset.resultPersistenceMode = this.__isset.resultPersistenceMode; + if(__isset.trimArrowBatchesToLimit) + { + tmp357.TrimArrowBatchesToLimit = this.TrimArrowBatchesToLimit; + } + tmp357.__isset.trimArrowBatchesToLimit = this.__isset.trimArrowBatchesToLimit; + return tmp357; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_statement = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Statement = await iprot.ReadStringAsync(cancellationToken); + isset_statement = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Map) + { + { + var _map358 = await iprot.ReadMapBeginAsync(cancellationToken); + ConfOverlay = new Dictionary(_map358.Count); + for(int _i359 = 0; _i359 < _map358.Count; ++_i359) + { + string _key360; + string _val361; + _key360 = await iprot.ReadStringAsync(cancellationToken); + _val361 = await iprot.ReadStringAsync(cancellationToken); + ConfOverlay[_key360] = _val361; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + QueryTimeout = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + CanReadArrowResult = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Bool) + { + CanDownloadResult = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Bool) + { + CanDecompressLZ4Result = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.I64) + { + MaxBytesPerFile = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1286: + if (field.Type == TType.Struct) + { + UseArrowNativeTypes = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes(); + await UseArrowNativeTypes.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1287: + if (field.Type == TType.I64) + { + ResultRowLimit = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.Bool) + { + RejectHighCostQueries = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.Double) + { + EstimatedCost = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3333: + if (field.Type == TType.I16) + { + ExecutionVersion = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3334: + if (field.Type == TType.String) + { + RequestValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3335: + if (field.Type == TType.I32) + { + ResultPersistenceMode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3336: + if (field.Type == TType.Bool) + { + TrimArrowBatchesToLimit = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_statement) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp362 = new TStruct("TExecuteStatementReq"); + await oprot.WriteStructBeginAsync(tmp362, cancellationToken); + var tmp363 = new TField(); + if((SessionHandle != null)) + { + tmp363.Name = "sessionHandle"; + tmp363.Type = TType.Struct; + tmp363.ID = 1; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Statement != null)) + { + tmp363.Name = "statement"; + tmp363.Type = TType.String; + tmp363.ID = 2; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteStringAsync(Statement, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp363.Name = "confOverlay"; + tmp363.Type = TType.Map; + tmp363.ID = 3; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConfOverlay.Count), cancellationToken); + foreach (string _iter364 in ConfOverlay.Keys) + { + await oprot.WriteStringAsync(_iter364, cancellationToken); + await oprot.WriteStringAsync(ConfOverlay[_iter364], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp363.Name = "runAsync"; + tmp363.Type = TType.Bool; + tmp363.ID = 4; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.queryTimeout) + { + tmp363.Name = "queryTimeout"; + tmp363.Type = TType.I64; + tmp363.ID = 5; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(QueryTimeout, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp363.Name = "getDirectResults"; + tmp363.Type = TType.Struct; + tmp363.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canReadArrowResult) + { + tmp363.Name = "canReadArrowResult"; + tmp363.Type = TType.Bool; + tmp363.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanReadArrowResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canDownloadResult) + { + tmp363.Name = "canDownloadResult"; + tmp363.Type = TType.Bool; + tmp363.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanDownloadResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canDecompressLZ4Result) + { + tmp363.Name = "canDecompressLZ4Result"; + tmp363.Type = TType.Bool; + tmp363.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanDecompressLZ4Result, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxBytesPerFile) + { + tmp363.Name = "maxBytesPerFile"; + tmp363.Type = TType.I64; + tmp363.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(MaxBytesPerFile, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp363.Name = "useArrowNativeTypes"; + tmp363.Type = TType.Struct; + tmp363.ID = 1286; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await UseArrowNativeTypes.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultRowLimit) + { + tmp363.Name = "resultRowLimit"; + tmp363.Type = TType.I64; + tmp363.ID = 1287; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(ResultRowLimit, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp363.Name = "operationId"; + tmp363.Type = TType.Struct; + tmp363.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp363.Name = "sessionConf"; + tmp363.Type = TType.Struct; + tmp363.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.rejectHighCostQueries) + { + tmp363.Name = "rejectHighCostQueries"; + tmp363.Type = TType.Bool; + tmp363.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(RejectHighCostQueries, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.estimatedCost) + { + tmp363.Name = "estimatedCost"; + tmp363.Type = TType.Double; + tmp363.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteDoubleAsync(EstimatedCost, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.executionVersion) + { + tmp363.Name = "executionVersion"; + tmp363.Type = TType.I16; + tmp363.ID = 3333; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI16Async(ExecutionVersion, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((RequestValidation != null) && __isset.requestValidation) + { + tmp363.Name = "requestValidation"; + tmp363.Type = TType.String; + tmp363.ID = 3334; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteStringAsync(RequestValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultPersistenceMode) + { + tmp363.Name = "resultPersistenceMode"; + tmp363.Type = TType.I32; + tmp363.ID = 3335; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI32Async(ResultPersistenceMode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.trimArrowBatchesToLimit) + { + tmp363.Name = "trimArrowBatchesToLimit"; + tmp363.Type = TType.Bool; + tmp363.ID = 3336; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(TrimArrowBatchesToLimit, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExecuteStatementReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(Statement, other.Statement) + && ((__isset.confOverlay == other.__isset.confOverlay) && ((!__isset.confOverlay) || (TCollections.Equals(ConfOverlay, other.ConfOverlay)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.queryTimeout == other.__isset.queryTimeout) && ((!__isset.queryTimeout) || (global::System.Object.Equals(QueryTimeout, other.QueryTimeout)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.canReadArrowResult == other.__isset.canReadArrowResult) && ((!__isset.canReadArrowResult) || (global::System.Object.Equals(CanReadArrowResult, other.CanReadArrowResult)))) + && ((__isset.canDownloadResult == other.__isset.canDownloadResult) && ((!__isset.canDownloadResult) || (global::System.Object.Equals(CanDownloadResult, other.CanDownloadResult)))) + && ((__isset.canDecompressLZ4Result == other.__isset.canDecompressLZ4Result) && ((!__isset.canDecompressLZ4Result) || (global::System.Object.Equals(CanDecompressLZ4Result, other.CanDecompressLZ4Result)))) + && ((__isset.maxBytesPerFile == other.__isset.maxBytesPerFile) && ((!__isset.maxBytesPerFile) || (global::System.Object.Equals(MaxBytesPerFile, other.MaxBytesPerFile)))) + && ((__isset.useArrowNativeTypes == other.__isset.useArrowNativeTypes) && ((!__isset.useArrowNativeTypes) || (global::System.Object.Equals(UseArrowNativeTypes, other.UseArrowNativeTypes)))) + && ((__isset.resultRowLimit == other.__isset.resultRowLimit) && ((!__isset.resultRowLimit) || (global::System.Object.Equals(ResultRowLimit, other.ResultRowLimit)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) + && ((__isset.rejectHighCostQueries == other.__isset.rejectHighCostQueries) && ((!__isset.rejectHighCostQueries) || (global::System.Object.Equals(RejectHighCostQueries, other.RejectHighCostQueries)))) + && ((__isset.estimatedCost == other.__isset.estimatedCost) && ((!__isset.estimatedCost) || (global::System.Object.Equals(EstimatedCost, other.EstimatedCost)))) + && ((__isset.executionVersion == other.__isset.executionVersion) && ((!__isset.executionVersion) || (global::System.Object.Equals(ExecutionVersion, other.ExecutionVersion)))) + && ((__isset.requestValidation == other.__isset.requestValidation) && ((!__isset.requestValidation) || (global::System.Object.Equals(RequestValidation, other.RequestValidation)))) + && ((__isset.resultPersistenceMode == other.__isset.resultPersistenceMode) && ((!__isset.resultPersistenceMode) || (global::System.Object.Equals(ResultPersistenceMode, other.ResultPersistenceMode)))) + && ((__isset.trimArrowBatchesToLimit == other.__isset.trimArrowBatchesToLimit) && ((!__isset.trimArrowBatchesToLimit) || (global::System.Object.Equals(TrimArrowBatchesToLimit, other.TrimArrowBatchesToLimit)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Statement != null)) + { + hashcode = (hashcode * 397) + Statement.GetHashCode(); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ConfOverlay); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if(__isset.queryTimeout) + { + hashcode = (hashcode * 397) + QueryTimeout.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.canReadArrowResult) + { + hashcode = (hashcode * 397) + CanReadArrowResult.GetHashCode(); + } + if(__isset.canDownloadResult) + { + hashcode = (hashcode * 397) + CanDownloadResult.GetHashCode(); + } + if(__isset.canDecompressLZ4Result) + { + hashcode = (hashcode * 397) + CanDecompressLZ4Result.GetHashCode(); + } + if(__isset.maxBytesPerFile) + { + hashcode = (hashcode * 397) + MaxBytesPerFile.GetHashCode(); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + hashcode = (hashcode * 397) + UseArrowNativeTypes.GetHashCode(); + } + if(__isset.resultRowLimit) + { + hashcode = (hashcode * 397) + ResultRowLimit.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + if(__isset.rejectHighCostQueries) + { + hashcode = (hashcode * 397) + RejectHighCostQueries.GetHashCode(); + } + if(__isset.estimatedCost) + { + hashcode = (hashcode * 397) + EstimatedCost.GetHashCode(); + } + if(__isset.executionVersion) + { + hashcode = (hashcode * 397) + ExecutionVersion.GetHashCode(); + } + if((RequestValidation != null) && __isset.requestValidation) + { + hashcode = (hashcode * 397) + RequestValidation.GetHashCode(); + } + if(__isset.resultPersistenceMode) + { + hashcode = (hashcode * 397) + ResultPersistenceMode.GetHashCode(); + } + if(__isset.trimArrowBatchesToLimit) + { + hashcode = (hashcode * 397) + TrimArrowBatchesToLimit.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp365 = new StringBuilder("TExecuteStatementReq("); + if((SessionHandle != null)) + { + tmp365.Append(", SessionHandle: "); + SessionHandle.ToString(tmp365); + } + if((Statement != null)) + { + tmp365.Append(", Statement: "); + Statement.ToString(tmp365); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp365.Append(", ConfOverlay: "); + ConfOverlay.ToString(tmp365); + } + if(__isset.runAsync) + { + tmp365.Append(", RunAsync: "); + RunAsync.ToString(tmp365); + } + if(__isset.queryTimeout) + { + tmp365.Append(", QueryTimeout: "); + QueryTimeout.ToString(tmp365); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp365.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp365); + } + if(__isset.canReadArrowResult) + { + tmp365.Append(", CanReadArrowResult: "); + CanReadArrowResult.ToString(tmp365); + } + if(__isset.canDownloadResult) + { + tmp365.Append(", CanDownloadResult: "); + CanDownloadResult.ToString(tmp365); + } + if(__isset.canDecompressLZ4Result) + { + tmp365.Append(", CanDecompressLZ4Result: "); + CanDecompressLZ4Result.ToString(tmp365); + } + if(__isset.maxBytesPerFile) + { + tmp365.Append(", MaxBytesPerFile: "); + MaxBytesPerFile.ToString(tmp365); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp365.Append(", UseArrowNativeTypes: "); + UseArrowNativeTypes.ToString(tmp365); + } + if(__isset.resultRowLimit) + { + tmp365.Append(", ResultRowLimit: "); + ResultRowLimit.ToString(tmp365); + } + if((OperationId != null) && __isset.operationId) + { + tmp365.Append(", OperationId: "); + OperationId.ToString(tmp365); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp365.Append(", SessionConf: "); + SessionConf.ToString(tmp365); + } + if(__isset.rejectHighCostQueries) + { + tmp365.Append(", RejectHighCostQueries: "); + RejectHighCostQueries.ToString(tmp365); + } + if(__isset.estimatedCost) + { + tmp365.Append(", EstimatedCost: "); + EstimatedCost.ToString(tmp365); + } + if(__isset.executionVersion) + { + tmp365.Append(", ExecutionVersion: "); + ExecutionVersion.ToString(tmp365); + } + if((RequestValidation != null) && __isset.requestValidation) + { + tmp365.Append(", RequestValidation: "); + RequestValidation.ToString(tmp365); + } + if(__isset.resultPersistenceMode) + { + tmp365.Append(", ResultPersistenceMode: "); + ResultPersistenceMode.ToString(tmp365); + } + if(__isset.trimArrowBatchesToLimit) + { + tmp365.Append(", TrimArrowBatchesToLimit: "); + TrimArrowBatchesToLimit.ToString(tmp365); + } + tmp365.Append(')'); + return tmp365.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs new file mode 100644 index 0000000000..013e725bb5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs @@ -0,0 +1,569 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExecuteStatementResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + private bool _executionRejected; + private double _maxClusterCapacity; + private double _queryCost; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + private double _currentClusterLoad; + private int _idempotencyType; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + public bool ExecutionRejected + { + get + { + return _executionRejected; + } + set + { + __isset.executionRejected = true; + this._executionRejected = value; + } + } + + public double MaxClusterCapacity + { + get + { + return _maxClusterCapacity; + } + set + { + __isset.maxClusterCapacity = true; + this._maxClusterCapacity = value; + } + } + + public double QueryCost + { + get + { + return _queryCost; + } + set + { + __isset.queryCost = true; + this._queryCost = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + public double CurrentClusterLoad + { + get + { + return _currentClusterLoad; + } + set + { + __isset.currentClusterLoad = true; + this._currentClusterLoad = value; + } + } + + public int IdempotencyType + { + get + { + return _idempotencyType; + } + set + { + __isset.idempotencyType = true; + this._idempotencyType = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + public bool executionRejected; + public bool maxClusterCapacity; + public bool queryCost; + public bool sessionConf; + public bool currentClusterLoad; + public bool idempotencyType; + } + + public TExecuteStatementResp() + { + } + + public TExecuteStatementResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TExecuteStatementResp DeepCopy() + { + var tmp415 = new TExecuteStatementResp(); + if((Status != null)) + { + tmp415.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp415.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp415.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp415.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp415.__isset.directResults = this.__isset.directResults; + if(__isset.executionRejected) + { + tmp415.ExecutionRejected = this.ExecutionRejected; + } + tmp415.__isset.executionRejected = this.__isset.executionRejected; + if(__isset.maxClusterCapacity) + { + tmp415.MaxClusterCapacity = this.MaxClusterCapacity; + } + tmp415.__isset.maxClusterCapacity = this.__isset.maxClusterCapacity; + if(__isset.queryCost) + { + tmp415.QueryCost = this.QueryCost; + } + tmp415.__isset.queryCost = this.__isset.queryCost; + if((SessionConf != null) && __isset.sessionConf) + { + tmp415.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp415.__isset.sessionConf = this.__isset.sessionConf; + if(__isset.currentClusterLoad) + { + tmp415.CurrentClusterLoad = this.CurrentClusterLoad; + } + tmp415.__isset.currentClusterLoad = this.__isset.currentClusterLoad; + if(__isset.idempotencyType) + { + tmp415.IdempotencyType = this.IdempotencyType; + } + tmp415.__isset.idempotencyType = this.__isset.idempotencyType; + return tmp415; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Bool) + { + ExecutionRejected = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Double) + { + MaxClusterCapacity = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.Double) + { + QueryCost = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3333: + if (field.Type == TType.Double) + { + CurrentClusterLoad = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3334: + if (field.Type == TType.I32) + { + IdempotencyType = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp416 = new TStruct("TExecuteStatementResp"); + await oprot.WriteStructBeginAsync(tmp416, cancellationToken); + var tmp417 = new TField(); + if((Status != null)) + { + tmp417.Name = "status"; + tmp417.Type = TType.Struct; + tmp417.ID = 1; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp417.Name = "operationHandle"; + tmp417.Type = TType.Struct; + tmp417.ID = 2; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp417.Name = "directResults"; + tmp417.Type = TType.Struct; + tmp417.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.executionRejected) + { + tmp417.Name = "executionRejected"; + tmp417.Type = TType.Bool; + tmp417.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteBoolAsync(ExecutionRejected, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxClusterCapacity) + { + tmp417.Name = "maxClusterCapacity"; + tmp417.Type = TType.Double; + tmp417.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(MaxClusterCapacity, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.queryCost) + { + tmp417.Name = "queryCost"; + tmp417.Type = TType.Double; + tmp417.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(QueryCost, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp417.Name = "sessionConf"; + tmp417.Type = TType.Struct; + tmp417.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.currentClusterLoad) + { + tmp417.Name = "currentClusterLoad"; + tmp417.Type = TType.Double; + tmp417.ID = 3333; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(CurrentClusterLoad, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.idempotencyType) + { + tmp417.Name = "idempotencyType"; + tmp417.Type = TType.I32; + tmp417.ID = 3334; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteI32Async(IdempotencyType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExecuteStatementResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))) + && ((__isset.executionRejected == other.__isset.executionRejected) && ((!__isset.executionRejected) || (global::System.Object.Equals(ExecutionRejected, other.ExecutionRejected)))) + && ((__isset.maxClusterCapacity == other.__isset.maxClusterCapacity) && ((!__isset.maxClusterCapacity) || (global::System.Object.Equals(MaxClusterCapacity, other.MaxClusterCapacity)))) + && ((__isset.queryCost == other.__isset.queryCost) && ((!__isset.queryCost) || (global::System.Object.Equals(QueryCost, other.QueryCost)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) + && ((__isset.currentClusterLoad == other.__isset.currentClusterLoad) && ((!__isset.currentClusterLoad) || (global::System.Object.Equals(CurrentClusterLoad, other.CurrentClusterLoad)))) + && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + if(__isset.executionRejected) + { + hashcode = (hashcode * 397) + ExecutionRejected.GetHashCode(); + } + if(__isset.maxClusterCapacity) + { + hashcode = (hashcode * 397) + MaxClusterCapacity.GetHashCode(); + } + if(__isset.queryCost) + { + hashcode = (hashcode * 397) + QueryCost.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + if(__isset.currentClusterLoad) + { + hashcode = (hashcode * 397) + CurrentClusterLoad.GetHashCode(); + } + if(__isset.idempotencyType) + { + hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp418 = new StringBuilder("TExecuteStatementResp("); + if((Status != null)) + { + tmp418.Append(", Status: "); + Status.ToString(tmp418); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp418.Append(", OperationHandle: "); + OperationHandle.ToString(tmp418); + } + if((DirectResults != null) && __isset.directResults) + { + tmp418.Append(", DirectResults: "); + DirectResults.ToString(tmp418); + } + if(__isset.executionRejected) + { + tmp418.Append(", ExecutionRejected: "); + ExecutionRejected.ToString(tmp418); + } + if(__isset.maxClusterCapacity) + { + tmp418.Append(", MaxClusterCapacity: "); + MaxClusterCapacity.ToString(tmp418); + } + if(__isset.queryCost) + { + tmp418.Append(", QueryCost: "); + QueryCost.ToString(tmp418); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp418.Append(", SessionConf: "); + SessionConf.ToString(tmp418); + } + if(__isset.currentClusterLoad) + { + tmp418.Append(", CurrentClusterLoad: "); + CurrentClusterLoad.ToString(tmp418); + } + if(__isset.idempotencyType) + { + tmp418.Append(", IdempotencyType: "); + IdempotencyType.ToString(tmp418); + } + tmp418.Append(')'); + return tmp418.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs new file mode 100644 index 0000000000..a497b63a84 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs @@ -0,0 +1,728 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExpressionInfo : TBase + { + private string _className; + private string _usage; + private string _name; + private string _extended; + private string _db; + private string _arguments; + private string _examples; + private string _note; + private string _group; + private string _since; + private string _deprecated; + private string _source; + + public string ClassName + { + get + { + return _className; + } + set + { + __isset.className = true; + this._className = value; + } + } + + public string Usage + { + get + { + return _usage; + } + set + { + __isset.usage = true; + this._usage = value; + } + } + + public string Name + { + get + { + return _name; + } + set + { + __isset.name = true; + this._name = value; + } + } + + public string Extended + { + get + { + return _extended; + } + set + { + __isset.extended = true; + this._extended = value; + } + } + + public string Db + { + get + { + return _db; + } + set + { + __isset.db = true; + this._db = value; + } + } + + public string Arguments + { + get + { + return _arguments; + } + set + { + __isset.arguments = true; + this._arguments = value; + } + } + + public string Examples + { + get + { + return _examples; + } + set + { + __isset.examples = true; + this._examples = value; + } + } + + public string Note + { + get + { + return _note; + } + set + { + __isset.note = true; + this._note = value; + } + } + + public string Group + { + get + { + return _group; + } + set + { + __isset.@group = true; + this._group = value; + } + } + + public string Since + { + get + { + return _since; + } + set + { + __isset.since = true; + this._since = value; + } + } + + public string Deprecated + { + get + { + return _deprecated; + } + set + { + __isset.deprecated = true; + this._deprecated = value; + } + } + + public string Source + { + get + { + return _source; + } + set + { + __isset.source = true; + this._source = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool className; + public bool usage; + public bool name; + public bool extended; + public bool db; + public bool arguments; + public bool examples; + public bool note; + public bool @group; + public bool since; + public bool deprecated; + public bool source; + } + + public TExpressionInfo() + { + } + + public TExpressionInfo DeepCopy() + { + var tmp410 = new TExpressionInfo(); + if((ClassName != null) && __isset.className) + { + tmp410.ClassName = this.ClassName; + } + tmp410.__isset.className = this.__isset.className; + if((Usage != null) && __isset.usage) + { + tmp410.Usage = this.Usage; + } + tmp410.__isset.usage = this.__isset.usage; + if((Name != null) && __isset.name) + { + tmp410.Name = this.Name; + } + tmp410.__isset.name = this.__isset.name; + if((Extended != null) && __isset.extended) + { + tmp410.Extended = this.Extended; + } + tmp410.__isset.extended = this.__isset.extended; + if((Db != null) && __isset.db) + { + tmp410.Db = this.Db; + } + tmp410.__isset.db = this.__isset.db; + if((Arguments != null) && __isset.arguments) + { + tmp410.Arguments = this.Arguments; + } + tmp410.__isset.arguments = this.__isset.arguments; + if((Examples != null) && __isset.examples) + { + tmp410.Examples = this.Examples; + } + tmp410.__isset.examples = this.__isset.examples; + if((Note != null) && __isset.note) + { + tmp410.Note = this.Note; + } + tmp410.__isset.note = this.__isset.note; + if((Group != null) && __isset.@group) + { + tmp410.Group = this.Group; + } + tmp410.__isset.@group = this.__isset.@group; + if((Since != null) && __isset.since) + { + tmp410.Since = this.Since; + } + tmp410.__isset.since = this.__isset.since; + if((Deprecated != null) && __isset.deprecated) + { + tmp410.Deprecated = this.Deprecated; + } + tmp410.__isset.deprecated = this.__isset.deprecated; + if((Source != null) && __isset.source) + { + tmp410.Source = this.Source; + } + tmp410.__isset.source = this.__isset.source; + return tmp410; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + ClassName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Usage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Name = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Extended = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + Db = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + Arguments = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.String) + { + Examples = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.String) + { + Note = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 9: + if (field.Type == TType.String) + { + Group = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 10: + if (field.Type == TType.String) + { + Since = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 11: + if (field.Type == TType.String) + { + Deprecated = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 12: + if (field.Type == TType.String) + { + Source = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp411 = new TStruct("TExpressionInfo"); + await oprot.WriteStructBeginAsync(tmp411, cancellationToken); + var tmp412 = new TField(); + if((ClassName != null) && __isset.className) + { + tmp412.Name = "className"; + tmp412.Type = TType.String; + tmp412.ID = 1; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(ClassName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Usage != null) && __isset.usage) + { + tmp412.Name = "usage"; + tmp412.Type = TType.String; + tmp412.ID = 2; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Usage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Name != null) && __isset.name) + { + tmp412.Name = "name"; + tmp412.Type = TType.String; + tmp412.ID = 3; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Name, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Extended != null) && __isset.extended) + { + tmp412.Name = "extended"; + tmp412.Type = TType.String; + tmp412.ID = 4; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Extended, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Db != null) && __isset.db) + { + tmp412.Name = "db"; + tmp412.Type = TType.String; + tmp412.ID = 5; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Db, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Arguments != null) && __isset.arguments) + { + tmp412.Name = "arguments"; + tmp412.Type = TType.String; + tmp412.ID = 6; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Arguments, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Examples != null) && __isset.examples) + { + tmp412.Name = "examples"; + tmp412.Type = TType.String; + tmp412.ID = 7; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Examples, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Note != null) && __isset.note) + { + tmp412.Name = "note"; + tmp412.Type = TType.String; + tmp412.ID = 8; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Note, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Group != null) && __isset.@group) + { + tmp412.Name = "group"; + tmp412.Type = TType.String; + tmp412.ID = 9; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Group, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Since != null) && __isset.since) + { + tmp412.Name = "since"; + tmp412.Type = TType.String; + tmp412.ID = 10; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Since, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Deprecated != null) && __isset.deprecated) + { + tmp412.Name = "deprecated"; + tmp412.Type = TType.String; + tmp412.ID = 11; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Deprecated, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Source != null) && __isset.source) + { + tmp412.Name = "source"; + tmp412.Type = TType.String; + tmp412.ID = 12; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Source, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExpressionInfo other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.className == other.__isset.className) && ((!__isset.className) || (global::System.Object.Equals(ClassName, other.ClassName)))) + && ((__isset.usage == other.__isset.usage) && ((!__isset.usage) || (global::System.Object.Equals(Usage, other.Usage)))) + && ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) + && ((__isset.extended == other.__isset.extended) && ((!__isset.extended) || (global::System.Object.Equals(Extended, other.Extended)))) + && ((__isset.db == other.__isset.db) && ((!__isset.db) || (global::System.Object.Equals(Db, other.Db)))) + && ((__isset.arguments == other.__isset.arguments) && ((!__isset.arguments) || (global::System.Object.Equals(Arguments, other.Arguments)))) + && ((__isset.examples == other.__isset.examples) && ((!__isset.examples) || (global::System.Object.Equals(Examples, other.Examples)))) + && ((__isset.note == other.__isset.note) && ((!__isset.note) || (global::System.Object.Equals(Note, other.Note)))) + && ((__isset.@group == other.__isset.@group) && ((!__isset.@group) || (global::System.Object.Equals(Group, other.Group)))) + && ((__isset.since == other.__isset.since) && ((!__isset.since) || (global::System.Object.Equals(Since, other.Since)))) + && ((__isset.deprecated == other.__isset.deprecated) && ((!__isset.deprecated) || (global::System.Object.Equals(Deprecated, other.Deprecated)))) + && ((__isset.source == other.__isset.source) && ((!__isset.source) || (global::System.Object.Equals(Source, other.Source)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ClassName != null) && __isset.className) + { + hashcode = (hashcode * 397) + ClassName.GetHashCode(); + } + if((Usage != null) && __isset.usage) + { + hashcode = (hashcode * 397) + Usage.GetHashCode(); + } + if((Name != null) && __isset.name) + { + hashcode = (hashcode * 397) + Name.GetHashCode(); + } + if((Extended != null) && __isset.extended) + { + hashcode = (hashcode * 397) + Extended.GetHashCode(); + } + if((Db != null) && __isset.db) + { + hashcode = (hashcode * 397) + Db.GetHashCode(); + } + if((Arguments != null) && __isset.arguments) + { + hashcode = (hashcode * 397) + Arguments.GetHashCode(); + } + if((Examples != null) && __isset.examples) + { + hashcode = (hashcode * 397) + Examples.GetHashCode(); + } + if((Note != null) && __isset.note) + { + hashcode = (hashcode * 397) + Note.GetHashCode(); + } + if((Group != null) && __isset.@group) + { + hashcode = (hashcode * 397) + Group.GetHashCode(); + } + if((Since != null) && __isset.since) + { + hashcode = (hashcode * 397) + Since.GetHashCode(); + } + if((Deprecated != null) && __isset.deprecated) + { + hashcode = (hashcode * 397) + Deprecated.GetHashCode(); + } + if((Source != null) && __isset.source) + { + hashcode = (hashcode * 397) + Source.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp413 = new StringBuilder("TExpressionInfo("); + int tmp414 = 0; + if((ClassName != null) && __isset.className) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("ClassName: "); + ClassName.ToString(tmp413); + } + if((Usage != null) && __isset.usage) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Usage: "); + Usage.ToString(tmp413); + } + if((Name != null) && __isset.name) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Name: "); + Name.ToString(tmp413); + } + if((Extended != null) && __isset.extended) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Extended: "); + Extended.ToString(tmp413); + } + if((Db != null) && __isset.db) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Db: "); + Db.ToString(tmp413); + } + if((Arguments != null) && __isset.arguments) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Arguments: "); + Arguments.ToString(tmp413); + } + if((Examples != null) && __isset.examples) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Examples: "); + Examples.ToString(tmp413); + } + if((Note != null) && __isset.note) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Note: "); + Note.ToString(tmp413); + } + if((Group != null) && __isset.@group) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Group: "); + Group.ToString(tmp413); + } + if((Since != null) && __isset.since) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Since: "); + Since.ToString(tmp413); + } + if((Deprecated != null) && __isset.deprecated) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Deprecated: "); + Deprecated.ToString(tmp413); + } + if((Source != null) && __isset.source) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Source: "); + Source.ToString(tmp413); + } + tmp413.Append(')'); + return tmp413.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs new file mode 100644 index 0000000000..76764ffc7d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs @@ -0,0 +1,26 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TFetchOrientation + { + FETCH_NEXT = 0, + FETCH_PRIOR = 1, + FETCH_RELATIVE = 2, + FETCH_ABSOLUTE = 3, + FETCH_FIRST = 4, + FETCH_LAST = 5, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs new file mode 100644 index 0000000000..e5de4d6e54 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs @@ -0,0 +1,437 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TFetchResultsReq : TBase + { + private short _fetchType; + private long _maxBytes; + private long _startRowOffset; + private bool _includeResultSetMetadata; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation Orientation { get; set; } + + public long MaxRows { get; set; } + + public short FetchType + { + get + { + return _fetchType; + } + set + { + __isset.fetchType = true; + this._fetchType = value; + } + } + + public long MaxBytes + { + get + { + return _maxBytes; + } + set + { + __isset.maxBytes = true; + this._maxBytes = value; + } + } + + public long StartRowOffset + { + get + { + return _startRowOffset; + } + set + { + __isset.startRowOffset = true; + this._startRowOffset = value; + } + } + + public bool IncludeResultSetMetadata + { + get + { + return _includeResultSetMetadata; + } + set + { + __isset.includeResultSetMetadata = true; + this._includeResultSetMetadata = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool fetchType; + public bool maxBytes; + public bool startRowOffset; + public bool includeResultSetMetadata; + } + + public TFetchResultsReq() + { + this.Orientation = global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation.FETCH_NEXT; + this._fetchType = 0; + this.__isset.fetchType = true; + } + + public TFetchResultsReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle, global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation orientation, long maxRows) : this() + { + this.OperationHandle = operationHandle; + this.Orientation = orientation; + this.MaxRows = maxRows; + } + + public TFetchResultsReq DeepCopy() + { + var tmp588 = new TFetchResultsReq(); + if((OperationHandle != null)) + { + tmp588.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp588.Orientation = this.Orientation; + tmp588.MaxRows = this.MaxRows; + if(__isset.fetchType) + { + tmp588.FetchType = this.FetchType; + } + tmp588.__isset.fetchType = this.__isset.fetchType; + if(__isset.maxBytes) + { + tmp588.MaxBytes = this.MaxBytes; + } + tmp588.__isset.maxBytes = this.__isset.maxBytes; + if(__isset.startRowOffset) + { + tmp588.StartRowOffset = this.StartRowOffset; + } + tmp588.__isset.startRowOffset = this.__isset.startRowOffset; + if(__isset.includeResultSetMetadata) + { + tmp588.IncludeResultSetMetadata = this.IncludeResultSetMetadata; + } + tmp588.__isset.includeResultSetMetadata = this.__isset.includeResultSetMetadata; + return tmp588; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + bool isset_orientation = false; + bool isset_maxRows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + Orientation = (global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation)await iprot.ReadI32Async(cancellationToken); + isset_orientation = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + MaxRows = await iprot.ReadI64Async(cancellationToken); + isset_maxRows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I16) + { + FetchType = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.I64) + { + MaxBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Bool) + { + IncludeResultSetMetadata = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_orientation) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_maxRows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp589 = new TStruct("TFetchResultsReq"); + await oprot.WriteStructBeginAsync(tmp589, cancellationToken); + var tmp590 = new TField(); + if((OperationHandle != null)) + { + tmp590.Name = "operationHandle"; + tmp590.Type = TType.Struct; + tmp590.ID = 1; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp590.Name = "orientation"; + tmp590.Type = TType.I32; + tmp590.ID = 2; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI32Async((int)Orientation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp590.Name = "maxRows"; + tmp590.Type = TType.I64; + tmp590.ID = 3; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(MaxRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.fetchType) + { + tmp590.Name = "fetchType"; + tmp590.Type = TType.I16; + tmp590.ID = 4; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI16Async(FetchType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxBytes) + { + tmp590.Name = "maxBytes"; + tmp590.Type = TType.I64; + tmp590.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(MaxBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.startRowOffset) + { + tmp590.Name = "startRowOffset"; + tmp590.Type = TType.I64; + tmp590.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.includeResultSetMetadata) + { + tmp590.Name = "includeResultSetMetadata"; + tmp590.Type = TType.Bool; + tmp590.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteBoolAsync(IncludeResultSetMetadata, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TFetchResultsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && global::System.Object.Equals(Orientation, other.Orientation) + && global::System.Object.Equals(MaxRows, other.MaxRows) + && ((__isset.fetchType == other.__isset.fetchType) && ((!__isset.fetchType) || (global::System.Object.Equals(FetchType, other.FetchType)))) + && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))) + && ((__isset.startRowOffset == other.__isset.startRowOffset) && ((!__isset.startRowOffset) || (global::System.Object.Equals(StartRowOffset, other.StartRowOffset)))) + && ((__isset.includeResultSetMetadata == other.__isset.includeResultSetMetadata) && ((!__isset.includeResultSetMetadata) || (global::System.Object.Equals(IncludeResultSetMetadata, other.IncludeResultSetMetadata)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + hashcode = (hashcode * 397) + Orientation.GetHashCode(); + hashcode = (hashcode * 397) + MaxRows.GetHashCode(); + if(__isset.fetchType) + { + hashcode = (hashcode * 397) + FetchType.GetHashCode(); + } + if(__isset.maxBytes) + { + hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); + } + if(__isset.startRowOffset) + { + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + } + if(__isset.includeResultSetMetadata) + { + hashcode = (hashcode * 397) + IncludeResultSetMetadata.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp591 = new StringBuilder("TFetchResultsReq("); + if((OperationHandle != null)) + { + tmp591.Append(", OperationHandle: "); + OperationHandle.ToString(tmp591); + } + tmp591.Append(", Orientation: "); + Orientation.ToString(tmp591); + tmp591.Append(", MaxRows: "); + MaxRows.ToString(tmp591); + if(__isset.fetchType) + { + tmp591.Append(", FetchType: "); + FetchType.ToString(tmp591); + } + if(__isset.maxBytes) + { + tmp591.Append(", MaxBytes: "); + MaxBytes.ToString(tmp591); + } + if(__isset.startRowOffset) + { + tmp591.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp591); + } + if(__isset.includeResultSetMetadata) + { + tmp591.Append(", IncludeResultSetMetadata: "); + IncludeResultSetMetadata.ToString(tmp591); + } + tmp591.Append(')'); + return tmp591.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs new file mode 100644 index 0000000000..c83622ec12 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs @@ -0,0 +1,372 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TFetchResultsResp : TBase + { + private bool _hasMoreRows; + private global::Apache.Hive.Service.Rpc.Thrift.TRowSet _results; + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; + private string _responseValidation; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public bool HasMoreRows + { + get + { + return _hasMoreRows; + } + set + { + __isset.hasMoreRows = true; + this._hasMoreRows = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TRowSet Results + { + get + { + return _results; + } + set + { + __isset.results = true; + this._results = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata + { + get + { + return _resultSetMetadata; + } + set + { + __isset.resultSetMetadata = true; + this._resultSetMetadata = value; + } + } + + public string ResponseValidation + { + get + { + return _responseValidation; + } + set + { + __isset.responseValidation = true; + this._responseValidation = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool hasMoreRows; + public bool results; + public bool resultSetMetadata; + public bool responseValidation; + } + + public TFetchResultsResp() + { + } + + public TFetchResultsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TFetchResultsResp DeepCopy() + { + var tmp593 = new TFetchResultsResp(); + if((Status != null)) + { + tmp593.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if(__isset.hasMoreRows) + { + tmp593.HasMoreRows = this.HasMoreRows; + } + tmp593.__isset.hasMoreRows = this.__isset.hasMoreRows; + if((Results != null) && __isset.results) + { + tmp593.Results = (global::Apache.Hive.Service.Rpc.Thrift.TRowSet)this.Results.DeepCopy(); + } + tmp593.__isset.results = this.__isset.results; + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp593.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); + } + tmp593.__isset.resultSetMetadata = this.__isset.resultSetMetadata; + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp593.ResponseValidation = this.ResponseValidation; + } + tmp593.__isset.responseValidation = this.__isset.responseValidation; + return tmp593; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + HasMoreRows = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + Results = new global::Apache.Hive.Service.Rpc.Thrift.TRowSet(); + await Results.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await ResultSetMetadata.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.String) + { + ResponseValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp594 = new TStruct("TFetchResultsResp"); + await oprot.WriteStructBeginAsync(tmp594, cancellationToken); + var tmp595 = new TField(); + if((Status != null)) + { + tmp595.Name = "status"; + tmp595.Type = TType.Struct; + tmp595.ID = 1; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.hasMoreRows) + { + tmp595.Name = "hasMoreRows"; + tmp595.Type = TType.Bool; + tmp595.ID = 2; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await oprot.WriteBoolAsync(HasMoreRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Results != null) && __isset.results) + { + tmp595.Name = "results"; + tmp595.Type = TType.Struct; + tmp595.ID = 3; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await Results.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp595.Name = "resultSetMetadata"; + tmp595.Type = TType.Struct; + tmp595.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await ResultSetMetadata.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp595.Name = "responseValidation"; + tmp595.Type = TType.String; + tmp595.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await oprot.WriteStringAsync(ResponseValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TFetchResultsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.hasMoreRows == other.__isset.hasMoreRows) && ((!__isset.hasMoreRows) || (global::System.Object.Equals(HasMoreRows, other.HasMoreRows)))) + && ((__isset.results == other.__isset.results) && ((!__isset.results) || (global::System.Object.Equals(Results, other.Results)))) + && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) + && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if(__isset.hasMoreRows) + { + hashcode = (hashcode * 397) + HasMoreRows.GetHashCode(); + } + if((Results != null) && __isset.results) + { + hashcode = (hashcode * 397) + Results.GetHashCode(); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp596 = new StringBuilder("TFetchResultsResp("); + if((Status != null)) + { + tmp596.Append(", Status: "); + Status.ToString(tmp596); + } + if(__isset.hasMoreRows) + { + tmp596.Append(", HasMoreRows: "); + HasMoreRows.ToString(tmp596); + } + if((Results != null) && __isset.results) + { + tmp596.Append(", Results: "); + Results.ToString(tmp596); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp596.Append(", ResultSetMetadata: "); + ResultSetMetadata.ToString(tmp596); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp596.Append(", ResponseValidation: "); + ResponseValidation.ToString(tmp596); + } + tmp596.Append(')'); + return tmp596.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs new file mode 100644 index 0000000000..d18838d501 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCatalogsReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetCatalogsReq() + { + } + + public TGetCatalogsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetCatalogsReq DeepCopy() + { + var tmp455 = new TGetCatalogsReq(); + if((SessionHandle != null)) + { + tmp455.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp455.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp455.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp455.RunAsync = this.RunAsync; + } + tmp455.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp455.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp455.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp455.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp455.__isset.sessionConf = this.__isset.sessionConf; + return tmp455; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp456 = new TStruct("TGetCatalogsReq"); + await oprot.WriteStructBeginAsync(tmp456, cancellationToken); + var tmp457 = new TField(); + if((SessionHandle != null)) + { + tmp457.Name = "sessionHandle"; + tmp457.Type = TType.Struct; + tmp457.ID = 1; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp457.Name = "getDirectResults"; + tmp457.Type = TType.Struct; + tmp457.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp457.Name = "runAsync"; + tmp457.Type = TType.Bool; + tmp457.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp457.Name = "operationId"; + tmp457.Type = TType.Struct; + tmp457.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp457.Name = "sessionConf"; + tmp457.Type = TType.Struct; + tmp457.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCatalogsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp458 = new StringBuilder("TGetCatalogsReq("); + if((SessionHandle != null)) + { + tmp458.Append(", SessionHandle: "); + SessionHandle.ToString(tmp458); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp458.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp458); + } + if(__isset.runAsync) + { + tmp458.Append(", RunAsync: "); + RunAsync.ToString(tmp458); + } + if((OperationId != null) && __isset.operationId) + { + tmp458.Append(", OperationId: "); + OperationId.ToString(tmp458); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp458.Append(", SessionConf: "); + SessionConf.ToString(tmp458); + } + tmp458.Append(')'); + return tmp458.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs new file mode 100644 index 0000000000..052d126d41 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCatalogsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetCatalogsResp() + { + } + + public TGetCatalogsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetCatalogsResp DeepCopy() + { + var tmp460 = new TGetCatalogsResp(); + if((Status != null)) + { + tmp460.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp460.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp460.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp460.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp460.__isset.directResults = this.__isset.directResults; + return tmp460; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp461 = new TStruct("TGetCatalogsResp"); + await oprot.WriteStructBeginAsync(tmp461, cancellationToken); + var tmp462 = new TField(); + if((Status != null)) + { + tmp462.Name = "status"; + tmp462.Type = TType.Struct; + tmp462.ID = 1; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp462.Name = "operationHandle"; + tmp462.Type = TType.Struct; + tmp462.ID = 2; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp462.Name = "directResults"; + tmp462.Type = TType.Struct; + tmp462.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCatalogsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp463 = new StringBuilder("TGetCatalogsResp("); + if((Status != null)) + { + tmp463.Append(", Status: "); + Status.ToString(tmp463); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp463.Append(", OperationHandle: "); + OperationHandle.ToString(tmp463); + } + if((DirectResults != null) && __isset.directResults) + { + tmp463.Append(", DirectResults: "); + DirectResults.ToString(tmp463); + } + tmp463.Append(')'); + return tmp463.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs new file mode 100644 index 0000000000..6146aa1353 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs @@ -0,0 +1,569 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetColumnsReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private string _columnName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string ColumnName + { + get + { + return _columnName; + } + set + { + __isset.columnName = true; + this._columnName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool columnName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetColumnsReq() + { + } + + public TGetColumnsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetColumnsReq DeepCopy() + { + var tmp499 = new TGetColumnsReq(); + if((SessionHandle != null)) + { + tmp499.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp499.CatalogName = this.CatalogName; + } + tmp499.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp499.SchemaName = this.SchemaName; + } + tmp499.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp499.TableName = this.TableName; + } + tmp499.__isset.tableName = this.__isset.tableName; + if((ColumnName != null) && __isset.columnName) + { + tmp499.ColumnName = this.ColumnName; + } + tmp499.__isset.columnName = this.__isset.columnName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp499.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp499.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp499.RunAsync = this.RunAsync; + } + tmp499.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp499.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp499.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp499.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp499.__isset.sessionConf = this.__isset.sessionConf; + return tmp499; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ColumnName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp500 = new TStruct("TGetColumnsReq"); + await oprot.WriteStructBeginAsync(tmp500, cancellationToken); + var tmp501 = new TField(); + if((SessionHandle != null)) + { + tmp501.Name = "sessionHandle"; + tmp501.Type = TType.Struct; + tmp501.ID = 1; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp501.Name = "catalogName"; + tmp501.Type = TType.String; + tmp501.ID = 2; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp501.Name = "schemaName"; + tmp501.Type = TType.String; + tmp501.ID = 3; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp501.Name = "tableName"; + tmp501.Type = TType.String; + tmp501.ID = 4; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ColumnName != null) && __isset.columnName) + { + tmp501.Name = "columnName"; + tmp501.Type = TType.String; + tmp501.ID = 5; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(ColumnName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp501.Name = "getDirectResults"; + tmp501.Type = TType.Struct; + tmp501.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp501.Name = "runAsync"; + tmp501.Type = TType.Bool; + tmp501.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp501.Name = "operationId"; + tmp501.Type = TType.Struct; + tmp501.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp501.Name = "sessionConf"; + tmp501.Type = TType.Struct; + tmp501.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetColumnsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.columnName == other.__isset.columnName) && ((!__isset.columnName) || (global::System.Object.Equals(ColumnName, other.ColumnName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((ColumnName != null) && __isset.columnName) + { + hashcode = (hashcode * 397) + ColumnName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp502 = new StringBuilder("TGetColumnsReq("); + if((SessionHandle != null)) + { + tmp502.Append(", SessionHandle: "); + SessionHandle.ToString(tmp502); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp502.Append(", CatalogName: "); + CatalogName.ToString(tmp502); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp502.Append(", SchemaName: "); + SchemaName.ToString(tmp502); + } + if((TableName != null) && __isset.tableName) + { + tmp502.Append(", TableName: "); + TableName.ToString(tmp502); + } + if((ColumnName != null) && __isset.columnName) + { + tmp502.Append(", ColumnName: "); + ColumnName.ToString(tmp502); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp502.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp502); + } + if(__isset.runAsync) + { + tmp502.Append(", RunAsync: "); + RunAsync.ToString(tmp502); + } + if((OperationId != null) && __isset.operationId) + { + tmp502.Append(", OperationId: "); + OperationId.ToString(tmp502); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp502.Append(", SessionConf: "); + SessionConf.ToString(tmp502); + } + tmp502.Append(')'); + return tmp502.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs new file mode 100644 index 0000000000..13495fcbc2 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetColumnsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetColumnsResp() + { + } + + public TGetColumnsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetColumnsResp DeepCopy() + { + var tmp504 = new TGetColumnsResp(); + if((Status != null)) + { + tmp504.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp504.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp504.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp504.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp504.__isset.directResults = this.__isset.directResults; + return tmp504; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp505 = new TStruct("TGetColumnsResp"); + await oprot.WriteStructBeginAsync(tmp505, cancellationToken); + var tmp506 = new TField(); + if((Status != null)) + { + tmp506.Name = "status"; + tmp506.Type = TType.Struct; + tmp506.ID = 1; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp506.Name = "operationHandle"; + tmp506.Type = TType.Struct; + tmp506.ID = 2; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp506.Name = "directResults"; + tmp506.Type = TType.Struct; + tmp506.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetColumnsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp507 = new StringBuilder("TGetColumnsResp("); + if((Status != null)) + { + tmp507.Append(", Status: "); + Status.ToString(tmp507); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp507.Append(", OperationHandle: "); + OperationHandle.ToString(tmp507); + } + if((DirectResults != null) && __isset.directResults) + { + tmp507.Append(", DirectResults: "); + DirectResults.ToString(tmp507); + } + tmp507.Append(')'); + return tmp507.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs new file mode 100644 index 0000000000..bb5b5f268b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs @@ -0,0 +1,667 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCrossReferenceReq : TBase + { + private string _parentCatalogName; + private string _parentSchemaName; + private string _parentTableName; + private string _foreignCatalogName; + private string _foreignSchemaName; + private string _foreignTableName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string ParentCatalogName + { + get + { + return _parentCatalogName; + } + set + { + __isset.parentCatalogName = true; + this._parentCatalogName = value; + } + } + + public string ParentSchemaName + { + get + { + return _parentSchemaName; + } + set + { + __isset.parentSchemaName = true; + this._parentSchemaName = value; + } + } + + public string ParentTableName + { + get + { + return _parentTableName; + } + set + { + __isset.parentTableName = true; + this._parentTableName = value; + } + } + + public string ForeignCatalogName + { + get + { + return _foreignCatalogName; + } + set + { + __isset.foreignCatalogName = true; + this._foreignCatalogName = value; + } + } + + public string ForeignSchemaName + { + get + { + return _foreignSchemaName; + } + set + { + __isset.foreignSchemaName = true; + this._foreignSchemaName = value; + } + } + + public string ForeignTableName + { + get + { + return _foreignTableName; + } + set + { + __isset.foreignTableName = true; + this._foreignTableName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool parentCatalogName; + public bool parentSchemaName; + public bool parentTableName; + public bool foreignCatalogName; + public bool foreignSchemaName; + public bool foreignTableName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetCrossReferenceReq() + { + } + + public TGetCrossReferenceReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetCrossReferenceReq DeepCopy() + { + var tmp529 = new TGetCrossReferenceReq(); + if((SessionHandle != null)) + { + tmp529.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp529.ParentCatalogName = this.ParentCatalogName; + } + tmp529.__isset.parentCatalogName = this.__isset.parentCatalogName; + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp529.ParentSchemaName = this.ParentSchemaName; + } + tmp529.__isset.parentSchemaName = this.__isset.parentSchemaName; + if((ParentTableName != null) && __isset.parentTableName) + { + tmp529.ParentTableName = this.ParentTableName; + } + tmp529.__isset.parentTableName = this.__isset.parentTableName; + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp529.ForeignCatalogName = this.ForeignCatalogName; + } + tmp529.__isset.foreignCatalogName = this.__isset.foreignCatalogName; + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp529.ForeignSchemaName = this.ForeignSchemaName; + } + tmp529.__isset.foreignSchemaName = this.__isset.foreignSchemaName; + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp529.ForeignTableName = this.ForeignTableName; + } + tmp529.__isset.foreignTableName = this.__isset.foreignTableName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp529.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp529.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp529.RunAsync = this.RunAsync; + } + tmp529.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp529.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp529.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp529.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp529.__isset.sessionConf = this.__isset.sessionConf; + return tmp529; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + ParentCatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + ParentSchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + ParentTableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ForeignCatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + ForeignSchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.String) + { + ForeignTableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp530 = new TStruct("TGetCrossReferenceReq"); + await oprot.WriteStructBeginAsync(tmp530, cancellationToken); + var tmp531 = new TField(); + if((SessionHandle != null)) + { + tmp531.Name = "sessionHandle"; + tmp531.Type = TType.Struct; + tmp531.ID = 1; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp531.Name = "parentCatalogName"; + tmp531.Type = TType.String; + tmp531.ID = 2; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentCatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp531.Name = "parentSchemaName"; + tmp531.Type = TType.String; + tmp531.ID = 3; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentSchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentTableName != null) && __isset.parentTableName) + { + tmp531.Name = "parentTableName"; + tmp531.Type = TType.String; + tmp531.ID = 4; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentTableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp531.Name = "foreignCatalogName"; + tmp531.Type = TType.String; + tmp531.ID = 5; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignCatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp531.Name = "foreignSchemaName"; + tmp531.Type = TType.String; + tmp531.ID = 6; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignSchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp531.Name = "foreignTableName"; + tmp531.Type = TType.String; + tmp531.ID = 7; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignTableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp531.Name = "getDirectResults"; + tmp531.Type = TType.Struct; + tmp531.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp531.Name = "runAsync"; + tmp531.Type = TType.Bool; + tmp531.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp531.Name = "operationId"; + tmp531.Type = TType.Struct; + tmp531.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp531.Name = "sessionConf"; + tmp531.Type = TType.Struct; + tmp531.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCrossReferenceReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.parentCatalogName == other.__isset.parentCatalogName) && ((!__isset.parentCatalogName) || (global::System.Object.Equals(ParentCatalogName, other.ParentCatalogName)))) + && ((__isset.parentSchemaName == other.__isset.parentSchemaName) && ((!__isset.parentSchemaName) || (global::System.Object.Equals(ParentSchemaName, other.ParentSchemaName)))) + && ((__isset.parentTableName == other.__isset.parentTableName) && ((!__isset.parentTableName) || (global::System.Object.Equals(ParentTableName, other.ParentTableName)))) + && ((__isset.foreignCatalogName == other.__isset.foreignCatalogName) && ((!__isset.foreignCatalogName) || (global::System.Object.Equals(ForeignCatalogName, other.ForeignCatalogName)))) + && ((__isset.foreignSchemaName == other.__isset.foreignSchemaName) && ((!__isset.foreignSchemaName) || (global::System.Object.Equals(ForeignSchemaName, other.ForeignSchemaName)))) + && ((__isset.foreignTableName == other.__isset.foreignTableName) && ((!__isset.foreignTableName) || (global::System.Object.Equals(ForeignTableName, other.ForeignTableName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + hashcode = (hashcode * 397) + ParentCatalogName.GetHashCode(); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + hashcode = (hashcode * 397) + ParentSchemaName.GetHashCode(); + } + if((ParentTableName != null) && __isset.parentTableName) + { + hashcode = (hashcode * 397) + ParentTableName.GetHashCode(); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + hashcode = (hashcode * 397) + ForeignCatalogName.GetHashCode(); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + hashcode = (hashcode * 397) + ForeignSchemaName.GetHashCode(); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + hashcode = (hashcode * 397) + ForeignTableName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp532 = new StringBuilder("TGetCrossReferenceReq("); + if((SessionHandle != null)) + { + tmp532.Append(", SessionHandle: "); + SessionHandle.ToString(tmp532); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp532.Append(", ParentCatalogName: "); + ParentCatalogName.ToString(tmp532); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp532.Append(", ParentSchemaName: "); + ParentSchemaName.ToString(tmp532); + } + if((ParentTableName != null) && __isset.parentTableName) + { + tmp532.Append(", ParentTableName: "); + ParentTableName.ToString(tmp532); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp532.Append(", ForeignCatalogName: "); + ForeignCatalogName.ToString(tmp532); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp532.Append(", ForeignSchemaName: "); + ForeignSchemaName.ToString(tmp532); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp532.Append(", ForeignTableName: "); + ForeignTableName.ToString(tmp532); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp532.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp532); + } + if(__isset.runAsync) + { + tmp532.Append(", RunAsync: "); + RunAsync.ToString(tmp532); + } + if((OperationId != null) && __isset.operationId) + { + tmp532.Append(", OperationId: "); + OperationId.ToString(tmp532); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp532.Append(", SessionConf: "); + SessionConf.ToString(tmp532); + } + tmp532.Append(')'); + return tmp532.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs new file mode 100644 index 0000000000..18950f75e6 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCrossReferenceResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetCrossReferenceResp() + { + } + + public TGetCrossReferenceResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetCrossReferenceResp DeepCopy() + { + var tmp534 = new TGetCrossReferenceResp(); + if((Status != null)) + { + tmp534.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp534.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp534.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp534.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp534.__isset.directResults = this.__isset.directResults; + return tmp534; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp535 = new TStruct("TGetCrossReferenceResp"); + await oprot.WriteStructBeginAsync(tmp535, cancellationToken); + var tmp536 = new TField(); + if((Status != null)) + { + tmp536.Name = "status"; + tmp536.Type = TType.Struct; + tmp536.ID = 1; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp536.Name = "operationHandle"; + tmp536.Type = TType.Struct; + tmp536.ID = 2; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp536.Name = "directResults"; + tmp536.Type = TType.Struct; + tmp536.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCrossReferenceResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp537 = new StringBuilder("TGetCrossReferenceResp("); + if((Status != null)) + { + tmp537.Append(", Status: "); + Status.ToString(tmp537); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp537.Append(", OperationHandle: "); + OperationHandle.ToString(tmp537); + } + if((DirectResults != null) && __isset.directResults) + { + tmp537.Append(", DirectResults: "); + DirectResults.ToString(tmp537); + } + tmp537.Append(')'); + return tmp537.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs new file mode 100644 index 0000000000..e064af21f0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs @@ -0,0 +1,252 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string Owner { get; set; } + + public string Renewer { get; set; } + + public TGetDelegationTokenReq() + { + } + + public TGetDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string owner, string renewer) : this() + { + this.SessionHandle = sessionHandle; + this.Owner = owner; + this.Renewer = renewer; + } + + public TGetDelegationTokenReq DeepCopy() + { + var tmp598 = new TGetDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp598.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Owner != null)) + { + tmp598.Owner = this.Owner; + } + if((Renewer != null)) + { + tmp598.Renewer = this.Renewer; + } + return tmp598; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_owner = false; + bool isset_renewer = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Owner = await iprot.ReadStringAsync(cancellationToken); + isset_owner = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Renewer = await iprot.ReadStringAsync(cancellationToken); + isset_renewer = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_owner) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_renewer) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp599 = new TStruct("TGetDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp599, cancellationToken); + var tmp600 = new TField(); + if((SessionHandle != null)) + { + tmp600.Name = "sessionHandle"; + tmp600.Type = TType.Struct; + tmp600.ID = 1; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Owner != null)) + { + tmp600.Name = "owner"; + tmp600.Type = TType.String; + tmp600.ID = 2; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await oprot.WriteStringAsync(Owner, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Renewer != null)) + { + tmp600.Name = "renewer"; + tmp600.Type = TType.String; + tmp600.ID = 3; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await oprot.WriteStringAsync(Renewer, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(Owner, other.Owner) + && global::System.Object.Equals(Renewer, other.Renewer); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Owner != null)) + { + hashcode = (hashcode * 397) + Owner.GetHashCode(); + } + if((Renewer != null)) + { + hashcode = (hashcode * 397) + Renewer.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp601 = new StringBuilder("TGetDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp601.Append(", SessionHandle: "); + SessionHandle.ToString(tmp601); + } + if((Owner != null)) + { + tmp601.Append(", Owner: "); + Owner.ToString(tmp601); + } + if((Renewer != null)) + { + tmp601.Append(", Renewer: "); + Renewer.ToString(tmp601); + } + tmp601.Append(')'); + return tmp601.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs new file mode 100644 index 0000000000..bc4e4cbd61 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetDelegationTokenResp : TBase + { + private string _delegationToken; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public string DelegationToken + { + get + { + return _delegationToken; + } + set + { + __isset.delegationToken = true; + this._delegationToken = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool delegationToken; + } + + public TGetDelegationTokenResp() + { + } + + public TGetDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetDelegationTokenResp DeepCopy() + { + var tmp603 = new TGetDelegationTokenResp(); + if((Status != null)) + { + tmp603.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp603.DelegationToken = this.DelegationToken; + } + tmp603.__isset.delegationToken = this.__isset.delegationToken; + return tmp603; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp604 = new TStruct("TGetDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp604, cancellationToken); + var tmp605 = new TField(); + if((Status != null)) + { + tmp605.Name = "status"; + tmp605.Type = TType.Struct; + tmp605.ID = 1; + await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp605.Name = "delegationToken"; + tmp605.Type = TType.String; + tmp605.ID = 2; + await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.delegationToken == other.__isset.delegationToken) && ((!__isset.delegationToken) || (global::System.Object.Equals(DelegationToken, other.DelegationToken)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((DelegationToken != null) && __isset.delegationToken) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp606 = new StringBuilder("TGetDelegationTokenResp("); + if((Status != null)) + { + tmp606.Append(", Status: "); + Status.ToString(tmp606); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp606.Append(", DelegationToken: "); + DelegationToken.ToString(tmp606); + } + tmp606.Append(')'); + return tmp606.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs new file mode 100644 index 0000000000..192bdae204 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs @@ -0,0 +1,513 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetFunctionsReq : TBase + { + private string _catalogName; + private string _schemaName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string FunctionName { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetFunctionsReq() + { + } + + public TGetFunctionsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string functionName) : this() + { + this.SessionHandle = sessionHandle; + this.FunctionName = functionName; + } + + public TGetFunctionsReq DeepCopy() + { + var tmp509 = new TGetFunctionsReq(); + if((SessionHandle != null)) + { + tmp509.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp509.CatalogName = this.CatalogName; + } + tmp509.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp509.SchemaName = this.SchemaName; + } + tmp509.__isset.schemaName = this.__isset.schemaName; + if((FunctionName != null)) + { + tmp509.FunctionName = this.FunctionName; + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp509.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp509.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp509.RunAsync = this.RunAsync; + } + tmp509.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp509.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp509.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp509.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp509.__isset.sessionConf = this.__isset.sessionConf; + return tmp509; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_functionName = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + FunctionName = await iprot.ReadStringAsync(cancellationToken); + isset_functionName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_functionName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp510 = new TStruct("TGetFunctionsReq"); + await oprot.WriteStructBeginAsync(tmp510, cancellationToken); + var tmp511 = new TField(); + if((SessionHandle != null)) + { + tmp511.Name = "sessionHandle"; + tmp511.Type = TType.Struct; + tmp511.ID = 1; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp511.Name = "catalogName"; + tmp511.Type = TType.String; + tmp511.ID = 2; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp511.Name = "schemaName"; + tmp511.Type = TType.String; + tmp511.ID = 3; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((FunctionName != null)) + { + tmp511.Name = "functionName"; + tmp511.Type = TType.String; + tmp511.ID = 4; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(FunctionName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp511.Name = "getDirectResults"; + tmp511.Type = TType.Struct; + tmp511.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp511.Name = "runAsync"; + tmp511.Type = TType.Bool; + tmp511.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp511.Name = "operationId"; + tmp511.Type = TType.Struct; + tmp511.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp511.Name = "sessionConf"; + tmp511.Type = TType.Struct; + tmp511.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetFunctionsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && global::System.Object.Equals(FunctionName, other.FunctionName) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((FunctionName != null)) + { + hashcode = (hashcode * 397) + FunctionName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp512 = new StringBuilder("TGetFunctionsReq("); + if((SessionHandle != null)) + { + tmp512.Append(", SessionHandle: "); + SessionHandle.ToString(tmp512); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp512.Append(", CatalogName: "); + CatalogName.ToString(tmp512); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp512.Append(", SchemaName: "); + SchemaName.ToString(tmp512); + } + if((FunctionName != null)) + { + tmp512.Append(", FunctionName: "); + FunctionName.ToString(tmp512); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp512.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp512); + } + if(__isset.runAsync) + { + tmp512.Append(", RunAsync: "); + RunAsync.ToString(tmp512); + } + if((OperationId != null) && __isset.operationId) + { + tmp512.Append(", OperationId: "); + OperationId.ToString(tmp512); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp512.Append(", SessionConf: "); + SessionConf.ToString(tmp512); + } + tmp512.Append(')'); + return tmp512.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs new file mode 100644 index 0000000000..21fdead24f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetFunctionsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetFunctionsResp() + { + } + + public TGetFunctionsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetFunctionsResp DeepCopy() + { + var tmp514 = new TGetFunctionsResp(); + if((Status != null)) + { + tmp514.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp514.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp514.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp514.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp514.__isset.directResults = this.__isset.directResults; + return tmp514; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp515 = new TStruct("TGetFunctionsResp"); + await oprot.WriteStructBeginAsync(tmp515, cancellationToken); + var tmp516 = new TField(); + if((Status != null)) + { + tmp516.Name = "status"; + tmp516.Type = TType.Struct; + tmp516.ID = 1; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp516.Name = "operationHandle"; + tmp516.Type = TType.Struct; + tmp516.ID = 2; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp516.Name = "directResults"; + tmp516.Type = TType.Struct; + tmp516.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetFunctionsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp517 = new StringBuilder("TGetFunctionsResp("); + if((Status != null)) + { + tmp517.Append(", Status: "); + Status.ToString(tmp517); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp517.Append(", OperationHandle: "); + OperationHandle.ToString(tmp517); + } + if((DirectResults != null) && __isset.directResults) + { + tmp517.Append(", DirectResults: "); + DirectResults.ToString(tmp517); + } + tmp517.Append(')'); + return tmp517.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs new file mode 100644 index 0000000000..8efeb5f5ff --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs @@ -0,0 +1,202 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType InfoType { get; set; } + + public TGetInfoReq() + { + } + + public TGetInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType infoType) : this() + { + this.SessionHandle = sessionHandle; + this.InfoType = infoType; + } + + public TGetInfoReq DeepCopy() + { + var tmp347 = new TGetInfoReq(); + if((SessionHandle != null)) + { + tmp347.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + tmp347.InfoType = this.InfoType; + return tmp347; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_infoType = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + InfoType = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType)await iprot.ReadI32Async(cancellationToken); + isset_infoType = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_infoType) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp348 = new TStruct("TGetInfoReq"); + await oprot.WriteStructBeginAsync(tmp348, cancellationToken); + var tmp349 = new TField(); + if((SessionHandle != null)) + { + tmp349.Name = "sessionHandle"; + tmp349.Type = TType.Struct; + tmp349.ID = 1; + await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp349.Name = "infoType"; + tmp349.Type = TType.I32; + tmp349.ID = 2; + await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); + await oprot.WriteI32Async((int)InfoType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(InfoType, other.InfoType); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + hashcode = (hashcode * 397) + InfoType.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp350 = new StringBuilder("TGetInfoReq("); + if((SessionHandle != null)) + { + tmp350.Append(", SessionHandle: "); + SessionHandle.ToString(tmp350); + } + tmp350.Append(", InfoType: "); + InfoType.ToString(tmp350); + tmp350.Append(')'); + return tmp350.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs new file mode 100644 index 0000000000..dc3d5e8cb3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue InfoValue { get; set; } + + public TGetInfoResp() + { + } + + public TGetInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue infoValue) : this() + { + this.Status = status; + this.InfoValue = infoValue; + } + + public TGetInfoResp DeepCopy() + { + var tmp352 = new TGetInfoResp(); + if((Status != null)) + { + tmp352.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((InfoValue != null)) + { + tmp352.InfoValue = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue)this.InfoValue.DeepCopy(); + } + return tmp352; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_infoValue = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + InfoValue = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue(); + await InfoValue.ReadAsync(iprot, cancellationToken); + isset_infoValue = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_infoValue) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp353 = new TStruct("TGetInfoResp"); + await oprot.WriteStructBeginAsync(tmp353, cancellationToken); + var tmp354 = new TField(); + if((Status != null)) + { + tmp354.Name = "status"; + tmp354.Type = TType.Struct; + tmp354.ID = 1; + await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InfoValue != null)) + { + tmp354.Name = "infoValue"; + tmp354.Type = TType.Struct; + tmp354.ID = 2; + await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); + await InfoValue.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(InfoValue, other.InfoValue); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((InfoValue != null)) + { + hashcode = (hashcode * 397) + InfoValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp355 = new StringBuilder("TGetInfoResp("); + if((Status != null)) + { + tmp355.Append(", Status: "); + Status.ToString(tmp355); + } + if((InfoValue != null)) + { + tmp355.Append(", InfoValue: "); + InfoValue.ToString(tmp355); + } + tmp355.Append(')'); + return tmp355.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs new file mode 100644 index 0000000000..59b5ae27fa --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs @@ -0,0 +1,68 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TGetInfoType + { + CLI_MAX_DRIVER_CONNECTIONS = 0, + CLI_MAX_CONCURRENT_ACTIVITIES = 1, + CLI_DATA_SOURCE_NAME = 2, + CLI_FETCH_DIRECTION = 8, + CLI_SERVER_NAME = 13, + CLI_SEARCH_PATTERN_ESCAPE = 14, + CLI_DBMS_NAME = 17, + CLI_DBMS_VER = 18, + CLI_ACCESSIBLE_TABLES = 19, + CLI_ACCESSIBLE_PROCEDURES = 20, + CLI_CURSOR_COMMIT_BEHAVIOR = 23, + CLI_DATA_SOURCE_READ_ONLY = 25, + CLI_DEFAULT_TXN_ISOLATION = 26, + CLI_IDENTIFIER_CASE = 28, + CLI_IDENTIFIER_QUOTE_CHAR = 29, + CLI_MAX_COLUMN_NAME_LEN = 30, + CLI_MAX_CURSOR_NAME_LEN = 31, + CLI_MAX_SCHEMA_NAME_LEN = 32, + CLI_MAX_CATALOG_NAME_LEN = 34, + CLI_MAX_TABLE_NAME_LEN = 35, + CLI_SCROLL_CONCURRENCY = 43, + CLI_TXN_CAPABLE = 46, + CLI_USER_NAME = 47, + CLI_TXN_ISOLATION_OPTION = 72, + CLI_INTEGRITY = 73, + CLI_GETDATA_EXTENSIONS = 81, + CLI_NULL_COLLATION = 85, + CLI_ALTER_TABLE = 86, + CLI_ORDER_BY_COLUMNS_IN_SELECT = 90, + CLI_SPECIAL_CHARACTERS = 94, + CLI_MAX_COLUMNS_IN_GROUP_BY = 97, + CLI_MAX_COLUMNS_IN_INDEX = 98, + CLI_MAX_COLUMNS_IN_ORDER_BY = 99, + CLI_MAX_COLUMNS_IN_SELECT = 100, + CLI_MAX_COLUMNS_IN_TABLE = 101, + CLI_MAX_INDEX_SIZE = 102, + CLI_MAX_ROW_SIZE = 104, + CLI_MAX_STATEMENT_LEN = 105, + CLI_MAX_TABLES_IN_SELECT = 106, + CLI_MAX_USER_NAME_LEN = 107, + CLI_OJ_CAPABILITIES = 115, + CLI_XOPEN_CLI_YEAR = 10000, + CLI_CURSOR_SENSITIVITY = 10001, + CLI_DESCRIBE_PARAMETER = 10002, + CLI_CATALOG_NAME = 10003, + CLI_COLLATION_SEQ = 10004, + CLI_MAX_IDENTIFIER_LEN = 10005, + CLI_ODBC_KEYWORDS = 10006, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs new file mode 100644 index 0000000000..16d80393da --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs @@ -0,0 +1,428 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoValue : TBase + { + private string _stringValue; + private short _smallIntValue; + private int _integerBitmask; + private int _integerFlag; + private int _binaryValue; + private long _lenValue; + + public string StringValue + { + get + { + return _stringValue; + } + set + { + __isset.stringValue = true; + this._stringValue = value; + } + } + + public short SmallIntValue + { + get + { + return _smallIntValue; + } + set + { + __isset.smallIntValue = true; + this._smallIntValue = value; + } + } + + public int IntegerBitmask + { + get + { + return _integerBitmask; + } + set + { + __isset.integerBitmask = true; + this._integerBitmask = value; + } + } + + public int IntegerFlag + { + get + { + return _integerFlag; + } + set + { + __isset.integerFlag = true; + this._integerFlag = value; + } + } + + public int BinaryValue + { + get + { + return _binaryValue; + } + set + { + __isset.binaryValue = true; + this._binaryValue = value; + } + } + + public long LenValue + { + get + { + return _lenValue; + } + set + { + __isset.lenValue = true; + this._lenValue = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool stringValue; + public bool smallIntValue; + public bool integerBitmask; + public bool integerFlag; + public bool binaryValue; + public bool lenValue; + } + + public TGetInfoValue() + { + } + + public TGetInfoValue DeepCopy() + { + var tmp342 = new TGetInfoValue(); + if((StringValue != null) && __isset.stringValue) + { + tmp342.StringValue = this.StringValue; + } + tmp342.__isset.stringValue = this.__isset.stringValue; + if(__isset.smallIntValue) + { + tmp342.SmallIntValue = this.SmallIntValue; + } + tmp342.__isset.smallIntValue = this.__isset.smallIntValue; + if(__isset.integerBitmask) + { + tmp342.IntegerBitmask = this.IntegerBitmask; + } + tmp342.__isset.integerBitmask = this.__isset.integerBitmask; + if(__isset.integerFlag) + { + tmp342.IntegerFlag = this.IntegerFlag; + } + tmp342.__isset.integerFlag = this.__isset.integerFlag; + if(__isset.binaryValue) + { + tmp342.BinaryValue = this.BinaryValue; + } + tmp342.__isset.binaryValue = this.__isset.binaryValue; + if(__isset.lenValue) + { + tmp342.LenValue = this.LenValue; + } + tmp342.__isset.lenValue = this.__isset.lenValue; + return tmp342; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + StringValue = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I16) + { + SmallIntValue = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I32) + { + IntegerBitmask = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + IntegerFlag = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I32) + { + BinaryValue = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.I64) + { + LenValue = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp343 = new TStruct("TGetInfoValue"); + await oprot.WriteStructBeginAsync(tmp343, cancellationToken); + var tmp344 = new TField(); + if((StringValue != null) && __isset.stringValue) + { + tmp344.Name = "stringValue"; + tmp344.Type = TType.String; + tmp344.ID = 1; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteStringAsync(StringValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.smallIntValue) + { + tmp344.Name = "smallIntValue"; + tmp344.Type = TType.I16; + tmp344.ID = 2; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI16Async(SmallIntValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.integerBitmask) + { + tmp344.Name = "integerBitmask"; + tmp344.Type = TType.I32; + tmp344.ID = 3; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(IntegerBitmask, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.integerFlag) + { + tmp344.Name = "integerFlag"; + tmp344.Type = TType.I32; + tmp344.ID = 4; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(IntegerFlag, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.binaryValue) + { + tmp344.Name = "binaryValue"; + tmp344.Type = TType.I32; + tmp344.ID = 5; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(BinaryValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.lenValue) + { + tmp344.Name = "lenValue"; + tmp344.Type = TType.I64; + tmp344.ID = 6; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI64Async(LenValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))) + && ((__isset.smallIntValue == other.__isset.smallIntValue) && ((!__isset.smallIntValue) || (global::System.Object.Equals(SmallIntValue, other.SmallIntValue)))) + && ((__isset.integerBitmask == other.__isset.integerBitmask) && ((!__isset.integerBitmask) || (global::System.Object.Equals(IntegerBitmask, other.IntegerBitmask)))) + && ((__isset.integerFlag == other.__isset.integerFlag) && ((!__isset.integerFlag) || (global::System.Object.Equals(IntegerFlag, other.IntegerFlag)))) + && ((__isset.binaryValue == other.__isset.binaryValue) && ((!__isset.binaryValue) || (global::System.Object.Equals(BinaryValue, other.BinaryValue)))) + && ((__isset.lenValue == other.__isset.lenValue) && ((!__isset.lenValue) || (global::System.Object.Equals(LenValue, other.LenValue)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((StringValue != null) && __isset.stringValue) + { + hashcode = (hashcode * 397) + StringValue.GetHashCode(); + } + if(__isset.smallIntValue) + { + hashcode = (hashcode * 397) + SmallIntValue.GetHashCode(); + } + if(__isset.integerBitmask) + { + hashcode = (hashcode * 397) + IntegerBitmask.GetHashCode(); + } + if(__isset.integerFlag) + { + hashcode = (hashcode * 397) + IntegerFlag.GetHashCode(); + } + if(__isset.binaryValue) + { + hashcode = (hashcode * 397) + BinaryValue.GetHashCode(); + } + if(__isset.lenValue) + { + hashcode = (hashcode * 397) + LenValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp345 = new StringBuilder("TGetInfoValue("); + int tmp346 = 0; + if((StringValue != null) && __isset.stringValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("StringValue: "); + StringValue.ToString(tmp345); + } + if(__isset.smallIntValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("SmallIntValue: "); + SmallIntValue.ToString(tmp345); + } + if(__isset.integerBitmask) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("IntegerBitmask: "); + IntegerBitmask.ToString(tmp345); + } + if(__isset.integerFlag) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("IntegerFlag: "); + IntegerFlag.ToString(tmp345); + } + if(__isset.binaryValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("BinaryValue: "); + BinaryValue.ToString(tmp345); + } + if(__isset.lenValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("LenValue: "); + LenValue.ToString(tmp345); + } + tmp345.Append(')'); + return tmp345.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs new file mode 100644 index 0000000000..edb8bb89e0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetOperationStatusReq : TBase + { + private bool _getProgressUpdate; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public bool GetProgressUpdate + { + get + { + return _getProgressUpdate; + } + set + { + __isset.getProgressUpdate = true; + this._getProgressUpdate = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getProgressUpdate; + } + + public TGetOperationStatusReq() + { + } + + public TGetOperationStatusReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetOperationStatusReq DeepCopy() + { + var tmp539 = new TGetOperationStatusReq(); + if((OperationHandle != null)) + { + tmp539.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + if(__isset.getProgressUpdate) + { + tmp539.GetProgressUpdate = this.GetProgressUpdate; + } + tmp539.__isset.getProgressUpdate = this.__isset.getProgressUpdate; + return tmp539; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + GetProgressUpdate = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp540 = new TStruct("TGetOperationStatusReq"); + await oprot.WriteStructBeginAsync(tmp540, cancellationToken); + var tmp541 = new TField(); + if((OperationHandle != null)) + { + tmp541.Name = "operationHandle"; + tmp541.Type = TType.Struct; + tmp541.ID = 1; + await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.getProgressUpdate) + { + tmp541.Name = "getProgressUpdate"; + tmp541.Type = TType.Bool; + tmp541.ID = 2; + await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); + await oprot.WriteBoolAsync(GetProgressUpdate, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetOperationStatusReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && ((__isset.getProgressUpdate == other.__isset.getProgressUpdate) && ((!__isset.getProgressUpdate) || (global::System.Object.Equals(GetProgressUpdate, other.GetProgressUpdate)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if(__isset.getProgressUpdate) + { + hashcode = (hashcode * 397) + GetProgressUpdate.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp542 = new StringBuilder("TGetOperationStatusReq("); + if((OperationHandle != null)) + { + tmp542.Append(", OperationHandle: "); + OperationHandle.ToString(tmp542); + } + if(__isset.getProgressUpdate) + { + tmp542.Append(", GetProgressUpdate: "); + GetProgressUpdate.ToString(tmp542); + } + tmp542.Append(')'); + return tmp542.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs new file mode 100644 index 0000000000..dd024f750b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs @@ -0,0 +1,963 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetOperationStatusResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationState _operationState; + private string _sqlState; + private int _errorCode; + private string _errorMessage; + private string _taskStatus; + private long _operationStarted; + private long _operationCompleted; + private bool _hasResultSet; + private global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp _progressUpdateResponse; + private long _numModifiedRows; + private string _displayMessage; + private string _diagnosticInfo; + private string _responseValidation; + private int _idempotencyType; + private long _statementTimeout; + private int _statementTimeoutLevel; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TOperationState OperationState + { + get + { + return _operationState; + } + set + { + __isset.operationState = true; + this._operationState = value; + } + } + + public string SqlState + { + get + { + return _sqlState; + } + set + { + __isset.sqlState = true; + this._sqlState = value; + } + } + + public int ErrorCode + { + get + { + return _errorCode; + } + set + { + __isset.errorCode = true; + this._errorCode = value; + } + } + + public string ErrorMessage + { + get + { + return _errorMessage; + } + set + { + __isset.errorMessage = true; + this._errorMessage = value; + } + } + + public string TaskStatus + { + get + { + return _taskStatus; + } + set + { + __isset.taskStatus = true; + this._taskStatus = value; + } + } + + public long OperationStarted + { + get + { + return _operationStarted; + } + set + { + __isset.operationStarted = true; + this._operationStarted = value; + } + } + + public long OperationCompleted + { + get + { + return _operationCompleted; + } + set + { + __isset.operationCompleted = true; + this._operationCompleted = value; + } + } + + public bool HasResultSet + { + get + { + return _hasResultSet; + } + set + { + __isset.hasResultSet = true; + this._hasResultSet = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp ProgressUpdateResponse + { + get + { + return _progressUpdateResponse; + } + set + { + __isset.progressUpdateResponse = true; + this._progressUpdateResponse = value; + } + } + + public long NumModifiedRows + { + get + { + return _numModifiedRows; + } + set + { + __isset.numModifiedRows = true; + this._numModifiedRows = value; + } + } + + public string DisplayMessage + { + get + { + return _displayMessage; + } + set + { + __isset.displayMessage = true; + this._displayMessage = value; + } + } + + public string DiagnosticInfo + { + get + { + return _diagnosticInfo; + } + set + { + __isset.diagnosticInfo = true; + this._diagnosticInfo = value; + } + } + + public string ResponseValidation + { + get + { + return _responseValidation; + } + set + { + __isset.responseValidation = true; + this._responseValidation = value; + } + } + + public int IdempotencyType + { + get + { + return _idempotencyType; + } + set + { + __isset.idempotencyType = true; + this._idempotencyType = value; + } + } + + public long StatementTimeout + { + get + { + return _statementTimeout; + } + set + { + __isset.statementTimeout = true; + this._statementTimeout = value; + } + } + + public int StatementTimeoutLevel + { + get + { + return _statementTimeoutLevel; + } + set + { + __isset.statementTimeoutLevel = true; + this._statementTimeoutLevel = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationState; + public bool sqlState; + public bool errorCode; + public bool errorMessage; + public bool taskStatus; + public bool operationStarted; + public bool operationCompleted; + public bool hasResultSet; + public bool progressUpdateResponse; + public bool numModifiedRows; + public bool displayMessage; + public bool diagnosticInfo; + public bool responseValidation; + public bool idempotencyType; + public bool statementTimeout; + public bool statementTimeoutLevel; + } + + public TGetOperationStatusResp() + { + } + + public TGetOperationStatusResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetOperationStatusResp DeepCopy() + { + var tmp544 = new TGetOperationStatusResp(); + if((Status != null)) + { + tmp544.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if(__isset.operationState) + { + tmp544.OperationState = this.OperationState; + } + tmp544.__isset.operationState = this.__isset.operationState; + if((SqlState != null) && __isset.sqlState) + { + tmp544.SqlState = this.SqlState; + } + tmp544.__isset.sqlState = this.__isset.sqlState; + if(__isset.errorCode) + { + tmp544.ErrorCode = this.ErrorCode; + } + tmp544.__isset.errorCode = this.__isset.errorCode; + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp544.ErrorMessage = this.ErrorMessage; + } + tmp544.__isset.errorMessage = this.__isset.errorMessage; + if((TaskStatus != null) && __isset.taskStatus) + { + tmp544.TaskStatus = this.TaskStatus; + } + tmp544.__isset.taskStatus = this.__isset.taskStatus; + if(__isset.operationStarted) + { + tmp544.OperationStarted = this.OperationStarted; + } + tmp544.__isset.operationStarted = this.__isset.operationStarted; + if(__isset.operationCompleted) + { + tmp544.OperationCompleted = this.OperationCompleted; + } + tmp544.__isset.operationCompleted = this.__isset.operationCompleted; + if(__isset.hasResultSet) + { + tmp544.HasResultSet = this.HasResultSet; + } + tmp544.__isset.hasResultSet = this.__isset.hasResultSet; + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp544.ProgressUpdateResponse = (global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp)this.ProgressUpdateResponse.DeepCopy(); + } + tmp544.__isset.progressUpdateResponse = this.__isset.progressUpdateResponse; + if(__isset.numModifiedRows) + { + tmp544.NumModifiedRows = this.NumModifiedRows; + } + tmp544.__isset.numModifiedRows = this.__isset.numModifiedRows; + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp544.DisplayMessage = this.DisplayMessage; + } + tmp544.__isset.displayMessage = this.__isset.displayMessage; + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp544.DiagnosticInfo = this.DiagnosticInfo; + } + tmp544.__isset.diagnosticInfo = this.__isset.diagnosticInfo; + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp544.ResponseValidation = this.ResponseValidation; + } + tmp544.__isset.responseValidation = this.__isset.responseValidation; + if(__isset.idempotencyType) + { + tmp544.IdempotencyType = this.IdempotencyType; + } + tmp544.__isset.idempotencyType = this.__isset.idempotencyType; + if(__isset.statementTimeout) + { + tmp544.StatementTimeout = this.StatementTimeout; + } + tmp544.__isset.statementTimeout = this.__isset.statementTimeout; + if(__isset.statementTimeoutLevel) + { + tmp544.StatementTimeoutLevel = this.StatementTimeoutLevel; + } + tmp544.__isset.statementTimeoutLevel = this.__isset.statementTimeoutLevel; + return tmp544; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + OperationState = (global::Apache.Hive.Service.Rpc.Thrift.TOperationState)await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SqlState = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + ErrorCode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ErrorMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + TaskStatus = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.I64) + { + OperationStarted = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.I64) + { + OperationCompleted = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 9: + if (field.Type == TType.Bool) + { + HasResultSet = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 10: + if (field.Type == TType.Struct) + { + ProgressUpdateResponse = new global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp(); + await ProgressUpdateResponse.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 11: + if (field.Type == TType.I64) + { + NumModifiedRows = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.String) + { + DisplayMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.String) + { + DiagnosticInfo = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.String) + { + ResponseValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.I32) + { + IdempotencyType = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.I64) + { + StatementTimeout = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.I32) + { + StatementTimeoutLevel = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp545 = new TStruct("TGetOperationStatusResp"); + await oprot.WriteStructBeginAsync(tmp545, cancellationToken); + var tmp546 = new TField(); + if((Status != null)) + { + tmp546.Name = "status"; + tmp546.Type = TType.Struct; + tmp546.ID = 1; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationState) + { + tmp546.Name = "operationState"; + tmp546.Type = TType.I32; + tmp546.ID = 2; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async((int)OperationState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlState != null) && __isset.sqlState) + { + tmp546.Name = "sqlState"; + tmp546.Type = TType.String; + tmp546.ID = 3; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(SqlState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.errorCode) + { + tmp546.Name = "errorCode"; + tmp546.Type = TType.I32; + tmp546.ID = 4; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(ErrorCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp546.Name = "errorMessage"; + tmp546.Type = TType.String; + tmp546.ID = 5; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(ErrorMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TaskStatus != null) && __isset.taskStatus) + { + tmp546.Name = "taskStatus"; + tmp546.Type = TType.String; + tmp546.ID = 6; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(TaskStatus, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationStarted) + { + tmp546.Name = "operationStarted"; + tmp546.Type = TType.I64; + tmp546.ID = 7; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(OperationStarted, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationCompleted) + { + tmp546.Name = "operationCompleted"; + tmp546.Type = TType.I64; + tmp546.ID = 8; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(OperationCompleted, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.hasResultSet) + { + tmp546.Name = "hasResultSet"; + tmp546.Type = TType.Bool; + tmp546.ID = 9; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteBoolAsync(HasResultSet, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp546.Name = "progressUpdateResponse"; + tmp546.Type = TType.Struct; + tmp546.ID = 10; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await ProgressUpdateResponse.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.numModifiedRows) + { + tmp546.Name = "numModifiedRows"; + tmp546.Type = TType.I64; + tmp546.ID = 11; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(NumModifiedRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp546.Name = "displayMessage"; + tmp546.Type = TType.String; + tmp546.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(DisplayMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp546.Name = "diagnosticInfo"; + tmp546.Type = TType.String; + tmp546.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(DiagnosticInfo, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp546.Name = "responseValidation"; + tmp546.Type = TType.String; + tmp546.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(ResponseValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.idempotencyType) + { + tmp546.Name = "idempotencyType"; + tmp546.Type = TType.I32; + tmp546.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(IdempotencyType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.statementTimeout) + { + tmp546.Name = "statementTimeout"; + tmp546.Type = TType.I64; + tmp546.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(StatementTimeout, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.statementTimeoutLevel) + { + tmp546.Name = "statementTimeoutLevel"; + tmp546.Type = TType.I32; + tmp546.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(StatementTimeoutLevel, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetOperationStatusResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationState == other.__isset.operationState) && ((!__isset.operationState) || (global::System.Object.Equals(OperationState, other.OperationState)))) + && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) + && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) + && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))) + && ((__isset.taskStatus == other.__isset.taskStatus) && ((!__isset.taskStatus) || (global::System.Object.Equals(TaskStatus, other.TaskStatus)))) + && ((__isset.operationStarted == other.__isset.operationStarted) && ((!__isset.operationStarted) || (global::System.Object.Equals(OperationStarted, other.OperationStarted)))) + && ((__isset.operationCompleted == other.__isset.operationCompleted) && ((!__isset.operationCompleted) || (global::System.Object.Equals(OperationCompleted, other.OperationCompleted)))) + && ((__isset.hasResultSet == other.__isset.hasResultSet) && ((!__isset.hasResultSet) || (global::System.Object.Equals(HasResultSet, other.HasResultSet)))) + && ((__isset.progressUpdateResponse == other.__isset.progressUpdateResponse) && ((!__isset.progressUpdateResponse) || (global::System.Object.Equals(ProgressUpdateResponse, other.ProgressUpdateResponse)))) + && ((__isset.numModifiedRows == other.__isset.numModifiedRows) && ((!__isset.numModifiedRows) || (global::System.Object.Equals(NumModifiedRows, other.NumModifiedRows)))) + && ((__isset.displayMessage == other.__isset.displayMessage) && ((!__isset.displayMessage) || (global::System.Object.Equals(DisplayMessage, other.DisplayMessage)))) + && ((__isset.diagnosticInfo == other.__isset.diagnosticInfo) && ((!__isset.diagnosticInfo) || (global::System.Object.Equals(DiagnosticInfo, other.DiagnosticInfo)))) + && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))) + && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))) + && ((__isset.statementTimeout == other.__isset.statementTimeout) && ((!__isset.statementTimeout) || (global::System.Object.Equals(StatementTimeout, other.StatementTimeout)))) + && ((__isset.statementTimeoutLevel == other.__isset.statementTimeoutLevel) && ((!__isset.statementTimeoutLevel) || (global::System.Object.Equals(StatementTimeoutLevel, other.StatementTimeoutLevel)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if(__isset.operationState) + { + hashcode = (hashcode * 397) + OperationState.GetHashCode(); + } + if((SqlState != null) && __isset.sqlState) + { + hashcode = (hashcode * 397) + SqlState.GetHashCode(); + } + if(__isset.errorCode) + { + hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); + } + if((TaskStatus != null) && __isset.taskStatus) + { + hashcode = (hashcode * 397) + TaskStatus.GetHashCode(); + } + if(__isset.operationStarted) + { + hashcode = (hashcode * 397) + OperationStarted.GetHashCode(); + } + if(__isset.operationCompleted) + { + hashcode = (hashcode * 397) + OperationCompleted.GetHashCode(); + } + if(__isset.hasResultSet) + { + hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + hashcode = (hashcode * 397) + ProgressUpdateResponse.GetHashCode(); + } + if(__isset.numModifiedRows) + { + hashcode = (hashcode * 397) + NumModifiedRows.GetHashCode(); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + hashcode = (hashcode * 397) + DisplayMessage.GetHashCode(); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + hashcode = (hashcode * 397) + DiagnosticInfo.GetHashCode(); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); + } + if(__isset.idempotencyType) + { + hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); + } + if(__isset.statementTimeout) + { + hashcode = (hashcode * 397) + StatementTimeout.GetHashCode(); + } + if(__isset.statementTimeoutLevel) + { + hashcode = (hashcode * 397) + StatementTimeoutLevel.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp547 = new StringBuilder("TGetOperationStatusResp("); + if((Status != null)) + { + tmp547.Append(", Status: "); + Status.ToString(tmp547); + } + if(__isset.operationState) + { + tmp547.Append(", OperationState: "); + OperationState.ToString(tmp547); + } + if((SqlState != null) && __isset.sqlState) + { + tmp547.Append(", SqlState: "); + SqlState.ToString(tmp547); + } + if(__isset.errorCode) + { + tmp547.Append(", ErrorCode: "); + ErrorCode.ToString(tmp547); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp547.Append(", ErrorMessage: "); + ErrorMessage.ToString(tmp547); + } + if((TaskStatus != null) && __isset.taskStatus) + { + tmp547.Append(", TaskStatus: "); + TaskStatus.ToString(tmp547); + } + if(__isset.operationStarted) + { + tmp547.Append(", OperationStarted: "); + OperationStarted.ToString(tmp547); + } + if(__isset.operationCompleted) + { + tmp547.Append(", OperationCompleted: "); + OperationCompleted.ToString(tmp547); + } + if(__isset.hasResultSet) + { + tmp547.Append(", HasResultSet: "); + HasResultSet.ToString(tmp547); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp547.Append(", ProgressUpdateResponse: "); + ProgressUpdateResponse.ToString(tmp547); + } + if(__isset.numModifiedRows) + { + tmp547.Append(", NumModifiedRows: "); + NumModifiedRows.ToString(tmp547); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp547.Append(", DisplayMessage: "); + DisplayMessage.ToString(tmp547); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp547.Append(", DiagnosticInfo: "); + DiagnosticInfo.ToString(tmp547); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp547.Append(", ResponseValidation: "); + ResponseValidation.ToString(tmp547); + } + if(__isset.idempotencyType) + { + tmp547.Append(", IdempotencyType: "); + IdempotencyType.ToString(tmp547); + } + if(__isset.statementTimeout) + { + tmp547.Append(", StatementTimeout: "); + StatementTimeout.ToString(tmp547); + } + if(__isset.statementTimeoutLevel) + { + tmp547.Append(", StatementTimeoutLevel: "); + StatementTimeoutLevel.ToString(tmp547); + } + tmp547.Append(')'); + return tmp547.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs new file mode 100644 index 0000000000..fefa1fede2 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs @@ -0,0 +1,520 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetPrimaryKeysReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetPrimaryKeysReq() + { + } + + public TGetPrimaryKeysReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetPrimaryKeysReq DeepCopy() + { + var tmp519 = new TGetPrimaryKeysReq(); + if((SessionHandle != null)) + { + tmp519.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp519.CatalogName = this.CatalogName; + } + tmp519.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp519.SchemaName = this.SchemaName; + } + tmp519.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp519.TableName = this.TableName; + } + tmp519.__isset.tableName = this.__isset.tableName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp519.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp519.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp519.RunAsync = this.RunAsync; + } + tmp519.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp519.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp519.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp519.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp519.__isset.sessionConf = this.__isset.sessionConf; + return tmp519; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp520 = new TStruct("TGetPrimaryKeysReq"); + await oprot.WriteStructBeginAsync(tmp520, cancellationToken); + var tmp521 = new TField(); + if((SessionHandle != null)) + { + tmp521.Name = "sessionHandle"; + tmp521.Type = TType.Struct; + tmp521.ID = 1; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp521.Name = "catalogName"; + tmp521.Type = TType.String; + tmp521.ID = 2; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp521.Name = "schemaName"; + tmp521.Type = TType.String; + tmp521.ID = 3; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp521.Name = "tableName"; + tmp521.Type = TType.String; + tmp521.ID = 4; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp521.Name = "getDirectResults"; + tmp521.Type = TType.Struct; + tmp521.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp521.Name = "runAsync"; + tmp521.Type = TType.Bool; + tmp521.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp521.Name = "operationId"; + tmp521.Type = TType.Struct; + tmp521.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp521.Name = "sessionConf"; + tmp521.Type = TType.Struct; + tmp521.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetPrimaryKeysReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp522 = new StringBuilder("TGetPrimaryKeysReq("); + if((SessionHandle != null)) + { + tmp522.Append(", SessionHandle: "); + SessionHandle.ToString(tmp522); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp522.Append(", CatalogName: "); + CatalogName.ToString(tmp522); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp522.Append(", SchemaName: "); + SchemaName.ToString(tmp522); + } + if((TableName != null) && __isset.tableName) + { + tmp522.Append(", TableName: "); + TableName.ToString(tmp522); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp522.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp522); + } + if(__isset.runAsync) + { + tmp522.Append(", RunAsync: "); + RunAsync.ToString(tmp522); + } + if((OperationId != null) && __isset.operationId) + { + tmp522.Append(", OperationId: "); + OperationId.ToString(tmp522); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp522.Append(", SessionConf: "); + SessionConf.ToString(tmp522); + } + tmp522.Append(')'); + return tmp522.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs new file mode 100644 index 0000000000..7071e690e6 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetPrimaryKeysResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetPrimaryKeysResp() + { + } + + public TGetPrimaryKeysResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetPrimaryKeysResp DeepCopy() + { + var tmp524 = new TGetPrimaryKeysResp(); + if((Status != null)) + { + tmp524.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp524.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp524.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp524.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp524.__isset.directResults = this.__isset.directResults; + return tmp524; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp525 = new TStruct("TGetPrimaryKeysResp"); + await oprot.WriteStructBeginAsync(tmp525, cancellationToken); + var tmp526 = new TField(); + if((Status != null)) + { + tmp526.Name = "status"; + tmp526.Type = TType.Struct; + tmp526.ID = 1; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp526.Name = "operationHandle"; + tmp526.Type = TType.Struct; + tmp526.ID = 2; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp526.Name = "directResults"; + tmp526.Type = TType.Struct; + tmp526.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetPrimaryKeysResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp527 = new StringBuilder("TGetPrimaryKeysResp("); + if((Status != null)) + { + tmp527.Append(", Status: "); + Status.ToString(tmp527); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp527.Append(", OperationHandle: "); + OperationHandle.ToString(tmp527); + } + if((DirectResults != null) && __isset.directResults) + { + tmp527.Append(", DirectResults: "); + DirectResults.ToString(tmp527); + } + tmp527.Append(')'); + return tmp527.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs new file mode 100644 index 0000000000..c11d9b5b07 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetQueryIdReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TGetQueryIdReq() + { + } + + public TGetQueryIdReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetQueryIdReq DeepCopy() + { + var tmp645 = new TGetQueryIdReq(); + if((OperationHandle != null)) + { + tmp645.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp645; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp646 = new TStruct("TGetQueryIdReq"); + await oprot.WriteStructBeginAsync(tmp646, cancellationToken); + var tmp647 = new TField(); + if((OperationHandle != null)) + { + tmp647.Name = "operationHandle"; + tmp647.Type = TType.Struct; + tmp647.ID = 1; + await oprot.WriteFieldBeginAsync(tmp647, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetQueryIdReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp648 = new StringBuilder("TGetQueryIdReq("); + if((OperationHandle != null)) + { + tmp648.Append(", OperationHandle: "); + OperationHandle.ToString(tmp648); + } + tmp648.Append(')'); + return tmp648.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs new file mode 100644 index 0000000000..d0144f3418 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs @@ -0,0 +1,167 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetQueryIdResp : TBase + { + + public string QueryId { get; set; } + + public TGetQueryIdResp() + { + } + + public TGetQueryIdResp(string queryId) : this() + { + this.QueryId = queryId; + } + + public TGetQueryIdResp DeepCopy() + { + var tmp650 = new TGetQueryIdResp(); + if((QueryId != null)) + { + tmp650.QueryId = this.QueryId; + } + return tmp650; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_queryId = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + QueryId = await iprot.ReadStringAsync(cancellationToken); + isset_queryId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_queryId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp651 = new TStruct("TGetQueryIdResp"); + await oprot.WriteStructBeginAsync(tmp651, cancellationToken); + var tmp652 = new TField(); + if((QueryId != null)) + { + tmp652.Name = "queryId"; + tmp652.Type = TType.String; + tmp652.ID = 1; + await oprot.WriteFieldBeginAsync(tmp652, cancellationToken); + await oprot.WriteStringAsync(QueryId, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetQueryIdResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(QueryId, other.QueryId); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((QueryId != null)) + { + hashcode = (hashcode * 397) + QueryId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp653 = new StringBuilder("TGetQueryIdResp("); + if((QueryId != null)) + { + tmp653.Append(", QueryId: "); + QueryId.ToString(tmp653); + } + tmp653.Append(')'); + return tmp653.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs new file mode 100644 index 0000000000..375c3efb8a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetResultSetMetadataReq : TBase + { + private bool _includeCloudResultFiles; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public bool IncludeCloudResultFiles + { + get + { + return _includeCloudResultFiles; + } + set + { + __isset.includeCloudResultFiles = true; + this._includeCloudResultFiles = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool includeCloudResultFiles; + } + + public TGetResultSetMetadataReq() + { + } + + public TGetResultSetMetadataReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetResultSetMetadataReq DeepCopy() + { + var tmp569 = new TGetResultSetMetadataReq(); + if((OperationHandle != null)) + { + tmp569.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + if(__isset.includeCloudResultFiles) + { + tmp569.IncludeCloudResultFiles = this.IncludeCloudResultFiles; + } + tmp569.__isset.includeCloudResultFiles = this.__isset.includeCloudResultFiles; + return tmp569; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Bool) + { + IncludeCloudResultFiles = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp570 = new TStruct("TGetResultSetMetadataReq"); + await oprot.WriteStructBeginAsync(tmp570, cancellationToken); + var tmp571 = new TField(); + if((OperationHandle != null)) + { + tmp571.Name = "operationHandle"; + tmp571.Type = TType.Struct; + tmp571.ID = 1; + await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.includeCloudResultFiles) + { + tmp571.Name = "includeCloudResultFiles"; + tmp571.Type = TType.Bool; + tmp571.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); + await oprot.WriteBoolAsync(IncludeCloudResultFiles, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetResultSetMetadataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && ((__isset.includeCloudResultFiles == other.__isset.includeCloudResultFiles) && ((!__isset.includeCloudResultFiles) || (global::System.Object.Equals(IncludeCloudResultFiles, other.IncludeCloudResultFiles)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if(__isset.includeCloudResultFiles) + { + hashcode = (hashcode * 397) + IncludeCloudResultFiles.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp572 = new StringBuilder("TGetResultSetMetadataReq("); + if((OperationHandle != null)) + { + tmp572.Append(", OperationHandle: "); + OperationHandle.ToString(tmp572); + } + if(__isset.includeCloudResultFiles) + { + tmp572.Append(", IncludeCloudResultFiles: "); + IncludeCloudResultFiles.ToString(tmp572); + } + tmp572.Append(')'); + return tmp572.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs new file mode 100644 index 0000000000..9833c26834 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs @@ -0,0 +1,779 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetResultSetMetadataResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TTableSchema _schema; + private int _resultFormat; + private bool _lz4Compressed; + private string _arrowSchema; + private int _cacheLookupResult; + private long _uncompressedBytes; + private long _compressedBytes; + private bool _isStagingOperation; + private int _reasonForNoCloudFetch; + private List _resultFiles; + private string _manifestFile; + private string _manifestFileFormat; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTableSchema Schema + { + get + { + return _schema; + } + set + { + __isset.schema = true; + this._schema = value; + } + } + + public int ResultFormat + { + get + { + return _resultFormat; + } + set + { + __isset.resultFormat = true; + this._resultFormat = value; + } + } + + public bool Lz4Compressed + { + get + { + return _lz4Compressed; + } + set + { + __isset.lz4Compressed = true; + this._lz4Compressed = value; + } + } + + public string ArrowSchema + { + get + { + return _arrowSchema; + } + set + { + __isset.arrowSchema = true; + this._arrowSchema = value; + } + } + + public int CacheLookupResult + { + get + { + return _cacheLookupResult; + } + set + { + __isset.cacheLookupResult = true; + this._cacheLookupResult = value; + } + } + + public long UncompressedBytes + { + get + { + return _uncompressedBytes; + } + set + { + __isset.uncompressedBytes = true; + this._uncompressedBytes = value; + } + } + + public long CompressedBytes + { + get + { + return _compressedBytes; + } + set + { + __isset.compressedBytes = true; + this._compressedBytes = value; + } + } + + public bool IsStagingOperation + { + get + { + return _isStagingOperation; + } + set + { + __isset.isStagingOperation = true; + this._isStagingOperation = value; + } + } + + public int ReasonForNoCloudFetch + { + get + { + return _reasonForNoCloudFetch; + } + set + { + __isset.reasonForNoCloudFetch = true; + this._reasonForNoCloudFetch = value; + } + } + + public List ResultFiles + { + get + { + return _resultFiles; + } + set + { + __isset.resultFiles = true; + this._resultFiles = value; + } + } + + public string ManifestFile + { + get + { + return _manifestFile; + } + set + { + __isset.manifestFile = true; + this._manifestFile = value; + } + } + + public string ManifestFileFormat + { + get + { + return _manifestFileFormat; + } + set + { + __isset.manifestFileFormat = true; + this._manifestFileFormat = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool schema; + public bool resultFormat; + public bool lz4Compressed; + public bool arrowSchema; + public bool cacheLookupResult; + public bool uncompressedBytes; + public bool compressedBytes; + public bool isStagingOperation; + public bool reasonForNoCloudFetch; + public bool resultFiles; + public bool manifestFile; + public bool manifestFileFormat; + } + + public TGetResultSetMetadataResp() + { + } + + public TGetResultSetMetadataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetResultSetMetadataResp DeepCopy() + { + var tmp574 = new TGetResultSetMetadataResp(); + if((Status != null)) + { + tmp574.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((Schema != null) && __isset.schema) + { + tmp574.Schema = (global::Apache.Hive.Service.Rpc.Thrift.TTableSchema)this.Schema.DeepCopy(); + } + tmp574.__isset.schema = this.__isset.schema; + if(__isset.resultFormat) + { + tmp574.ResultFormat = this.ResultFormat; + } + tmp574.__isset.resultFormat = this.__isset.resultFormat; + if(__isset.lz4Compressed) + { + tmp574.Lz4Compressed = this.Lz4Compressed; + } + tmp574.__isset.lz4Compressed = this.__isset.lz4Compressed; + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp574.ArrowSchema = this.ArrowSchema; + } + tmp574.__isset.arrowSchema = this.__isset.arrowSchema; + if(__isset.cacheLookupResult) + { + tmp574.CacheLookupResult = this.CacheLookupResult; + } + tmp574.__isset.cacheLookupResult = this.__isset.cacheLookupResult; + if(__isset.uncompressedBytes) + { + tmp574.UncompressedBytes = this.UncompressedBytes; + } + tmp574.__isset.uncompressedBytes = this.__isset.uncompressedBytes; + if(__isset.compressedBytes) + { + tmp574.CompressedBytes = this.CompressedBytes; + } + tmp574.__isset.compressedBytes = this.__isset.compressedBytes; + if(__isset.isStagingOperation) + { + tmp574.IsStagingOperation = this.IsStagingOperation; + } + tmp574.__isset.isStagingOperation = this.__isset.isStagingOperation; + if(__isset.reasonForNoCloudFetch) + { + tmp574.ReasonForNoCloudFetch = this.ReasonForNoCloudFetch; + } + tmp574.__isset.reasonForNoCloudFetch = this.__isset.reasonForNoCloudFetch; + if((ResultFiles != null) && __isset.resultFiles) + { + tmp574.ResultFiles = this.ResultFiles.DeepCopy(); + } + tmp574.__isset.resultFiles = this.__isset.resultFiles; + if((ManifestFile != null) && __isset.manifestFile) + { + tmp574.ManifestFile = this.ManifestFile; + } + tmp574.__isset.manifestFile = this.__isset.manifestFile; + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp574.ManifestFileFormat = this.ManifestFileFormat; + } + tmp574.__isset.manifestFileFormat = this.__isset.manifestFileFormat; + return tmp574; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + Schema = new global::Apache.Hive.Service.Rpc.Thrift.TTableSchema(); + await Schema.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.I32) + { + ResultFormat = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + Lz4Compressed = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.String) + { + ArrowSchema = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.I32) + { + CacheLookupResult = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.I64) + { + UncompressedBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1286: + if (field.Type == TType.I64) + { + CompressedBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1287: + if (field.Type == TType.Bool) + { + IsStagingOperation = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.I32) + { + ReasonForNoCloudFetch = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.List) + { + { + var _list575 = await iprot.ReadListBeginAsync(cancellationToken); + ResultFiles = new List(_list575.Count); + for(int _i576 = 0; _i576 < _list575.Count; ++_i576) + { + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _elem577; + _elem577 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile(); + await _elem577.ReadAsync(iprot, cancellationToken); + ResultFiles.Add(_elem577); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.String) + { + ManifestFile = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.String) + { + ManifestFileFormat = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp578 = new TStruct("TGetResultSetMetadataResp"); + await oprot.WriteStructBeginAsync(tmp578, cancellationToken); + var tmp579 = new TField(); + if((Status != null)) + { + tmp579.Name = "status"; + tmp579.Type = TType.Struct; + tmp579.ID = 1; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Schema != null) && __isset.schema) + { + tmp579.Name = "schema"; + tmp579.Type = TType.Struct; + tmp579.ID = 2; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await Schema.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultFormat) + { + tmp579.Name = "resultFormat"; + tmp579.Type = TType.I32; + tmp579.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(ResultFormat, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.lz4Compressed) + { + tmp579.Name = "lz4Compressed"; + tmp579.Type = TType.Bool; + tmp579.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteBoolAsync(Lz4Compressed, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp579.Name = "arrowSchema"; + tmp579.Type = TType.String; + tmp579.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ArrowSchema, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.cacheLookupResult) + { + tmp579.Name = "cacheLookupResult"; + tmp579.Type = TType.I32; + tmp579.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(CacheLookupResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.uncompressedBytes) + { + tmp579.Name = "uncompressedBytes"; + tmp579.Type = TType.I64; + tmp579.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI64Async(UncompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.compressedBytes) + { + tmp579.Name = "compressedBytes"; + tmp579.Type = TType.I64; + tmp579.ID = 1286; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI64Async(CompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.isStagingOperation) + { + tmp579.Name = "isStagingOperation"; + tmp579.Type = TType.Bool; + tmp579.ID = 1287; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteBoolAsync(IsStagingOperation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.reasonForNoCloudFetch) + { + tmp579.Name = "reasonForNoCloudFetch"; + tmp579.Type = TType.I32; + tmp579.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(ReasonForNoCloudFetch, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultFiles != null) && __isset.resultFiles) + { + tmp579.Name = "resultFiles"; + tmp579.Type = TType.List; + tmp579.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultFiles.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _iter580 in ResultFiles) + { + await _iter580.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ManifestFile != null) && __isset.manifestFile) + { + tmp579.Name = "manifestFile"; + tmp579.Type = TType.String; + tmp579.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ManifestFile, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp579.Name = "manifestFileFormat"; + tmp579.Type = TType.String; + tmp579.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ManifestFileFormat, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetResultSetMetadataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.schema == other.__isset.schema) && ((!__isset.schema) || (global::System.Object.Equals(Schema, other.Schema)))) + && ((__isset.resultFormat == other.__isset.resultFormat) && ((!__isset.resultFormat) || (global::System.Object.Equals(ResultFormat, other.ResultFormat)))) + && ((__isset.lz4Compressed == other.__isset.lz4Compressed) && ((!__isset.lz4Compressed) || (global::System.Object.Equals(Lz4Compressed, other.Lz4Compressed)))) + && ((__isset.arrowSchema == other.__isset.arrowSchema) && ((!__isset.arrowSchema) || (global::System.Object.Equals(ArrowSchema, other.ArrowSchema)))) + && ((__isset.cacheLookupResult == other.__isset.cacheLookupResult) && ((!__isset.cacheLookupResult) || (global::System.Object.Equals(CacheLookupResult, other.CacheLookupResult)))) + && ((__isset.uncompressedBytes == other.__isset.uncompressedBytes) && ((!__isset.uncompressedBytes) || (global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes)))) + && ((__isset.compressedBytes == other.__isset.compressedBytes) && ((!__isset.compressedBytes) || (global::System.Object.Equals(CompressedBytes, other.CompressedBytes)))) + && ((__isset.isStagingOperation == other.__isset.isStagingOperation) && ((!__isset.isStagingOperation) || (global::System.Object.Equals(IsStagingOperation, other.IsStagingOperation)))) + && ((__isset.reasonForNoCloudFetch == other.__isset.reasonForNoCloudFetch) && ((!__isset.reasonForNoCloudFetch) || (global::System.Object.Equals(ReasonForNoCloudFetch, other.ReasonForNoCloudFetch)))) + && ((__isset.resultFiles == other.__isset.resultFiles) && ((!__isset.resultFiles) || (TCollections.Equals(ResultFiles, other.ResultFiles)))) + && ((__isset.manifestFile == other.__isset.manifestFile) && ((!__isset.manifestFile) || (global::System.Object.Equals(ManifestFile, other.ManifestFile)))) + && ((__isset.manifestFileFormat == other.__isset.manifestFileFormat) && ((!__isset.manifestFileFormat) || (global::System.Object.Equals(ManifestFileFormat, other.ManifestFileFormat)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((Schema != null) && __isset.schema) + { + hashcode = (hashcode * 397) + Schema.GetHashCode(); + } + if(__isset.resultFormat) + { + hashcode = (hashcode * 397) + ResultFormat.GetHashCode(); + } + if(__isset.lz4Compressed) + { + hashcode = (hashcode * 397) + Lz4Compressed.GetHashCode(); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + hashcode = (hashcode * 397) + ArrowSchema.GetHashCode(); + } + if(__isset.cacheLookupResult) + { + hashcode = (hashcode * 397) + CacheLookupResult.GetHashCode(); + } + if(__isset.uncompressedBytes) + { + hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); + } + if(__isset.compressedBytes) + { + hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); + } + if(__isset.isStagingOperation) + { + hashcode = (hashcode * 397) + IsStagingOperation.GetHashCode(); + } + if(__isset.reasonForNoCloudFetch) + { + hashcode = (hashcode * 397) + ReasonForNoCloudFetch.GetHashCode(); + } + if((ResultFiles != null) && __isset.resultFiles) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultFiles); + } + if((ManifestFile != null) && __isset.manifestFile) + { + hashcode = (hashcode * 397) + ManifestFile.GetHashCode(); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + hashcode = (hashcode * 397) + ManifestFileFormat.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp581 = new StringBuilder("TGetResultSetMetadataResp("); + if((Status != null)) + { + tmp581.Append(", Status: "); + Status.ToString(tmp581); + } + if((Schema != null) && __isset.schema) + { + tmp581.Append(", Schema: "); + Schema.ToString(tmp581); + } + if(__isset.resultFormat) + { + tmp581.Append(", ResultFormat: "); + ResultFormat.ToString(tmp581); + } + if(__isset.lz4Compressed) + { + tmp581.Append(", Lz4Compressed: "); + Lz4Compressed.ToString(tmp581); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp581.Append(", ArrowSchema: "); + ArrowSchema.ToString(tmp581); + } + if(__isset.cacheLookupResult) + { + tmp581.Append(", CacheLookupResult: "); + CacheLookupResult.ToString(tmp581); + } + if(__isset.uncompressedBytes) + { + tmp581.Append(", UncompressedBytes: "); + UncompressedBytes.ToString(tmp581); + } + if(__isset.compressedBytes) + { + tmp581.Append(", CompressedBytes: "); + CompressedBytes.ToString(tmp581); + } + if(__isset.isStagingOperation) + { + tmp581.Append(", IsStagingOperation: "); + IsStagingOperation.ToString(tmp581); + } + if(__isset.reasonForNoCloudFetch) + { + tmp581.Append(", ReasonForNoCloudFetch: "); + ReasonForNoCloudFetch.ToString(tmp581); + } + if((ResultFiles != null) && __isset.resultFiles) + { + tmp581.Append(", ResultFiles: "); + ResultFiles.ToString(tmp581); + } + if((ManifestFile != null) && __isset.manifestFile) + { + tmp581.Append(", ManifestFile: "); + ManifestFile.ToString(tmp581); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp581.Append(", ManifestFileFormat: "); + ManifestFileFormat.ToString(tmp581); + } + tmp581.Append(')'); + return tmp581.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs new file mode 100644 index 0000000000..742b50bca1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs @@ -0,0 +1,471 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetSchemasReq : TBase + { + private string _catalogName; + private string _schemaName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetSchemasReq() + { + } + + public TGetSchemasReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetSchemasReq DeepCopy() + { + var tmp465 = new TGetSchemasReq(); + if((SessionHandle != null)) + { + tmp465.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp465.CatalogName = this.CatalogName; + } + tmp465.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp465.SchemaName = this.SchemaName; + } + tmp465.__isset.schemaName = this.__isset.schemaName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp465.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp465.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp465.RunAsync = this.RunAsync; + } + tmp465.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp465.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp465.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp465.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp465.__isset.sessionConf = this.__isset.sessionConf; + return tmp465; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp466 = new TStruct("TGetSchemasReq"); + await oprot.WriteStructBeginAsync(tmp466, cancellationToken); + var tmp467 = new TField(); + if((SessionHandle != null)) + { + tmp467.Name = "sessionHandle"; + tmp467.Type = TType.Struct; + tmp467.ID = 1; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp467.Name = "catalogName"; + tmp467.Type = TType.String; + tmp467.ID = 2; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp467.Name = "schemaName"; + tmp467.Type = TType.String; + tmp467.ID = 3; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp467.Name = "getDirectResults"; + tmp467.Type = TType.Struct; + tmp467.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp467.Name = "runAsync"; + tmp467.Type = TType.Bool; + tmp467.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp467.Name = "operationId"; + tmp467.Type = TType.Struct; + tmp467.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp467.Name = "sessionConf"; + tmp467.Type = TType.Struct; + tmp467.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetSchemasReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp468 = new StringBuilder("TGetSchemasReq("); + if((SessionHandle != null)) + { + tmp468.Append(", SessionHandle: "); + SessionHandle.ToString(tmp468); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp468.Append(", CatalogName: "); + CatalogName.ToString(tmp468); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp468.Append(", SchemaName: "); + SchemaName.ToString(tmp468); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp468.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp468); + } + if(__isset.runAsync) + { + tmp468.Append(", RunAsync: "); + RunAsync.ToString(tmp468); + } + if((OperationId != null) && __isset.operationId) + { + tmp468.Append(", OperationId: "); + OperationId.ToString(tmp468); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp468.Append(", SessionConf: "); + SessionConf.ToString(tmp468); + } + tmp468.Append(')'); + return tmp468.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs new file mode 100644 index 0000000000..66e4a9d7ce --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetSchemasResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetSchemasResp() + { + } + + public TGetSchemasResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetSchemasResp DeepCopy() + { + var tmp470 = new TGetSchemasResp(); + if((Status != null)) + { + tmp470.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp470.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp470.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp470.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp470.__isset.directResults = this.__isset.directResults; + return tmp470; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp471 = new TStruct("TGetSchemasResp"); + await oprot.WriteStructBeginAsync(tmp471, cancellationToken); + var tmp472 = new TField(); + if((Status != null)) + { + tmp472.Name = "status"; + tmp472.Type = TType.Struct; + tmp472.ID = 1; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp472.Name = "operationHandle"; + tmp472.Type = TType.Struct; + tmp472.ID = 2; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp472.Name = "directResults"; + tmp472.Type = TType.Struct; + tmp472.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetSchemasResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp473 = new StringBuilder("TGetSchemasResp("); + if((Status != null)) + { + tmp473.Append(", Status: "); + Status.ToString(tmp473); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp473.Append(", OperationHandle: "); + OperationHandle.ToString(tmp473); + } + if((DirectResults != null) && __isset.directResults) + { + tmp473.Append(", DirectResults: "); + DirectResults.ToString(tmp473); + } + tmp473.Append(')'); + return tmp473.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs new file mode 100644 index 0000000000..3a72f4065f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTableTypesReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTableTypesReq() + { + } + + public TGetTableTypesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTableTypesReq DeepCopy() + { + var tmp489 = new TGetTableTypesReq(); + if((SessionHandle != null)) + { + tmp489.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp489.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp489.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp489.RunAsync = this.RunAsync; + } + tmp489.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp489.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp489.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp489.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp489.__isset.sessionConf = this.__isset.sessionConf; + return tmp489; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp490 = new TStruct("TGetTableTypesReq"); + await oprot.WriteStructBeginAsync(tmp490, cancellationToken); + var tmp491 = new TField(); + if((SessionHandle != null)) + { + tmp491.Name = "sessionHandle"; + tmp491.Type = TType.Struct; + tmp491.ID = 1; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp491.Name = "getDirectResults"; + tmp491.Type = TType.Struct; + tmp491.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp491.Name = "runAsync"; + tmp491.Type = TType.Bool; + tmp491.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp491.Name = "operationId"; + tmp491.Type = TType.Struct; + tmp491.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp491.Name = "sessionConf"; + tmp491.Type = TType.Struct; + tmp491.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTableTypesReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp492 = new StringBuilder("TGetTableTypesReq("); + if((SessionHandle != null)) + { + tmp492.Append(", SessionHandle: "); + SessionHandle.ToString(tmp492); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp492.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp492); + } + if(__isset.runAsync) + { + tmp492.Append(", RunAsync: "); + RunAsync.ToString(tmp492); + } + if((OperationId != null) && __isset.operationId) + { + tmp492.Append(", OperationId: "); + OperationId.ToString(tmp492); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp492.Append(", SessionConf: "); + SessionConf.ToString(tmp492); + } + tmp492.Append(')'); + return tmp492.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs new file mode 100644 index 0000000000..2dbd3ad16f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTableTypesResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTableTypesResp() + { + } + + public TGetTableTypesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTableTypesResp DeepCopy() + { + var tmp494 = new TGetTableTypesResp(); + if((Status != null)) + { + tmp494.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp494.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp494.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp494.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp494.__isset.directResults = this.__isset.directResults; + return tmp494; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp495 = new TStruct("TGetTableTypesResp"); + await oprot.WriteStructBeginAsync(tmp495, cancellationToken); + var tmp496 = new TField(); + if((Status != null)) + { + tmp496.Name = "status"; + tmp496.Type = TType.Struct; + tmp496.ID = 1; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp496.Name = "operationHandle"; + tmp496.Type = TType.Struct; + tmp496.ID = 2; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp496.Name = "directResults"; + tmp496.Type = TType.Struct; + tmp496.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTableTypesResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp497 = new StringBuilder("TGetTableTypesResp("); + if((Status != null)) + { + tmp497.Append(", Status: "); + Status.ToString(tmp497); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp497.Append(", OperationHandle: "); + OperationHandle.ToString(tmp497); + } + if((DirectResults != null) && __isset.directResults) + { + tmp497.Append(", DirectResults: "); + DirectResults.ToString(tmp497); + } + tmp497.Append(')'); + return tmp497.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs new file mode 100644 index 0000000000..4e60863e00 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs @@ -0,0 +1,584 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTablesReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private List _tableTypes; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public List TableTypes + { + get + { + return _tableTypes; + } + set + { + __isset.tableTypes = true; + this._tableTypes = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool tableTypes; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTablesReq() + { + } + + public TGetTablesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTablesReq DeepCopy() + { + var tmp475 = new TGetTablesReq(); + if((SessionHandle != null)) + { + tmp475.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp475.CatalogName = this.CatalogName; + } + tmp475.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp475.SchemaName = this.SchemaName; + } + tmp475.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp475.TableName = this.TableName; + } + tmp475.__isset.tableName = this.__isset.tableName; + if((TableTypes != null) && __isset.tableTypes) + { + tmp475.TableTypes = this.TableTypes.DeepCopy(); + } + tmp475.__isset.tableTypes = this.__isset.tableTypes; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp475.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp475.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp475.RunAsync = this.RunAsync; + } + tmp475.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp475.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp475.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp475.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp475.__isset.sessionConf = this.__isset.sessionConf; + return tmp475; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.List) + { + { + var _list476 = await iprot.ReadListBeginAsync(cancellationToken); + TableTypes = new List(_list476.Count); + for(int _i477 = 0; _i477 < _list476.Count; ++_i477) + { + string _elem478; + _elem478 = await iprot.ReadStringAsync(cancellationToken); + TableTypes.Add(_elem478); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp479 = new TStruct("TGetTablesReq"); + await oprot.WriteStructBeginAsync(tmp479, cancellationToken); + var tmp480 = new TField(); + if((SessionHandle != null)) + { + tmp480.Name = "sessionHandle"; + tmp480.Type = TType.Struct; + tmp480.ID = 1; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp480.Name = "catalogName"; + tmp480.Type = TType.String; + tmp480.ID = 2; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp480.Name = "schemaName"; + tmp480.Type = TType.String; + tmp480.ID = 3; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp480.Name = "tableName"; + tmp480.Type = TType.String; + tmp480.ID = 4; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableTypes != null) && __isset.tableTypes) + { + tmp480.Name = "tableTypes"; + tmp480.Type = TType.List; + tmp480.ID = 5; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, TableTypes.Count), cancellationToken); + foreach (string _iter481 in TableTypes) + { + await oprot.WriteStringAsync(_iter481, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp480.Name = "getDirectResults"; + tmp480.Type = TType.Struct; + tmp480.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp480.Name = "runAsync"; + tmp480.Type = TType.Bool; + tmp480.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp480.Name = "operationId"; + tmp480.Type = TType.Struct; + tmp480.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp480.Name = "sessionConf"; + tmp480.Type = TType.Struct; + tmp480.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTablesReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.tableTypes == other.__isset.tableTypes) && ((!__isset.tableTypes) || (TCollections.Equals(TableTypes, other.TableTypes)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((TableTypes != null) && __isset.tableTypes) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(TableTypes); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp482 = new StringBuilder("TGetTablesReq("); + if((SessionHandle != null)) + { + tmp482.Append(", SessionHandle: "); + SessionHandle.ToString(tmp482); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp482.Append(", CatalogName: "); + CatalogName.ToString(tmp482); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp482.Append(", SchemaName: "); + SchemaName.ToString(tmp482); + } + if((TableName != null) && __isset.tableName) + { + tmp482.Append(", TableName: "); + TableName.ToString(tmp482); + } + if((TableTypes != null) && __isset.tableTypes) + { + tmp482.Append(", TableTypes: "); + TableTypes.ToString(tmp482); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp482.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp482); + } + if(__isset.runAsync) + { + tmp482.Append(", RunAsync: "); + RunAsync.ToString(tmp482); + } + if((OperationId != null) && __isset.operationId) + { + tmp482.Append(", OperationId: "); + OperationId.ToString(tmp482); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp482.Append(", SessionConf: "); + SessionConf.ToString(tmp482); + } + tmp482.Append(')'); + return tmp482.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs new file mode 100644 index 0000000000..628d3f5d42 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTablesResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTablesResp() + { + } + + public TGetTablesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTablesResp DeepCopy() + { + var tmp484 = new TGetTablesResp(); + if((Status != null)) + { + tmp484.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp484.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp484.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp484.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp484.__isset.directResults = this.__isset.directResults; + return tmp484; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp485 = new TStruct("TGetTablesResp"); + await oprot.WriteStructBeginAsync(tmp485, cancellationToken); + var tmp486 = new TField(); + if((Status != null)) + { + tmp486.Name = "status"; + tmp486.Type = TType.Struct; + tmp486.ID = 1; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp486.Name = "operationHandle"; + tmp486.Type = TType.Struct; + tmp486.ID = 2; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp486.Name = "directResults"; + tmp486.Type = TType.Struct; + tmp486.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTablesResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp487 = new StringBuilder("TGetTablesResp("); + if((Status != null)) + { + tmp487.Append(", Status: "); + Status.ToString(tmp487); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp487.Append(", OperationHandle: "); + OperationHandle.ToString(tmp487); + } + if((DirectResults != null) && __isset.directResults) + { + tmp487.Append(", DirectResults: "); + DirectResults.ToString(tmp487); + } + tmp487.Append(')'); + return tmp487.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs new file mode 100644 index 0000000000..75893e6468 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTypeInfoReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTypeInfoReq() + { + } + + public TGetTypeInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTypeInfoReq DeepCopy() + { + var tmp420 = new TGetTypeInfoReq(); + if((SessionHandle != null)) + { + tmp420.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp420.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp420.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp420.RunAsync = this.RunAsync; + } + tmp420.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp420.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp420.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp420.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp420.__isset.sessionConf = this.__isset.sessionConf; + return tmp420; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp421 = new TStruct("TGetTypeInfoReq"); + await oprot.WriteStructBeginAsync(tmp421, cancellationToken); + var tmp422 = new TField(); + if((SessionHandle != null)) + { + tmp422.Name = "sessionHandle"; + tmp422.Type = TType.Struct; + tmp422.ID = 1; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp422.Name = "getDirectResults"; + tmp422.Type = TType.Struct; + tmp422.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp422.Name = "runAsync"; + tmp422.Type = TType.Bool; + tmp422.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp422.Name = "operationId"; + tmp422.Type = TType.Struct; + tmp422.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp422.Name = "sessionConf"; + tmp422.Type = TType.Struct; + tmp422.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTypeInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp423 = new StringBuilder("TGetTypeInfoReq("); + if((SessionHandle != null)) + { + tmp423.Append(", SessionHandle: "); + SessionHandle.ToString(tmp423); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp423.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp423); + } + if(__isset.runAsync) + { + tmp423.Append(", RunAsync: "); + RunAsync.ToString(tmp423); + } + if((OperationId != null) && __isset.operationId) + { + tmp423.Append(", OperationId: "); + OperationId.ToString(tmp423); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp423.Append(", SessionConf: "); + SessionConf.ToString(tmp423); + } + tmp423.Append(')'); + return tmp423.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs new file mode 100644 index 0000000000..c5cbb2ad8c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTypeInfoResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTypeInfoResp() + { + } + + public TGetTypeInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTypeInfoResp DeepCopy() + { + var tmp425 = new TGetTypeInfoResp(); + if((Status != null)) + { + tmp425.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp425.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp425.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp425.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp425.__isset.directResults = this.__isset.directResults; + return tmp425; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp426 = new TStruct("TGetTypeInfoResp"); + await oprot.WriteStructBeginAsync(tmp426, cancellationToken); + var tmp427 = new TField(); + if((Status != null)) + { + tmp427.Name = "status"; + tmp427.Type = TType.Struct; + tmp427.ID = 1; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp427.Name = "operationHandle"; + tmp427.Type = TType.Struct; + tmp427.ID = 2; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp427.Name = "directResults"; + tmp427.Type = TType.Struct; + tmp427.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTypeInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp428 = new StringBuilder("TGetTypeInfoResp("); + if((Status != null)) + { + tmp428.Append(", Status: "); + Status.ToString(tmp428); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp428.Append(", OperationHandle: "); + OperationHandle.ToString(tmp428); + } + if((DirectResults != null) && __isset.directResults) + { + tmp428.Append(", DirectResults: "); + DirectResults.ToString(tmp428); + } + tmp428.Append(')'); + return tmp428.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs new file mode 100644 index 0000000000..e8167d0184 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs @@ -0,0 +1,209 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class THandleIdentifier : TBase + { + + public byte[] Guid { get; set; } + + public byte[] Secret { get; set; } + + public THandleIdentifier() + { + } + + public THandleIdentifier(byte[] guid, byte[] secret) : this() + { + this.Guid = guid; + this.Secret = secret; + } + + public THandleIdentifier DeepCopy() + { + var tmp264 = new THandleIdentifier(); + if((Guid != null)) + { + tmp264.Guid = this.Guid.ToArray(); + } + if((Secret != null)) + { + tmp264.Secret = this.Secret.ToArray(); + } + return tmp264; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_guid = false; + bool isset_secret = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Guid = await iprot.ReadBinaryAsync(cancellationToken); + isset_guid = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Secret = await iprot.ReadBinaryAsync(cancellationToken); + isset_secret = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_guid) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_secret) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp265 = new TStruct("THandleIdentifier"); + await oprot.WriteStructBeginAsync(tmp265, cancellationToken); + var tmp266 = new TField(); + if((Guid != null)) + { + tmp266.Name = "guid"; + tmp266.Type = TType.String; + tmp266.ID = 1; + await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); + await oprot.WriteBinaryAsync(Guid, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Secret != null)) + { + tmp266.Name = "secret"; + tmp266.Type = TType.String; + tmp266.ID = 2; + await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); + await oprot.WriteBinaryAsync(Secret, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is THandleIdentifier other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Guid, other.Guid) + && TCollections.Equals(Secret, other.Secret); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Guid != null)) + { + hashcode = (hashcode * 397) + Guid.GetHashCode(); + } + if((Secret != null)) + { + hashcode = (hashcode * 397) + Secret.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp267 = new StringBuilder("THandleIdentifier("); + if((Guid != null)) + { + tmp267.Append(", Guid: "); + Guid.ToString(tmp267); + } + if((Secret != null)) + { + tmp267.Append(", Secret: "); + Secret.ToString(tmp267); + } + tmp267.Append(')'); + return tmp267.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs new file mode 100644 index 0000000000..9685a7f700 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs @@ -0,0 +1,200 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI16Column : TBase + { + + public Int16Array Values { get; set; } + + public TI16Column() + { + } + + public TI16Column(Int16Array values) : this() + { + this.Values = values; + } + + public TI16Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list151 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list151.Count; + + buffer = new byte[length * 2]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i152 = 0; _i152 < length; ++_i152) + { + typedMemory.Span[_i152] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i152]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int16Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp154 = new TStruct("TI16Column"); + await oprot.WriteStructBeginAsync(tmp154, cancellationToken); + var tmp155 = new TField(); + if((Values != null)) + { + tmp155.Name = "values"; + tmp155.Type = TType.List; + tmp155.ID = 1; + await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I16, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + short _iter156 = Values.GetValue(i) ?? (short)0; + await oprot.WriteI16Async(_iter156, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp155.Name = "nulls"; + tmp155.Type = TType.String; + tmp155.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI16Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp157 = new StringBuilder("TI16Column("); + if((Values != null)) + { + tmp157.Append(", Values: "); + Values.ToString(tmp157); + } + tmp157.Append(')'); + return tmp157.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs new file mode 100644 index 0000000000..9f31d83683 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI16Value : TBase + { + private short _value; + + public short Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI16Value() + { + } + + public TI16Value DeepCopy() + { + var tmp93 = new TI16Value(); + if(__isset.@value) + { + tmp93.Value = this.Value; + } + tmp93.__isset.@value = this.__isset.@value; + return tmp93; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I16) + { + Value = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp94 = new TStruct("TI16Value"); + await oprot.WriteStructBeginAsync(tmp94, cancellationToken); + var tmp95 = new TField(); + if(__isset.@value) + { + tmp95.Name = "value"; + tmp95.Type = TType.I16; + tmp95.ID = 1; + await oprot.WriteFieldBeginAsync(tmp95, cancellationToken); + await oprot.WriteI16Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI16Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp96 = new StringBuilder("TI16Value("); + int tmp97 = 0; + if(__isset.@value) + { + if(0 < tmp97++) { tmp96.Append(", "); } + tmp96.Append("Value: "); + Value.ToString(tmp96); + } + tmp96.Append(')'); + return tmp96.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs new file mode 100644 index 0000000000..a5fe557bf7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -0,0 +1,199 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI32Column : TBase + { + + public Int32Array Values { get; set; } + + public TI32Column() + { + } + + public TI32Column(Int32Array values) : this() + { + this.Values = values; + } + + public TI32Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list160 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list160.Count; + buffer = new byte[length * 4]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i161 = 0; _i161 < length; ++_i161) + { + typedMemory.Span[_i161] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i161]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int32Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp163 = new TStruct("TI32Column"); + await oprot.WriteStructBeginAsync(tmp163, cancellationToken); + var tmp164 = new TField(); + if((Values != null)) + { + tmp164.Name = "values"; + tmp164.Type = TType.List; + tmp164.ID = 1; + await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + int _iter165 = Values.GetValue(i) ?? 0; + await oprot.WriteI32Async(_iter165, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp164.Name = "nulls"; + tmp164.Type = TType.String; + tmp164.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI32Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp166 = new StringBuilder("TI32Column("); + if((Values != null)) + { + tmp166.Append(", Values: "); + Values.ToString(tmp166); + } + tmp166.Append(')'); + return tmp166.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs new file mode 100644 index 0000000000..40bb1ac89d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI32Value : TBase + { + private int _value; + + public int Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI32Value() + { + } + + public TI32Value DeepCopy() + { + var tmp98 = new TI32Value(); + if(__isset.@value) + { + tmp98.Value = this.Value; + } + tmp98.__isset.@value = this.__isset.@value; + return tmp98; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Value = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp99 = new TStruct("TI32Value"); + await oprot.WriteStructBeginAsync(tmp99, cancellationToken); + var tmp100 = new TField(); + if(__isset.@value) + { + tmp100.Name = "value"; + tmp100.Type = TType.I32; + tmp100.ID = 1; + await oprot.WriteFieldBeginAsync(tmp100, cancellationToken); + await oprot.WriteI32Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI32Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp101 = new StringBuilder("TI32Value("); + int tmp102 = 0; + if(__isset.@value) + { + if(0 < tmp102++) { tmp101.Append(", "); } + tmp101.Append("Value: "); + Value.ToString(tmp101); + } + tmp101.Append(')'); + return tmp101.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs new file mode 100644 index 0000000000..9629336635 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs @@ -0,0 +1,200 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI64Column : TBase + { + + public Int64Array Values { get; set; } + + public TI64Column() + { + } + + public TI64Column(Int64Array values) : this() + { + this.Values = values; + } + + public TI64Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list169 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list169.Count; + + buffer = new byte[length * 8]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i170 = 0; _i170 < length; ++_i170) + { + typedMemory.Span[_i170] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i170]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int64Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp172 = new TStruct("TI64Column"); + await oprot.WriteStructBeginAsync(tmp172, cancellationToken); + var tmp173 = new TField(); + if((Values != null)) + { + tmp173.Name = "values"; + tmp173.Type = TType.List; + tmp173.ID = 1; + await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I64, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + long _iter174 = Values.GetValue(i) ?? 0; + await oprot.WriteI64Async(_iter174, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp173.Name = "nulls"; + tmp173.Type = TType.String; + tmp173.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI64Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp175 = new StringBuilder("TI64Column("); + if((Values != null)) + { + tmp175.Append(", Values: "); + Values.ToString(tmp175); + } + tmp175.Append(')'); + return tmp175.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs new file mode 100644 index 0000000000..c823fce883 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI64Value : TBase + { + private long _value; + + public long Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI64Value() + { + } + + public TI64Value DeepCopy() + { + var tmp103 = new TI64Value(); + if(__isset.@value) + { + tmp103.Value = this.Value; + } + tmp103.__isset.@value = this.__isset.@value; + return tmp103; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + Value = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp104 = new TStruct("TI64Value"); + await oprot.WriteStructBeginAsync(tmp104, cancellationToken); + var tmp105 = new TField(); + if(__isset.@value) + { + tmp105.Name = "value"; + tmp105.Type = TType.I64; + tmp105.ID = 1; + await oprot.WriteFieldBeginAsync(tmp105, cancellationToken); + await oprot.WriteI64Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI64Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp106 = new StringBuilder("TI64Value("); + int tmp107 = 0; + if(__isset.@value) + { + if(0 < tmp107++) { tmp106.Append(", "); } + tmp106.Append("Value: "); + Value.ToString(tmp106); + } + tmp106.Append(')'); + return tmp106.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs new file mode 100644 index 0000000000..70bbb3be4b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TJobExecutionStatus + { + IN_PROGRESS = 0, + COMPLETE = 1, + NOT_AVAILABLE = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs new file mode 100644 index 0000000000..ae68167ad8 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TMapTypeEntry : TBase + { + + public int KeyTypePtr { get; set; } + + public int ValueTypePtr { get; set; } + + public TMapTypeEntry() + { + } + + public TMapTypeEntry(int keyTypePtr, int valueTypePtr) : this() + { + this.KeyTypePtr = keyTypePtr; + this.ValueTypePtr = valueTypePtr; + } + + public TMapTypeEntry DeepCopy() + { + var tmp25 = new TMapTypeEntry(); + tmp25.KeyTypePtr = this.KeyTypePtr; + tmp25.ValueTypePtr = this.ValueTypePtr; + return tmp25; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_keyTypePtr = false; + bool isset_valueTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + KeyTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_keyTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + ValueTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_valueTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_keyTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_valueTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp26 = new TStruct("TMapTypeEntry"); + await oprot.WriteStructBeginAsync(tmp26, cancellationToken); + var tmp27 = new TField(); + tmp27.Name = "keyTypePtr"; + tmp27.Type = TType.I32; + tmp27.ID = 1; + await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); + await oprot.WriteI32Async(KeyTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp27.Name = "valueTypePtr"; + tmp27.Type = TType.I32; + tmp27.ID = 2; + await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); + await oprot.WriteI32Async(ValueTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TMapTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(KeyTypePtr, other.KeyTypePtr) + && global::System.Object.Equals(ValueTypePtr, other.ValueTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + KeyTypePtr.GetHashCode(); + hashcode = (hashcode * 397) + ValueTypePtr.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp28 = new StringBuilder("TMapTypeEntry("); + tmp28.Append(", KeyTypePtr: "); + KeyTypePtr.ToString(tmp28); + tmp28.Append(", ValueTypePtr: "); + ValueTypePtr.ToString(tmp28); + tmp28.Append(')'); + return tmp28.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs new file mode 100644 index 0000000000..2aeae8012d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs @@ -0,0 +1,228 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TNamespace : TBase + { + private string _catalogName; + private string _schemaName; + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + } + + public TNamespace() + { + } + + public TNamespace DeepCopy() + { + var tmp298 = new TNamespace(); + if((CatalogName != null) && __isset.catalogName) + { + tmp298.CatalogName = this.CatalogName; + } + tmp298.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp298.SchemaName = this.SchemaName; + } + tmp298.__isset.schemaName = this.__isset.schemaName; + return tmp298; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp299 = new TStruct("TNamespace"); + await oprot.WriteStructBeginAsync(tmp299, cancellationToken); + var tmp300 = new TField(); + if((CatalogName != null) && __isset.catalogName) + { + tmp300.Name = "catalogName"; + tmp300.Type = TType.String; + tmp300.ID = 1; + await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp300.Name = "schemaName"; + tmp300.Type = TType.String; + tmp300.ID = 2; + await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TNamespace other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp301 = new StringBuilder("TNamespace("); + int tmp302 = 0; + if((CatalogName != null) && __isset.catalogName) + { + if(0 < tmp302++) { tmp301.Append(", "); } + tmp301.Append("CatalogName: "); + CatalogName.ToString(tmp301); + } + if((SchemaName != null) && __isset.schemaName) + { + if(0 < tmp302++) { tmp301.Append(", "); } + tmp301.Append("SchemaName: "); + SchemaName.ToString(tmp301); + } + tmp301.Append(')'); + return tmp301.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs new file mode 100644 index 0000000000..4986a43910 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs @@ -0,0 +1,660 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOpenSessionReq : TBase + { + private string _username; + private string _password; + private Dictionary _configuration; + private List _getInfos; + private long _client_protocol_i64; + private Dictionary _connectionProperties; + private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; + private bool _canUseMultipleCatalogs; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _sessionId; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion Client_protocol { get; set; } + + public string Username + { + get + { + return _username; + } + set + { + __isset.username = true; + this._username = value; + } + } + + public string Password + { + get + { + return _password; + } + set + { + __isset.password = true; + this._password = value; + } + } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + public List GetInfos + { + get + { + return _getInfos; + } + set + { + __isset.getInfos = true; + this._getInfos = value; + } + } + + public long Client_protocol_i64 + { + get + { + return _client_protocol_i64; + } + set + { + __isset.client_protocol_i64 = true; + this._client_protocol_i64 = value; + } + } + + public Dictionary ConnectionProperties + { + get + { + return _connectionProperties; + } + set + { + __isset.connectionProperties = true; + this._connectionProperties = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace + { + get + { + return _initialNamespace; + } + set + { + __isset.initialNamespace = true; + this._initialNamespace = value; + } + } + + public bool CanUseMultipleCatalogs + { + get + { + return _canUseMultipleCatalogs; + } + set + { + __isset.canUseMultipleCatalogs = true; + this._canUseMultipleCatalogs = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId + { + get + { + return _sessionId; + } + set + { + __isset.sessionId = true; + this._sessionId = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool username; + public bool password; + public bool configuration; + public bool getInfos; + public bool client_protocol_i64; + public bool connectionProperties; + public bool initialNamespace; + public bool canUseMultipleCatalogs; + public bool sessionId; + } + + public TOpenSessionReq() + { + this.Client_protocol = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; + } + + public TOpenSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion client_protocol) : this() + { + this.Client_protocol = client_protocol; + } + + public TOpenSessionReq DeepCopy() + { + var tmp279 = new TOpenSessionReq(); + tmp279.Client_protocol = this.Client_protocol; + if((Username != null) && __isset.username) + { + tmp279.Username = this.Username; + } + tmp279.__isset.username = this.__isset.username; + if((Password != null) && __isset.password) + { + tmp279.Password = this.Password; + } + tmp279.__isset.password = this.__isset.password; + if((Configuration != null) && __isset.configuration) + { + tmp279.Configuration = this.Configuration.DeepCopy(); + } + tmp279.__isset.configuration = this.__isset.configuration; + if((GetInfos != null) && __isset.getInfos) + { + tmp279.GetInfos = this.GetInfos.DeepCopy(); + } + tmp279.__isset.getInfos = this.__isset.getInfos; + if(__isset.client_protocol_i64) + { + tmp279.Client_protocol_i64 = this.Client_protocol_i64; + } + tmp279.__isset.client_protocol_i64 = this.__isset.client_protocol_i64; + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp279.ConnectionProperties = this.ConnectionProperties.DeepCopy(); + } + tmp279.__isset.connectionProperties = this.__isset.connectionProperties; + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp279.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); + } + tmp279.__isset.initialNamespace = this.__isset.initialNamespace; + if(__isset.canUseMultipleCatalogs) + { + tmp279.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; + } + tmp279.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; + if((SessionId != null) && __isset.sessionId) + { + tmp279.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); + } + tmp279.__isset.sessionId = this.__isset.sessionId; + return tmp279; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_client_protocol = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Client_protocol = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); + isset_client_protocol = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Username = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Password = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Map) + { + { + var _map280 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map280.Count); + for(int _i281 = 0; _i281 < _map280.Count; ++_i281) + { + string _key282; + string _val283; + _key282 = await iprot.ReadStringAsync(cancellationToken); + _val283 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key282] = _val283; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list284 = await iprot.ReadListBeginAsync(cancellationToken); + GetInfos = new List(_list284.Count); + for(int _i285 = 0; _i285 < _list284.Count; ++_i285) + { + int _elem286; + _elem286 = await iprot.ReadI32Async(cancellationToken); + GetInfos.Add(_elem286); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.I64) + { + Client_protocol_i64 = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Map) + { + { + var _map287 = await iprot.ReadMapBeginAsync(cancellationToken); + ConnectionProperties = new Dictionary(_map287.Count); + for(int _i288 = 0; _i288 < _map287.Count; ++_i288) + { + string _key289; + string _val290; + _key289 = await iprot.ReadStringAsync(cancellationToken); + _val290 = await iprot.ReadStringAsync(cancellationToken); + ConnectionProperties[_key289] = _val290; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Struct) + { + InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); + await InitialNamespace.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.Bool) + { + CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await SessionId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_client_protocol) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp291 = new TStruct("TOpenSessionReq"); + await oprot.WriteStructBeginAsync(tmp291, cancellationToken); + var tmp292 = new TField(); + tmp292.Name = "client_protocol"; + tmp292.Type = TType.I32; + tmp292.ID = 1; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteI32Async((int)Client_protocol, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Username != null) && __isset.username) + { + tmp292.Name = "username"; + tmp292.Type = TType.String; + tmp292.ID = 2; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteStringAsync(Username, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Password != null) && __isset.password) + { + tmp292.Name = "password"; + tmp292.Type = TType.String; + tmp292.ID = 3; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteStringAsync(Password, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp292.Name = "configuration"; + tmp292.Type = TType.Map; + tmp292.ID = 4; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter293 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter293, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter293], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp292.Name = "getInfos"; + tmp292.Type = TType.List; + tmp292.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); + foreach (int _iter294 in GetInfos) + { + await oprot.WriteI32Async(_iter294, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.client_protocol_i64) + { + tmp292.Name = "client_protocol_i64"; + tmp292.Type = TType.I64; + tmp292.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteI64Async(Client_protocol_i64, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp292.Name = "connectionProperties"; + tmp292.Type = TType.Map; + tmp292.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConnectionProperties.Count), cancellationToken); + foreach (string _iter295 in ConnectionProperties.Keys) + { + await oprot.WriteStringAsync(_iter295, cancellationToken); + await oprot.WriteStringAsync(ConnectionProperties[_iter295], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp292.Name = "initialNamespace"; + tmp292.Type = TType.Struct; + tmp292.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await InitialNamespace.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canUseMultipleCatalogs) + { + tmp292.Name = "canUseMultipleCatalogs"; + tmp292.Type = TType.Bool; + tmp292.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionId != null) && __isset.sessionId) + { + tmp292.Name = "sessionId"; + tmp292.Type = TType.Struct; + tmp292.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await SessionId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOpenSessionReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Client_protocol, other.Client_protocol) + && ((__isset.username == other.__isset.username) && ((!__isset.username) || (global::System.Object.Equals(Username, other.Username)))) + && ((__isset.password == other.__isset.password) && ((!__isset.password) || (global::System.Object.Equals(Password, other.Password)))) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) + && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))) + && ((__isset.client_protocol_i64 == other.__isset.client_protocol_i64) && ((!__isset.client_protocol_i64) || (global::System.Object.Equals(Client_protocol_i64, other.Client_protocol_i64)))) + && ((__isset.connectionProperties == other.__isset.connectionProperties) && ((!__isset.connectionProperties) || (TCollections.Equals(ConnectionProperties, other.ConnectionProperties)))) + && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) + && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) + && ((__isset.sessionId == other.__isset.sessionId) && ((!__isset.sessionId) || (global::System.Object.Equals(SessionId, other.SessionId)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + Client_protocol.GetHashCode(); + if((Username != null) && __isset.username) + { + hashcode = (hashcode * 397) + Username.GetHashCode(); + } + if((Password != null) && __isset.password) + { + hashcode = (hashcode * 397) + Password.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + if((GetInfos != null) && __isset.getInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); + } + if(__isset.client_protocol_i64) + { + hashcode = (hashcode * 397) + Client_protocol_i64.GetHashCode(); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ConnectionProperties); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); + } + if(__isset.canUseMultipleCatalogs) + { + hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); + } + if((SessionId != null) && __isset.sessionId) + { + hashcode = (hashcode * 397) + SessionId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp296 = new StringBuilder("TOpenSessionReq("); + tmp296.Append(", Client_protocol: "); + Client_protocol.ToString(tmp296); + if((Username != null) && __isset.username) + { + tmp296.Append(", Username: "); + Username.ToString(tmp296); + } + if((Password != null) && __isset.password) + { + tmp296.Append(", Password: "); + Password.ToString(tmp296); + } + if((Configuration != null) && __isset.configuration) + { + tmp296.Append(", Configuration: "); + Configuration.ToString(tmp296); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp296.Append(", GetInfos: "); + GetInfos.ToString(tmp296); + } + if(__isset.client_protocol_i64) + { + tmp296.Append(", Client_protocol_i64: "); + Client_protocol_i64.ToString(tmp296); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp296.Append(", ConnectionProperties: "); + ConnectionProperties.ToString(tmp296); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp296.Append(", InitialNamespace: "); + InitialNamespace.ToString(tmp296); + } + if(__isset.canUseMultipleCatalogs) + { + tmp296.Append(", CanUseMultipleCatalogs: "); + CanUseMultipleCatalogs.ToString(tmp296); + } + if((SessionId != null) && __isset.sessionId) + { + tmp296.Append(", SessionId: "); + SessionId.ToString(tmp296); + } + tmp296.Append(')'); + return tmp296.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs new file mode 100644 index 0000000000..1f87d016b8 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs @@ -0,0 +1,489 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOpenSessionResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle _sessionHandle; + private Dictionary _configuration; + private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; + private bool _canUseMultipleCatalogs; + private List _getInfos; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion ServerProtocolVersion { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle + { + get + { + return _sessionHandle; + } + set + { + __isset.sessionHandle = true; + this._sessionHandle = value; + } + } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace + { + get + { + return _initialNamespace; + } + set + { + __isset.initialNamespace = true; + this._initialNamespace = value; + } + } + + public bool CanUseMultipleCatalogs + { + get + { + return _canUseMultipleCatalogs; + } + set + { + __isset.canUseMultipleCatalogs = true; + this._canUseMultipleCatalogs = value; + } + } + + public List GetInfos + { + get + { + return _getInfos; + } + set + { + __isset.getInfos = true; + this._getInfos = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool sessionHandle; + public bool configuration; + public bool initialNamespace; + public bool canUseMultipleCatalogs; + public bool getInfos; + } + + public TOpenSessionResp() + { + this.ServerProtocolVersion = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; + } + + public TOpenSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion serverProtocolVersion) : this() + { + this.Status = status; + this.ServerProtocolVersion = serverProtocolVersion; + } + + public TOpenSessionResp DeepCopy() + { + var tmp303 = new TOpenSessionResp(); + if((Status != null)) + { + tmp303.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + tmp303.ServerProtocolVersion = this.ServerProtocolVersion; + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp303.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + tmp303.__isset.sessionHandle = this.__isset.sessionHandle; + if((Configuration != null) && __isset.configuration) + { + tmp303.Configuration = this.Configuration.DeepCopy(); + } + tmp303.__isset.configuration = this.__isset.configuration; + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp303.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); + } + tmp303.__isset.initialNamespace = this.__isset.initialNamespace; + if(__isset.canUseMultipleCatalogs) + { + tmp303.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; + } + tmp303.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; + if((GetInfos != null) && __isset.getInfos) + { + tmp303.GetInfos = this.GetInfos.DeepCopy(); + } + tmp303.__isset.getInfos = this.__isset.getInfos; + return tmp303; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_serverProtocolVersion = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + ServerProtocolVersion = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); + isset_serverProtocolVersion = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Map) + { + { + var _map304 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map304.Count); + for(int _i305 = 0; _i305 < _map304.Count; ++_i305) + { + string _key306; + string _val307; + _key306 = await iprot.ReadStringAsync(cancellationToken); + _val307 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key306] = _val307; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Struct) + { + InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); + await InitialNamespace.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.Bool) + { + CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list308 = await iprot.ReadListBeginAsync(cancellationToken); + GetInfos = new List(_list308.Count); + for(int _i309 = 0; _i309 < _list308.Count; ++_i309) + { + int _elem310; + _elem310 = await iprot.ReadI32Async(cancellationToken); + GetInfos.Add(_elem310); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_serverProtocolVersion) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp311 = new TStruct("TOpenSessionResp"); + await oprot.WriteStructBeginAsync(tmp311, cancellationToken); + var tmp312 = new TField(); + if((Status != null)) + { + tmp312.Name = "status"; + tmp312.Type = TType.Struct; + tmp312.ID = 1; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp312.Name = "serverProtocolVersion"; + tmp312.Type = TType.I32; + tmp312.ID = 2; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteI32Async((int)ServerProtocolVersion, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp312.Name = "sessionHandle"; + tmp312.Type = TType.Struct; + tmp312.ID = 3; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp312.Name = "configuration"; + tmp312.Type = TType.Map; + tmp312.ID = 4; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter313 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter313, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter313], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp312.Name = "getInfos"; + tmp312.Type = TType.List; + tmp312.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); + foreach (int _iter314 in GetInfos) + { + await oprot.WriteI32Async(_iter314, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp312.Name = "initialNamespace"; + tmp312.Type = TType.Struct; + tmp312.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await InitialNamespace.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canUseMultipleCatalogs) + { + tmp312.Name = "canUseMultipleCatalogs"; + tmp312.Type = TType.Bool; + tmp312.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOpenSessionResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(ServerProtocolVersion, other.ServerProtocolVersion) + && ((__isset.sessionHandle == other.__isset.sessionHandle) && ((!__isset.sessionHandle) || (global::System.Object.Equals(SessionHandle, other.SessionHandle)))) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) + && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) + && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) + && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + hashcode = (hashcode * 397) + ServerProtocolVersion.GetHashCode(); + if((SessionHandle != null) && __isset.sessionHandle) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); + } + if(__isset.canUseMultipleCatalogs) + { + hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); + } + if((GetInfos != null) && __isset.getInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp315 = new StringBuilder("TOpenSessionResp("); + if((Status != null)) + { + tmp315.Append(", Status: "); + Status.ToString(tmp315); + } + tmp315.Append(", ServerProtocolVersion: "); + ServerProtocolVersion.ToString(tmp315); + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp315.Append(", SessionHandle: "); + SessionHandle.ToString(tmp315); + } + if((Configuration != null) && __isset.configuration) + { + tmp315.Append(", Configuration: "); + Configuration.ToString(tmp315); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp315.Append(", InitialNamespace: "); + InitialNamespace.ToString(tmp315); + } + if(__isset.canUseMultipleCatalogs) + { + tmp315.Append(", CanUseMultipleCatalogs: "); + CanUseMultipleCatalogs.ToString(tmp315); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp315.Append(", GetInfos: "); + GetInfos.ToString(tmp315); + } + tmp315.Append(')'); + return tmp315.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs new file mode 100644 index 0000000000..f260602229 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOperationHandle : TBase + { + private double _modifiedRowCount; + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TOperationType OperationType { get; set; } + + public bool HasResultSet { get; set; } + + public double ModifiedRowCount + { + get + { + return _modifiedRowCount; + } + set + { + __isset.modifiedRowCount = true; + this._modifiedRowCount = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool modifiedRowCount; + } + + public TOperationHandle() + { + } + + public TOperationHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier operationId, global::Apache.Hive.Service.Rpc.Thrift.TOperationType operationType, bool hasResultSet) : this() + { + this.OperationId = operationId; + this.OperationType = operationType; + this.HasResultSet = hasResultSet; + } + + public TOperationHandle DeepCopy() + { + var tmp274 = new TOperationHandle(); + if((OperationId != null)) + { + tmp274.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp274.OperationType = this.OperationType; + tmp274.HasResultSet = this.HasResultSet; + if(__isset.modifiedRowCount) + { + tmp274.ModifiedRowCount = this.ModifiedRowCount; + } + tmp274.__isset.modifiedRowCount = this.__isset.modifiedRowCount; + return tmp274; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationId = false; + bool isset_operationType = false; + bool isset_hasResultSet = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + isset_operationId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + OperationType = (global::Apache.Hive.Service.Rpc.Thrift.TOperationType)await iprot.ReadI32Async(cancellationToken); + isset_operationType = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Bool) + { + HasResultSet = await iprot.ReadBoolAsync(cancellationToken); + isset_hasResultSet = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Double) + { + ModifiedRowCount = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationType) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_hasResultSet) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp275 = new TStruct("TOperationHandle"); + await oprot.WriteStructBeginAsync(tmp275, cancellationToken); + var tmp276 = new TField(); + if((OperationId != null)) + { + tmp276.Name = "operationId"; + tmp276.Type = TType.Struct; + tmp276.ID = 1; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp276.Name = "operationType"; + tmp276.Type = TType.I32; + tmp276.ID = 2; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteI32Async((int)OperationType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp276.Name = "hasResultSet"; + tmp276.Type = TType.Bool; + tmp276.ID = 3; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteBoolAsync(HasResultSet, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.modifiedRowCount) + { + tmp276.Name = "modifiedRowCount"; + tmp276.Type = TType.Double; + tmp276.ID = 4; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteDoubleAsync(ModifiedRowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOperationHandle other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationId, other.OperationId) + && global::System.Object.Equals(OperationType, other.OperationType) + && global::System.Object.Equals(HasResultSet, other.HasResultSet) + && ((__isset.modifiedRowCount == other.__isset.modifiedRowCount) && ((!__isset.modifiedRowCount) || (global::System.Object.Equals(ModifiedRowCount, other.ModifiedRowCount)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationId != null)) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + hashcode = (hashcode * 397) + OperationType.GetHashCode(); + hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); + if(__isset.modifiedRowCount) + { + hashcode = (hashcode * 397) + ModifiedRowCount.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp277 = new StringBuilder("TOperationHandle("); + if((OperationId != null)) + { + tmp277.Append(", OperationId: "); + OperationId.ToString(tmp277); + } + tmp277.Append(", OperationType: "); + OperationType.ToString(tmp277); + tmp277.Append(", HasResultSet: "); + HasResultSet.ToString(tmp277); + if(__isset.modifiedRowCount) + { + tmp277.Append(", ModifiedRowCount: "); + ModifiedRowCount.ToString(tmp277); + } + tmp277.Append(')'); + return tmp277.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs new file mode 100644 index 0000000000..8050cd527b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationIdempotencyType + { + UNKNOWN = 0, + NON_IDEMPOTENT = 1, + IDEMPOTENT = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs new file mode 100644 index 0000000000..2969546b3b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs @@ -0,0 +1,29 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationState + { + INITIALIZED_STATE = 0, + RUNNING_STATE = 1, + FINISHED_STATE = 2, + CANCELED_STATE = 3, + CLOSED_STATE = 4, + ERROR_STATE = 5, + UKNOWN_STATE = 6, + PENDING_STATE = 7, + TIMEDOUT_STATE = 8, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs new file mode 100644 index 0000000000..71d69f8e11 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs @@ -0,0 +1,22 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationTimeoutLevel + { + CLUSTER = 0, + SESSION = 1, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs new file mode 100644 index 0000000000..35110c8306 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs @@ -0,0 +1,30 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationType + { + EXECUTE_STATEMENT = 0, + GET_TYPE_INFO = 1, + GET_CATALOGS = 2, + GET_SCHEMAS = 3, + GET_TABLES = 4, + GET_TABLE_TYPES = 5, + GET_COLUMNS = 6, + GET_FUNCTIONS = 7, + UNKNOWN = 8, + PROCEDURAL_SQL = 9, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs new file mode 100644 index 0000000000..375fbf951e --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs @@ -0,0 +1,215 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TPrimitiveTypeEntry : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers _typeQualifiers; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TTypeId Type { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers TypeQualifiers + { + get + { + return _typeQualifiers; + } + set + { + __isset.typeQualifiers = true; + this._typeQualifiers = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool typeQualifiers; + } + + public TPrimitiveTypeEntry() + { + } + + public TPrimitiveTypeEntry(global::Apache.Hive.Service.Rpc.Thrift.TTypeId type) : this() + { + this.Type = type; + } + + public TPrimitiveTypeEntry DeepCopy() + { + var tmp15 = new TPrimitiveTypeEntry(); + tmp15.Type = this.Type; + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp15.TypeQualifiers = (global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers)this.TypeQualifiers.DeepCopy(); + } + tmp15.__isset.typeQualifiers = this.__isset.typeQualifiers; + return tmp15; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_type = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Type = (global::Apache.Hive.Service.Rpc.Thrift.TTypeId)await iprot.ReadI32Async(cancellationToken); + isset_type = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + TypeQualifiers = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers(); + await TypeQualifiers.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_type) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp16 = new TStruct("TPrimitiveTypeEntry"); + await oprot.WriteStructBeginAsync(tmp16, cancellationToken); + var tmp17 = new TField(); + tmp17.Name = "type"; + tmp17.Type = TType.I32; + tmp17.ID = 1; + await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); + await oprot.WriteI32Async((int)Type, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp17.Name = "typeQualifiers"; + tmp17.Type = TType.Struct; + tmp17.ID = 2; + await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); + await TypeQualifiers.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TPrimitiveTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Type, other.Type) + && ((__isset.typeQualifiers == other.__isset.typeQualifiers) && ((!__isset.typeQualifiers) || (global::System.Object.Equals(TypeQualifiers, other.TypeQualifiers)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + Type.GetHashCode(); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + hashcode = (hashcode * 397) + TypeQualifiers.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp18 = new StringBuilder("TPrimitiveTypeEntry("); + tmp18.Append(", Type: "); + Type.ToString(tmp18); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp18.Append(", TypeQualifiers: "); + TypeQualifiers.ToString(tmp18); + } + tmp18.Append(')'); + return tmp18.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs new file mode 100644 index 0000000000..249134504b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs @@ -0,0 +1,390 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TProgressUpdateResp : TBase + { + + public List HeaderNames { get; set; } + + public List> Rows { get; set; } + + public double ProgressedPercentage { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus Status { get; set; } + + public string FooterSummary { get; set; } + + public long StartTime { get; set; } + + public TProgressUpdateResp() + { + } + + public TProgressUpdateResp(List headerNames, List> rows, double progressedPercentage, global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus status, string footerSummary, long startTime) : this() + { + this.HeaderNames = headerNames; + this.Rows = rows; + this.ProgressedPercentage = progressedPercentage; + this.Status = status; + this.FooterSummary = footerSummary; + this.StartTime = startTime; + } + + public TProgressUpdateResp DeepCopy() + { + var tmp628 = new TProgressUpdateResp(); + if((HeaderNames != null)) + { + tmp628.HeaderNames = this.HeaderNames.DeepCopy(); + } + if((Rows != null)) + { + tmp628.Rows = this.Rows.DeepCopy(); + } + tmp628.ProgressedPercentage = this.ProgressedPercentage; + tmp628.Status = this.Status; + if((FooterSummary != null)) + { + tmp628.FooterSummary = this.FooterSummary; + } + tmp628.StartTime = this.StartTime; + return tmp628; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_headerNames = false; + bool isset_rows = false; + bool isset_progressedPercentage = false; + bool isset_status = false; + bool isset_footerSummary = false; + bool isset_startTime = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list629 = await iprot.ReadListBeginAsync(cancellationToken); + HeaderNames = new List(_list629.Count); + for(int _i630 = 0; _i630 < _list629.Count; ++_i630) + { + string _elem631; + _elem631 = await iprot.ReadStringAsync(cancellationToken); + HeaderNames.Add(_elem631); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_headerNames = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list632 = await iprot.ReadListBeginAsync(cancellationToken); + Rows = new List>(_list632.Count); + for(int _i633 = 0; _i633 < _list632.Count; ++_i633) + { + List _elem634; + { + var _list635 = await iprot.ReadListBeginAsync(cancellationToken); + _elem634 = new List(_list635.Count); + for(int _i636 = 0; _i636 < _list635.Count; ++_i636) + { + string _elem637; + _elem637 = await iprot.ReadStringAsync(cancellationToken); + _elem634.Add(_elem637); + } + await iprot.ReadListEndAsync(cancellationToken); + } + Rows.Add(_elem634); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_rows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Double) + { + ProgressedPercentage = await iprot.ReadDoubleAsync(cancellationToken); + isset_progressedPercentage = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + Status = (global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus)await iprot.ReadI32Async(cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + FooterSummary = await iprot.ReadStringAsync(cancellationToken); + isset_footerSummary = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.I64) + { + StartTime = await iprot.ReadI64Async(cancellationToken); + isset_startTime = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_headerNames) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_progressedPercentage) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_footerSummary) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startTime) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp638 = new TStruct("TProgressUpdateResp"); + await oprot.WriteStructBeginAsync(tmp638, cancellationToken); + var tmp639 = new TField(); + if((HeaderNames != null)) + { + tmp639.Name = "headerNames"; + tmp639.Type = TType.List; + tmp639.ID = 1; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, HeaderNames.Count), cancellationToken); + foreach (string _iter640 in HeaderNames) + { + await oprot.WriteStringAsync(_iter640, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Rows != null)) + { + tmp639.Name = "rows"; + tmp639.Type = TType.List; + tmp639.ID = 2; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.List, Rows.Count), cancellationToken); + foreach (List _iter641 in Rows) + { + await oprot.WriteListBeginAsync(new TList(TType.String, _iter641.Count), cancellationToken); + foreach (string _iter642 in _iter641) + { + await oprot.WriteStringAsync(_iter642, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp639.Name = "progressedPercentage"; + tmp639.Type = TType.Double; + tmp639.ID = 3; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteDoubleAsync(ProgressedPercentage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp639.Name = "status"; + tmp639.Type = TType.I32; + tmp639.ID = 4; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteI32Async((int)Status, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((FooterSummary != null)) + { + tmp639.Name = "footerSummary"; + tmp639.Type = TType.String; + tmp639.ID = 5; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteStringAsync(FooterSummary, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp639.Name = "startTime"; + tmp639.Type = TType.I64; + tmp639.ID = 6; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteI64Async(StartTime, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TProgressUpdateResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(HeaderNames, other.HeaderNames) + && TCollections.Equals(Rows, other.Rows) + && global::System.Object.Equals(ProgressedPercentage, other.ProgressedPercentage) + && global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(FooterSummary, other.FooterSummary) + && global::System.Object.Equals(StartTime, other.StartTime); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((HeaderNames != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(HeaderNames); + } + if((Rows != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); + } + hashcode = (hashcode * 397) + ProgressedPercentage.GetHashCode(); + hashcode = (hashcode * 397) + Status.GetHashCode(); + if((FooterSummary != null)) + { + hashcode = (hashcode * 397) + FooterSummary.GetHashCode(); + } + hashcode = (hashcode * 397) + StartTime.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp643 = new StringBuilder("TProgressUpdateResp("); + if((HeaderNames != null)) + { + tmp643.Append(", HeaderNames: "); + HeaderNames.ToString(tmp643); + } + if((Rows != null)) + { + tmp643.Append(", Rows: "); + Rows.ToString(tmp643); + } + tmp643.Append(", ProgressedPercentage: "); + ProgressedPercentage.ToString(tmp643); + tmp643.Append(", Status: "); + Status.ToString(tmp643); + if((FooterSummary != null)) + { + tmp643.Append(", FooterSummary: "); + FooterSummary.ToString(tmp643); + } + tmp643.Append(", StartTime: "); + StartTime.ToString(tmp643); + tmp643.Append(')'); + return tmp643.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs new file mode 100644 index 0000000000..02a5f4db11 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs @@ -0,0 +1,38 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TProtocolVersion + { + HIVE_CLI_SERVICE_PROTOCOL_V1 = 0, + HIVE_CLI_SERVICE_PROTOCOL_V2 = 1, + HIVE_CLI_SERVICE_PROTOCOL_V3 = 2, + HIVE_CLI_SERVICE_PROTOCOL_V4 = 3, + HIVE_CLI_SERVICE_PROTOCOL_V5 = 4, + HIVE_CLI_SERVICE_PROTOCOL_V6 = 5, + HIVE_CLI_SERVICE_PROTOCOL_V7 = 6, + HIVE_CLI_SERVICE_PROTOCOL_V8 = 7, + HIVE_CLI_SERVICE_PROTOCOL_V9 = 8, + HIVE_CLI_SERVICE_PROTOCOL_V10 = 9, + HIVE_CLI_SERVICE_PROTOCOL_V11 = 10, + SPARK_CLI_SERVICE_PROTOCOL_V1 = 42241, + SPARK_CLI_SERVICE_PROTOCOL_V2 = 42242, + SPARK_CLI_SERVICE_PROTOCOL_V3 = 42243, + SPARK_CLI_SERVICE_PROTOCOL_V4 = 42244, + SPARK_CLI_SERVICE_PROTOCOL_V5 = 42245, + SPARK_CLI_SERVICE_PROTOCOL_V6 = 42246, + SPARK_CLI_SERVICE_PROTOCOL_V7 = 42247, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs new file mode 100644 index 0000000000..0888c6c91f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRenewDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string DelegationToken { get; set; } + + public TRenewDelegationTokenReq() + { + } + + public TRenewDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() + { + this.SessionHandle = sessionHandle; + this.DelegationToken = delegationToken; + } + + public TRenewDelegationTokenReq DeepCopy() + { + var tmp618 = new TRenewDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp618.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((DelegationToken != null)) + { + tmp618.DelegationToken = this.DelegationToken; + } + return tmp618; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_delegationToken = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + isset_delegationToken = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_delegationToken) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp619 = new TStruct("TRenewDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp619, cancellationToken); + var tmp620 = new TField(); + if((SessionHandle != null)) + { + tmp620.Name = "sessionHandle"; + tmp620.Type = TType.Struct; + tmp620.ID = 1; + await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null)) + { + tmp620.Name = "delegationToken"; + tmp620.Type = TType.String; + tmp620.ID = 2; + await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRenewDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(DelegationToken, other.DelegationToken); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((DelegationToken != null)) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp621 = new StringBuilder("TRenewDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp621.Append(", SessionHandle: "); + SessionHandle.ToString(tmp621); + } + if((DelegationToken != null)) + { + tmp621.Append(", DelegationToken: "); + DelegationToken.ToString(tmp621); + } + tmp621.Append(')'); + return tmp621.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs new file mode 100644 index 0000000000..f62b657ea4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRenewDelegationTokenResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TRenewDelegationTokenResp() + { + } + + public TRenewDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TRenewDelegationTokenResp DeepCopy() + { + var tmp623 = new TRenewDelegationTokenResp(); + if((Status != null)) + { + tmp623.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp623; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp624 = new TStruct("TRenewDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp624, cancellationToken); + var tmp625 = new TField(); + if((Status != null)) + { + tmp625.Name = "status"; + tmp625.Type = TType.Struct; + tmp625.ID = 1; + await oprot.WriteFieldBeginAsync(tmp625, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRenewDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp626 = new StringBuilder("TRenewDelegationTokenResp("); + if((Status != null)) + { + tmp626.Append(", Status: "); + Status.ToString(tmp626); + } + tmp626.Append(')'); + return tmp626.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs new file mode 100644 index 0000000000..728620e02a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TResultPersistenceMode + { + ONLY_LARGE_RESULTS = 0, + ALL_QUERY_RESULTS = 1, + ALL_RESULTS = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs new file mode 100644 index 0000000000..f04da578d7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRow : TBase + { + + public List ColVals { get; set; } + + public TRow() + { + } + + public TRow(List colVals) : this() + { + this.ColVals = colVals; + } + + public TRow DeepCopy() + { + var tmp123 = new TRow(); + if((ColVals != null)) + { + tmp123.ColVals = this.ColVals.DeepCopy(); + } + return tmp123; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_colVals = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list124 = await iprot.ReadListBeginAsync(cancellationToken); + ColVals = new List(_list124.Count); + for(int _i125 = 0; _i125 < _list124.Count; ++_i125) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _elem126; + _elem126 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnValue(); + await _elem126.ReadAsync(iprot, cancellationToken); + ColVals.Add(_elem126); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_colVals = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_colVals) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp127 = new TStruct("TRow"); + await oprot.WriteStructBeginAsync(tmp127, cancellationToken); + var tmp128 = new TField(); + if((ColVals != null)) + { + tmp128.Name = "colVals"; + tmp128.Type = TType.List; + tmp128.ID = 1; + await oprot.WriteFieldBeginAsync(tmp128, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ColVals.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _iter129 in ColVals) + { + await _iter129.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRow other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(ColVals, other.ColVals); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ColVals != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ColVals); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp130 = new StringBuilder("TRow("); + if((ColVals != null)) + { + tmp130.Append(", ColVals: "); + ColVals.ToString(tmp130); + } + tmp130.Append(')'); + return tmp130.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs new file mode 100644 index 0000000000..9b5aed6a36 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs @@ -0,0 +1,512 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRowSet : TBase + { + private List _columns; + private byte[] _binaryColumns; + private int _columnCount; + private List _arrowBatches; + private List _resultLinks; + + public long StartRowOffset { get; set; } + + public List Rows { get; set; } + + public List Columns + { + get + { + return _columns; + } + set + { + __isset.columns = true; + this._columns = value; + } + } + + public byte[] BinaryColumns + { + get + { + return _binaryColumns; + } + set + { + __isset.binaryColumns = true; + this._binaryColumns = value; + } + } + + public int ColumnCount + { + get + { + return _columnCount; + } + set + { + __isset.columnCount = true; + this._columnCount = value; + } + } + + public List ArrowBatches + { + get + { + return _arrowBatches; + } + set + { + __isset.arrowBatches = true; + this._arrowBatches = value; + } + } + + public List ResultLinks + { + get + { + return _resultLinks; + } + set + { + __isset.resultLinks = true; + this._resultLinks = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool columns; + public bool binaryColumns; + public bool columnCount; + public bool arrowBatches; + public bool resultLinks; + } + + public TRowSet() + { + } + + public TRowSet(long startRowOffset, List rows) : this() + { + this.StartRowOffset = startRowOffset; + this.Rows = rows; + } + + public TRowSet DeepCopy() + { + var tmp209 = new TRowSet(); + tmp209.StartRowOffset = this.StartRowOffset; + if((Rows != null)) + { + tmp209.Rows = this.Rows.DeepCopy(); + } + if((Columns != null) && __isset.columns) + { + tmp209.Columns = this.Columns.DeepCopy(); + } + tmp209.__isset.columns = this.__isset.columns; + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp209.BinaryColumns = this.BinaryColumns.ToArray(); + } + tmp209.__isset.binaryColumns = this.__isset.binaryColumns; + if(__isset.columnCount) + { + tmp209.ColumnCount = this.ColumnCount; + } + tmp209.__isset.columnCount = this.__isset.columnCount; + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp209.ArrowBatches = this.ArrowBatches.DeepCopy(); + } + tmp209.__isset.arrowBatches = this.__isset.arrowBatches; + if((ResultLinks != null) && __isset.resultLinks) + { + tmp209.ResultLinks = this.ResultLinks.DeepCopy(); + } + tmp209.__isset.resultLinks = this.__isset.resultLinks; + return tmp209; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_startRowOffset = false; + bool isset_rows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list210 = await iprot.ReadListBeginAsync(cancellationToken); + Rows = new List(_list210.Count); + for(int _i211 = 0; _i211 < _list210.Count; ++_i211) + { + global::Apache.Hive.Service.Rpc.Thrift.TRow _elem212; + _elem212 = new global::Apache.Hive.Service.Rpc.Thrift.TRow(); + await _elem212.ReadAsync(iprot, cancellationToken); + Rows.Add(_elem212); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_rows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.List) + { + { + var _list213 = await iprot.ReadListBeginAsync(cancellationToken); + Columns = new List(_list213.Count); + for(int _i214 = 0; _i214 < _list213.Count; ++_i214) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumn _elem215; + _elem215 = new global::Apache.Hive.Service.Rpc.Thrift.TColumn(); + await _elem215.ReadAsync(iprot, cancellationToken); + Columns.Add(_elem215); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + BinaryColumns = await iprot.ReadBinaryAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I32) + { + ColumnCount = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list216 = await iprot.ReadListBeginAsync(cancellationToken); + ArrowBatches = new List(_list216.Count); + for(int _i217 = 0; _i217 < _list216.Count; ++_i217) + { + global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _elem218; + _elem218 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch(); + await _elem218.ReadAsync(iprot, cancellationToken); + ArrowBatches.Add(_elem218); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.List) + { + { + var _list219 = await iprot.ReadListBeginAsync(cancellationToken); + ResultLinks = new List(_list219.Count); + for(int _i220 = 0; _i220 < _list219.Count; ++_i220) + { + global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _elem221; + _elem221 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink(); + await _elem221.ReadAsync(iprot, cancellationToken); + ResultLinks.Add(_elem221); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp222 = new TStruct("TRowSet"); + await oprot.WriteStructBeginAsync(tmp222, cancellationToken); + var tmp223 = new TField(); + tmp223.Name = "startRowOffset"; + tmp223.Type = TType.I64; + tmp223.ID = 1; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Rows != null)) + { + tmp223.Name = "rows"; + tmp223.Type = TType.List; + tmp223.ID = 2; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Rows.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TRow _iter224 in Rows) + { + await _iter224.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Columns != null) && __isset.columns) + { + tmp223.Name = "columns"; + tmp223.Type = TType.List; + tmp223.ID = 3; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumn _iter225 in Columns) + { + await _iter225.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp223.Name = "binaryColumns"; + tmp223.Type = TType.String; + tmp223.ID = 4; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteBinaryAsync(BinaryColumns, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.columnCount) + { + tmp223.Name = "columnCount"; + tmp223.Type = TType.I32; + tmp223.ID = 5; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteI32Async(ColumnCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp223.Name = "arrowBatches"; + tmp223.Type = TType.List; + tmp223.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ArrowBatches.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _iter226 in ArrowBatches) + { + await _iter226.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultLinks != null) && __isset.resultLinks) + { + tmp223.Name = "resultLinks"; + tmp223.Type = TType.List; + tmp223.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultLinks.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _iter227 in ResultLinks) + { + await _iter227.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRowSet other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && TCollections.Equals(Rows, other.Rows) + && ((__isset.columns == other.__isset.columns) && ((!__isset.columns) || (TCollections.Equals(Columns, other.Columns)))) + && ((__isset.binaryColumns == other.__isset.binaryColumns) && ((!__isset.binaryColumns) || (TCollections.Equals(BinaryColumns, other.BinaryColumns)))) + && ((__isset.columnCount == other.__isset.columnCount) && ((!__isset.columnCount) || (global::System.Object.Equals(ColumnCount, other.ColumnCount)))) + && ((__isset.arrowBatches == other.__isset.arrowBatches) && ((!__isset.arrowBatches) || (TCollections.Equals(ArrowBatches, other.ArrowBatches)))) + && ((__isset.resultLinks == other.__isset.resultLinks) && ((!__isset.resultLinks) || (TCollections.Equals(ResultLinks, other.ResultLinks)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + if((Rows != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); + } + if((Columns != null) && __isset.columns) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + hashcode = (hashcode * 397) + BinaryColumns.GetHashCode(); + } + if(__isset.columnCount) + { + hashcode = (hashcode * 397) + ColumnCount.GetHashCode(); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ArrowBatches); + } + if((ResultLinks != null) && __isset.resultLinks) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultLinks); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp228 = new StringBuilder("TRowSet("); + tmp228.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp228); + if((Rows != null)) + { + tmp228.Append(", Rows: "); + Rows.ToString(tmp228); + } + if((Columns != null) && __isset.columns) + { + tmp228.Append(", Columns: "); + Columns.ToString(tmp228); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp228.Append(", BinaryColumns: "); + BinaryColumns.ToString(tmp228); + } + if(__isset.columnCount) + { + tmp228.Append(", ColumnCount: "); + ColumnCount.ToString(tmp228); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp228.Append(", ArrowBatches: "); + ArrowBatches.ToString(tmp228); + } + if((ResultLinks != null) && __isset.resultLinks) + { + tmp228.Append(", ResultLinks: "); + ResultLinks.ToString(tmp228); + } + tmp228.Append(')'); + return tmp228.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs new file mode 100644 index 0000000000..ef0e2b2cb4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSessionHandle : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId { get; set; } + + public TSessionHandle() + { + } + + public TSessionHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier sessionId) : this() + { + this.SessionId = sessionId; + } + + public TSessionHandle DeepCopy() + { + var tmp269 = new TSessionHandle(); + if((SessionId != null)) + { + tmp269.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); + } + return tmp269; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionId = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await SessionId.ReadAsync(iprot, cancellationToken); + isset_sessionId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp270 = new TStruct("TSessionHandle"); + await oprot.WriteStructBeginAsync(tmp270, cancellationToken); + var tmp271 = new TField(); + if((SessionId != null)) + { + tmp271.Name = "sessionId"; + tmp271.Type = TType.Struct; + tmp271.ID = 1; + await oprot.WriteFieldBeginAsync(tmp271, cancellationToken); + await SessionId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSessionHandle other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionId, other.SessionId); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionId != null)) + { + hashcode = (hashcode * 397) + SessionId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp272 = new StringBuilder("TSessionHandle("); + if((SessionId != null)) + { + tmp272.Append(", SessionId: "); + SessionId.ToString(tmp272); + } + tmp272.Append(')'); + return tmp272.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs new file mode 100644 index 0000000000..15578dc770 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs @@ -0,0 +1,241 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSetClientInfoReq : TBase + { + private Dictionary _configuration; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool configuration; + } + + public TSetClientInfoReq() + { + } + + public TSetClientInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TSetClientInfoReq DeepCopy() + { + var tmp317 = new TSetClientInfoReq(); + if((SessionHandle != null)) + { + tmp317.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Configuration != null) && __isset.configuration) + { + tmp317.Configuration = this.Configuration.DeepCopy(); + } + tmp317.__isset.configuration = this.__isset.configuration; + return tmp317; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Map) + { + { + var _map318 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map318.Count); + for(int _i319 = 0; _i319 < _map318.Count; ++_i319) + { + string _key320; + string _val321; + _key320 = await iprot.ReadStringAsync(cancellationToken); + _val321 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key320] = _val321; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp322 = new TStruct("TSetClientInfoReq"); + await oprot.WriteStructBeginAsync(tmp322, cancellationToken); + var tmp323 = new TField(); + if((SessionHandle != null)) + { + tmp323.Name = "sessionHandle"; + tmp323.Type = TType.Struct; + tmp323.ID = 1; + await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp323.Name = "configuration"; + tmp323.Type = TType.Map; + tmp323.ID = 2; + await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter324 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter324, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter324], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSetClientInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp325 = new StringBuilder("TSetClientInfoReq("); + if((SessionHandle != null)) + { + tmp325.Append(", SessionHandle: "); + SessionHandle.ToString(tmp325); + } + if((Configuration != null) && __isset.configuration) + { + tmp325.Append(", Configuration: "); + Configuration.ToString(tmp325); + } + tmp325.Append(')'); + return tmp325.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs new file mode 100644 index 0000000000..07a9f53444 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSetClientInfoResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TSetClientInfoResp() + { + } + + public TSetClientInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TSetClientInfoResp DeepCopy() + { + var tmp327 = new TSetClientInfoResp(); + if((Status != null)) + { + tmp327.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp327; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp328 = new TStruct("TSetClientInfoResp"); + await oprot.WriteStructBeginAsync(tmp328, cancellationToken); + var tmp329 = new TField(); + if((Status != null)) + { + tmp329.Name = "status"; + tmp329.Type = TType.Struct; + tmp329.ID = 1; + await oprot.WriteFieldBeginAsync(tmp329, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSetClientInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp330 = new StringBuilder("TSetClientInfoResp("); + if((Status != null)) + { + tmp330.Append(", Status: "); + Status.ToString(tmp330); + } + tmp330.Append(')'); + return tmp330.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs new file mode 100644 index 0000000000..25690516e1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs @@ -0,0 +1,197 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowBatch : TBase + { + + public byte[] Batch { get; set; } + + public long RowCount { get; set; } + + public TSparkArrowBatch() + { + } + + public TSparkArrowBatch(byte[] batch, long rowCount) : this() + { + this.Batch = batch; + this.RowCount = rowCount; + } + + public TSparkArrowBatch DeepCopy() + { + var tmp230 = new TSparkArrowBatch(); + if((Batch != null)) + { + tmp230.Batch = this.Batch.ToArray(); + } + tmp230.RowCount = this.RowCount; + return tmp230; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_batch = false; + bool isset_rowCount = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Batch = await iprot.ReadBinaryAsync(cancellationToken); + isset_batch = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_batch) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp231 = new TStruct("TSparkArrowBatch"); + await oprot.WriteStructBeginAsync(tmp231, cancellationToken); + var tmp232 = new TField(); + if((Batch != null)) + { + tmp232.Name = "batch"; + tmp232.Type = TType.String; + tmp232.ID = 1; + await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); + await oprot.WriteBinaryAsync(Batch, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp232.Name = "rowCount"; + tmp232.Type = TType.I64; + tmp232.ID = 2; + await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowBatch other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Batch, other.Batch) + && global::System.Object.Equals(RowCount, other.RowCount); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Batch != null)) + { + hashcode = (hashcode * 397) + Batch.GetHashCode(); + } + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp233 = new StringBuilder("TSparkArrowBatch("); + if((Batch != null)) + { + tmp233.Append(", Batch: "); + Batch.ToString(tmp233); + } + tmp233.Append(", RowCount: "); + RowCount.ToString(tmp233); + tmp233.Append(')'); + return tmp233.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs new file mode 100644 index 0000000000..2e45731410 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowResultLink : TBase + { + + public string FileLink { get; set; } + + public long ExpiryTime { get; set; } + + public long StartRowOffset { get; set; } + + public long RowCount { get; set; } + + public long BytesNum { get; set; } + + public TSparkArrowResultLink() + { + } + + public TSparkArrowResultLink(string fileLink, long expiryTime, long startRowOffset, long rowCount, long bytesNum) : this() + { + this.FileLink = fileLink; + this.ExpiryTime = expiryTime; + this.StartRowOffset = startRowOffset; + this.RowCount = rowCount; + this.BytesNum = bytesNum; + } + + public TSparkArrowResultLink DeepCopy() + { + var tmp235 = new TSparkArrowResultLink(); + if((FileLink != null)) + { + tmp235.FileLink = this.FileLink; + } + tmp235.ExpiryTime = this.ExpiryTime; + tmp235.StartRowOffset = this.StartRowOffset; + tmp235.RowCount = this.RowCount; + tmp235.BytesNum = this.BytesNum; + return tmp235; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_fileLink = false; + bool isset_expiryTime = false; + bool isset_startRowOffset = false; + bool isset_rowCount = false; + bool isset_bytesNum = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + FileLink = await iprot.ReadStringAsync(cancellationToken); + isset_fileLink = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + ExpiryTime = await iprot.ReadI64Async(cancellationToken); + isset_expiryTime = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + BytesNum = await iprot.ReadI64Async(cancellationToken); + isset_bytesNum = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_fileLink) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_expiryTime) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_bytesNum) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp236 = new TStruct("TSparkArrowResultLink"); + await oprot.WriteStructBeginAsync(tmp236, cancellationToken); + var tmp237 = new TField(); + if((FileLink != null)) + { + tmp237.Name = "fileLink"; + tmp237.Type = TType.String; + tmp237.ID = 1; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteStringAsync(FileLink, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp237.Name = "expiryTime"; + tmp237.Type = TType.I64; + tmp237.ID = 2; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(ExpiryTime, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "startRowOffset"; + tmp237.Type = TType.I64; + tmp237.ID = 3; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "rowCount"; + tmp237.Type = TType.I64; + tmp237.ID = 4; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "bytesNum"; + tmp237.Type = TType.I64; + tmp237.ID = 5; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(BytesNum, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowResultLink other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(FileLink, other.FileLink) + && global::System.Object.Equals(ExpiryTime, other.ExpiryTime) + && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && global::System.Object.Equals(RowCount, other.RowCount) + && global::System.Object.Equals(BytesNum, other.BytesNum); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((FileLink != null)) + { + hashcode = (hashcode * 397) + FileLink.GetHashCode(); + } + hashcode = (hashcode * 397) + ExpiryTime.GetHashCode(); + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + hashcode = (hashcode * 397) + BytesNum.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp238 = new StringBuilder("TSparkArrowResultLink("); + if((FileLink != null)) + { + tmp238.Append(", FileLink: "); + FileLink.ToString(tmp238); + } + tmp238.Append(", ExpiryTime: "); + ExpiryTime.ToString(tmp238); + tmp238.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp238); + tmp238.Append(", RowCount: "); + RowCount.ToString(tmp238); + tmp238.Append(", BytesNum: "); + BytesNum.ToString(tmp238); + tmp238.Append(')'); + return tmp238.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs new file mode 100644 index 0000000000..fc66ad4bd4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs @@ -0,0 +1,328 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowTypes : TBase + { + private bool _timestampAsArrow; + private bool _decimalAsArrow; + private bool _complexTypesAsArrow; + private bool _intervalTypesAsArrow; + + public bool TimestampAsArrow + { + get + { + return _timestampAsArrow; + } + set + { + __isset.timestampAsArrow = true; + this._timestampAsArrow = value; + } + } + + public bool DecimalAsArrow + { + get + { + return _decimalAsArrow; + } + set + { + __isset.decimalAsArrow = true; + this._decimalAsArrow = value; + } + } + + public bool ComplexTypesAsArrow + { + get + { + return _complexTypesAsArrow; + } + set + { + __isset.complexTypesAsArrow = true; + this._complexTypesAsArrow = value; + } + } + + public bool IntervalTypesAsArrow + { + get + { + return _intervalTypesAsArrow; + } + set + { + __isset.intervalTypesAsArrow = true; + this._intervalTypesAsArrow = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool timestampAsArrow; + public bool decimalAsArrow; + public bool complexTypesAsArrow; + public bool intervalTypesAsArrow; + } + + public TSparkArrowTypes() + { + } + + public TSparkArrowTypes DeepCopy() + { + var tmp250 = new TSparkArrowTypes(); + if(__isset.timestampAsArrow) + { + tmp250.TimestampAsArrow = this.TimestampAsArrow; + } + tmp250.__isset.timestampAsArrow = this.__isset.timestampAsArrow; + if(__isset.decimalAsArrow) + { + tmp250.DecimalAsArrow = this.DecimalAsArrow; + } + tmp250.__isset.decimalAsArrow = this.__isset.decimalAsArrow; + if(__isset.complexTypesAsArrow) + { + tmp250.ComplexTypesAsArrow = this.ComplexTypesAsArrow; + } + tmp250.__isset.complexTypesAsArrow = this.__isset.complexTypesAsArrow; + if(__isset.intervalTypesAsArrow) + { + tmp250.IntervalTypesAsArrow = this.IntervalTypesAsArrow; + } + tmp250.__isset.intervalTypesAsArrow = this.__isset.intervalTypesAsArrow; + return tmp250; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + TimestampAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + DecimalAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Bool) + { + ComplexTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Bool) + { + IntervalTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp251 = new TStruct("TSparkArrowTypes"); + await oprot.WriteStructBeginAsync(tmp251, cancellationToken); + var tmp252 = new TField(); + if(__isset.timestampAsArrow) + { + tmp252.Name = "timestampAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 1; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(TimestampAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.decimalAsArrow) + { + tmp252.Name = "decimalAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 2; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(DecimalAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.complexTypesAsArrow) + { + tmp252.Name = "complexTypesAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 3; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(ComplexTypesAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.intervalTypesAsArrow) + { + tmp252.Name = "intervalTypesAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 4; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(IntervalTypesAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowTypes other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.timestampAsArrow == other.__isset.timestampAsArrow) && ((!__isset.timestampAsArrow) || (global::System.Object.Equals(TimestampAsArrow, other.TimestampAsArrow)))) + && ((__isset.decimalAsArrow == other.__isset.decimalAsArrow) && ((!__isset.decimalAsArrow) || (global::System.Object.Equals(DecimalAsArrow, other.DecimalAsArrow)))) + && ((__isset.complexTypesAsArrow == other.__isset.complexTypesAsArrow) && ((!__isset.complexTypesAsArrow) || (global::System.Object.Equals(ComplexTypesAsArrow, other.ComplexTypesAsArrow)))) + && ((__isset.intervalTypesAsArrow == other.__isset.intervalTypesAsArrow) && ((!__isset.intervalTypesAsArrow) || (global::System.Object.Equals(IntervalTypesAsArrow, other.IntervalTypesAsArrow)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.timestampAsArrow) + { + hashcode = (hashcode * 397) + TimestampAsArrow.GetHashCode(); + } + if(__isset.decimalAsArrow) + { + hashcode = (hashcode * 397) + DecimalAsArrow.GetHashCode(); + } + if(__isset.complexTypesAsArrow) + { + hashcode = (hashcode * 397) + ComplexTypesAsArrow.GetHashCode(); + } + if(__isset.intervalTypesAsArrow) + { + hashcode = (hashcode * 397) + IntervalTypesAsArrow.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp253 = new StringBuilder("TSparkArrowTypes("); + int tmp254 = 0; + if(__isset.timestampAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("TimestampAsArrow: "); + TimestampAsArrow.ToString(tmp253); + } + if(__isset.decimalAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("DecimalAsArrow: "); + DecimalAsArrow.ToString(tmp253); + } + if(__isset.complexTypesAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("ComplexTypesAsArrow: "); + ComplexTypesAsArrow.ToString(tmp253); + } + if(__isset.intervalTypesAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("IntervalTypesAsArrow: "); + IntervalTypesAsArrow.ToString(tmp253); + } + tmp253.Append(')'); + return tmp253.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs new file mode 100644 index 0000000000..b970f9e62d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs @@ -0,0 +1,332 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkDirectResults : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _operationStatus; + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _resultSet; + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _closeOperation; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp OperationStatus + { + get + { + return _operationStatus; + } + set + { + __isset.operationStatus = true; + this._operationStatus = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata + { + get + { + return _resultSetMetadata; + } + set + { + __isset.resultSetMetadata = true; + this._resultSetMetadata = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp ResultSet + { + get + { + return _resultSet; + } + set + { + __isset.resultSet = true; + this._resultSet = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp CloseOperation + { + get + { + return _closeOperation; + } + set + { + __isset.closeOperation = true; + this._closeOperation = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationStatus; + public bool resultSetMetadata; + public bool resultSet; + public bool closeOperation; + } + + public TSparkDirectResults() + { + } + + public TSparkDirectResults DeepCopy() + { + var tmp245 = new TSparkDirectResults(); + if((OperationStatus != null) && __isset.operationStatus) + { + tmp245.OperationStatus = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.OperationStatus.DeepCopy(); + } + tmp245.__isset.operationStatus = this.__isset.operationStatus; + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp245.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); + } + tmp245.__isset.resultSetMetadata = this.__isset.resultSetMetadata; + if((ResultSet != null) && __isset.resultSet) + { + tmp245.ResultSet = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.ResultSet.DeepCopy(); + } + tmp245.__isset.resultSet = this.__isset.resultSet; + if((CloseOperation != null) && __isset.closeOperation) + { + tmp245.CloseOperation = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.CloseOperation.DeepCopy(); + } + tmp245.__isset.closeOperation = this.__isset.closeOperation; + return tmp245; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationStatus = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); + await OperationStatus.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await ResultSetMetadata.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + ResultSet = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); + await ResultSet.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + CloseOperation = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); + await CloseOperation.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp246 = new TStruct("TSparkDirectResults"); + await oprot.WriteStructBeginAsync(tmp246, cancellationToken); + var tmp247 = new TField(); + if((OperationStatus != null) && __isset.operationStatus) + { + tmp247.Name = "operationStatus"; + tmp247.Type = TType.Struct; + tmp247.ID = 1; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await OperationStatus.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp247.Name = "resultSetMetadata"; + tmp247.Type = TType.Struct; + tmp247.ID = 2; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await ResultSetMetadata.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSet != null) && __isset.resultSet) + { + tmp247.Name = "resultSet"; + tmp247.Type = TType.Struct; + tmp247.ID = 3; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await ResultSet.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CloseOperation != null) && __isset.closeOperation) + { + tmp247.Name = "closeOperation"; + tmp247.Type = TType.Struct; + tmp247.ID = 4; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await CloseOperation.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkDirectResults other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.operationStatus == other.__isset.operationStatus) && ((!__isset.operationStatus) || (global::System.Object.Equals(OperationStatus, other.OperationStatus)))) + && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) + && ((__isset.resultSet == other.__isset.resultSet) && ((!__isset.resultSet) || (global::System.Object.Equals(ResultSet, other.ResultSet)))) + && ((__isset.closeOperation == other.__isset.closeOperation) && ((!__isset.closeOperation) || (global::System.Object.Equals(CloseOperation, other.CloseOperation)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationStatus != null) && __isset.operationStatus) + { + hashcode = (hashcode * 397) + OperationStatus.GetHashCode(); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); + } + if((ResultSet != null) && __isset.resultSet) + { + hashcode = (hashcode * 397) + ResultSet.GetHashCode(); + } + if((CloseOperation != null) && __isset.closeOperation) + { + hashcode = (hashcode * 397) + CloseOperation.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp248 = new StringBuilder("TSparkDirectResults("); + int tmp249 = 0; + if((OperationStatus != null) && __isset.operationStatus) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("OperationStatus: "); + OperationStatus.ToString(tmp248); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("ResultSetMetadata: "); + ResultSetMetadata.ToString(tmp248); + } + if((ResultSet != null) && __isset.resultSet) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("ResultSet: "); + ResultSet.ToString(tmp248); + } + if((CloseOperation != null) && __isset.closeOperation) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("CloseOperation: "); + CloseOperation.ToString(tmp248); + } + tmp248.Append(')'); + return tmp248.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs new file mode 100644 index 0000000000..04d3b27731 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkGetDirectResults : TBase + { + private long _maxBytes; + + public long MaxRows { get; set; } + + public long MaxBytes + { + get + { + return _maxBytes; + } + set + { + __isset.maxBytes = true; + this._maxBytes = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool maxBytes; + } + + public TSparkGetDirectResults() + { + } + + public TSparkGetDirectResults(long maxRows) : this() + { + this.MaxRows = maxRows; + } + + public TSparkGetDirectResults DeepCopy() + { + var tmp240 = new TSparkGetDirectResults(); + tmp240.MaxRows = this.MaxRows; + if(__isset.maxBytes) + { + tmp240.MaxBytes = this.MaxBytes; + } + tmp240.__isset.maxBytes = this.__isset.maxBytes; + return tmp240; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_maxRows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + MaxRows = await iprot.ReadI64Async(cancellationToken); + isset_maxRows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + MaxBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_maxRows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp241 = new TStruct("TSparkGetDirectResults"); + await oprot.WriteStructBeginAsync(tmp241, cancellationToken); + var tmp242 = new TField(); + tmp242.Name = "maxRows"; + tmp242.Type = TType.I64; + tmp242.ID = 1; + await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); + await oprot.WriteI64Async(MaxRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.maxBytes) + { + tmp242.Name = "maxBytes"; + tmp242.Type = TType.I64; + tmp242.ID = 2; + await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); + await oprot.WriteI64Async(MaxBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkGetDirectResults other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(MaxRows, other.MaxRows) + && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + MaxRows.GetHashCode(); + if(__isset.maxBytes) + { + hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp243 = new StringBuilder("TSparkGetDirectResults("); + tmp243.Append(", MaxRows: "); + MaxRows.ToString(tmp243); + if(__isset.maxBytes) + { + tmp243.Append(", MaxBytes: "); + MaxBytes.ToString(tmp243); + } + tmp243.Append(')'); + return tmp243.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs new file mode 100644 index 0000000000..aec77d61a5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs @@ -0,0 +1,24 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TSparkRowSetType + { + ARROW_BASED_SET = 0, + COLUMN_BASED_SET = 1, + ROW_BASED_SET = 2, + URL_BASED_SET = 3, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs new file mode 100644 index 0000000000..9ccbb7f626 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs @@ -0,0 +1,376 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStatus : TBase + { + private List _infoMessages; + private string _sqlState; + private int _errorCode; + private string _errorMessage; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TStatusCode StatusCode { get; set; } + + public List InfoMessages + { + get + { + return _infoMessages; + } + set + { + __isset.infoMessages = true; + this._infoMessages = value; + } + } + + public string SqlState + { + get + { + return _sqlState; + } + set + { + __isset.sqlState = true; + this._sqlState = value; + } + } + + public int ErrorCode + { + get + { + return _errorCode; + } + set + { + __isset.errorCode = true; + this._errorCode = value; + } + } + + public string ErrorMessage + { + get + { + return _errorMessage; + } + set + { + __isset.errorMessage = true; + this._errorMessage = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool infoMessages; + public bool sqlState; + public bool errorCode; + public bool errorMessage; + } + + public TStatus() + { + } + + public TStatus(global::Apache.Hive.Service.Rpc.Thrift.TStatusCode statusCode) : this() + { + this.StatusCode = statusCode; + } + + public TStatus DeepCopy() + { + var tmp255 = new TStatus(); + tmp255.StatusCode = this.StatusCode; + if((InfoMessages != null) && __isset.infoMessages) + { + tmp255.InfoMessages = this.InfoMessages.DeepCopy(); + } + tmp255.__isset.infoMessages = this.__isset.infoMessages; + if((SqlState != null) && __isset.sqlState) + { + tmp255.SqlState = this.SqlState; + } + tmp255.__isset.sqlState = this.__isset.sqlState; + if(__isset.errorCode) + { + tmp255.ErrorCode = this.ErrorCode; + } + tmp255.__isset.errorCode = this.__isset.errorCode; + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp255.ErrorMessage = this.ErrorMessage; + } + tmp255.__isset.errorMessage = this.__isset.errorMessage; + return tmp255; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_statusCode = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + StatusCode = (global::Apache.Hive.Service.Rpc.Thrift.TStatusCode)await iprot.ReadI32Async(cancellationToken); + isset_statusCode = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list256 = await iprot.ReadListBeginAsync(cancellationToken); + InfoMessages = new List(_list256.Count); + for(int _i257 = 0; _i257 < _list256.Count; ++_i257) + { + string _elem258; + _elem258 = await iprot.ReadStringAsync(cancellationToken); + InfoMessages.Add(_elem258); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SqlState = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + ErrorCode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ErrorMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_statusCode) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp259 = new TStruct("TStatus"); + await oprot.WriteStructBeginAsync(tmp259, cancellationToken); + var tmp260 = new TField(); + tmp260.Name = "statusCode"; + tmp260.Type = TType.I32; + tmp260.ID = 1; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteI32Async((int)StatusCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((InfoMessages != null) && __isset.infoMessages) + { + tmp260.Name = "infoMessages"; + tmp260.Type = TType.List; + tmp260.ID = 2; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, InfoMessages.Count), cancellationToken); + foreach (string _iter261 in InfoMessages) + { + await oprot.WriteStringAsync(_iter261, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlState != null) && __isset.sqlState) + { + tmp260.Name = "sqlState"; + tmp260.Type = TType.String; + tmp260.ID = 3; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteStringAsync(SqlState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.errorCode) + { + tmp260.Name = "errorCode"; + tmp260.Type = TType.I32; + tmp260.ID = 4; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteI32Async(ErrorCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp260.Name = "errorMessage"; + tmp260.Type = TType.String; + tmp260.ID = 5; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteStringAsync(ErrorMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStatus other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(StatusCode, other.StatusCode) + && ((__isset.infoMessages == other.__isset.infoMessages) && ((!__isset.infoMessages) || (TCollections.Equals(InfoMessages, other.InfoMessages)))) + && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) + && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) + && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + StatusCode.GetHashCode(); + if((InfoMessages != null) && __isset.infoMessages) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(InfoMessages); + } + if((SqlState != null) && __isset.sqlState) + { + hashcode = (hashcode * 397) + SqlState.GetHashCode(); + } + if(__isset.errorCode) + { + hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp262 = new StringBuilder("TStatus("); + tmp262.Append(", StatusCode: "); + StatusCode.ToString(tmp262); + if((InfoMessages != null) && __isset.infoMessages) + { + tmp262.Append(", InfoMessages: "); + InfoMessages.ToString(tmp262); + } + if((SqlState != null) && __isset.sqlState) + { + tmp262.Append(", SqlState: "); + SqlState.ToString(tmp262); + } + if(__isset.errorCode) + { + tmp262.Append(", ErrorCode: "); + ErrorCode.ToString(tmp262); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp262.Append(", ErrorMessage: "); + ErrorMessage.ToString(tmp262); + } + tmp262.Append(')'); + return tmp262.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs new file mode 100644 index 0000000000..ce355fc6ad --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs @@ -0,0 +1,25 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TStatusCode + { + SUCCESS_STATUS = 0, + SUCCESS_WITH_INFO_STATUS = 1, + STILL_EXECUTING_STATUS = 2, + ERROR_STATUS = 3, + INVALID_HANDLE_STATUS = 4, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs new file mode 100644 index 0000000000..95fedcd776 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs @@ -0,0 +1,233 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStringColumn : TBase + { + + public StringArray Values { get; set; } + + public TStringColumn() + { + } + + public TStringColumn(StringArray values) : this() + { + this.Values = values; + } + + public TStringColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.Builder values = null; + byte[] nulls = null; + byte[] offsetBuffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + byte[] preAllocatedBuffer = new byte[65536]; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list187 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list187.Count; + + values = new ArrowBuffer.Builder(); + int offset = 0; + offsetBuffer = new byte[(length + 1) * 4]; + var memory = offsetBuffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); + + for(int _i188 = 0; _i188 < length; ++_i188) + { + typedMemory.Span[_i188] = offset; + var size = await iprot.ReadI32Async(cancellationToken); + offset += size; + + iprot.Transport.CheckReadBytesAvailable(size); + + byte[] tmp; + if (size <= preAllocatedBuffer.Length) + { + tmp = preAllocatedBuffer; + } + else + { + tmp = new byte[size]; + } + + await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); + values.Append(tmp.AsMemory(0, size).Span); + } + typedMemory.Span[length] = offset; + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new StringArray(length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp190 = new TStruct("TStringColumn"); + await oprot.WriteStructBeginAsync(tmp190, cancellationToken); + var tmp191 = new TField(); + if((Values != null)) + { + tmp191.Name = "values"; + tmp191.Type = TType.List; + tmp191.ID = 1; + await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans + string _iter192 = Values.GetString(i); + await oprot.WriteStringAsync(_iter192, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp191.Name = "nulls"; + tmp191.Type = TType.String; + tmp191.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStringColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Values != null)) + { + for (int i = 0; i < Values.Length; i++) + { + string thisValue = Values.GetString(i); + hashcode = (hashcode * 397) + (thisValue?.GetHashCode() ?? 0); + } + } + } + return hashcode; + } + + public override string ToString() + { + var tmp193 = new StringBuilder("TStringColumn("); + if((Values != null)) + { + tmp193.Append(", Values: "); + Values.ToString(tmp193); + } + tmp193.Append(')'); + return tmp193.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs new file mode 100644 index 0000000000..e1b7c8f6be --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStringValue : TBase + { + private string _value; + + public string Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TStringValue() + { + } + + public TStringValue DeepCopy() + { + var tmp113 = new TStringValue(); + if((Value != null) && __isset.@value) + { + tmp113.Value = this.Value; + } + tmp113.__isset.@value = this.__isset.@value; + return tmp113; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Value = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp114 = new TStruct("TStringValue"); + await oprot.WriteStructBeginAsync(tmp114, cancellationToken); + var tmp115 = new TField(); + if((Value != null) && __isset.@value) + { + tmp115.Name = "value"; + tmp115.Type = TType.String; + tmp115.ID = 1; + await oprot.WriteFieldBeginAsync(tmp115, cancellationToken); + await oprot.WriteStringAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStringValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Value != null) && __isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp116 = new StringBuilder("TStringValue("); + int tmp117 = 0; + if((Value != null) && __isset.@value) + { + if(0 < tmp117++) { tmp116.Append(", "); } + tmp116.Append("Value: "); + Value.ToString(tmp116); + } + tmp116.Append(')'); + return tmp116.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs new file mode 100644 index 0000000000..1ac1886691 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStructTypeEntry : TBase + { + + public Dictionary NameToTypePtr { get; set; } + + public TStructTypeEntry() + { + } + + public TStructTypeEntry(Dictionary nameToTypePtr) : this() + { + this.NameToTypePtr = nameToTypePtr; + } + + public TStructTypeEntry DeepCopy() + { + var tmp30 = new TStructTypeEntry(); + if((NameToTypePtr != null)) + { + tmp30.NameToTypePtr = this.NameToTypePtr.DeepCopy(); + } + return tmp30; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_nameToTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map31 = await iprot.ReadMapBeginAsync(cancellationToken); + NameToTypePtr = new Dictionary(_map31.Count); + for(int _i32 = 0; _i32 < _map31.Count; ++_i32) + { + string _key33; + int _val34; + _key33 = await iprot.ReadStringAsync(cancellationToken); + _val34 = await iprot.ReadI32Async(cancellationToken); + NameToTypePtr[_key33] = _val34; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_nameToTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_nameToTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp35 = new TStruct("TStructTypeEntry"); + await oprot.WriteStructBeginAsync(tmp35, cancellationToken); + var tmp36 = new TField(); + if((NameToTypePtr != null)) + { + tmp36.Name = "nameToTypePtr"; + tmp36.Type = TType.Map; + tmp36.ID = 1; + await oprot.WriteFieldBeginAsync(tmp36, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); + foreach (string _iter37 in NameToTypePtr.Keys) + { + await oprot.WriteStringAsync(_iter37, cancellationToken); + await oprot.WriteI32Async(NameToTypePtr[_iter37], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStructTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((NameToTypePtr != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp38 = new StringBuilder("TStructTypeEntry("); + if((NameToTypePtr != null)) + { + tmp38.Append(", NameToTypePtr: "); + NameToTypePtr.ToString(tmp38); + } + tmp38.Append(')'); + return tmp38.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs new file mode 100644 index 0000000000..7ae7d63512 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTableSchema : TBase + { + + public List Columns { get; set; } + + public TTableSchema() + { + } + + public TTableSchema(List columns) : this() + { + this.Columns = columns; + } + + public TTableSchema DeepCopy() + { + var tmp74 = new TTableSchema(); + if((Columns != null)) + { + tmp74.Columns = this.Columns.DeepCopy(); + } + return tmp74; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_columns = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list75 = await iprot.ReadListBeginAsync(cancellationToken); + Columns = new List(_list75.Count); + for(int _i76 = 0; _i76 < _list75.Count; ++_i76) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _elem77; + _elem77 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc(); + await _elem77.ReadAsync(iprot, cancellationToken); + Columns.Add(_elem77); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_columns = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_columns) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp78 = new TStruct("TTableSchema"); + await oprot.WriteStructBeginAsync(tmp78, cancellationToken); + var tmp79 = new TField(); + if((Columns != null)) + { + tmp79.Name = "columns"; + tmp79.Type = TType.List; + tmp79.ID = 1; + await oprot.WriteFieldBeginAsync(tmp79, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _iter80 in Columns) + { + await _iter80.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTableSchema other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Columns, other.Columns); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Columns != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp81 = new StringBuilder("TTableSchema("); + if((Columns != null)) + { + tmp81.Append(", Columns: "); + Columns.ToString(tmp81); + } + tmp81.Append(')'); + return tmp81.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs new file mode 100644 index 0000000000..318f1e5d05 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeDesc : TBase + { + + public List Types { get; set; } + + public TTypeDesc() + { + } + + public TTypeDesc(List types) : this() + { + this.Types = types; + } + + public TTypeDesc DeepCopy() + { + var tmp60 = new TTypeDesc(); + if((Types != null)) + { + tmp60.Types = this.Types.DeepCopy(); + } + return tmp60; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_types = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list61 = await iprot.ReadListBeginAsync(cancellationToken); + Types = new List(_list61.Count); + for(int _i62 = 0; _i62 < _list61.Count; ++_i62) + { + global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _elem63; + _elem63 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry(); + await _elem63.ReadAsync(iprot, cancellationToken); + Types.Add(_elem63); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_types = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_types) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp64 = new TStruct("TTypeDesc"); + await oprot.WriteStructBeginAsync(tmp64, cancellationToken); + var tmp65 = new TField(); + if((Types != null)) + { + tmp65.Name = "types"; + tmp65.Type = TType.List; + tmp65.ID = 1; + await oprot.WriteFieldBeginAsync(tmp65, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Types.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _iter66 in Types) + { + await _iter66.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeDesc other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Types, other.Types); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Types != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Types); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp67 = new StringBuilder("TTypeDesc("); + if((Types != null)) + { + tmp67.Append(", Types: "); + Types.ToString(tmp67); + } + tmp67.Append(')'); + return tmp67.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs new file mode 100644 index 0000000000..7aec87b834 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs @@ -0,0 +1,434 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeEntry : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry _primitiveEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry _arrayEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry _mapEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry _structEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry _unionEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry _userDefinedTypeEntry; + + public global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry PrimitiveEntry + { + get + { + return _primitiveEntry; + } + set + { + __isset.primitiveEntry = true; + this._primitiveEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry ArrayEntry + { + get + { + return _arrayEntry; + } + set + { + __isset.arrayEntry = true; + this._arrayEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry MapEntry + { + get + { + return _mapEntry; + } + set + { + __isset.mapEntry = true; + this._mapEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry StructEntry + { + get + { + return _structEntry; + } + set + { + __isset.structEntry = true; + this._structEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry UnionEntry + { + get + { + return _unionEntry; + } + set + { + __isset.unionEntry = true; + this._unionEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry UserDefinedTypeEntry + { + get + { + return _userDefinedTypeEntry; + } + set + { + __isset.userDefinedTypeEntry = true; + this._userDefinedTypeEntry = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool primitiveEntry; + public bool arrayEntry; + public bool mapEntry; + public bool structEntry; + public bool unionEntry; + public bool userDefinedTypeEntry; + } + + public TTypeEntry() + { + } + + public TTypeEntry DeepCopy() + { + var tmp55 = new TTypeEntry(); + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + tmp55.PrimitiveEntry = (global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry)this.PrimitiveEntry.DeepCopy(); + } + tmp55.__isset.primitiveEntry = this.__isset.primitiveEntry; + if((ArrayEntry != null) && __isset.arrayEntry) + { + tmp55.ArrayEntry = (global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry)this.ArrayEntry.DeepCopy(); + } + tmp55.__isset.arrayEntry = this.__isset.arrayEntry; + if((MapEntry != null) && __isset.mapEntry) + { + tmp55.MapEntry = (global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry)this.MapEntry.DeepCopy(); + } + tmp55.__isset.mapEntry = this.__isset.mapEntry; + if((StructEntry != null) && __isset.structEntry) + { + tmp55.StructEntry = (global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry)this.StructEntry.DeepCopy(); + } + tmp55.__isset.structEntry = this.__isset.structEntry; + if((UnionEntry != null) && __isset.unionEntry) + { + tmp55.UnionEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry)this.UnionEntry.DeepCopy(); + } + tmp55.__isset.unionEntry = this.__isset.unionEntry; + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + tmp55.UserDefinedTypeEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry)this.UserDefinedTypeEntry.DeepCopy(); + } + tmp55.__isset.userDefinedTypeEntry = this.__isset.userDefinedTypeEntry; + return tmp55; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + PrimitiveEntry = new global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry(); + await PrimitiveEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ArrayEntry = new global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry(); + await ArrayEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + MapEntry = new global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry(); + await MapEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + StructEntry = new global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry(); + await StructEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + UnionEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry(); + await UnionEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + UserDefinedTypeEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry(); + await UserDefinedTypeEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp56 = new TStruct("TTypeEntry"); + await oprot.WriteStructBeginAsync(tmp56, cancellationToken); + var tmp57 = new TField(); + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + tmp57.Name = "primitiveEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 1; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await PrimitiveEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + tmp57.Name = "arrayEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 2; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await ArrayEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((MapEntry != null) && __isset.mapEntry) + { + tmp57.Name = "mapEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 3; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await MapEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StructEntry != null) && __isset.structEntry) + { + tmp57.Name = "structEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 4; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await StructEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UnionEntry != null) && __isset.unionEntry) + { + tmp57.Name = "unionEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 5; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await UnionEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + tmp57.Name = "userDefinedTypeEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 6; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await UserDefinedTypeEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.primitiveEntry == other.__isset.primitiveEntry) && ((!__isset.primitiveEntry) || (global::System.Object.Equals(PrimitiveEntry, other.PrimitiveEntry)))) + && ((__isset.arrayEntry == other.__isset.arrayEntry) && ((!__isset.arrayEntry) || (global::System.Object.Equals(ArrayEntry, other.ArrayEntry)))) + && ((__isset.mapEntry == other.__isset.mapEntry) && ((!__isset.mapEntry) || (global::System.Object.Equals(MapEntry, other.MapEntry)))) + && ((__isset.structEntry == other.__isset.structEntry) && ((!__isset.structEntry) || (global::System.Object.Equals(StructEntry, other.StructEntry)))) + && ((__isset.unionEntry == other.__isset.unionEntry) && ((!__isset.unionEntry) || (global::System.Object.Equals(UnionEntry, other.UnionEntry)))) + && ((__isset.userDefinedTypeEntry == other.__isset.userDefinedTypeEntry) && ((!__isset.userDefinedTypeEntry) || (global::System.Object.Equals(UserDefinedTypeEntry, other.UserDefinedTypeEntry)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + hashcode = (hashcode * 397) + PrimitiveEntry.GetHashCode(); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + hashcode = (hashcode * 397) + ArrayEntry.GetHashCode(); + } + if((MapEntry != null) && __isset.mapEntry) + { + hashcode = (hashcode * 397) + MapEntry.GetHashCode(); + } + if((StructEntry != null) && __isset.structEntry) + { + hashcode = (hashcode * 397) + StructEntry.GetHashCode(); + } + if((UnionEntry != null) && __isset.unionEntry) + { + hashcode = (hashcode * 397) + UnionEntry.GetHashCode(); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + hashcode = (hashcode * 397) + UserDefinedTypeEntry.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp58 = new StringBuilder("TTypeEntry("); + int tmp59 = 0; + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("PrimitiveEntry: "); + PrimitiveEntry.ToString(tmp58); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("ArrayEntry: "); + ArrayEntry.ToString(tmp58); + } + if((MapEntry != null) && __isset.mapEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("MapEntry: "); + MapEntry.ToString(tmp58); + } + if((StructEntry != null) && __isset.structEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("StructEntry: "); + StructEntry.ToString(tmp58); + } + if((UnionEntry != null) && __isset.unionEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("UnionEntry: "); + UnionEntry.ToString(tmp58); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("UserDefinedTypeEntry: "); + UserDefinedTypeEntry.ToString(tmp58); + } + tmp58.Append(')'); + return tmp58.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs new file mode 100644 index 0000000000..61f7c44efc --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs @@ -0,0 +1,43 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TTypeId + { + BOOLEAN_TYPE = 0, + TINYINT_TYPE = 1, + SMALLINT_TYPE = 2, + INT_TYPE = 3, + BIGINT_TYPE = 4, + FLOAT_TYPE = 5, + DOUBLE_TYPE = 6, + STRING_TYPE = 7, + TIMESTAMP_TYPE = 8, + BINARY_TYPE = 9, + ARRAY_TYPE = 10, + MAP_TYPE = 11, + STRUCT_TYPE = 12, + UNION_TYPE = 13, + USER_DEFINED_TYPE = 14, + DECIMAL_TYPE = 15, + NULL_TYPE = 16, + DATE_TYPE = 17, + VARCHAR_TYPE = 18, + CHAR_TYPE = 19, + INTERVAL_YEAR_MONTH_TYPE = 20, + INTERVAL_DAY_TIME_TYPE = 21, + TIMESTAMPLOCALTZ_TYPE = 22, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs new file mode 100644 index 0000000000..6e0bc6da80 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs @@ -0,0 +1,228 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeQualifierValue : TBase + { + private int _i32Value; + private string _stringValue; + + public int I32Value + { + get + { + return _i32Value; + } + set + { + __isset.i32Value = true; + this._i32Value = value; + } + } + + public string StringValue + { + get + { + return _stringValue; + } + set + { + __isset.stringValue = true; + this._stringValue = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool i32Value; + public bool stringValue; + } + + public TTypeQualifierValue() + { + } + + public TTypeQualifierValue DeepCopy() + { + var tmp0 = new TTypeQualifierValue(); + if(__isset.i32Value) + { + tmp0.I32Value = this.I32Value; + } + tmp0.__isset.i32Value = this.__isset.i32Value; + if((StringValue != null) && __isset.stringValue) + { + tmp0.StringValue = this.StringValue; + } + tmp0.__isset.stringValue = this.__isset.stringValue; + return tmp0; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + I32Value = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + StringValue = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1 = new TStruct("TTypeQualifierValue"); + await oprot.WriteStructBeginAsync(tmp1, cancellationToken); + var tmp2 = new TField(); + if(__isset.i32Value) + { + tmp2.Name = "i32Value"; + tmp2.Type = TType.I32; + tmp2.ID = 1; + await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); + await oprot.WriteI32Async(I32Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringValue != null) && __isset.stringValue) + { + tmp2.Name = "stringValue"; + tmp2.Type = TType.String; + tmp2.ID = 2; + await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); + await oprot.WriteStringAsync(StringValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeQualifierValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.i32Value == other.__isset.i32Value) && ((!__isset.i32Value) || (global::System.Object.Equals(I32Value, other.I32Value)))) + && ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.i32Value) + { + hashcode = (hashcode * 397) + I32Value.GetHashCode(); + } + if((StringValue != null) && __isset.stringValue) + { + hashcode = (hashcode * 397) + StringValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp3 = new StringBuilder("TTypeQualifierValue("); + int tmp4 = 0; + if(__isset.i32Value) + { + if(0 < tmp4++) { tmp3.Append(", "); } + tmp3.Append("I32Value: "); + I32Value.ToString(tmp3); + } + if((StringValue != null) && __isset.stringValue) + { + if(0 < tmp4++) { tmp3.Append(", "); } + tmp3.Append("StringValue: "); + StringValue.ToString(tmp3); + } + tmp3.Append(')'); + return tmp3.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs new file mode 100644 index 0000000000..31dee30ad0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs @@ -0,0 +1,186 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeQualifiers : TBase + { + + public Dictionary Qualifiers { get; set; } + + public TTypeQualifiers() + { + } + + public TTypeQualifiers(Dictionary qualifiers) : this() + { + this.Qualifiers = qualifiers; + } + + public TTypeQualifiers DeepCopy() + { + var tmp5 = new TTypeQualifiers(); + if((Qualifiers != null)) + { + tmp5.Qualifiers = this.Qualifiers.DeepCopy(); + } + return tmp5; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_qualifiers = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map6 = await iprot.ReadMapBeginAsync(cancellationToken); + Qualifiers = new Dictionary(_map6.Count); + for(int _i7 = 0; _i7 < _map6.Count; ++_i7) + { + string _key8; + global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue _val9; + _key8 = await iprot.ReadStringAsync(cancellationToken); + _val9 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue(); + await _val9.ReadAsync(iprot, cancellationToken); + Qualifiers[_key8] = _val9; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_qualifiers = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_qualifiers) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp10 = new TStruct("TTypeQualifiers"); + await oprot.WriteStructBeginAsync(tmp10, cancellationToken); + var tmp11 = new TField(); + if((Qualifiers != null)) + { + tmp11.Name = "qualifiers"; + tmp11.Type = TType.Map; + tmp11.ID = 1; + await oprot.WriteFieldBeginAsync(tmp11, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, Qualifiers.Count), cancellationToken); + foreach (string _iter12 in Qualifiers.Keys) + { + await oprot.WriteStringAsync(_iter12, cancellationToken); + await Qualifiers[_iter12].WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeQualifiers other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Qualifiers, other.Qualifiers); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Qualifiers != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Qualifiers); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp13 = new StringBuilder("TTypeQualifiers("); + if((Qualifiers != null)) + { + tmp13.Append(", Qualifiers: "); + Qualifiers.ToString(tmp13); + } + tmp13.Append(')'); + return tmp13.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs new file mode 100644 index 0000000000..6c4c42d9e3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUnionTypeEntry : TBase + { + + public Dictionary NameToTypePtr { get; set; } + + public TUnionTypeEntry() + { + } + + public TUnionTypeEntry(Dictionary nameToTypePtr) : this() + { + this.NameToTypePtr = nameToTypePtr; + } + + public TUnionTypeEntry DeepCopy() + { + var tmp40 = new TUnionTypeEntry(); + if((NameToTypePtr != null)) + { + tmp40.NameToTypePtr = this.NameToTypePtr.DeepCopy(); + } + return tmp40; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_nameToTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map41 = await iprot.ReadMapBeginAsync(cancellationToken); + NameToTypePtr = new Dictionary(_map41.Count); + for(int _i42 = 0; _i42 < _map41.Count; ++_i42) + { + string _key43; + int _val44; + _key43 = await iprot.ReadStringAsync(cancellationToken); + _val44 = await iprot.ReadI32Async(cancellationToken); + NameToTypePtr[_key43] = _val44; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_nameToTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_nameToTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp45 = new TStruct("TUnionTypeEntry"); + await oprot.WriteStructBeginAsync(tmp45, cancellationToken); + var tmp46 = new TField(); + if((NameToTypePtr != null)) + { + tmp46.Name = "nameToTypePtr"; + tmp46.Type = TType.Map; + tmp46.ID = 1; + await oprot.WriteFieldBeginAsync(tmp46, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); + foreach (string _iter47 in NameToTypePtr.Keys) + { + await oprot.WriteStringAsync(_iter47, cancellationToken); + await oprot.WriteI32Async(NameToTypePtr[_iter47], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUnionTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((NameToTypePtr != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp48 = new StringBuilder("TUnionTypeEntry("); + if((NameToTypePtr != null)) + { + tmp48.Append(", NameToTypePtr: "); + NameToTypePtr.ToString(tmp48); + } + tmp48.Append(')'); + return tmp48.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs new file mode 100644 index 0000000000..0af51fc483 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs @@ -0,0 +1,314 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUploadDataReq : TBase + { + private string _tableName; + private string _path; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string Path + { + get + { + return _path; + } + set + { + __isset.path = true; + this._path = value; + } + } + + public byte[] Values { get; set; } + + + public Isset __isset; + public struct Isset + { + public bool tableName; + public bool path; + } + + public TUploadDataReq() + { + } + + public TUploadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, byte[] values) : this() + { + this.SessionHandle = sessionHandle; + this.Values = values; + } + + public TUploadDataReq DeepCopy() + { + var tmp430 = new TUploadDataReq(); + if((SessionHandle != null)) + { + tmp430.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((TableName != null) && __isset.tableName) + { + tmp430.TableName = this.TableName; + } + tmp430.__isset.tableName = this.__isset.tableName; + if((Path != null) && __isset.path) + { + tmp430.Path = this.Path; + } + tmp430.__isset.path = this.__isset.path; + if((Values != null)) + { + tmp430.Values = this.Values.ToArray(); + } + return tmp430; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_values = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Path = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Values = await iprot.ReadBinaryAsync(cancellationToken); + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp431 = new TStruct("TUploadDataReq"); + await oprot.WriteStructBeginAsync(tmp431, cancellationToken); + var tmp432 = new TField(); + if((SessionHandle != null)) + { + tmp432.Name = "sessionHandle"; + tmp432.Type = TType.Struct; + tmp432.ID = 1; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp432.Name = "tableName"; + tmp432.Type = TType.String; + tmp432.ID = 2; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Path != null) && __isset.path) + { + tmp432.Name = "path"; + tmp432.Type = TType.String; + tmp432.ID = 3; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteStringAsync(Path, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Values != null)) + { + tmp432.Name = "values"; + tmp432.Type = TType.String; + tmp432.ID = 4; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteBinaryAsync(Values, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUploadDataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.path == other.__isset.path) && ((!__isset.path) || (global::System.Object.Equals(Path, other.Path)))) + && TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((Path != null) && __isset.path) + { + hashcode = (hashcode * 397) + Path.GetHashCode(); + } + if((Values != null)) + { + hashcode = (hashcode * 397) + Values.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp433 = new StringBuilder("TUploadDataReq("); + if((SessionHandle != null)) + { + tmp433.Append(", SessionHandle: "); + SessionHandle.ToString(tmp433); + } + if((TableName != null) && __isset.tableName) + { + tmp433.Append(", TableName: "); + TableName.ToString(tmp433); + } + if((Path != null) && __isset.path) + { + tmp433.Append(", Path: "); + Path.ToString(tmp433); + } + if((Values != null)) + { + tmp433.Append(", Values: "); + Values.ToString(tmp433); + } + tmp433.Append(')'); + return tmp433.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs new file mode 100644 index 0000000000..1855089d7c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUploadDataResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TUploadDataResp() + { + } + + public TUploadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.Status = status; + this.OperationHandle = operationHandle; + } + + public TUploadDataResp DeepCopy() + { + var tmp435 = new TUploadDataResp(); + if((Status != null)) + { + tmp435.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null)) + { + tmp435.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp435; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp436 = new TStruct("TUploadDataResp"); + await oprot.WriteStructBeginAsync(tmp436, cancellationToken); + var tmp437 = new TField(); + if((Status != null)) + { + tmp437.Name = "status"; + tmp437.Type = TType.Struct; + tmp437.ID = 1; + await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null)) + { + tmp437.Name = "operationHandle"; + tmp437.Type = TType.Struct; + tmp437.ID = 2; + await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUploadDataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp438 = new StringBuilder("TUploadDataResp("); + if((Status != null)) + { + tmp438.Append(", Status: "); + Status.ToString(tmp438); + } + if((OperationHandle != null)) + { + tmp438.Append(", OperationHandle: "); + OperationHandle.ToString(tmp438); + } + tmp438.Append(')'); + return tmp438.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs new file mode 100644 index 0000000000..67a522e8c7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs @@ -0,0 +1,167 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUserDefinedTypeEntry : TBase + { + + public string TypeClassName { get; set; } + + public TUserDefinedTypeEntry() + { + } + + public TUserDefinedTypeEntry(string typeClassName) : this() + { + this.TypeClassName = typeClassName; + } + + public TUserDefinedTypeEntry DeepCopy() + { + var tmp50 = new TUserDefinedTypeEntry(); + if((TypeClassName != null)) + { + tmp50.TypeClassName = this.TypeClassName; + } + return tmp50; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_typeClassName = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + TypeClassName = await iprot.ReadStringAsync(cancellationToken); + isset_typeClassName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_typeClassName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp51 = new TStruct("TUserDefinedTypeEntry"); + await oprot.WriteStructBeginAsync(tmp51, cancellationToken); + var tmp52 = new TField(); + if((TypeClassName != null)) + { + tmp52.Name = "typeClassName"; + tmp52.Type = TType.String; + tmp52.ID = 1; + await oprot.WriteFieldBeginAsync(tmp52, cancellationToken); + await oprot.WriteStringAsync(TypeClassName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUserDefinedTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(TypeClassName, other.TypeClassName); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((TypeClassName != null)) + { + hashcode = (hashcode * 397) + TypeClassName.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp53 = new StringBuilder("TUserDefinedTypeEntry("); + if((TypeClassName != null)) + { + tmp53.Append(", TypeClassName: "); + TypeClassName.ToString(tmp53); + } + tmp53.Append(')'); + return tmp53.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs new file mode 100644 index 0000000000..2289172929 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs @@ -0,0 +1,17 @@ +using System.IO; +using Thrift; +using Thrift.Transport.Client; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + class ThriftSocketTransport : TSocketTransport, IPeekableTransport + { + public ThriftSocketTransport(string host, int port, TConfiguration config, int timeout = 0) + : base(host, port, config, timeout) + { + } + + public Stream Input { get { return this.InputStream; } } + public Stream Output { get { return this.InputStream; } } + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/Apache.Arrow.Adbc.FlightSql.csproj b/csharp/src/Drivers/FlightSql/Apache.Arrow.Adbc.Drivers.FlightSql.csproj similarity index 81% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/Apache.Arrow.Adbc.FlightSql.csproj rename to csharp/src/Drivers/FlightSql/Apache.Arrow.Adbc.Drivers.FlightSql.csproj index c60d4e0cdf..7f8db56f56 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/Apache.Arrow.Adbc.FlightSql.csproj +++ b/csharp/src/Drivers/FlightSql/Apache.Arrow.Adbc.Drivers.FlightSql.csproj @@ -1,16 +1,16 @@ - - - - netstandard2.0;net6.0 - - - - - - - - - - - - + + + + netstandard2.0;net6.0 + + + + + + + + + + + + diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlConnection.cs b/csharp/src/Drivers/FlightSql/FlightSqlConnection.cs similarity index 95% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlConnection.cs rename to csharp/src/Drivers/FlightSql/FlightSqlConnection.cs index ce6cf8f333..70b326bc87 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlConnection.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlConnection.cs @@ -1,92 +1,97 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using System.Collections.Generic; -using Apache.Arrow.Flight.Client; -using Grpc.Core; -using Grpc.Net.Client; - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// A Flight SQL implementation of . - /// - public class FlightSqlConnection : AdbcConnection - { - private FlightClient _flightClientInternal = null; - private readonly IReadOnlyDictionary _metadata; - - private Metadata headers = null; - - public FlightSqlConnection(IReadOnlyDictionary metadata) - { - _metadata = metadata; - } - - internal FlightClient FlightClient - { - get => _flightClientInternal; - } - - internal Metadata Metadata - { - get => GetMetaData(); - } - - private Metadata GetMetaData() - { - if (headers is null) - { - headers = new Metadata(); - - foreach (string key in _metadata.Keys) - { - headers.Add(key, _metadata[key]); - } - } - - return headers; - } - - public void Open(string uri) - { -#if NETSTANDARD // and Win11 or later --> https://learn.microsoft.com/en-us/aspnet/core/grpc/netstandard?view=aspnetcore-7.0#net-framework - - var channel = GrpcChannel.ForAddress(uri, new GrpcChannelOptions - { - HttpHandler = new System.Net.Http.WinHttpHandler() - { - ReceiveDataTimeout = TimeSpan.FromMinutes(5), - SendTimeout = TimeSpan.FromMinutes(5), - ReceiveHeadersTimeout = TimeSpan.FromMinutes(5) - }, - - }); - - _flightClientInternal = new FlightClient(channel); -#else - _flightClientInternal = new FlightClient(GrpcChannel.ForAddress(uri)); -#endif - } - - public override AdbcStatement CreateStatement() - { - return new FlightSqlStatement(this); - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Flight.Client; +using Grpc.Core; +using Grpc.Net.Client; + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// A Flight SQL implementation of . + /// + public class FlightSqlConnection : AdbcConnection + { + private FlightClient _flightClientInternal = null; + private readonly IReadOnlyDictionary _metadata; + + private Metadata headers = null; + + public FlightSqlConnection() : this(null) + { + + } + + public FlightSqlConnection(IReadOnlyDictionary metadata) + { + _metadata = metadata; + } + + internal FlightClient FlightClient + { + get => _flightClientInternal; + } + + internal Metadata Metadata + { + get => GetMetaData(); + } + + private Metadata GetMetaData() + { + if (headers is null) + { + headers = new Metadata(); + + foreach (string key in _metadata.Keys) + { + headers.Add(key, _metadata[key]); + } + } + + return headers; + } + + public void Open(string uri) + { +#if NETSTANDARD // and Win11 or later --> https://learn.microsoft.com/en-us/aspnet/core/grpc/netstandard?view=aspnetcore-7.0#net-framework + + var channel = GrpcChannel.ForAddress(uri, new GrpcChannelOptions + { + HttpHandler = new System.Net.Http.WinHttpHandler() + { + ReceiveDataTimeout = TimeSpan.FromMinutes(5), + SendTimeout = TimeSpan.FromMinutes(5), + ReceiveHeadersTimeout = TimeSpan.FromMinutes(5) + }, + + }); + + _flightClientInternal = new FlightClient(channel); +#else + _flightClientInternal = new FlightClient(GrpcChannel.ForAddress(uri)); +#endif + } + + public override AdbcStatement CreateStatement() + { + return new FlightSqlStatement(this); + } + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDatabase.cs b/csharp/src/Drivers/FlightSql/FlightSqlDatabase.cs similarity index 95% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDatabase.cs rename to csharp/src/Drivers/FlightSql/FlightSqlDatabase.cs index 08d8d2bf82..79d5248e5a 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDatabase.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlDatabase.cs @@ -1,53 +1,53 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// A Flight SQL implementation of . - /// - public class FlightSqlDatabase : AdbcDatabase - { - private readonly IReadOnlyDictionary _metadata; - - public FlightSqlDatabase(IReadOnlyDictionary metadata) - { - _metadata = metadata; - } - - public override AdbcConnection Connect(IReadOnlyDictionary options) - { - if (options == null) throw new ArgumentNullException("options"); - - string flightSqlServerAddress = string.Empty; - - if (options.TryGetValue(FlightSqlParameters.ServerAddress, out flightSqlServerAddress)) - { - FlightSqlConnection connection = new FlightSqlConnection(_metadata); - connection.Open(flightSqlServerAddress); - return connection; - } - else - { - throw new ArgumentException($"Options must include the {FlightSqlParameters.ServerAddress} parameter"); - } - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// A Flight SQL implementation of . + /// + public class FlightSqlDatabase : AdbcDatabase + { + private readonly IReadOnlyDictionary _metadata; + + public FlightSqlDatabase(IReadOnlyDictionary metadata) + { + _metadata = metadata; + } + + public override AdbcConnection Connect(IReadOnlyDictionary options) + { + if (options == null) throw new ArgumentNullException("options"); + + string flightSqlServerAddress = string.Empty; + + if (options.TryGetValue(FlightSqlParameters.ServerAddress, out flightSqlServerAddress)) + { + FlightSqlConnection connection = new FlightSqlConnection(_metadata); + connection.Open(flightSqlServerAddress); + return connection; + } + else + { + throw new ArgumentException($"Options must include the {FlightSqlParameters.ServerAddress} parameter"); + } + } + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDriver.cs b/csharp/src/Drivers/FlightSql/FlightSqlDriver.cs similarity index 94% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDriver.cs rename to csharp/src/Drivers/FlightSql/FlightSqlDriver.cs index afcaf3f3fd..f0a8ad4867 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlDriver.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlDriver.cs @@ -1,33 +1,33 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// Represents an Arrpw Flight SQL driver for connecting to - /// data sources that support Arrow Flight SQL. - /// - public class FlightSqlDriver : AdbcDriver - { - public override AdbcDatabase Open(IReadOnlyDictionary parameters) - { - return new FlightSqlDatabase(parameters); - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// Represents an Arrpw Flight SQL driver for connecting to + /// data sources that support Arrow Flight SQL. + /// + public class FlightSqlDriver : AdbcDriver + { + public override AdbcDatabase Open(IReadOnlyDictionary parameters) + { + return new FlightSqlDatabase(parameters); + } + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlParameters.cs b/csharp/src/Drivers/FlightSql/FlightSqlParameters.cs similarity index 94% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlParameters.cs rename to csharp/src/Drivers/FlightSql/FlightSqlParameters.cs index b301c23d69..0bbafd9a92 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlParameters.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlParameters.cs @@ -1,30 +1,30 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// Parameters used for connecting to Flight SQL data sources. - /// - public class FlightSqlParameters - { - public const string ServerAddress = "FLIGHT_SQL_SERVER_ADDRESS"; - public const string RoutingTag = "routing_tag"; - public const string RoutingQueue = "routing_queue"; - public const string Authorization = "authorization"; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// Parameters used for connecting to Flight SQL data sources. + /// + public class FlightSqlParameters + { + public const string ServerAddress = "FLIGHT_SQL_SERVER_ADDRESS"; + public const string RoutingTag = "routing_tag"; + public const string RoutingQueue = "routing_queue"; + public const string Authorization = "authorization"; + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlResult.cs b/csharp/src/Drivers/FlightSql/FlightSqlResult.cs similarity index 96% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlResult.cs rename to csharp/src/Drivers/FlightSql/FlightSqlResult.cs index 3b68579b3d..6cec5ecccf 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlResult.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlResult.cs @@ -1,79 +1,79 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Flight; -using Apache.Arrow.Flight.Client; -using Apache.Arrow.Ipc; - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// A Flight SQL implementation of . - /// - internal class FlightSqlResult : IArrowArrayStream - { - private FlightClientRecordBatchStreamReader _recordBatchStreamReader; - - private readonly FlightInfo _flightInfo; - private readonly FlightSqlConnection _flightSqlConnection; - private readonly int _maxEndPoints = 0; - private int _currentEndPointIndex = -1; - - public FlightSqlResult(FlightSqlConnection flightSqlConnection, FlightInfo flightInfo) - { - _flightSqlConnection = flightSqlConnection; - _flightInfo = flightInfo; - _maxEndPoints = flightInfo.Endpoints.Count; - } - - public Schema Schema { get { return _flightInfo.Schema; } } - - public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - if (_recordBatchStreamReader is null) - { - RefreshRecordBatchStreamReader(); - } - - if (await _recordBatchStreamReader.MoveNext(cancellationToken)) - { - return _recordBatchStreamReader.Current; - } - else if (_currentEndPointIndex < _maxEndPoints - 1) - { - _recordBatchStreamReader = default; - - return await ReadNextRecordBatchAsync(cancellationToken); - } - return default; - } - - public void Dispose() - { - _recordBatchStreamReader?.Dispose(); - _flightSqlConnection.Dispose(); - } - - private void RefreshRecordBatchStreamReader() - { - _currentEndPointIndex += 1; - _recordBatchStreamReader = _flightSqlConnection.FlightClient.GetStream(_flightInfo.Endpoints[_currentEndPointIndex].Ticket, _flightSqlConnection.Metadata).ResponseStream; - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Flight; +using Apache.Arrow.Flight.Client; +using Apache.Arrow.Ipc; + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// A Flight SQL implementation of . + /// + internal class FlightSqlResult : IArrowArrayStream + { + private FlightClientRecordBatchStreamReader _recordBatchStreamReader; + + private readonly FlightInfo _flightInfo; + private readonly FlightSqlConnection _flightSqlConnection; + private readonly int _maxEndPoints = 0; + private int _currentEndPointIndex = -1; + + public FlightSqlResult(FlightSqlConnection flightSqlConnection, FlightInfo flightInfo) + { + _flightSqlConnection = flightSqlConnection; + _flightInfo = flightInfo; + _maxEndPoints = flightInfo.Endpoints.Count; + } + + public Schema Schema { get { return _flightInfo.Schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + if (_recordBatchStreamReader is null) + { + RefreshRecordBatchStreamReader(); + } + + if (await _recordBatchStreamReader.MoveNext(cancellationToken)) + { + return _recordBatchStreamReader.Current; + } + else if (_currentEndPointIndex < _maxEndPoints - 1) + { + _recordBatchStreamReader = default; + + return await ReadNextRecordBatchAsync(cancellationToken); + } + return default; + } + + public void Dispose() + { + _recordBatchStreamReader?.Dispose(); + _flightSqlConnection.Dispose(); + } + + private void RefreshRecordBatchStreamReader() + { + _currentEndPointIndex += 1; + _recordBatchStreamReader = _flightSqlConnection.FlightClient.GetStream(_flightInfo.Endpoints[_currentEndPointIndex].Ticket, _flightSqlConnection.Metadata).ResponseStream; + } + } +} diff --git a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlStatement.cs b/csharp/src/Drivers/FlightSql/FlightSqlStatement.cs similarity index 96% rename from csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlStatement.cs rename to csharp/src/Drivers/FlightSql/FlightSqlStatement.cs index 99c8cdf068..ebe8fb4b93 100644 --- a/csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlStatement.cs +++ b/csharp/src/Drivers/FlightSql/FlightSqlStatement.cs @@ -1,233 +1,233 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using Apache.Arrow.Flight; -using Grpc.Core; - -namespace Apache.Arrow.Adbc.FlightSql -{ - /// - /// A Flight SQL implementation of . - /// - public class FlightSqlStatement : AdbcStatement - { - private FlightSqlConnection _flightSqlConnection; - - public FlightSqlStatement(FlightSqlConnection flightSqlConnection) - { - _flightSqlConnection = flightSqlConnection; - } - - public override async ValueTask ExecuteQueryAsync() - { - FlightInfo info = await GetInfo(SqlQuery, _flightSqlConnection.Metadata); - - return new QueryResult(info.TotalRecords, new FlightSqlResult(_flightSqlConnection, info)); - } - - public override QueryResult ExecuteQuery() - { - return ExecuteQueryAsync().Result; - } - - public override UpdateResult ExecuteUpdate() - { - throw new NotImplementedException(); - } - - public async ValueTask GetInfo(string query, Metadata headers) - { - FlightDescriptor commandDescripter = FlightDescriptor.CreateCommandDescriptor(query); - - return await _flightSqlConnection.FlightClient.GetInfo(commandDescripter, headers).ResponseAsync; - } - - /// - /// Gets a value from the Arrow array at the specified index - /// using the Arrow field for metadata. - /// - /// - /// The array containing the value. - /// - /// - /// The Arrow field. - /// - /// - /// The index of the item. - /// - /// - /// The item at the index position. - /// - public override object GetValue(IArrowArray arrowArray, Field field, int index) - { - if (arrowArray is BooleanArray) - { - return Convert.ToBoolean(((BooleanArray)arrowArray).Values[index]); - } - else if (arrowArray is Date32Array) - { - Date32Array date32Array = (Date32Array)arrowArray; - - return date32Array.GetDateTime(index); - } - else if (arrowArray is Date64Array) - { - Date64Array date64Array = (Date64Array)arrowArray; - - return date64Array.GetDateTime(index); - } - else if (arrowArray is Decimal128Array) - { - try - { - // the value may be decimal.max - // then Arrow throws an exception - // no good way to check prior to - return ((Decimal128Array)arrowArray).GetValue(index); - } - catch (OverflowException oex) - { - return ParseDecimalValueFromOverflowException(oex); - } - } - else if (arrowArray is Decimal256Array) - { - try - { - return ((Decimal256Array)arrowArray).GetValue(index); - } - catch (OverflowException oex) - { - return ParseDecimalValueFromOverflowException(oex); - } - } - else if (arrowArray is DoubleArray) - { - return ((DoubleArray)arrowArray).GetValue(index); - } - else if (arrowArray is FloatArray) - { - return ((FloatArray)arrowArray).GetValue(index); - } -#if NET5_0_OR_GREATER - else if (arrowArray is PrimitiveArray) - { - // TODO: HalfFloatArray not present in current library - - return ((PrimitiveArray)arrowArray).GetValue(index); - } -#endif - else if (arrowArray is Int8Array) - { - return ((Int8Array)arrowArray).GetValue(index); - } - else if (arrowArray is Int16Array) - { - return ((Int16Array)arrowArray).GetValue(index); - } - else if (arrowArray is Int32Array) - { - return ((Int32Array)arrowArray).GetValue(index); - } - else if (arrowArray is Int64Array) - { - Int64Array array = (Int64Array)arrowArray; - return array.GetValue(index); - } - else if (arrowArray is StringArray) - { - return ((StringArray)arrowArray).GetString(index); - } - else if (arrowArray is Time32Array) - { - return ((Time32Array)arrowArray).GetValue(index); - } - else if (arrowArray is Time64Array) - { - return ((Time64Array)arrowArray).GetValue(index); - } - else if (arrowArray is TimestampArray) - { - TimestampArray timestampArray = (TimestampArray)arrowArray; - DateTimeOffset dateTimeOffset = timestampArray.GetTimestamp(index).Value; - return dateTimeOffset; - } - else if (arrowArray is UInt8Array) - { - return ((UInt8Array)arrowArray).GetValue(index); - } - else if (arrowArray is UInt16Array) - { - return ((UInt16Array)arrowArray).GetValue(index); - } - else if (arrowArray is UInt32Array) - { - return ((UInt32Array)arrowArray).GetValue(index); - } - else if (arrowArray is UInt64Array) - { - return ((UInt64Array)arrowArray).GetValue(index); - } - - // not covered: - // -- struct array - // -- binary array - // -- dictionary array - // -- fixed size binary - // -- list array - // -- union array - - return null; - } - - /// - /// For decimals, Arrow throws an OverflowException if a value - /// is < decimal.min or > decimal.max - /// So parse the numeric value and return it as a string, - /// if possible - /// - /// The OverflowException - /// - /// A string value of the decimal that threw the exception - /// or rethrows the OverflowException. - /// - /// - private string ParseDecimalValueFromOverflowException(OverflowException oex) - { - if (oex == null) - throw new ArgumentNullException(nameof(oex)); - - // any decimal value, positive or negative, with or without a decimal in place - Regex regex = new Regex(" -?\\d*\\.?\\d* "); - - var matches = regex.Matches(oex.Message); - - foreach (Match match in matches) - { - string value = match.Value; - - if (!string.IsNullOrEmpty(value)) - return value; - } - - throw oex; - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Apache.Arrow.Flight; +using Grpc.Core; + +namespace Apache.Arrow.Adbc.Drivers.FlightSql +{ + /// + /// A Flight SQL implementation of . + /// + public class FlightSqlStatement : AdbcStatement + { + private FlightSqlConnection _flightSqlConnection; + + public FlightSqlStatement(FlightSqlConnection flightSqlConnection) + { + _flightSqlConnection = flightSqlConnection; + } + + public override async ValueTask ExecuteQueryAsync() + { + FlightInfo info = await GetInfo(SqlQuery, _flightSqlConnection.Metadata); + + return new QueryResult(info.TotalRecords, new FlightSqlResult(_flightSqlConnection, info)); + } + + public override QueryResult ExecuteQuery() + { + return ExecuteQueryAsync().Result; + } + + public override UpdateResult ExecuteUpdate() + { + throw new NotImplementedException(); + } + + public async ValueTask GetInfo(string query, Metadata headers) + { + FlightDescriptor commandDescripter = FlightDescriptor.CreateCommandDescriptor(query); + + return await _flightSqlConnection.FlightClient.GetInfo(commandDescripter, headers).ResponseAsync; + } + + /// + /// Gets a value from the Arrow array at the specified index + /// using the Arrow field for metadata. + /// + /// + /// The array containing the value. + /// + /// + /// The Arrow field. + /// + /// + /// The index of the item. + /// + /// + /// The item at the index position. + /// + public override object GetValue(IArrowArray arrowArray, Field field, int index) + { + if (arrowArray is BooleanArray) + { + return Convert.ToBoolean(((BooleanArray)arrowArray).Values[index]); + } + else if (arrowArray is Date32Array) + { + Date32Array date32Array = (Date32Array)arrowArray; + + return date32Array.GetDateTime(index); + } + else if (arrowArray is Date64Array) + { + Date64Array date64Array = (Date64Array)arrowArray; + + return date64Array.GetDateTime(index); + } + else if (arrowArray is Decimal128Array) + { + try + { + // the value may be decimal.max + // then Arrow throws an exception + // no good way to check prior to + return ((Decimal128Array)arrowArray).GetValue(index); + } + catch (OverflowException oex) + { + return ParseDecimalValueFromOverflowException(oex); + } + } + else if (arrowArray is Decimal256Array) + { + try + { + return ((Decimal256Array)arrowArray).GetValue(index); + } + catch (OverflowException oex) + { + return ParseDecimalValueFromOverflowException(oex); + } + } + else if (arrowArray is DoubleArray) + { + return ((DoubleArray)arrowArray).GetValue(index); + } + else if (arrowArray is FloatArray) + { + return ((FloatArray)arrowArray).GetValue(index); + } +#if NET5_0_OR_GREATER + else if (arrowArray is PrimitiveArray) + { + // TODO: HalfFloatArray not present in current library + + return ((PrimitiveArray)arrowArray).GetValue(index); + } +#endif + else if (arrowArray is Int8Array) + { + return ((Int8Array)arrowArray).GetValue(index); + } + else if (arrowArray is Int16Array) + { + return ((Int16Array)arrowArray).GetValue(index); + } + else if (arrowArray is Int32Array) + { + return ((Int32Array)arrowArray).GetValue(index); + } + else if (arrowArray is Int64Array) + { + Int64Array array = (Int64Array)arrowArray; + return array.GetValue(index); + } + else if (arrowArray is StringArray) + { + return ((StringArray)arrowArray).GetString(index); + } + else if (arrowArray is Time32Array) + { + return ((Time32Array)arrowArray).GetValue(index); + } + else if (arrowArray is Time64Array) + { + return ((Time64Array)arrowArray).GetValue(index); + } + else if (arrowArray is TimestampArray) + { + TimestampArray timestampArray = (TimestampArray)arrowArray; + DateTimeOffset dateTimeOffset = timestampArray.GetTimestamp(index).Value; + return dateTimeOffset; + } + else if (arrowArray is UInt8Array) + { + return ((UInt8Array)arrowArray).GetValue(index); + } + else if (arrowArray is UInt16Array) + { + return ((UInt16Array)arrowArray).GetValue(index); + } + else if (arrowArray is UInt32Array) + { + return ((UInt32Array)arrowArray).GetValue(index); + } + else if (arrowArray is UInt64Array) + { + return ((UInt64Array)arrowArray).GetValue(index); + } + + // not covered: + // -- struct array + // -- binary array + // -- dictionary array + // -- fixed size binary + // -- list array + // -- union array + + return null; + } + + /// + /// For decimals, Arrow throws an OverflowException if a value + /// is < decimal.min or > decimal.max + /// So parse the numeric value and return it as a string, + /// if possible + /// + /// The OverflowException + /// + /// A string value of the decimal that threw the exception + /// or rethrows the OverflowException. + /// + /// + private string ParseDecimalValueFromOverflowException(OverflowException oex) + { + if (oex == null) + throw new ArgumentNullException(nameof(oex)); + + // any decimal value, positive or negative, with or without a decimal in place + Regex regex = new Regex(" -?\\d*\\.?\\d* "); + + var matches = regex.Matches(oex.Message); + + foreach (Match match in matches) + { + string value = match.Value; + + if (!string.IsNullOrEmpty(value)) + return value; + } + + throw oex; + } + } +} diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Utils.cs b/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Utils.cs deleted file mode 100644 index ac7c46f31c..0000000000 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Utils.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; -using System.IO; -using Apache.Arrow.Ipc; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace Apache.Arrow.Adbc.FlightSql.Tests -{ - internal class Utils - { - /// - /// Loads record batches from an arrow file. - /// - public static List LoadTestRecordBatches() - { - // this file was generated from the Flight SQL data source - string file = "flightsql.arrow"; - - Assert.IsTrue(File.Exists(file), $"Cannot find {file}"); - - List recordBatches = new List(); - - using (FileStream fs = new FileStream(file, FileMode.Open)) - using (ArrowFileReader reader = new ArrowFileReader(fs)) - { - int batches = reader.RecordBatchCountAsync().Result; - - for (int i = 0; i < batches; i++) - { - recordBatches.Add(reader.ReadNextRecordBatch()); - } - } - - return recordBatches; - } - } -} diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/Apache.Arrow.Adbc.Tests.csproj b/csharp/test/Apache.Arrow.Adbc.Tests/Apache.Arrow.Adbc.Tests.csproj index fc49de6691..ce5a13c9c9 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/Apache.Arrow.Adbc.Tests.csproj +++ b/csharp/test/Apache.Arrow.Adbc.Tests/Apache.Arrow.Adbc.Tests.csproj @@ -10,9 +10,11 @@ + + diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestConfiguration.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestConfiguration.cs new file mode 100644 index 0000000000..abb266fd0d --- /dev/null +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestConfiguration.cs @@ -0,0 +1,30 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Text.Json.Serialization; + +namespace Apache.Arrow.Adbc.Tests +{ + public abstract class TestConfiguration + { + [JsonPropertyName("query")] + public string Query { get; set; } + + [JsonPropertyName("expectedResults")] + public long ExpectedResultsCount { get; set; } + } +} diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs index 3ceabd530e..7d5ebbf24d 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs @@ -60,7 +60,14 @@ public static void VerifyTypesAndValues(List actualArrays, List + /// Writes record batches to an arrow file. + /// + /// The path of the arrow file. + /// + /// This method can be used during the generation of Arrow files for use in tests, but may + /// not have references to it in the solution. + /// + public static void WriteTestRecordBatches(List recordBatches, string file) + { + if(recordBatches == null || recordBatches.Count == 0) + { + throw new ArgumentException("recordBatches must have at least one batch"); + } + + Schema schema = recordBatches[0].Schema; + + Assert.IsFalse(File.Exists(file), $"Cannot overwrite {file}"); + + using (FileStream fs = new FileStream(file, FileMode.CreateNew)) + using (ArrowFileWriter writer = new ArrowFileWriter(fs, schema)) + { + writer.WriteStart(); + + foreach (RecordBatch batch in recordBatches) + { + writer.WriteRecordBatch(batch); + } + + writer.WriteEnd(); + } + } + + /// + /// Loads record batches from an arrow file. + /// + /// The path of the arrow file. + public static List LoadTestRecordBatches(string file) + { + Assert.IsTrue(File.Exists(file), $"Cannot find {file}"); + + List recordBatches = new List(); + + using (FileStream fs = new FileStream(file, FileMode.Open)) + using (ArrowFileReader reader = new ArrowFileReader(fs)) + { + int batches = reader.RecordBatchCountAsync().Result; + + for (int i = 0; i < batches; i++) + { + recordBatches.Add(reader.ReadNextRecordBatch()); + } + } + + return recordBatches; + } + + /// + /// Loads a Statement with mocked results. + /// + public static Mock GetMockStatement(string file, int expectedResults) + { + List recordBatches = LoadTestRecordBatches(file); + + Schema s = recordBatches.First().Schema; + QueryResult mockQueryResult = new QueryResult(expectedResults, new MockArrayStream(s, recordBatches)); + + Mock mockSqlStatement = new Mock(); + mockSqlStatement.Setup(s => s.ExecuteQuery()).Returns(mockQueryResult); + + return mockSqlStatement; + } + + /// + /// Loads a test configuration + /// + /// + /// The path of the configuration file + /// T + public static T GetTestConfiguration(string fileName) + where T : TestConfiguration + { + // use a JSON file vs. setting up environment variables + string json = File.ReadAllText(fileName); + + T testConfiguration = JsonSerializer.Deserialize(json); + + return testConfiguration; + } + } +} diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj new file mode 100644 index 0000000000..4248bd6235 --- /dev/null +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -0,0 +1,37 @@ + + + + net7.0 + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs new file mode 100644 index 0000000000..2d419e77c1 --- /dev/null +++ b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs @@ -0,0 +1,37 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Text.Json.Serialization; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +{ + internal class ApacheTestConfiguration : TestConfiguration + { + [JsonPropertyName("hostName")] + public string HostName { get; set; } + + [JsonPropertyName("port")] + public string Port { get; set; } + + [JsonPropertyName("token"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string Token { get; set; } + + [JsonPropertyName("path"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string Path { get; set; } + + } +} diff --git a/csharp/test/Drivers/Apache/ImpalaTests.cs b/csharp/test/Drivers/Apache/ImpalaTests.cs new file mode 100644 index 0000000000..439c701a32 --- /dev/null +++ b/csharp/test/Drivers/Apache/ImpalaTests.cs @@ -0,0 +1,49 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Impala; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +{ + [TestClass] + public class ImpalaTests + { + [TestMethod] + public void CanDriverConnect() + { + ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("impalaconfig.json"); + + Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "HostName", testConfiguration.HostName }, + { "Port", testConfiguration.Port }, + }; + + AdbcDatabase database = new ImpalaDriver().Open(parameters); + AdbcConnection connection = database.Connect(new Dictionary()); + AdbcStatement statement = connection.CreateStatement(); + statement.SqlQuery = testConfiguration.Query; + QueryResult queryResult = statement.ExecuteQuery(); + + Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); + + } + } +} diff --git a/csharp/test/Drivers/Apache/SparkTests.cs b/csharp/test/Drivers/Apache/SparkTests.cs new file mode 100644 index 0000000000..91b85db0ae --- /dev/null +++ b/csharp/test/Drivers/Apache/SparkTests.cs @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Spark; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +{ + [TestClass] + public class SparkTests + { + /// + /// Validates if the driver behaves as it should with missing + /// values and parsing mock results. + /// + [TestMethod] + public void CanMockDriverConnect() + { + SparkDatabase db = new SparkDatabase(new Dictionary()); + + int expectedResultsCount = 46236; + + Mock mockStatement = Utils.GetMockStatement("spark.arrow", expectedResultsCount); + + Assert.ThrowsException(() => db.Connect(null)); + + Assert.ThrowsException(() => db.Connect(new Dictionary())); + + QueryResult queryResult = mockStatement.Object.ExecuteQuery(); + + Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, expectedResultsCount); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [TestMethod] + public void CanDriverConnect() + { + ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("sparkconfig.json"); + + Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "HostName", testConfiguration.HostName }, + { "Path", testConfiguration.Path }, + { "Token", testConfiguration.Token }, + }; + + AdbcDatabase database = new SparkDriver().Open(parameters); + AdbcConnection connection = database.Connect(new Dictionary()); + AdbcStatement statement = connection.CreateStatement(); + statement.SqlQuery = testConfiguration.Query; + + QueryResult queryResult = statement.ExecuteQuery(); + + Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); + } + } +} diff --git a/csharp/test/Drivers/Apache/SparkTypeTests.cs b/csharp/test/Drivers/Apache/SparkTypeTests.cs new file mode 100644 index 0000000000..81c550ac23 --- /dev/null +++ b/csharp/test/Drivers/Apache/SparkTypeTests.cs @@ -0,0 +1,99 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +{ + [TestClass] + public class SparkTypeTests + { + /// + /// Verify the types and values for the arrays + /// + [TestMethod] + public void VerifyTypesAndValues() + { + List recordBatches = Utils.LoadTestRecordBatches("spark.arrow"); + + RecordBatch recordBatch = recordBatches[0]; + + int totalRecords = recordBatches.Select(x => x.Length).Sum(); + + Assert.AreEqual(19, recordBatches.Count); + Assert.AreEqual(46236, totalRecords); + + var actualArrays = recordBatch.Arrays.ToList(); + + List expectedArrayTypes = new List() + { + typeof(StringArray), + typeof(StringArray), + typeof(StringArray), + typeof(DoubleArray), + typeof(DoubleArray), + typeof(DoubleArray), + typeof(StringArray), + typeof(StringArray), + typeof(StringArray), + typeof(StringArray), + typeof(StringArray), + typeof(StringArray), + typeof(StringArray) + }; + + List actualValues = new List() + { + ((StringArray)actualArrays[0]).GetString(0), + ((StringArray)actualArrays[1]).GetString(0), + ((StringArray)actualArrays[2]).GetString(0), + ((DoubleArray)actualArrays[3]).GetValue(0), + ((DoubleArray)actualArrays[4]).GetValue(0), + ((DoubleArray)actualArrays[5]).GetValue(0), + ((StringArray)actualArrays[6]).GetString(0), + ((StringArray)actualArrays[7]).GetString(0), + ((StringArray)actualArrays[8]).GetString(0), + ((StringArray)actualArrays[9]).GetString(0), + ((StringArray)actualArrays[10]).GetString(0), + ((StringArray)actualArrays[11]).GetString(0), + ((StringArray)actualArrays[12]).GetString(0), + }; + + List expectedValues = new List() + { + "CA-0020", + "closed", + "Algar Tower Airport", + 56.11666489, + -111.7666702, + null, + "NA", + "CA", + "CA-AB", + null, + null, + null, + null + }; + + Adbc.Tests.TypeTests.VerifyTypesAndValues(actualArrays, expectedArrayTypes, actualValues, expectedValues); + } + } +} diff --git a/csharp/test/Drivers/Apache/impalaconfig.json b/csharp/test/Drivers/Apache/impalaconfig.json new file mode 100644 index 0000000000..550fd3a97c --- /dev/null +++ b/csharp/test/Drivers/Apache/impalaconfig.json @@ -0,0 +1,6 @@ +{ + "hostName": "", + "port": "", + "query": "", + "expectedResults": 0 +} diff --git a/csharp/test/Drivers/Apache/spark.arrow b/csharp/test/Drivers/Apache/spark.arrow new file mode 100644 index 0000000000000000000000000000000000000000..c997c593e816a41b7cbd589c6970033040172017 GIT binary patch literal 5876954 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%0Doh;GRgsMli@t$G=J4r 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�vRz;~#|Db(f+8gMR6Nu)I$NF|G0is-?mT+WqT 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%0A>0KtjMfp?V?EeFZ!e@AqdlCWr0oN+{@ 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�H_tu9Civdo%s94K` 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 z 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

Pa7#r4PhLz=zP9$1=#8?7 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ΠpQzr5uOWd~A?3VQ6o5~=5 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 z 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ø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

ff9IutDo_%t$ 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�#`HHmMO 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≪7)Ga1a>ph!26uYrX)4 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 u`Xj>#=5NKS>QUZ_)7e<(F#tB5TkmPTbA4^@>a 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\&Nax-@mXD_|X+r;@wKVMr} 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

S02cL7P_D26D9q}Iki zoLKc>JB)Kl`vId3hcNyY4lLpMphpzFQ9^+Kz;HY@rriLTB@kfI=A||O8b2huNJj!p z_F4vDYNR81c6<=QvTbfty&ose5hDg#(@tO_6=ER_NjpQQjcyqQ_ac^^m??;-BD+WS z6;f^pLy4aRXie+2IRRb;v?xpNNZXRO{EpOIQjIYzrtKc=Q80#1Cl=f+*RV$U}gHKG(b)REnbio5pVCbTO@b{xH{gM}9G zM2gnxtsYdrm(Co($1sG~tVNEzsLUL4kl4Z|%`otP<}8Uw(=kCNf|BjoLsUaN=_mXl zOe89*ylChV`PDWR^kM-c^aHe6Ov=abWfV<9UM_qXj7Kk@;77m)W?VsF1>!|1I;KJF z-{O5vRCQ}rELh1OA2))_VxSN_4R1HF*F6Nm3m(Cb zzD$^IBuRr(3?l2NQpg2RmXj9@fE=My)FxDiMvHThz>GG#_P~Nn#^yXwSt4%59>=bN zn_Hmq8{K!1m}EABZcz6~sZw%to(7FUR<|G3XmjQRT2~c|wIQd7e5ivb#!>ko@Nc{t z(3aNZoY*FoXPF%u8IKAE9Mu?{16)R>@4%j*dVx5^dVuhrxqw_}2v3}?4tblyLDnQD z6Nrc#rqD7-n^Fn89a9Y;U5;z2bVTqG`e#QGR^%>S!Z${fIj}90okQTr!3Lpr0D9+W zDlI0DKMEnSw87T$`>P`tBGfx`4*D115XNV=yJ6Qvk0s}?5d>vFfZaB10t^=WtC7?! z58<5{o&)tzUq(i-jZO|DQ=az_@^uy|JI+0iW)8Y-pGH>_O$gF2Ky}PnWDPda)^8*a zcqaG`1mzYI{G1r;2FwfNNyqWw9R=|7A}9$~hxL-Ojp-@?m1-ABQHBmKXiq7D>ts>L zTL6iN9IUc;EOp?OTrGBu*^QkDO>WOx{2ei#bdH?lHy3e+XsC~0LW`e~<+Y$R2cdo< zs9ugl<48(BGCGiJAXL7_G=a9&(p=~B&Q|y}%&L!p6E^vj@ zE0r|yyf&(o>qW7o$OtGjM59`;Tnz4n)*&dc21XT~9MV-`pX*dT)0Yy~8n>jelVrK> zh{kOdP5eVJ>5aFtMKynm?MY|zBJmw z;*5CP8t}D)&wU8XIy16pa*LhtT_v zd#5WC=<5OxPH$LnsBJh%=q?DDaM}MTdgiiIaI-Y|)yE*ffO_8En7}c3^-`aE5GHHG$>`wb-5G)@=FSW7cp-I`k$QojTV0iRR9ws^nucuMBYtg^dXU=9>`1h@S1Bg6d4;)Yk+zy$ei)& z2Ra5*oo5WzC$ynjHZ{v_`yB!+wDIk>S9KOs1FWjvKCg3h37UmCxxbuEh!8Tc$YYpG zyrYYa4g3v(A;4)6Z5}^r=5)kU;&%*@PRPipEQLm_mL>BZgnirFw1&10kKY8rYO;GbPO5$3Rc5uteY7&xa<3=%bk5psjFrFb1y z4pu}Gm6vA=6BuUvIY^+9=(-)b#8LmhLh+R#o+a@h@z8? zeL1l`1+WDLlw(b8dQUv+XX3dLff8&m$QI+BBEOk)>vXK)z)q=^L9Dw?*d4i~ZKfXr zYmdmm=K+oyg!W$9@f#ce*)0KgL(^OA@y2zM=yP@)u)z z_P}hQmGIM{mN}#x#Dldokmi6EJdo>@?oNw?6+lXZj3s-E;7uXls6CDz2Nq!qw4j@a6Jdd)@@#lh&YB9lTa#sP)U$|e@h@FAN_Q%po@ zw`Dv?od}6Wl~Q6G`NT2259E4h{BrK&ls2^O7WHqq$aibZDXVo6UQD5Zz;XmHvUdhf$-_= zZ*7#{Ntw(}54MmJe0aimB{796r_FWtb3@($ktO(&8)I{x`0U9i;kDVY^FTd2Kp&gp zDb45F#Da9~5;u|)h7%OClhIHHzeJd4;st4^{4dXJI#o~Drx`mU7usJSaRyF9wC)44 z0|B$>XB2GVm8-0=_(m;Mj?GKchPIq2WIssjtRt{o2yafn8&!C=NCJyMA>2gZAh_>X zAW{??!8DnbDJduZ_+&3b9vVQCnDao;aKxRnlNxMk9(y4=(7`xS5`e=YOzo%9X2Jec za_S|1K-3Ws42JQ*wBTUSQRDE@)6hXIgMb3naU&_J0# z<{LxIv3S`)%nLb@V9hU4)cYiBIgSW9%K&V)SD#*ay<#kFAc|*6_DRh1#%M!s`vJ4a zdt-8m=&)z3BG)}BCM_`=UO*)KGJYA9)Jd_UsnaNbId*|#kTyz#pr}S$KkLxL`LYO! zD7TDXjH)xkyL|8-g0>j`vH@eKBQxBdC8WqKYIA6>rerBOX!tTRY__Bj#C=B}z-ciX zKN#GLkRk$9If7}%5I%n|ltt!%gaZD(7KD4hz|orxp&+gD-_g9{PA+L7y^@zX7vbIHFGJJW+G#}@5KBM`oF zhoHd{Oc)CAbv~$z8|Nb6T1x#^WAZA{BnrQ9qL8FuL55I#i}Ge-xD>Ikx${-GGAF}W z;&;(ROkFxQ@NH4DNURpuC{v5I1T7pg#9kriZnby)a}ZD$J7z#0fTc*!@wO5D=yfn? zBFZY7CEV`lBEJIe9yvuYK5eQ4*^dc~fUXdCRF}H^AfW&u49p6!2y(AVooAh8kCTIR zy8nS?yO%F4MUMq^ftoaZZgip-ErPs`g~f3c2iwDqL97_ITl>34fyz+$2SNEqbGv}Z zV+LSj@Ul&oqoNaGPegvTpCd9kLJdLhVjC*h8odN!y4~GclG^TjnBr6{Bmq3)3qE65 zP22B1$d@Pqo)C8ihYj$_w1*MAscyU-y0j;b*Wk91Q2`RMn!ApsXsG)TMS(3HTRIQK zhC`1ni+hxcLO}e_x1OUza9`a`uVi^4(?wG`#V&}AgR1Ttnkz+s# z2PR*fDyH{+MGprbdp3AwqJXxi0t|{+sWCs1pGl4BVj&R(6W}(Yum%rmvsU+Hyp=|m z-v(Dv(UBWZ9H{V8$i`^s5-A!YNgy>3pG97~x5F)cPdb7qt*jlX-a^J3>2 z@n87?dzL^uD9Na7rHy&z1)?&a9VrpL2(ST|iJKMn2D%QflxV|6?C(mJJ*&UCo2c&~ z+O)tUpAyqJnF92%QGGa?5v4(O^@<0LnFFy8Q$KE`HbvHywHto{C8?l90sqlu=0HS| z9vDR`N530g5}7`n89+m$z^sUY*}o%snL2yWu8LKFdq<;sBr>QN2@~+vW;Q!H!@#dD8>Hy@NAR&a36ylc56Sutrz0vNqgzhwe_~;1f52*HmRBlf< z2CAUd$wj zTZFpu#*xVUus!Y8GP19430|LLU!&>coHHTh#VP>bih5MeWqKgv26e|2C9t6a=DQpK zUz7~UouKVebCEC@*;8B|-8u28Xw|S(r;%aKRsVrw z$`H}VG9K&%6cd>jG!Lb5#>0WI?ub`oPFqa6r9Bo7kX8oi;3E;9i}$iQZIQvuSW9}$ zB6hazyZCJs@z1BL`8K^q{lN(0Oyq$0iz2fy^1vEXofKq*JE#U72mzUZuy6D;ASOz8 zz!&XoQ6%H?4_fCP2a?lvF&xtFE^abPO-gjCP#9!F#Szc8$XLPXbve^v0?u3>$#Usk$B%`VOdXEtzj4wG*?#iwXns7U*4PKp z-p;tLBS@H@Jgs#4EW2a)FeU&v-G9mCl4%il&ASNgC-8Pidn}zAl6E7CM42?FBzhD_ zqlHhD{W;J<{h;PRZA6a1kjYf6GJFbUcSM5^sNe!Ob1*yRG|Jndu@2sn5aao30+LrhR9?T-Uj5QCeA9#~`>@>UXnLB}l8rIHde(L4{m`z~2F z-^NRL0tlv}1)0st!e|=2Vv8*jxx*QS3k!Gx<}Sf>N}tj6(AdceB*4?a*f?+tApvdG z9_#*aBXS*u-a!f-!gt|x%%#HisK(QaaEzwI<3?M<_zYzfH^Bnqd&f?nDF1^99>2zw zx=R8e08~8xR9L-;`%xU7uhllSP#^YI4?!jtOc*CegZUafNMDs1KT&&+^;@+%_?8@4 zum`~gkf4pB5O&gu!T^$7s|fE<*3Cp%ZpemB)aY&YgEhw{)a)WktFFt_3;E70ZNmog4K>1&R99AGAiQ7qD$upkFM-)S`-+{^y zbx&==mQI{G2NB|O60NQZHXpQsz4nn(rKPHd&_2HR5d2%TS z<=V}343&1woP)H;wu8bGo&t}ky)q)Fp7yByFSasiI~3uf=<-e4r~OTcfuKHlL5z=1 zgL4NP5`8c!AVlZST}Um?A&=pjQn_7}6Qa7l{o?cmDsAV(;Zq8>PvIDy?gv7GkRaMb zNWT;7cnsBX5r0IElm4vA-yezW2jN>!1geG>jMVti-adLCRXZM6i&%#OD#Kl}*cuT% z$t}Cu@5`Kt^fohlXg5qKy9ja-%4#*oA@XSMmS)Lob@kwg;T>{>rq~mu?B&?#7!q5eW;8l1z$}Or;Lx0O);RED z4}qR@Q?X3s|Ie3Rbvd&qBjkvT5BmxzmdW%c6T3)UHdI>d+ zpfn98uN@ud5A>jgusHNW$$;fwV*VHE0TF{XQ3oF!^0=l8=yO1bbK534GYNc*!#gOb z0Xww~#3piX0Z?InVVh1UhmvWBE}D(3lBmFpb~4wi{0NXm!JT3H{wV#CXoGv%kBaTH z>7(2OI9ntp@Z#5r@sp&Tf=~d~PQa%fv?RrD(`q;sFY7ac@NDo)+%jXJYEC=QOMR$w zn$vDcLu2BXe!O}i)+QObWEr}q+mEv4aJ=V&8b4%;ano=6LgKf$35`ZU4>XZR`-mrj zn+fKubE9&(b{Tv=kzG-kbuLJQYPN+)M1}ZngEV2(Q7B<%MvxF9TlgRrxqD+v0AJY? z96Oyr6sA8#EEYgj&`*3wH00d|6@%T!@RYJH6rZ$iiZHqx+y-Lv*6psNF*pJsQ=a3W0g^+R284m+)D*L%{Uz3l^k(jt|@ifHeka3L-h!%peR%R19axu>` z7jM60uv;goFFI&5bpU#>G-EgrT!y9d0cAKReo*K>GCJ^DA!tJ#81MF`gRGy1%tGsy z2qTVJG;<1IR{Khb*M*dKq@RZ(-<`1x=DJZO$RdWlWB;mFf*pU2?-xUzv8b<=js(OA z4S{CTTQ(yTrenw!KPD$%o^D?r{{R2}pD57TA^*0ylPeo@vQ5vklWP*U1t(#`3I zWSh021jo`zLDPS2x;6Rapc(sCvX#FtV1^BDt(rJB+pMZiths(o&`h14SXqki2ZYm$ zb7y6nvCR(W<^6-^+}Y_?%AY}#eBFVfjSmIPv_5rJn|=tG;|@)oA=~(RCYNu$EojmwCt4>h51Q|%rPq8iEZbbzJF&RpaLltZwS3wq zL9^$X6z9+Vf->HP*=Er%trbUq5j1(5Tf@Klvd#A!hqd+%2hA7fq}055dba8Epu=3b zC16JWTvybb9W>!1>NCfr1ZABEf+qFugz~`5Y;$%|bH#Q2vdwANwpKao1M<8-0%reH zY3ArrL6g1nfb0F0L3863368A`vd!iwV{fgvy)?gXX1?8RZw_Ip=+oUR>u3nzNh^ zGxf!w`FvDMxbtB_^GRJ@_3kb~^VgU}XKm+f^TQ1-6%S!O@4ntpbn8t)v-;86s%P=s zM|};MGqG=}JsMp%{1*^&(SLv-r5C@C7#nOyeIZ*23en&FkSr=fBqlP03ddXJ*H2lh&HxJSQ{ToZq?Db^Omk zb4(XU<>}yqcOObHS<|x3-Tyd>uf8@Y`w+yuE0c;Bj|`g9t1`^9;FCvFTB?R%KD<9O zgJ#T@=IUoU108MiO! z*OF{b9uhRCebkug?U`+cS0z>+Uy^Med?U$v5PZ!1J1*NKznJd4#gT13n|2^`67HWj zKcV>H)3VL(IT=>f3ApZ?0~NPaD8C+>ZI12JSpD{dpn2w&B+JthG!IuaXI_kRpVRUB3rG=rZ_bnKg*E&KLh^7}(>Gx+b; zqOSYh=JdNd)ZEu#j4QFJYRjE&^W38Khc&w0vJcDM#=8AL=DSzB&7B*YGhe}T<`1kb zyZ$k^nfO||V^hFwR(@Gqb!dN&{Jq0%K0KwaBK-xoIp>3B*QH*!`Efx?`N+%NX8G9W z>RVU1&AEFVH*W-=E!S0nCa^fGj(`N`#L?sc2Zj=GBVf9m&h+@|`-#PUfedW7E+ zJm#*9hO%v2+$OJUQ&Glg9+TtlP_tv75kA^uM4k-rnACB#6;Fe17cQ!;?)I76v_4-~ zR;9(9g1d~Fc1vo_8J#`m@~c~_ro7}fPoJFRyl95o zbhsha(a_IhI&BGuE3a{z;P1)S>*a3q?V_aOBW`vJ9~8PxMox#yZ%^=uJbA-y3X79! z)}?w(-ndlr5a@c(x5%p$ zk2&s(l;R;*xy?(fQ)-qkbepMHe_We3IOJ^pFkuyt6&#>|k>FS=)_at?-=NTu|4N`DK5% z=`^OkYS&h``Ko8DYyaoQ+&Zr=eA}^ZGwslD#j?Jj+jZ&A(<)_i`=)JOID``zZ#kJ2jr;P=$6E!EQo>3HB*9=BM}6ZV_W z5zfuq|E5(wlI1ZIdew(lf2!-P1)mTdzHpmCLlTQyPj?GFa4tQ6F0NfO&u!MfR9p1R zO~%|_6)rms{PEz5wBoX3JtCLE-(PzZ%iqO(Sigd=SRbF^F-JcU4!ftio{-|Gxy)_;`Jt}Nn&>v&Z>e<|jQ8X*b>VNo2eaO;cO8DKJMvuKr+S>n zGgBSsgKjKGaQ|cd6C6h!;*tG^9O3o8W8^xlgXIq7%9#yK;ky>O&76)2*7FmTKQ`%p z9ME&{oiQg3bC?gi>G$2;rm{zxbyE+w$!|PY6IceoP-!-E#xx|fR)6%WF|&-L{B!UD-w%E{`Sf(>0?=RV0h~vYkJxY4ACN1zZclYKo#K&m zi|-!@)P+wkaf|-MdMZv0SJzB(i@o%Pk@Nqz+suB<;k3Ni$9=WoMc=u_4thuV&WUqA zyft$*e z;JK-lpJCq@-`K(VDERZ0|5D0lW_o0Q&%l1Zky>+m*ob__JbB+cx{ZHZeMMH#ZLTbA zs`$c>`#()B{|NKnHz8bgDd_(9`5hb&&v2U!M>S-2N>{#{2|7JjTec2zkM%V6`-qCf z;x}_3*Un0F9DrQr^+0YuJw05u0OywF3HX8K2l$uePrz-iSe9tkcFh*OFx;>9MZml` zHKFp!(ty}c`}}5jd8$b`5HMR`3|F1|hTlvd-W0y~c)#e6kNskA-4qc0@R{HIc}+r1 z*U^5n{lu2=bLRw1T|q+43)lHg{ZX~yqp$Xh-o)SCj%(joe!t&bxBQ)T=l&89J>NTM z#_z7pJa2TstavE7cu?1Xx#f_$q6dHVn-jlJbc`$tm?@stqC3~?c(A+Ds#2`(=LgKi zSJjqfSNToF-o)~^kMNrxGir-|yEI_#d$2K_d0fDZ+nMe-Wvkz06}DErvo)yl19r>l zDUOw}o3nO(pKY!4i@i3?Z#I12T=nN9zvzv!Y@x@IYVUjtd+F7tvQJj%@128Ur{3!q z`}eYd>32eNxVD#H>{QV0@t^W9KKln;Pj+X$-wYjETm8}s*pCAT{CPXT*G`-@Lf#xNiAV1Ll#_2mQODR>vI&yL@q7_2*b8+qZZ7&F$_qYfo#yRE|q>K6kX* zy9EI=e8gWJ$DHjq183Ad>3}`=#f+5~_Sp%$bn%PJ&V0vj);wHa{o7!_8Q|@?`)AmX zpC6V``PZ9%bJO}1^H?JG_wLrBu@42zcLxqx{NBQVsh@X7Fc-g@t5^3LJ0T$U@h^Va zk3al!K7RKLpL??9`ytt)C!N`1M|=%GXI_hI$&Ufy({KD{OT{;z6oG#(+mx1k-qQh* zZ@sf+9`6QBk+0b`;kJMo_)CJ-ahu=ldM?TF1nkAesjX$NCHYOy)%8V78-wQh1I?K| z;774t_H9t?%^g9pzhH--e0_7p?}LJ7?VT+}_uS<-U9W1WIB&h~+Y5g2M^?h_Ci}lv zw#d1fpc!~vYvw@MtIU@hg67vA$(8rQE@peXf414OyT{7s@AI4Gx7WK~#Pw{iKNm2U z2NQ~Y*Tm0tZW#PyTvbbg&!dDJ0SCV+i(7TKU_2m&)<32582y%0om6s+2S{B2#7tFr{@atgZ(M+ z6OV)QBmR)icXH75Nk}uj`vlC06O&B$7s3Cujz|3Fu_qd;3U|ZLC422h-N*R>^V@~# zH8bE(v;XwB-|U~>T(oj>z6d*d$TppiPcL^t{?smP2&Y#2 z?>)Gu04aoPlxEa#`r9+KzH^ZlY_!% zIA6z%Yz~j>lWkh&H)XnV118{TsqQqzFaG;Iei;YyL;NtDKjPa4rTZek$al<(_w_8j zem|}wK07lYe0Pgq!E(}^LH!#AYYhouJoI$t_)W{@QqLCxY1|E9iLJ>{05&%d9I;i?X7!n!wSIHx zTWK}J^L*l$-+*(ts=lK9a=+j}9>4LP(Ohvd=F7MPVze)021fUgKgJKS&nUY=U~!R0=ctA4ZYwuH(K6MUi% z9#DQ<1-kD}wNCvI`%e12$|wFZ#&x~dTJ*y8e!;))^qU?3w7Bj_^_vB2YBN`S;xktF zmZHmAed1RfT-|G|qa+lBe^Bpw}6a0b; zJmVMo%*6UXOD?|oU7y$$Pk|r$rI_n54&!dvSLQ452g}RneS-H)^od<|ykG36N0lFM z^qcN)WH_##r~34JpV&1c^*mxf7$@B1Gq)X`RNiZ;&t!Mba9lstZ%*o%T=OvYb+@lJ zyzEz>_+3+VeV6IENW*z2|F4gpw~4x+>wWUvm43m+?$UF0o$dqZ&bTA?^U_Nl&XO@c z*}q9DPrvfXzJkA)9^iv}cc#>wgLUya`oJf8@>S@4;!mUd`V01PXj1X3hx&ysgMFfB zuJ?)j0Y5X{9@O=W^od{cn9}h$zv(q0-TCz#Jx`EdpWob2G`LXbxyomLA5=7<+~qev z1e*P65?;)RAcv)+>ALPQJ%}HkN=Snxo5BvPFygAKp z#y{0qbp*~YU-yhp{O~fL=qo&*aigDna*j*%Ja5A~$lrcg`44u?wKq4Hoq&1qc?N%V zZ%iqE9D3{2^J-mJTmil#e*xp(I=HD~?xTM5%XQ(Z@ADw1$bY-ZZw`N|r8?s~pZI~; zN5=WUH|(E4PJa17O8GNaV?F0PDsRL28+LSRWoMk@6JBVoD#Lw@A3O^^#<-qea3$<( zVSm`~ScdbQp6=}Stk3kht1k1bo;v@K-*o(|F7v)m;VQUo9&UkdOxmb z{}=u>pWh4M$C2L(T+hY>8Ao<`WIgaB8J{@UBXog($Z>;ax7by!ZqbME{~uqTQU1!~ zz$qv`@T*(oaH2=}<3f+{$0&~}X+Goc&wwuhP5o)P&m;aB{Ny+Kq!quj&u#A7knEUz zqx!)=xkW#X@Q9w>5By^18+W`8+@ffxY}*%?`?5? zyTvW?{7{eZ^~oN^kv!)7FB_^IF9W|RPjYr%1$?PPs^f<=;AiJ0uTBOYRD6k}e1O{{ zejjiz8y{l3#-<~1-=h+`uXcjIW4blCzQTSiy8X!HT#U>3_gWqQ1;shAUdGL^Kg`#_ zW47LxR{1ON9kxeK_o%#cn-2!2I>W#fY`m}YsMXdw(7(ghhv#0{)g$;4a7#YdKPryZ zO>vafpwr_`)oaf4h~9nOE&2xZVVnT_%l0++fbpYKJ?7Hao6A-KA7Fm|O7T_j8QcB9 zbvdq-;1T-^^kf_l`@w$u6~G}VUV-^DE;Gy{I2v%K>wipkya!z2z|!>c7T_F=Qvp|C zegr>o90<7U^$QME=XpHh#{i$?cmRI??4*V&vjO-v$$8M5^+yx%9P-zJTk<-AU+g`* zsq87>N;a-_^^-}?*}yI44r|H$2K#=_)sC8ragG?*2M)=&IritayPI4SyLd!iY{dTj zfp`mWKHld|IG0x?Ifgy2{0cs1d=EGl`yrcwi;;Z9x!HfR!%=jkN8|?n^15+OMDBZp ze{oJ&{$f3h-+-=s?s_O)KLq|q_Ru$O!~Q|7;!}_lEPt_|>1&S;b;bM`FUMydXN}wR zZK~`-X~otdH?_;Qfr-W8O?p(Chbe8;TY_k!Ik)IxoIe{sZeE>eT?_g#o{909Zm+ooUx8d=+!J(U`wZ)3 zI|p)t@jsjo_OGASIK(=)dGGoR=kA|@A5$CV00pIO7P;@QM1E2TH zffrv6yni(4(L3yV8t0Me5mY$~xyf-d(A~ztSWklf9QT8q;B{03?;-ER;uO0YiuM7g|9$C!syn;r z{&mDT|0$`)x6}y#jfMW8xbOwWJpNir&9<2?^Z5ncieI?iCHu6&NSx>tw=sVvR$j5q zh`kHkmhFQ9h#QRlyJ*W1F7dA($}%;sRBLd5#i2JDiHqQQ;?KIxHPh-{2+GQjj@ux8havQ70k3(FncEevUp5_w1S(YVof2!LYySZD9 ztD8&osmBPe_n48mN5GgK#i@>a@I1zyh8pwzpPijo4RZ;O*~gfR1C5z|jxmB;EQcPx z_(0h};O8HB_g3XQTxL{8bH%4cZovV@8KKK^BX)$zGPM;Qtxf%1LZ@LyaM2sG%ssA* zniI}4#zFrO4`aOeJY&XuamA<|O)l}{hZ}Rk!o=djW+QUxKbP3KS#IWo>` zR9iLceIxq31aUReU#-B8XLmR0IWDufq^_t4@iLYh6QQqZAAfL}8b^oXF1Hwwf43RI zGw(%+f^hg-fyXbetr~Sa;!kyr;U7B~;lBc1=Ky2Olc}coQJ2uaJNEh3Kdb7nUz}Hv zsQB+2M)0~xS%UKwWQqSi5Bo^*|6w?<6bHtBoZr;3@W8V5S zsd&p?-R~)GbH>|;I%nRk{QIvlRe#rKK2v4Hp1Q~-=PICan~lai@}Z-+?>R>HaYdHI zqkE~{G{s1~tJFx`=>{XX!l{Udksq`;OZ47P#(Z$a?##=<2hGFks^`3-^gGcd{$vPo zFT$I98?iSak2rpdxCPG-@d?huz;o^%)Kc|0&f^XFEmdiqG%j$5Q5+U=A&Tc-XUyfF ze7K6@xtt&Jgb})8|Hp)qoim=s`62rr-(ObLP<9vSdZMqZ^OXdbY3!HiyerdaJQ?)7 z@DNAgXIbXSy!}OWFM@B$zTV+7jwE+^NATy1Zy(4!cAcKXmyEnmZI~+E{ShcW|`5? z)K^r4-W)$obpyXzvGmTF8fRMuc}Vk|pC$2`lia4q($>tsIvI(BO~C%s`EnVNJJ;!T zD~*|0pIrR+&qnY&(3#^1h{qiE!(W-tU6CbuFiA$@#E^qb*Q<>=?vZ~hl0M3kyq$iA z^9(*%gx?*V$`fDDl5@C6<;+Bk_c8Kp-p?|LojW>LxU(ca-&f=LgOu-QyF^dIE@pb~ zahaQDWYny}x#9Q>&PmGN1K~HYU!0HdH};?6Z_j}53D1X2ixP2vu}U&U-gbJU83)?udGK87_mRG@9Y;XFk)}xoQdCTWM4tg)n8_mFM_<` zc-U5B_8#B0W+ddwU;XwL4Y~(>O#dp4;F$=~GEN0K!TP@f`t3I4Ic;@GoVLt}J-@_= zJpudn+Ry8&1F&1!ez+dzn%4D+TjKB~&~xPP<9mqeUmWM@a4*Y6N$LJtw#i z{2-d=FptD@bBx#(b2MM&Ev4VNkb@sI&1*VD?HTAbKEL;3eEPT82yQvkh#tSv$hf;T zo3#TFh1cEQ;j)eY&g6Me9wN@1drep-~+~!z+bG#aXo*={;m6}CEWiCBX}py z*`o9IXWmk-^5#wKC&jPcb}61^OzXb=)vG4BBKaG8`nOj1`9t{z`_6eCc>aIyFL=59 zVmHS*HtvL8rM#JIjrd)Ky5Eqq97mmRBp(O%Ft1|?;;_R>e=b@aX-yh?acv+rH{NV@GkAi&Re6{yfuMgI^HqIsUIrPa-=hwL|fSf<--MY** zPicG_`^I)L_>rIcuo0XvPx%=B2;)oh^zTa8vloB-%GZ}0u>+QSBpwC(X2*tvnt2aF zK9m3Q80_%R4^)jk4E87e!}(`F1a=GC#n?Zl2kv9s3g_~hzD?CjFEVD}q20^B{@Z18 z#wR)k!!PV|NSES0kk2v?tcU!0tn<9XQ>>$g==jsr9{|5{J`Myh+hI7Dg7+w29u9hy z*1CRr0(lAjcV}8pxa-℘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�_;L6Vl7l}C&f6fTBoFwc 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 z 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%0D{B_=it`*1ff*faovuA3 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 fXEZxON5?_qn+5ECPtq=B;j39 literal 0 HcmV?d00001 diff --git a/csharp/test/Drivers/Apache/sparkconfig.json b/csharp/test/Drivers/Apache/sparkconfig.json new file mode 100644 index 0000000000..7f73404c20 --- /dev/null +++ b/csharp/test/Drivers/Apache/sparkconfig.json @@ -0,0 +1,7 @@ +{ + "hostName": "", + "path": "", + "token": "", + "query": "", + "expectedResults": 0 +} diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Apache.Arrow.Adbc.FlightSql.Tests.csproj b/csharp/test/Drivers/FlightSql/Apache.Arrow.Adbc.Tests.Drivers.FlightSql.csproj similarity index 69% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Apache.Arrow.Adbc.FlightSql.Tests.csproj rename to csharp/test/Drivers/FlightSql/Apache.Arrow.Adbc.Tests.Drivers.FlightSql.csproj index 00de4a49b5..489cab7d33 100644 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/Apache.Arrow.Adbc.FlightSql.Tests.csproj +++ b/csharp/test/Drivers/FlightSql/Apache.Arrow.Adbc.Tests.Drivers.FlightSql.csproj @@ -1,33 +1,32 @@ - - - - net472;net6.0 - disable - False - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - + + + + net472;net6.0 + disable + False + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/ConnectionTests.cs b/csharp/test/Drivers/FlightSql/ConnectionTests.cs similarity index 69% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/ConnectionTests.cs rename to csharp/test/Drivers/FlightSql/ConnectionTests.cs index 62cc6424d8..b099b5b7bc 100644 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/ConnectionTests.cs +++ b/csharp/test/Drivers/FlightSql/ConnectionTests.cs @@ -1,138 +1,113 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.Json; -using Apache.Arrow.Adbc.Tests; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; - -namespace Apache.Arrow.Adbc.FlightSql.Tests -{ - ///

- /// Abstract class for the ADBC connection tests. - /// - [TestClass] - public class ConnectionTests - { - /// - /// Validates if the driver behaves as it should with missing - /// values and parsing mock results. - /// - [TestMethod] - public void CanMockDriverConnect() - { - Mock mockFlightSqlStatement = GetMockSqlStatement(); - - FlightSqlDatabase db = new FlightSqlDatabase(new Dictionary()); - - Assert.ThrowsException(() => db.Connect(null)); - - Assert.ThrowsException(() => db.Connect(new Dictionary())); - - QueryResult queryResult = mockFlightSqlStatement.Object.ExecuteQuery(); - - Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, 50); - } - - /// - /// Validates if the driver can connect to a live server and - /// parse the results. - /// - [TestMethod] - public void CanDriverConnect() - { - FlightSqlTestConfiguration flightSqlTestConfiguration = GetFlightSqlTestConfiguration(); - - Dictionary parameters = new Dictionary - { - { FlightSqlParameters.ServerAddress, flightSqlTestConfiguration.ServerAddress }, - { FlightSqlParameters.RoutingTag, flightSqlTestConfiguration.RoutingTag }, - { FlightSqlParameters.RoutingQueue, flightSqlTestConfiguration.RoutingQueue }, - { FlightSqlParameters.Authorization, flightSqlTestConfiguration.Authorization} - }; - - Dictionary options = new Dictionary() - { - { FlightSqlParameters.ServerAddress, flightSqlTestConfiguration.ServerAddress }, - }; - - FlightSqlDriver flightSqlDriver = new FlightSqlDriver(); - FlightSqlDatabase flightSqlDatabase = flightSqlDriver.Open(parameters) as FlightSqlDatabase; - FlightSqlConnection connection = flightSqlDatabase.Connect(options) as FlightSqlConnection; - FlightSqlStatement statement = connection.CreateStatement() as FlightSqlStatement; - - statement.SqlQuery = flightSqlTestConfiguration.Query; - QueryResult queryResult = statement.ExecuteQuery(); - - Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, flightSqlTestConfiguration.ExpectedResultsCount); - } - - /// - /// Validates exceptions thrown are ADBC exceptions - /// - [TestMethod] - public void VerifyBadQueryGeneratesError() - { - Mock mockFlightSqlStatement = GetMockSqlStatement(); - - mockFlightSqlStatement.Setup(s => s.ExecuteQuery()).Throws(new MockAdbcException()); - - try - { - mockFlightSqlStatement.Object.ExecuteQuery(); - } - catch (AdbcException e) - { - Adbc.Tests.ConnectionTests.VerifyBadQueryGeneratesError(e); - } - } - - /// - /// Loads a FlightSqlStatement with mocked results. - /// - private Mock GetMockSqlStatement() - { - List recordBatches = Utils.LoadTestRecordBatches(); - - Schema s = recordBatches.First().Schema; - QueryResult mockQueryResult = new QueryResult(50, new MockArrayStream(s, recordBatches)); - FlightSqlConnection cn = new FlightSqlConnection(null); - - Mock mockFlightSqlStatement = new Mock(cn); - mockFlightSqlStatement.Setup(s => s.ExecuteQuery()).Returns(mockQueryResult); - - return mockFlightSqlStatement; - } - - /// - /// Gets the configuration for connecting to a live Flight SQL server. - /// - private FlightSqlTestConfiguration GetFlightSqlTestConfiguration() - { - // use a JSON file vs. setting up environment variables - string json = File.ReadAllText("flightsqlconfig.json"); - - FlightSqlTestConfiguration flightSqlTestConfiguration = JsonSerializer.Deserialize(json); - - return flightSqlTestConfiguration; - } - } -} +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.FlightSql; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; + +namespace Apache.Arrow.Adbc.Tests.Drivers.FlightSql +{ + /// + /// Abstract class for the ADBC connection tests. + /// + [TestClass] + public class ConnectionTests + { + int expectedResultsCount = 50; + + /// + /// Validates if the driver behaves as it should with missing + /// values and parsing mock results. + /// + [TestMethod] + public void CanMockDriverConnect() + { + Mock mockFlightSqlStatement = Utils.GetMockStatement( + "flightsql.arrow", + expectedResultsCount + ); + + FlightSqlDatabase db = new FlightSqlDatabase(new Dictionary()); + + Assert.ThrowsException(() => db.Connect(null)); + + Assert.ThrowsException(() => db.Connect(new Dictionary())); + + QueryResult queryResult = mockFlightSqlStatement.Object.ExecuteQuery(); + + Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, 50); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [TestMethod] + public void CanDriverConnect() + { + FlightSqlTestConfiguration flightSqlTestConfiguration = Utils.GetTestConfiguration("flightsqlconfig.json"); + + Dictionary parameters = new Dictionary + { + { FlightSqlParameters.ServerAddress, flightSqlTestConfiguration.ServerAddress }, + { FlightSqlParameters.RoutingTag, flightSqlTestConfiguration.RoutingTag }, + { FlightSqlParameters.RoutingQueue, flightSqlTestConfiguration.RoutingQueue }, + { FlightSqlParameters.Authorization, flightSqlTestConfiguration.Authorization} + }; + + Dictionary options = new Dictionary() + { + { FlightSqlParameters.ServerAddress, flightSqlTestConfiguration.ServerAddress }, + }; + + FlightSqlDriver flightSqlDriver = new FlightSqlDriver(); + FlightSqlDatabase flightSqlDatabase = flightSqlDriver.Open(parameters) as FlightSqlDatabase; + FlightSqlConnection connection = flightSqlDatabase.Connect(options) as FlightSqlConnection; + FlightSqlStatement statement = connection.CreateStatement() as FlightSqlStatement; + + statement.SqlQuery = flightSqlTestConfiguration.Query; + QueryResult queryResult = statement.ExecuteQuery(); + + Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, flightSqlTestConfiguration.ExpectedResultsCount); + } + + /// + /// Validates exceptions thrown are ADBC exceptions + /// + [TestMethod] + public void VerifyBadQueryGeneratesError() + { + Mock mockFlightSqlStatement = Utils.GetMockStatement( + "flightsql.arrow", + expectedResultsCount + ); + + mockFlightSqlStatement.Setup(s => s.ExecuteQuery()).Throws(new MockAdbcException()); + + try + { + mockFlightSqlStatement.Object.ExecuteQuery(); + } + catch (AdbcException e) + { + Adbc.Tests.ConnectionTests.VerifyBadQueryGeneratesError(e); + } + } + } +} diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/FlightSqlTestConfiguration.cs b/csharp/test/Drivers/FlightSql/FlightSqlTestConfiguration.cs similarity index 81% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/FlightSqlTestConfiguration.cs rename to csharp/test/Drivers/FlightSql/FlightSqlTestConfiguration.cs index ff45062674..3f22000148 100644 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/FlightSqlTestConfiguration.cs +++ b/csharp/test/Drivers/FlightSql/FlightSqlTestConfiguration.cs @@ -1,42 +1,37 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Text.Json.Serialization; - -namespace Apache.Arrow.Adbc.FlightSql.Tests -{ - internal class FlightSqlTestConfiguration - { - [JsonPropertyName("serverAddress")] - public string ServerAddress { get; set; } - - [JsonPropertyName("routing_tag"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string RoutingTag { get; set; } - - [JsonPropertyName("routing_queue"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string RoutingQueue { get; set; } - - [JsonPropertyName("authorization")] - public string Authorization { get; set; } - - [JsonPropertyName("query")] - public string Query { get; set; } - - [JsonPropertyName("expectedResults")] - public long ExpectedResultsCount { get; set; } - } -} +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Text.Json.Serialization; + +namespace Apache.Arrow.Adbc.Tests.Drivers.FlightSql +{ + internal class FlightSqlTestConfiguration : TestConfiguration + { + [JsonPropertyName("serverAddress")] + public string ServerAddress { get; set; } + + [JsonPropertyName("routing_tag"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string RoutingTag { get; set; } + + [JsonPropertyName("routing_queue"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string RoutingQueue { get; set; } + + [JsonPropertyName("authorization")] + public string Authorization { get; set; } + + } +} diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/TypeTests.cs b/csharp/test/Drivers/FlightSql/TypeTests.cs similarity index 95% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/TypeTests.cs rename to csharp/test/Drivers/FlightSql/TypeTests.cs index 78712a9db4..443279a0ee 100644 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/TypeTests.cs +++ b/csharp/test/Drivers/FlightSql/TypeTests.cs @@ -1,76 +1,76 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace Apache.Arrow.Adbc.FlightSql.Tests -{ - [TestClass] - public class TypeTests - { - /// - /// Verify the types and values for the arrays - /// - [TestMethod] - public void VerifyTypesAndValues() - { - List recordBatches = Utils.LoadTestRecordBatches(); - - RecordBatch recordBatch = recordBatches[0]; - - Assert.AreEqual(1, recordBatches.Count); - Assert.AreEqual(50, recordBatch.Length); - - var actualArrays = recordBatch.Arrays.ToList(); - - List expectedArrayTypes = new List() - { - typeof(TimestampArray), - typeof(Int64Array), - typeof(DoubleArray), - typeof(DoubleArray), - typeof(DoubleArray), - typeof(DoubleArray) - }; - - List actualValues = new List() - { - ((TimestampArray)actualArrays[0]).GetValue(0), - ((Int64Array)actualArrays[1]).GetValue(0), - ((DoubleArray)actualArrays[2]).GetValue(0), - ((DoubleArray)actualArrays[3]).GetValue(0), - ((DoubleArray)actualArrays[4]).GetValue(0), - ((DoubleArray)actualArrays[5]).GetValue(0), - }; - - List expectedValues = new List() - { - 1369682100000L, - 1L, - 1.26d, - 7.5d, - 0d, - 8d - }; - - Adbc.Tests.TypeTests.VerifyTypesAndValues(actualArrays, expectedArrayTypes, actualValues, expectedValues); - } - } -} +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Apache.Arrow.Adbc.Tests.Drivers.FlightSql +{ + [TestClass] + public class TypeTests + { + /// + /// Verify the types and values for the arrays + /// + [TestMethod] + public void VerifyTypesAndValues() + { + List recordBatches = Utils.LoadTestRecordBatches("flightsql.arrow"); + + RecordBatch recordBatch = recordBatches[0]; + + Assert.AreEqual(1, recordBatches.Count); + Assert.AreEqual(50, recordBatch.Length); + + var actualArrays = recordBatch.Arrays.ToList(); + + List expectedArrayTypes = new List() + { + typeof(TimestampArray), + typeof(Int64Array), + typeof(DoubleArray), + typeof(DoubleArray), + typeof(DoubleArray), + typeof(DoubleArray) + }; + + List actualValues = new List() + { + ((TimestampArray)actualArrays[0]).GetValue(0), + ((Int64Array)actualArrays[1]).GetValue(0), + ((DoubleArray)actualArrays[2]).GetValue(0), + ((DoubleArray)actualArrays[3]).GetValue(0), + ((DoubleArray)actualArrays[4]).GetValue(0), + ((DoubleArray)actualArrays[5]).GetValue(0), + }; + + List expectedValues = new List() + { + 1369682100000L, + 1L, + 1.26d, + 7.5d, + 0d, + 8d + }; + + Adbc.Tests.TypeTests.VerifyTypesAndValues(actualArrays, expectedArrayTypes, actualValues, expectedValues); + } + } +} diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/flightsql.arrow b/csharp/test/Drivers/FlightSql/flightsql.arrow similarity index 100% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/flightsql.arrow rename to csharp/test/Drivers/FlightSql/flightsql.arrow diff --git a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/flightsqlconfig.json b/csharp/test/Drivers/FlightSql/flightsqlconfig.json similarity index 94% rename from csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/flightsqlconfig.json rename to csharp/test/Drivers/FlightSql/flightsqlconfig.json index 04db1c4cd5..c6f0e1d246 100644 --- a/csharp/test/Apache.Arrow.Adbc.FlightSql.Tests/flightsqlconfig.json +++ b/csharp/test/Drivers/FlightSql/flightsqlconfig.json @@ -1,8 +1,8 @@ -{ - "serverAddress": "", - "routing_tag": "", - "routing_queue": "", - "authorization": "", - "query": "", - "expectedResults": 0 -} +{ + "serverAddress": "", + "routing_tag": "", + "routing_queue": "", + "authorization": "", + "query": "", + "expectedResults": 0 +} From 0116e21b922a74062ac35628a790992be5f6a480 Mon Sep 17 00:00:00 2001 From: David Coe Date: Thu, 21 Sep 2023 10:39:04 -0400 Subject: [PATCH 02/61] working on getobjects --- .../Apache/Hive2/HiveServer2Connection.cs | 163 +++++++++++++++++- .../Apache/Hive2/HiveServer2Statement.cs | 78 ++------- .../Drivers/Apache/Spark/SparkConnection.cs | 19 +- .../src/Drivers/Apache/Thrift/ChunkStream.cs | 20 ++- .../Apache/Thrift/IPeekableTransport.cs | 19 +- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 82 +++++++++ .../Apache/Thrift/ThriftSocketTransport.cs | 19 +- 7 files changed, 312 insertions(+), 88 deletions(-) create mode 100644 csharp/src/Drivers/Apache/Thrift/SchemaParser.cs diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs index 1e737fa8f0..9901ba2d92 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -1,12 +1,26 @@ -using System; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Net.Http; -using System.Net.Http.Headers; using System.Threading; -using Apache.Arrow.Adbc; +using System.Threading.Tasks; +using Apache.Arrow.Ipc; using Apache.Hive.Service.Rpc.Thrift; -using Thrift; using Thrift.Protocol; using Thrift.Transport; @@ -14,8 +28,9 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 { public abstract class HiveServer2Connection : AdbcConnection { - const string userAgent = "PowerBiExperimental/0.0"; + const string userAgent = "AdbcExperimental/0.0"; + protected TOperationHandle operationHandle; protected IReadOnlyDictionary properties; internal TTransport transport; internal TCLIService.Client client; @@ -23,7 +38,7 @@ public abstract class HiveServer2Connection : AdbcConnection internal HiveServer2Connection() : this(null) { - + } internal HiveServer2Connection(IReadOnlyDictionary properties) @@ -44,6 +59,71 @@ public void Open() protected abstract TProtocol CreateProtocol(); protected abstract TOpenSessionReq CreateSessionRequest(); + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) + { + TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) + { + TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) + { + TGetTablesReq getSchemasReq = new TGetTablesReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All) + { + TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); + columnsReq.CatalogName = catalogPattern; + columnsReq.SchemaName = dbSchemaPattern; + columnsReq.TableName = tableNamePattern; + + if (!string.IsNullOrEmpty(columnNamePattern)) + columnsReq.ColumnName = columnNamePattern; + + var columnsResponse = this.client.GetColumns(columnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + this.operationHandle = columnsResponse.OperationHandle; + } + + PollForResponse(); + + Schema schema = GetSchema(); + + return new GetObjectsReader(this,schema); + } + + public override IArrowArrayStream GetInfo(List codes) + { + throw new NotImplementedException(); + } + + public override IArrowArrayStream GetTableTypes() + { + throw new NotImplementedException(); + } + + protected void PollForResponse() + { + TGetOperationStatusResp statusResponse = null; + do + { + if (statusResponse != null) { Thread.Sleep(500); } + TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); + statusResponse = this.client.GetOperationStatus(request).Result; + } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); + } + + public override void Dispose() { if (this.client != null) @@ -57,5 +137,72 @@ public override void Dispose() this.client = null; } } + + protected Schema GetSchema() + { + TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); + TGetResultSetMetadataResp response = this.client.GetResultSetMetadata(request).Result; + return SchemaParser.GetArrowSchema(response.Schema); + } + + sealed class GetObjectsReader : IArrowArrayStream + { + HiveServer2Connection connection; + Schema schema; + List batches; + int index; + IArrowReader reader; + + public GetObjectsReader(HiveServer2Connection connection, Schema schema) + { + this.connection = connection; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + while (true) + { + if (this.reader != null) + { + RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + if (next != null) + { + return next; + } + this.reader = null; + } + + if (this.batches != null && this.index < this.batches.Count) + { + this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); + continue; + } + + this.batches = null; + this.index = 0; + + if (this.connection == null) + { + return null; + } + + TFetchResultsReq request = new TFetchResultsReq(this.connection.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = await this.connection.client.FetchResults(request, cancellationToken); + this.batches = response.Results.ArrowBatches; + + if (!response.HasMoreRows) + { + this.connection = null; + } + } + } + + public void Dispose() + { + } + } } } diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs index f1d6c18424..0076c090fa 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs @@ -1,8 +1,22 @@ -using System; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc; -using Apache.Arrow.Types; using Apache.Hive.Service.Rpc.Thrift; namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 @@ -49,7 +63,7 @@ protected Schema GetSchema() { TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); TGetResultSetMetadataResp response = this.connection.client.GetResultSetMetadata(request).Result; - return GetArrowSchema(response.Schema); + return SchemaParser.GetArrowSchema(response.Schema); } public override void Dispose() @@ -64,60 +78,6 @@ public override void Dispose() base.Dispose(); } - static Schema GetArrowSchema(TTableSchema thriftSchema) - { - Field[] fields = new Field[thriftSchema.Columns.Count]; - for (int i = 0; i < thriftSchema.Columns.Count; i++) - { - TColumnDesc column = thriftSchema.Columns[i]; - fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); - } - return new Schema(fields, null); - } - - static IArrowType GetArrowType(TTypeEntry thriftType) - { - if (thriftType.PrimitiveEntry != null) - { - return GetArrowType(thriftType.PrimitiveEntry.Type); - } - throw new InvalidOperationException(); - } - - static IArrowType GetArrowType(TTypeId thriftType) - { - switch (thriftType) - { - case TTypeId.BIGINT_TYPE: return Int64Type.Default; - case TTypeId.BINARY_TYPE: return BinaryType.Default; - case TTypeId.BOOLEAN_TYPE: return BooleanType.Default; - case TTypeId.CHAR_TYPE: return StringType.Default; - case TTypeId.DATE_TYPE: return Date32Type.Default; - case TTypeId.DOUBLE_TYPE: return DoubleType.Default; - case TTypeId.FLOAT_TYPE: return FloatType.Default; - case TTypeId.INT_TYPE: return Int32Type.Default; - case TTypeId.NULL_TYPE: return NullType.Default; - case TTypeId.SMALLINT_TYPE: return Int16Type.Default; - case TTypeId.STRING_TYPE: return StringType.Default; - case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); - case TTypeId.TINYINT_TYPE: return Int8Type.Default; - case TTypeId.VARCHAR_TYPE: return StringType.Default; - - // ??? - case TTypeId.DECIMAL_TYPE: - case TTypeId.INTERVAL_DAY_TIME_TYPE: - case TTypeId.INTERVAL_YEAR_MONTH_TYPE: - return StringType.Default; - case TTypeId.ARRAY_TYPE: - case TTypeId.MAP_TYPE: - case TTypeId.STRUCT_TYPE: - case TTypeId.UNION_TYPE: - case TTypeId.USER_DEFINED_TYPE: - return StringType.Default; - default: - throw new NotImplementedException(); - } - } } } diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index cc9fac5141..da38ba3d4c 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -31,7 +31,7 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkConnection : HiveServer2Connection { - const string userAgent = "PowerBiExperimental/0.0"; + const string userAgent = "AdbcExperimental/0.0"; internal static readonly Dictionary timestampConfig = new Dictionary { @@ -40,7 +40,7 @@ public class SparkConnection : HiveServer2Connection public SparkConnection() : this(null) { - + } internal SparkConnection(IReadOnlyDictionary properties) @@ -98,20 +98,5 @@ public override void Dispose() this.client = null; } } - - public override IArrowArrayStream GetInfo(List codes) - { - throw new NotImplementedException(); - } - - public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) - { - throw new NotImplementedException(); - } - - public override IArrowArrayStream GetTableTypes() - { - throw new NotImplementedException(); - } } } diff --git a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs index 7fc33e0878..4db0e80764 100644 --- a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs +++ b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs @@ -1,8 +1,24 @@ -using System; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using Apache.Arrow; using Apache.Arrow.Ipc; namespace Apache.Arrow.Adbc.Drivers.Apache diff --git a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs index c5b1310634..cf1f5ebeb1 100644 --- a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs +++ b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs @@ -1,4 +1,21 @@ -using System.IO; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.IO; namespace Apache.Arrow.Adbc.Drivers.Apache { diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs new file mode 100644 index 0000000000..82fb1241f0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -0,0 +1,82 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using Apache.Arrow.Types; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + internal class SchemaParser + { + internal static Schema GetArrowSchema(TTableSchema thriftSchema) + { + Field[] fields = new Field[thriftSchema.Columns.Count]; + for (int i = 0; i < thriftSchema.Columns.Count; i++) + { + TColumnDesc column = thriftSchema.Columns[i]; + fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); + } + return new Schema(fields, null); + } + + static IArrowType GetArrowType(TTypeEntry thriftType) + { + if (thriftType.PrimitiveEntry != null) + { + return GetArrowType(thriftType.PrimitiveEntry.Type); + } + throw new InvalidOperationException(); + } + + static IArrowType GetArrowType(TTypeId thriftType) + { + switch (thriftType) + { + case TTypeId.BIGINT_TYPE: return Int64Type.Default; + case TTypeId.BINARY_TYPE: return BinaryType.Default; + case TTypeId.BOOLEAN_TYPE: return BooleanType.Default; + case TTypeId.CHAR_TYPE: return StringType.Default; + case TTypeId.DATE_TYPE: return Date32Type.Default; + case TTypeId.DOUBLE_TYPE: return DoubleType.Default; + case TTypeId.FLOAT_TYPE: return FloatType.Default; + case TTypeId.INT_TYPE: return Int32Type.Default; + case TTypeId.NULL_TYPE: return NullType.Default; + case TTypeId.SMALLINT_TYPE: return Int16Type.Default; + case TTypeId.STRING_TYPE: return StringType.Default; + case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); + case TTypeId.TINYINT_TYPE: return Int8Type.Default; + case TTypeId.VARCHAR_TYPE: return StringType.Default; + + // ??? + case TTypeId.DECIMAL_TYPE: + case TTypeId.INTERVAL_DAY_TIME_TYPE: + case TTypeId.INTERVAL_YEAR_MONTH_TYPE: + return StringType.Default; + + case TTypeId.ARRAY_TYPE: + case TTypeId.MAP_TYPE: + case TTypeId.STRUCT_TYPE: + case TTypeId.UNION_TYPE: + case TTypeId.USER_DEFINED_TYPE: + return StringType.Default; + default: + throw new NotImplementedException(); + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs index 2289172929..ca29b879d3 100644 --- a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs +++ b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs @@ -1,4 +1,21 @@ -using System.IO; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.IO; using Thrift; using Thrift.Transport.Client; From e5af9f6ec7ee45bc2a0a5f33d24a3c5f8f88a319 Mon Sep 17 00:00:00 2001 From: David Coe Date: Thu, 25 Jan 2024 14:39:58 -0500 Subject: [PATCH 03/61] include Apache drivers --- csharp/Apache.Arrow.Adbc.sln | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/csharp/Apache.Arrow.Adbc.sln b/csharp/Apache.Arrow.Adbc.sln index 82b55b6395..0f0652cde7 100644 --- a/csharp/Apache.Arrow.Adbc.sln +++ b/csharp/Apache.Arrow.Adbc.sln @@ -28,6 +28,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.I EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake", "test\Drivers\Interop\Snowflake\Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake.csproj", "{8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.Apache", "src\Drivers\Apache\Apache.Arrow.Adbc.Drivers.Apache.csproj", "{6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Apache", "test\Drivers\Apache\Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj", "{714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -70,6 +74,14 @@ Global {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.Build.0 = Release|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.Build.0 = Release|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -84,6 +96,8 @@ Global {EA43BB7C-BC00-4701-BDF4-367880C2495C} = {C7290227-E925-47E7-8B6B-A8B171645D58} {30024B6F-7BC1-4574-BE5A-924FBD6EAF83} = {FEB257A0-4FD3-495E-9A47-9E1649755445} {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7} = {C7290227-E925-47E7-8B6B-A8B171645D58} + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903} = {FEB257A0-4FD3-495E-9A47-9E1649755445} + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3} = {C7290227-E925-47E7-8B6B-A8B171645D58} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4795CF16-0FDB-4BE0-9768-5CF31564DC03} From fb7035ad8f52aac9c737585b221b6920aaa031b5 Mon Sep 17 00:00:00 2001 From: David Coe Date: Sat, 27 Jan 2024 12:41:43 -0500 Subject: [PATCH 04/61] update after latest merge --- csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs | 2 +- .../Drivers/Apache/Impala/ImpalaConnection.cs | 2 + .../Drivers/Apache/Impala/ImpalaStatement.cs | 2 +- .../Drivers/Apache/Spark/SparkConnection.cs | 2 + .../Drivers/Apache/Spark/SparkStatement.cs | 2 +- .../test/Apache.Arrow.Adbc.Tests/TypeTests.cs | 74 ------------------- ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 10 ++- csharp/test/Drivers/Apache/ImpalaTests.cs | 9 ++- csharp/test/Drivers/Apache/SparkTests.cs | 35 ++------- csharp/test/Drivers/Apache/SparkTypeTests.cs | 73 +----------------- 10 files changed, 27 insertions(+), 184 deletions(-) delete mode 100644 csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs diff --git a/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs b/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs index 7b3ff06d2e..91486be475 100644 --- a/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs +++ b/csharp/src/Apache.Arrow.Adbc/AdbcStatement.cs @@ -28,7 +28,7 @@ namespace Apache.Arrow.Adbc /// may be used multiple times and can be reconfigured (e.g. they can /// be reused to execute multiple different queries). /// - public abstract class AdbcStatement : IAdbcStatement, IDisposable + public abstract class AdbcStatement : IDisposable { public AdbcStatement() { diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs index 3ef5c4e556..ec6210c2f3 100644 --- a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs +++ b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs @@ -74,5 +74,7 @@ public override IArrowArrayStream GetTableTypes() { throw new System.NotImplementedException(); } + + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new System.NotImplementedException(); } } diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs index ff89567564..0fd8140bb3 100644 --- a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs +++ b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs @@ -50,7 +50,7 @@ public override UpdateResult ExecuteUpdate() throw new NotImplementedException(); } - public override object GetValue(IArrowArray arrowArray, Field field, int index) + public override object GetValue(IArrowArray arrowArray, int index) { throw new NotSupportedException(); } diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index da38ba3d4c..9b7c521073 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -98,5 +98,7 @@ public override void Dispose() this.client = null; } } + + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); } } diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 358cd3362b..4df66f2778 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -61,7 +61,7 @@ public override UpdateResult ExecuteUpdate() throw new NotImplementedException(); } - public override object GetValue(IArrowArray arrowArray, Field field, int index) + public override object GetValue(IArrowArray arrowArray, int index) { throw new NotSupportedException(); } diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs deleted file mode 100644 index 7f11708e9a..0000000000 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TypeTests.cs +++ /dev/null @@ -1,74 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace Apache.Arrow.Adbc.Tests -{ - /// - /// Performs verification for data types and values. - /// - public class TypeTests - { - /// - /// Verifies that the arrays passed as actual match the expected and - /// that the values match actual and expected. - /// - /// - /// The actual arrays - /// - /// - /// The expected array types - /// - /// - /// The actual values - /// - /// - /// The expected values - /// - public static void VerifyTypesAndValues(List actualArrays, List expectedArrays, List actualFirstValues, List expectedFirstValues) - { - Assert.IsTrue(actualArrays.Count == expectedArrays.Count, "The actual and expected array lengths must be the same length"); - - Assert.IsTrue(actualArrays.Count == actualFirstValues.Count, "actualArrays and actualFirstValues must be the same length"); - - Assert.IsTrue(expectedArrays.Count == expectedFirstValues.Count, "expectedArrays and expectedFirstValues must be the same length"); - - for (int i = 0; i < actualArrays.Count; i++) - { - IArrowArray actualArray = actualArrays[i]; - Type expectedArrayType = expectedArrays[i]; - - Assert.IsTrue(actualArray.GetType() == expectedArrayType, $"{actualArray.GetType()} != {expectedArrayType} at position {i}"); - - object actualValue = actualFirstValues[i]; - object expectedValue = expectedFirstValues[i]; - - if (actualValue == null) - { - Assert.IsNull(expectedValue, $"position {i} should be null"); - } - else - { - Assert.IsTrue(actualValue.Equals(expectedValue), $"{actualValue} != {expectedValue} at position {i}"); - } - } - } - } -} diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index 4248bd6235..425c19a584 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -5,9 +5,13 @@ - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/csharp/test/Drivers/Apache/ImpalaTests.cs b/csharp/test/Drivers/Apache/ImpalaTests.cs index 439c701a32..07fa35126c 100644 --- a/csharp/test/Drivers/Apache/ImpalaTests.cs +++ b/csharp/test/Drivers/Apache/ImpalaTests.cs @@ -18,14 +18,15 @@ using System; using System.Collections.Generic; using Apache.Arrow.Adbc.Drivers.Apache.Impala; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Apache.Arrow.Adbc.Tests.Xunit; +using Xunit; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache { - [TestClass] + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class ImpalaTests { - [TestMethod] + [SkippableFact, Order(1)] public void CanDriverConnect() { ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("impalaconfig.json"); @@ -42,7 +43,7 @@ public void CanDriverConnect() statement.SqlQuery = testConfiguration.Query; QueryResult queryResult = statement.ExecuteQuery(); - Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); + //Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); } } diff --git a/csharp/test/Drivers/Apache/SparkTests.cs b/csharp/test/Drivers/Apache/SparkTests.cs index 91b85db0ae..46d998c64f 100644 --- a/csharp/test/Drivers/Apache/SparkTests.cs +++ b/csharp/test/Drivers/Apache/SparkTests.cs @@ -18,41 +18,18 @@ using System; using System.Collections.Generic; using Apache.Arrow.Adbc.Drivers.Apache.Spark; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; +using Xunit; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache { - [TestClass] + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class SparkTests { - /// - /// Validates if the driver behaves as it should with missing - /// values and parsing mock results. - /// - [TestMethod] - public void CanMockDriverConnect() - { - SparkDatabase db = new SparkDatabase(new Dictionary()); - - int expectedResultsCount = 46236; - - Mock mockStatement = Utils.GetMockStatement("spark.arrow", expectedResultsCount); - - Assert.ThrowsException(() => db.Connect(null)); - - Assert.ThrowsException(() => db.Connect(new Dictionary())); - - QueryResult queryResult = mockStatement.Object.ExecuteQuery(); - - Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, expectedResultsCount); - } - /// /// Validates if the driver can connect to a live server and /// parse the results. /// - [TestMethod] + [SkippableFact] public void CanDriverConnect() { ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("sparkconfig.json"); @@ -67,11 +44,11 @@ public void CanDriverConnect() AdbcDatabase database = new SparkDriver().Open(parameters); AdbcConnection connection = database.Connect(new Dictionary()); AdbcStatement statement = connection.CreateStatement(); - statement.SqlQuery = testConfiguration.Query; + statement.SqlQuery = testConfiguration.Query; QueryResult queryResult = statement.ExecuteQuery(); - - Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); + + //Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); } } } diff --git a/csharp/test/Drivers/Apache/SparkTypeTests.cs b/csharp/test/Drivers/Apache/SparkTypeTests.cs index 81c550ac23..17bb8d3fd1 100644 --- a/csharp/test/Drivers/Apache/SparkTypeTests.cs +++ b/csharp/test/Drivers/Apache/SparkTypeTests.cs @@ -18,82 +18,13 @@ using System; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Xunit; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache { - [TestClass] + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class SparkTypeTests { - /// - /// Verify the types and values for the arrays - /// - [TestMethod] - public void VerifyTypesAndValues() - { - List recordBatches = Utils.LoadTestRecordBatches("spark.arrow"); - RecordBatch recordBatch = recordBatches[0]; - - int totalRecords = recordBatches.Select(x => x.Length).Sum(); - - Assert.AreEqual(19, recordBatches.Count); - Assert.AreEqual(46236, totalRecords); - - var actualArrays = recordBatch.Arrays.ToList(); - - List expectedArrayTypes = new List() - { - typeof(StringArray), - typeof(StringArray), - typeof(StringArray), - typeof(DoubleArray), - typeof(DoubleArray), - typeof(DoubleArray), - typeof(StringArray), - typeof(StringArray), - typeof(StringArray), - typeof(StringArray), - typeof(StringArray), - typeof(StringArray), - typeof(StringArray) - }; - - List actualValues = new List() - { - ((StringArray)actualArrays[0]).GetString(0), - ((StringArray)actualArrays[1]).GetString(0), - ((StringArray)actualArrays[2]).GetString(0), - ((DoubleArray)actualArrays[3]).GetValue(0), - ((DoubleArray)actualArrays[4]).GetValue(0), - ((DoubleArray)actualArrays[5]).GetValue(0), - ((StringArray)actualArrays[6]).GetString(0), - ((StringArray)actualArrays[7]).GetString(0), - ((StringArray)actualArrays[8]).GetString(0), - ((StringArray)actualArrays[9]).GetString(0), - ((StringArray)actualArrays[10]).GetString(0), - ((StringArray)actualArrays[11]).GetString(0), - ((StringArray)actualArrays[12]).GetString(0), - }; - - List expectedValues = new List() - { - "CA-0020", - "closed", - "Algar Tower Airport", - 56.11666489, - -111.7666702, - null, - "NA", - "CA", - "CA-AB", - null, - null, - null, - null - }; - - Adbc.Tests.TypeTests.VerifyTypesAndValues(actualArrays, expectedArrayTypes, actualValues, expectedValues); - } } } From 9084a13e40f26519d09321facfa95faafe5132e3 Mon Sep 17 00:00:00 2001 From: David Coe Date: Tue, 27 Feb 2024 14:47:48 -0500 Subject: [PATCH 05/61] update to latest --- ...kup.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 ++++++++++++++++++ ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 17 +++---- .../Apache/{ => Impala}/ImpalaTests.cs | 2 +- .../{ => Impala/Resources}/impalaconfig.json | 0 .../{ => Spark/Resources}/sparkconfig.json | 0 .../Drivers/Apache/{ => Spark}/SparkTests.cs | 2 +- .../Apache/{ => Spark}/SparkTypeTests.cs | 2 +- csharp/test/Drivers/Apache/spark.arrow | Bin 5876954 -> 0 bytes 8 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj rename csharp/test/Drivers/Apache/{ => Impala}/ImpalaTests.cs (97%) rename csharp/test/Drivers/Apache/{ => Impala/Resources}/impalaconfig.json (100%) rename csharp/test/Drivers/Apache/{ => Spark/Resources}/sparkconfig.json (100%) rename csharp/test/Drivers/Apache/{ => Spark}/SparkTests.cs (97%) rename csharp/test/Drivers/Apache/{ => Spark}/SparkTypeTests.cs (94%) delete mode 100644 csharp/test/Drivers/Apache/spark.arrow diff --git a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj new file mode 100644 index 0000000000..0c4ca36935 --- /dev/null +++ b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -0,0 +1,42 @@ + + + + net7.0 + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index 425c19a584..e526d055e2 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -5,9 +5,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -27,15 +27,16 @@ - + PreserveNewest - - PreserveNewest - - + PreserveNewest + + + + diff --git a/csharp/test/Drivers/Apache/ImpalaTests.cs b/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs similarity index 97% rename from csharp/test/Drivers/Apache/ImpalaTests.cs rename to csharp/test/Drivers/Apache/Impala/ImpalaTests.cs index 07fa35126c..ae19e22247 100644 --- a/csharp/test/Drivers/Apache/ImpalaTests.cs +++ b/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs @@ -21,7 +21,7 @@ using Apache.Arrow.Adbc.Tests.Xunit; using Xunit; -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Impala { [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class ImpalaTests diff --git a/csharp/test/Drivers/Apache/impalaconfig.json b/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json similarity index 100% rename from csharp/test/Drivers/Apache/impalaconfig.json rename to csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json diff --git a/csharp/test/Drivers/Apache/sparkconfig.json b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json similarity index 100% rename from csharp/test/Drivers/Apache/sparkconfig.json rename to csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json diff --git a/csharp/test/Drivers/Apache/SparkTests.cs b/csharp/test/Drivers/Apache/Spark/SparkTests.cs similarity index 97% rename from csharp/test/Drivers/Apache/SparkTests.cs rename to csharp/test/Drivers/Apache/Spark/SparkTests.cs index 46d998c64f..b6bc69806c 100644 --- a/csharp/test/Drivers/Apache/SparkTests.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTests.cs @@ -20,7 +20,7 @@ using Apache.Arrow.Adbc.Drivers.Apache.Spark; using Xunit; -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class SparkTests diff --git a/csharp/test/Drivers/Apache/SparkTypeTests.cs b/csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs similarity index 94% rename from csharp/test/Drivers/Apache/SparkTypeTests.cs rename to csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs index 17bb8d3fd1..746398b40f 100644 --- a/csharp/test/Drivers/Apache/SparkTypeTests.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs @@ -20,7 +20,7 @@ using System.Linq; using Xunit; -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] public class SparkTypeTests diff --git a/csharp/test/Drivers/Apache/spark.arrow b/csharp/test/Drivers/Apache/spark.arrow deleted file mode 100644 index c997c593e816a41b7cbd589c6970033040172017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5876954 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%0Doh;GRgsMli@t$G=J4r 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�vRz;~#|Db(f+8gMR6Nu)I$NF|G0is-?mT+WqT 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%0A>0KtjMfp?V?EeFZ!e@AqdlCWr0oN+{@ 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�H_tu9Civdo%s94K` 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 z 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

Pa7#r4PhLz=zP9$1=#8?7 z%#}>zEnv!v>?1JRU9`)8%6L3QgdeI1f!iZkObL>E#tca?aG?{RC4M8JP<;e?@u}?;!XddQ}dNRu+XB87td9O9W)h)5h|=t5Zx z(ERKg)7HFIZ!<%X${4Ku#nxW0ArojDtPRzJ?PY|HBxv?~sWpXWu-R>&$FW6qZ}YsE z>^0@jB@{`?dl(FJO+r2C&|*23q3%(ET+1GTb%&ZW{z!R0y6hbTCSY+m5pJWS~q6w!l^xY5< zAYXI~f3tDREo7p+z0SkqB-2`2G$ci%*NpNcZm#y5NzcW&$k-ahj+!JQ4>qCv3JHDk z&JeMLe4T#kICM%_alnrfV=gT4kBgYY9WmS`qO#*5tU`Uh{}h=&m4MEwzMa zgcDrr#+OC0`0a13sU?CqqL-*$*2Q`t*B*W9H&sdnLbnZ%ioM(YO(@y5do7erOaY1Cpy8fmr{Ih5m*L zyOeQaez8A@92OU%r2DZrW6ODxTsK`Qr0fdkv3!ae*|hv$j9~BKnK?rEc?BnJg-b_d=^OFNUkzMMQu^V`hgHAG;XmCTTmSm_nBo zp~cpA$Ry$3Ogdx4L2pSja*^A~xHHn5a=VAn^kvv&J4UME{Uc5B!(_^uA`$p%_A<7? zupHISff5YcXL&+P3nEw8Jc(VinkqX@yblERhEz=Ah8qaR-?re)S|9?QJi!{cK6s zp~M=aD9^Cs*&2EnSv}lTsKn&(`j=6bfg#mFma|>MB_c#FjT_S)k{U->f;B67NcLW8 zMYK8>i28(XMR>{DDvB$-Nwf>8C}Y1}o?^yCEdOV$G1(*3WPVg}nUlTwxwy3uyG-aZ z+I4|BA^)=Q?M7SCV231>!px#<+(f9rF|8!tUM5?OXeAAlCcApNL#nZiZ!Ue-Np&K+ z3oXJc9WtlPD|HxfFVW%LgxWra;kf?_+Y-ojuZ*%$q{0wddrjE5-P!7N(Nmjn2ASU^yXd;}+>~&U)Nwnfo(JP|l@a;v-8OjiCBXBO{5|fbG;aF`F zYUK(1&{kJ(Ia*z%63Dz4>(yN!iwB}pO|c|W34!wCh=Cz(Jqz)-khc!gN$zwvUyk;P zc%oaTq=uN1Fl;x!lk`njVNIkXLT^6qEW2PNIsT+su)-#mnrDw`a^=g(K7ZUA39;?% zqLvz>0hF{f^%i9vS;S;?YV*|G9191Amk4UI9N=-?JaN^Qrvb)?WEK)h#Nc)Wr(*!j z+<}r$c_oB~lN;8w;4~E$U|3&bN_&fXtBm$`Cg~}bv`DS2jflTt+d^cpyDcS%pDA*G z$RZYPPJBJU7F`t00*}>^P&LR^?*U-8G49kVkr3?t7}X2$hX-V zGGU`m9=_nZl}MzWqp(;XV@b%`9%{P#1}`%yK+Yn`^SjAHUJaO-re6hF=s_Mb#k6J^ zm&7<>0P}@Gld`T$biA7)bF}FOPQEi!yR|xw9(LC_mQnSLLM(q(J*jUm;qm zMuA4QyW1!60~yV>%g`++q_Yo#CLO>o6lpWm|F+^rZx)Gx%97MQSCes|1-gyJnr7)Z$w&5{#nq-+ll z4mZL4o?w=%vf8JzYIUl)j8I)=(b=06<(QQeXWgPTg?-CdJd*6@&BGap*6VJc_YAVx zC7R{8xV|JAheLXy&RYCP?h4L{F!dbdQ|`7KZ^cH2+BlIjR7O5Z)*!rI>(76Wx-S1=DA71@7{+;WTa#IjPoeZ?L0MEKV|gm=)v+no7tI&Flue zj}b{KGL&%Gkm$#tfw8i%2kk)K4c(t-o4l3H+TF_&-V`Z}6k(5(saPhDdd$vbo=4wKvD>!5kJB!)99VRWQb?fHO@h1N5RXnKBEX@K7qUNpb#ia7pTLa~x z=Oq3Oo}g?%vuwh;oT`GZ8fs6Ykz}j}M0c5u42*rcAdb5B$H?~Wu`n)6SQ1l;MkS*V z6_ubg(sooelNdELWa?L$kUazzTr{Kx*Lv*yvGcCYKbC zj-g8kgu@f4SdqErVTt;UNc)LE2rEL|s;$YOtDA&1M{cb5{$$F7nbkpHARYKpr-D#q zRo!RWDG?oF(U}HJ$Lxk?+Ki>jP09Lz1>fwq+^RQ8dB_QoU-=rdzV9tLu#DMX&`LFX zSv7L6@}4K*K$v4_jA$}t4Lc`N$dHwUbpm001{K@i|6RZwr`$Zj6rAvAs0Dbt3ut~f zt1uTN(BT$DaA;S=r=-w)0}j9}wUbLYYZpmex(XOr39y%jj9WCHHh!8UM zvjqjSXQ0a^(?SBHo~mK{z^I|RGg)R;5caY2dsp0+6%#M6A~iFIal`^sn&R!YoZqv-^w8ME!7&YC#!$*|eM${#zEUggEsTFB`QGa`czDlPvSpJK~mGO2{GV6Ew_rEr;|~yA!JhveYOR4w&G(6=6AQ( zMqlDMjy1!LTFpo(F_X~QURA}VvrC*bf=1ifW&=Ab$fl|6Y?e($NCvSI%+*4`%9`G+ zEDSl$)TZy|Zi5w2ez43e$IWEq<(VQGyKZ%#r+AC}2e-?)u$)E&iPYOV=)w_JtP4A0 zSH-aDutuN_92ILF@T;?E_Z*Q(AO^Ilw?JHQ&82LRfXI_*Z+pK-1s%?{G8d*;Hz$=! zWr~_>EWu+wNjj3VGz%Nl>(&olCIgU>pcE}i`l;TIVXq2dh!;2~ zjO{#}ku^y(BG)U9K0*Gto!IKFzLb^~jvYW{tR^|OfN%S4cOVlc^di65^+58Xc}>cR z0wtP>thd)B#U&zJ((QuG+GpRW#~k#cvU3o`Nz5*eQ@z3p_~EWA(2dA7kJuhB$7cX zLp8s`lE|0Hoe+hhCVhl_3iI^Nq?wZ7;D}zAa1vPyqy(C0AXfo@6Vfc$T7=bc9heU0 zDY;UWT>QiKRY9e-|y(iTWbwm8w0>&kmkV(l|chDj0U`BrX zP!;FDBqQjTG?Zyd$>kI|W_wg(>BjSkxR3Ych|F(Rj=PI(QoK#AkeOz?eSkbOkF#xC z!FI6R_`WqsUBnJ>W{2s59?Gl>6Ve!usU%22g;ugmU@#>dAHp2A^d;`Pk(-h|B&JFF zDH>8D!0H5wzFZ~$jzv?lG0fw0?6yG(o1ZZ9oH$(We8vfO3PXM8^DD|mooI;zFD!AZ zvWJ3G8B95xg`*@KTFzUou5&ICGamEaO$FwEGjcMOkm3^LW8=0ds)Vdb<1Ih6xL<%g`M1Ygm z#=?&$piS@A+liZqstqYK){?5k8YAYr6R@RLo8-CJ)>Ueyq_}w&$sAij$^Arr8=5d< ze1hnji_sq2z;eo3G6t8sfJ{bpGy3o^^Vsr>epfNO>n?4Stut;s^;5JAqs=s;l&rPA zQJHTqlHG0fkt}$^gI<0YvyJ2>PXj3?DXg`fm@Kj@9i=9s(9#Rv0e0!I#K3g0&1PYn z=8lO7M|$B{LPFaxI0jSG>y93EHD0#)b<8hjcSVeDoL>G~V8PWIC#rFrw}4DHKAQHLpUhX|@RU~2H*8|%IElPa7 zjo-=qo$*gc6*jLTt=vpQl9U(~5!6NpY0k4uToUT7T6+WomgyARc`tJeQwlX}3V`9V z^Ic?iqs5>Nv%(UUG_zjpI&BzdK4H7QS;RCoV)nU<54`A43mefzqCSkaH$Dg$USv%#?428DHrwVBu9X0`?O;L9eX(~nQODUP$Zks8Lwb)DB`KwjaH?*VqFRu8_6j|o((8MiW3Xn9Af0X9P!Gch&D5x)fl~_WQ@5oF7BZG$dfxpNIy1@ zNOAhi&O3R!G&HE0>=z!J!^U^hYAz1iEtiqTR!~eb{?BO%O6`eTZ7#_pVkOvT^eiX_ ztem^HC}B6mdt&dhF~|{qnKY>&sdEOZ7mi$u`J5kxC@EMHS#N{$gv{ja$>igPyEEWbWWAL zGKHb%99o!Bd5wmcXuiH{lWGf2JIj$yZlPr9tVlEVewz2BCVYG4US~rECw82DLgKt~ zESY&?X8SQCX;mX;$M(PruSnGhY;0jmMbU44aT86Y#=K<^*-B@wnm5@dXD*Gi2TMe7 zLq)Fblk@Dl=X{u~y~MF)(r6*C%JeL!_j}0c>@8wov9>mpfQ}K zs2esfJ9jnxGFEc*uC@ovcbDe~Rhdz~`%@>i#haWwz&nbdI>JY5XK96L7#ot9KB;$V zJubA=;l-@9--lW^FAS(=LoxH$pa`DW4nOG*Cib}$NK<|56QB}+6xp{|Hs$7>0e)sXFuuEgbbWK?&t!U@8d#+0;KiIT&%@VSMFvQt7ImVuO6CL8>TvsyQ# zfV{%3*mT^XboYc)Sf%8j57qHsnbyQtJWFXf(QwFoO zSLEeKk^%*z8K3k4dPO*!R$aG;U-RgqloA zjvO`pla{pF-uE?XY!Y(gFaC`Shm^&3#-1(o6HL2B5goj&tW&5b;zqtAA&JV_bJWJn z|s#3AnJd47<$j(ftAU0*4EqkzBFeV8;9r#Qs2N91V zC(H|Ut-w}#Sjt_I;X+8M!^UVjhAq(g5V1$@|V^jky}3#5)@m^OUKK>W{fG-5C`td{!1IY?4Y#Wl6rmT0z2h?JrE#nDj= zLg;5r$qM^CqJWt4;dyGJP%3XNS>|>{_O2@T+!S;e_P1@x=(V*dc8$_9?0{@#VupiU zO@aR0leUX+vo~$g$_|Stby|Lrk;N;~I+H!ZnpX9EvD-=4q#$wzWDLOg7B~ z_Re&hjZ>a<5Hb{CeG zf>oO=>ykrguM!9l%>vKUyD=mi25oLe%_&c=WMYO#wrYx!@#G|HF80L3Op0WXV$~@_ zrpA%S&#+Cgy2L!Gdm%1`%-764H#e(EZWdW$H>(T*K}U13kuG3i=nx=` zPq>9uITpW&ZrVp!#U>2u=9IR8MHw@-R?x_N^~5}^%uv#)V!kkAFYe+Dq9%b%GE>y( zd1dj17zw|c*U^Avy1*y0Ok%IjF{H*2Iz_(!@ib%0(PZR3Gp>=!#}`!3S&q`8I5QMy z2R4Q?pLX4{67A`d^o66SD^g1+^M)8E;EsY&83J;~!DfzKyDW*A+8Zoxxz)Y`%Abai zL*d1m*tdb}QWFb>_jYrHGy2E8@AMUf(Fa)Dd+-9mbpB5S0g{iPte8hxpJXXP|3YnN z*Ctpc68i`>i1#J*%Wl9eXps&RpT!Q>c(ooZf_*ZLPz>g2=807IK|WY zLIr#ql&I}5zd4xRK3#y)n;be|-X_(n92xlwV+s%4QX-|fNf_f ziNw@1q{Mvn&ToTqE-WfPc$R33eVVmX27b{k%NGXtL_`|xBb7e6_A12b0?90k+56M0 zxzqph3{zkgOPf#4CL@(rDP#m(Mww@v8j|G4v@&E z3=*o)D~e^*{X&N+w-z;(fLB*0Ileu|-UdY-b!9q2>~OfHDPx+`_E11sJL~LoOeCy} zJdIDOr~P!9GeA{({E?tKt@?cP`oHpj)+kr=3czH zutqAqONT13`7_XeJJz7H#E+ zdrKmAz3ipJ8jgXufI5OH<=Id-;sU|E5UttUtbWiodSb62UvcyO(3q@{IQ65fQVbE! zbBs5YubtIYSd)XS{CXMUj#FcjRwAJl{E_Spt}vDGswIA6-z-sze7L|4HL*eErSmaY z|1(-B$$^+qe5(T9AUdSVCGH)M@h8Uzh+FQg28;u0;e(;3c6dyMAU#FQB^eO1Q@n>7 zDl{adgR-_!Vt&M8vy_rO{u)0;@KH|tzC6abd4wSyr^m-HsK(U6RvZW;Z6=E9B{Naf zEJwRra#=3FTjlm737+z%1nwFGk+8+LEC$RFu zNx76P07SEWPOmyh1k%2%Jk=(Kig!||@DfQF41^aBrKNCzP<<;+Z458t5Giy_LJD5M zl|qNYxJu=EVOl9)cD^~C34>)vA=%->a<}w{gV-u3fdf5dus~%^)LZgYPt#gHqoU$( z*@F$H5??#91<72SOFSzIX2O&6)-3E0(h1f)1`-*_3KPx75amX@$8SQ+T@`#C8(~5+ zw=e{T8o&=frBq}uSH$+A{a9{HbxQ=Y9`Q-s?>Ws3S-#BZ=*+c;);XlJ1^M_Qf|zy@ zI`uikc2piy5e_?|GV3Bg#mGn$s4N+Dh9G{&xr!sYNG6-57sD*wH&2fY4TcU20v>A% zS=nPo1UqYp$gd8W*ygtx;{tQjU4!k-52jaSHF$~dl}UV>eJS>7d2<6}z`U@dx90K# z3LKhkZj_+A>qtXZ!rf1@cD+nQDU(nknpvV_b^=PEn!&PFNhpQl7a0Uo$<|zHQu!&v z>9ZnsA#O*hP1um(fTT8b;Emkj}}X=Z(}6=<;7vt+YYefFg*^MSKv) zq@+=^tl<2!x~x^2Co7nLoCxZuo*7+RGKNane0*p^j=(_Y5+!#PWUsJ2VU?q2?T}5d zjnp<%FPPhEvsdhTSk`|&#^Q2Hu*H#;wuBOUF6n2TLuCBY3HTv zp-yrcCuvEzd&}xAiIJXM)Kttdyo-|l4IOFy!v3q2xLdJw7!^ppl#sZNqZ>nrlF^$=9PyRl+#DIMjY##of1F)wHY@ z+F_r<4Y#)lO!nkUKaR1KJ{n2~QCEoITgE5wj?L_JUn#SyCJJ@5D1m;pX@q!qudSBf z+z0QF4bFRS#B1X3n~pSyy}3DURRFx%@X`pXh(X&BJ`J_zr9#)l@QH1KGn`jpe@J;Q zqLeXIHk1`lD54>lONzRvr+z#ysu?H879_`7i>>L&j`=qF(&jKQAfiNM@@Caoy++|I zZ{b%PhHfvqr$kj?Gud$>Gu1s=O}#WsBqwBavVvLd#!rHTew3v}+{clju)x})slEV{ z4)F~^I?uQ$FlS`FBWrAt1P(G=wDTx_g-(iBUtn<0NLE$ZD@2C_$boQDLxN2#2@OOW zR^Uu0ZT;B6$Q|#UB7O#IZemL4>1vkgWk^(>h?^@VCdQ&zTz35MA7qIudlhFX_70Oq zJ`Wjdh;NR+v?M4=GKqT^v9jj5dT40%g&R|}l;tvK_@oKHoyZ`N@8zkK(hgJH6%B*= zrn8)LY@4jAwZACTOG1ak#$?0qvS+VzjRb5rUFCPAOc6~!ew*ZG%Nkt6fK2(2ps9!} znW>lc5AEs+B`K7(2FI~n*y2}WS?8+CC7m^p6*`FsBxP>Z1xLj@CZyyIEpr+Z#k1OBlts2fSxLm+0?sl~ z;qt6l1P<(ISAy(SqC9J!A5kGvXQzCHQ{hwQD-CokTG>Z%*vUN99PQn337eHoycQcN zo1$zt-IWxTIJub5k}6>vjCsvJ%=lk2vvWx)L~2!j&pF6P$_3C$Lr$!PjJkSouqsrK#o|pUEr%je*8uq zoo^Z}WqC^stSNF_I1xs@^qDb^Oeb^03#)RrkkdRRbQNO5`lKf7IV-|UUvWTeL)F@Z zX^H&snKKj8=6#$tKUGL`xbHa5$yOXmgg|<PF>fM zeQv7Btt>#n%$`I?+i}ok6_BIc8RlI?i7!$0lgh=F))H&B{KG9c%x?<`)Cd_vBzaXW zwNeNA0g`)`BBxHTVNsc9=VbS`$1iE z@nM|}G4C~dK9zukDU$J^CAO3EM7+JF80`sabwE5v%ra_dN-z=ivg{`84)!+LGIxkA zuKq7;r&h!T@uE$=CHYc@v**QumW-|J1yww{&ivK|NG7r05#~`Z*^czV86V!Uypt#% z(k=@=47EbOR_&;y3f_b_vuDnU7M#pH2d4L>J><{U4CdUi3yy`eBIGH@qBD}6WVh^l zB`^rs!=_%jfx{?1wYfy6SU~nNvE(MZep{SKL(Z>V=OqmbdkrmRmV--ePB68FQ zxpiSlh9kT#r+ijcb-a^Jw_Vw&?^dfP_~wM@8VVl-$)@^duqmH!InY}3tIEM+Say>6 zWG+Dnj%k7W%!PR}*I0oNQ6ZR+*y3??sFZ zHP0l%AcxUSY-VyfGUu$dB_?j(7RLb#x4(=@U@uC3LLljC)~Y$|nm_9koEa*s+XD_H zvu~?-7w-mqRzAr+|M@O85|)D2Ks9K`W5;X5{I=?cM_+o%$8oGW| zqfPeXIu=7UsV0l1sueRkGrfK*rjVw2#3du0AdAQ=zML*btf5Lp{JVbYr*)#Y>8qdT zNe&BwCqeL#h~qemv;mWwf2y+aQSpuuCsl$Zv>r|Jl5`SWP-#9+36Xzg0+|MBZZ5!K z2<%nXOS{B|_WGHP1Uz!}TCNnR&@;J;5~r4~3DNn-l!WPzTZO!23wS~@V1R5V%mka5 zC&utAq$OAcjt>Ln@$$7JpQd_mCNW)de2^S&FmR&$32!-_$yAJ5jIOC`hSOfKHu#PT zXLrDcG{oM6z4}njXCPM8SpYOI&yl~$i6D5q9OE=R-*+V(F5cxU9^K}e(8<0tzmMv& ziYgMPC7Nf-WBOA(=?1P11p>A-7h2#Ay9q*oU&Wg0d=gKNJTN8fAhIX%Y)NonfyZ2C ziekheLS&I*q^0bTBMVAzdBv&ZJLl%DSyVfvnV+(eLd7U_GO`hee7xFwCQ5^RWe?)j zzQ$=>FanD-9HeH7nqxUYmf7`OkwXv6oiT}Pkn|;7h=VV_Ghe1%CS{jV<`b{>s%(6Q z^HGuR8pp7xyu!?W8hU;wTkP!1L?Il_Xd2O3{DuHQW*@=ljG6r;38BXA)tz!A8;-pz z%8;SRTr@J+wA`}Y2s=&$94kS)W#x)dl_AOc%4fq#f2Z@zPqDFe%wHTi#v9?2&rR0G z?b8kM&dsZQWpYR%h#M0yUbvc=6_Uv`nlgnU2|;!Gfhna_tkrChrf<}uqWAWpu>vjG z!3H3_5BoI68XpKy3C89@O8{(q8Se%`Oxb1z5wUJ4c9?n43w(~tBd&d)*e2(kBD+n= zC0VaQhOCm#DM<_rmASbj3bIFk<@+@ng=CR)|&^;AXiV;tF63RGC(!4muCO=MU zHa|xjX08_-a306wx}a=vV|9PDxYw)vhIu_YwD}Ojk42= zuCu_bB&JL+PX;QV2A*R=EOJbjC(5iXW(u2QhX$**vY_P(_k7k(~M=`$emp!;XjY`fVXQ zL_Y@{ti%o}#}PAxUsTGPeNM_}-NjMI5M+jYQqKx)z$`3Dc~^F4$Itkr-zj4Yv1-p}NA>ANX zu@8{V$02H-CN%>K>13aoDOkA!BAKb5tstqrArEjks_Q$`QIeaQoR2vq{;`uq!{F&+ z7H@jGwT1<-gh;SO&hrs5r||9IWMNan(WX(>v`=!A_~^2i9SSN%qW&r3uq29+6Y+CC*|m2-lb$sBR=ppvQN%!6Jl+Gok!%atX&=CxAu{NG@)?`I26c(8wM<{O0{T&z^DzX6f;__ZB1h#MQnvQl z3T>Gf!gzCII3I?hDzQkZPT#ATYKw0;7Rx7z+_MDwW1+2iw~8X5;X|RKBGDLGIVeR- zPA;0^EQw))KKHDbF@iqK7SC3-jn(mvsRTB0RkCj4{luQ#hipNUvfwP+VMIXrmY6X- zAPVfv=S-EZMPX( zyA!=}@pNpqSYik^Pg;c%UKLxByX3B&&LJtxKl2tx)U8GcZbt=Cc=0}u10BsqRWe^0 zB49Dkhp|D)DfXjpJ7$V7&p>U=v88e$ z;KT@aoU?!?S^2WTQ(7m}BI*aSIlwk9S;RJ?-3)VnniMQ^L+cOapFtXJVYzM-0BMsP zBXKr$_NdoV3=}V1BK+=W-#$l9zrkv3K{F(uksG7IESACWFU0&e5$FwK+`@MRGf{A| z8PBsNrrLXiDq}GpMn@PX1Ztt4c^4;@eqpc?^>QUjW^ceZQ_WMNl(TIEcFhh8P?5}w zzm4<#*({QnHO)+I+!Z`4agwqd2st_$X~V9-IUe3>E!nn7Gze^Risppj;66iw?Mkyo zDrzXg3_n{z84wCs6#Jg-$M%REZ5T=jDl25XQJ7czt_Q(BZ%zw|#AfqSdxaqLd^p9j zgy|@&hf#NrI3 zijwtVh}mFGMAn!1l5x7s2SUWEW)f)*s(7ZNRHB?M`wXjT5%FG6z*R+O;%_>7$uR~@ zbyuG*_%CfChM-!Xt01_&CsL4k=O`wU-=A7oklp~QsD17Xf4B5pjc6YEOr8?)IdKxl znnP4fr$t>LDU{ZdH3NTw*2F$N!#Adyli%8mfHg%z0lNf$fc@?V2Vg{+AzsoswmQ zE_NbJPsqZf>S4O=4ZJP2Tq@WWk;g=2NR}HKVq^xrWwCi?j6O9D*XEznwToyNc7_rJ zaW)d8~mMΠpQzr5uOWd~A?3VQ6o5~=5 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 z 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ø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

ff9IutDo_%t$ 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�#`HHmMO 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≪7)Ga1a>ph!26uYrX)4 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 u`Xj>#=5NKS>QUZ_)7e<(F#tB5TkmPTbA4^@>a zZaywqB2?3S!n$VZp)}j6QnU1o^cgkDSeB6{YuYR&)mx6lddpf>R?D(lmb2;JdL)ji z9;j=5J?6FY>hUDuwdIKjUaN9F>2)%O?UK?ZQ&^V_>$1J|lswd@p0a()y0r9Z^J(*X zpq|Y{A|P(VNT9}k`QYDgdPgk{S@(uN9!+(N^eZSnda^|mf$K5bpIH0{ZRhS@gjbvE6o?+}SPO&E|alBK&GCqbGF z*{F5V1W8h4@I!(mX)~- zNm8WAB;}oyr%5DKDHKJVuqs8Gj4UF=h?68mCaug+HBzL>kj=Zi` zQnn2>2(3v=msYz>=mFEL_1R{RnOX7m5mQFMavrsvq z$dD!BYO5nDkB~5FLDG6xT(wXoT)@=Qsp!a*vcl_>)qdh3l?xl|P_490Op-2eYHH$I zrsi6(mcRv8Et^%m3m^5ZbWoGr#Z|M$p)?m*%`CDyND7_Qp(jF14M|FpG?_|=R&{7Z zN5Z`8!44JfaIM$jTCOA1GPJ(gp^9yGj`>hs+c$f}^<2$%s;bz~D(hWF4pc!$gjTs+ ztYs{B$u>}Z%bT^%hBsp*;fgHR@8Y1}M{Iv2gCATF^rwB`_gn2#x8Emee}W`F?EAfo z+kB|^$8wHFn}nCRzR7u?NpBf0A^LsR_xr5x_o3RKCL3lF*5Px%-v@GkGUOX-fy<44 z*8u%Kq%F_&XHp^Kkb#6gmHT}v_xn`tcX7}kY8_??op zP*qn!&BnUgX|~SQPQNRhepfgBt|^*LahcNZ3Z_418`l!eW*E<=-}OX)-1e?1`dw2r zd&PA{vl*@_`dw2rd&%{Lp*LwZ&(wCwurAcvx_`99ve1%d?JW;ow6yjau8I`O{I+`z0R0QW3en81RZS&Qg{n@(a__rBiVw(M%*^BP}mkMKY?F zQ8yYHb)u1xHY2Ueq>3zD*i>8&HM4WNRx#;A{j=6*)x(d=qe^IH3>PcS&D6k!V#PJl zz$#n1@@r-lmtE+wg!zP$5~>nf+iYp5d1yh%%8z6!``-#p>ok?s@`mgiYS(D?v3Zx1 z4K;13MYE$_YBl20yJ%}DrlF@AF1Z?tYv|bK4hlOXX*(UKR>|h-bc3>lGo2>O&`Ra^@-idU&9PTVfqNKgf(CK=t(>0cL(Kty`o#klO)a71h zQ`#1>n3-7Ii-f6Uu@thQ9P9Ln*V&OI73*~Q*xBiIXPOMzm}1Dp6(gZbGgEn)BuJ4? zD8z>4uplAtM8<3RBqSphG7K|GWhbpqD%Z<62~wn!YECSroKTUJ46N|=#58N#Y@N&8 zW)^xunzS@w!?gU;%1leAS&Pp>I+k6Icuw|Z1ims6>{<1>}w6_uxmQ(nvRIdgpA$&$?UOU>Tc5G%y~H=OoHwYmzwO9|!b3*hRymtRLUluN zAq%|oa^6`v@1&elkdv-$yv=f<8$y-v&h&{S4ZfCpArHKRooB7XyU^!~b)nmuUE#HF zL>h~iHnAjBv)N8?h;lmWm!tM#(=7i>>PL<7vE(~4LY>E0ixeTWHRH(`4vzY#5_A7W2Y(G3#R1#jLX^LE2(dXO$jjl^$2% zGK|YVo<#b%^l|Cq2K!Y+ifmkZyzX$XTSlP}D-zNs!l1yiC!MrT#(D?&CFK_eOZPHD zlo+9?1S!(^3>zpYWxKF2WxJF*n1tqqYK5%A;xumAG#jF4O`8P|tVkL2~7{p z3Dr!I$w;4(J`*yLE;N%QX)N2WB$b8JbEAH{l#a zA&oxC=+3NkW*k*0k0_z3Zo)OIkumiXn(ZFnK$VoxOcsg`*@oV*-W|??Ua_p%6XwJ2 z2;CaGso84HZMM|3*%H%cZNoG)GZZI%vu1iCRJFPH-FI}C)jcEk9!-_!gO1P?w^fx> zc0aMKSIh1r`WUv$&FdByJ7L!&onG@{@0P21<+?h-Em&o`fkb$n(lrrcz1_<4kf66a zp72zu&p14No-Fl6(qt)jdA8P-BpoUDnfAH9F84*Hi^j`c^hFccCYmyzGPP~gOJcSFwS0-#i9LwZY?#n2k zxgc&^59Im=s^yuNvhj?s%Y(d7-9F3u!o$KoPX+rD8Ok1?NkdjM;v`9t_4Lk@D+{Dc zHmm8mlD6O(qGw6!6RM8+zVO=jxPeNg)FU;rFQZv;lB7tJ)lBnYU7zE<+?Q5=4AGfni4^tP35W?>voDgK%(|4-E_zS0fMG zP?k;{=%}z0LWfzOw%$`u58wzL7&^qfr>&kgq5;ho>5p(+{ryiZQjpG%3Risx>=Z(+Nzm;^~Y7RzU1 z^1!l+TTK}eRTS@$oiCu)kqwDGr>i8CO#+YSJp8oI^Sb7YXLY`< zA`j2%DrP+f^c~kr+?%(7^`6sJLNYv>^M%to&+RlE2|cT;q;2ncT_wE46Wf7`cy?FG zNMm*Ano!kL=seHxR5Bz)`v~2pM?#l-Qksv5a}-IFu?uviCztuCWwOajn%9fXu4?vT z(rfGVU~^aLnY`}EdxDwQoP69mJ(X8{b2oa5+3ezkG`c45X=dKj%)F{< zWqDnZ*Yvzz$|tS23-X?3<~_;G>z%wOnR&gD*Bi~vUxPvW!f=tBo^ zMUhG&N<6G3>W*(A8mqX-HIwu@X__+4n%V+)stca0H*<3rw&EdErQj}c!EN%u10AG~ z`83zl6(6C^Obc$7`@UT9WxC?~Y{eJqipOuEcsaPg9CW%zT!>d(`VM5~R&%HO;+`K> zJhGGCqkZ4VNmL5>MvD^NQ|?UI*(!V@z+jbAM2w9Mloxsyy(W2(@sPRLq1&$7(R z#f|XJWImd-_nVC`xaZ%jT1en>d7$Z`@_q%umvQut-*ND@83&p2i4k7A7w>CtGnHpy zs-N<7UY~_};n}CDt^LwOXV@cXP{^?0cOf)PTF)VxO?M~UV=3h0hQ5bl^4Gf=+u>e+ zLDv^lq>!~bbV{g{8-NxxyE=5=K!0TAlT|hzZ<#7AY~;LIpfg)>tyFQHr1gYu35P)F zWQ!d{u9r}}=LEiAkjA{D!B-$v3LU6qM^hmjLCvEhbmrgpw_a&BRhD5-6zqxS9&7Fi z>+Fp}C|++B94G|`Kq2guW{+8}X9^C8f?g@;m4aU>Dd-V5bayr+vgl&J=wiQE zj}ec`E-IU7(llu*yQr+9vY{T874>M*Ua&oBGGwC`M?mykI4&c_-wn3YrtD z;X8%2r0{LF*#RD-o7yI6o22vuRrSR}`mmTZ8M2D@TTugz4w6`T7SvN|zce<`we?WE^)B$S2M0RN z+fpq_k|Iq;*EzGHhN|pt16J5H90zei$Ard)ie&tr#=tSrJfdtEu~G9VvQZ@a_4s=K z##nm)D#_{tzed>n->@=+!k?J?bF)Fi7*2!?BPdX1G-DXccqTH5$xLB7GnmONW;2I* z%x3`$S;S(NFlZTn+rkirGK}Fw$S{HeRYo(0v5aRTlbFmDrZa|gbX7nP-Qe@7|VDjGKtAdVLCII$t-3whk49r0Sj5gVwNyydF3;Np$ua<5i*RR zK$X#qVJzdB$Rs8+h3U*-CbO8$9Of~f1uSF{i&?^;6_n2qhBA!dM946L0#!ychOvxi zB9oZR6s9wSnapA~bC}0`7O;>-EM^IVzM*`EFqB~oCqjl16sR(qF^pwA6Pd(hrZAlu z%w!g`nZrEhvw(#xVlhh?w4(9}V|j&fyoM3R?+RmgWf(z$Dx(?0SjIDvNla!6)0x3c zW-*&N%ws+aSjZw4vxG37Rv1ewjH4CC&l5qjG#c3(Trg%p<0g%uK$X#qVJzdB$Rs8+h3U*-CbO8$9Of~f z1uSF{i&;V#^mi~r7|Jk)6CuM03RD@*7{)T5iA-WLQ<%;SW-^P}%wZn$S-?UTv6v+c zGN#U8hA@<23@1W{5frF0nlX%JJQJD3WTr5k8O&rBvzfy@=Cgo>EMhTB803R^Fhdy1 zFoqK$!w3pg8O<2RGMh&J1QUi`mR!9`jkiLKd-@C4>+D!3<$2!x&D43?nE| zWi(?L%XlU-iOEc1Iy0EbEM_x@dCX@43t7ZsmJr6Z31ixX@oa_?#<2-w*hI)Mf&yW@ zn$e75EaRETBqlS3>C9jzvzW~s<}sfIEMyUjS;8RWstjfbLm9?!B4ijrfhwaJ!&t^M zkx5Ku3e%avOlC2gIm}}|3s}e^7PEvwYbl>03}qO@iI8Cg1*(i@3}YG3L?$trDNJVu zGnvI~<}i=>EMOsvSj-Xz8CPU5Lm0|1h7%#f2ntjg%^1cqo{3CiGE|gbX7nP-Qe@7|VDjGKtAdVLCII$t-3whk49r0Sj5gVwNyyJ>?U| z@(AO23?q!+5ytKa<93W7jMovy>Ima>j3JEA5ys{S<8n-5GE+8t|K9xHV{&J++SBG|o|nPw)mooNAqo~CINnkFG>+H_DUt3?Eg z3RFcbi%>+d$YKG3%4S)ViYx^M3JO%cNClCy`g^@U=X}mNSx)Ev_xq>!@pxXGCOOOJ zeD>{N871uTuok5#gAe7XL=~#xM-Uz8LF@jNyVH^{f#1y76gIUaB9t&8+5|&ZI z9t&$xiZb|6j!IOa8h!-Pflfq_L>40$#Tdphfk{kZ8Z(&19OkirMJ!<%B_HMdC`B23 zC`To#Pz^tV=s+hTNFs|7jA9Jqn7|~aFpU|^Vh;0Iz#^8g4B13|ElN=aAIedQDpbRd zAUe>A2$INR1fv+kI3_TODNJJqvzWs?7O;pVEJOA;ki89LUjy0GK=w0`y$mW*g=+W_ zL40$#Tdphfk{kZ8Z(&1 z9OkirMJ!<%C7xDe zp&EV!(Sc4xkVF=>%A3=1W6A>hl#Rx_* zhH*?_5>uGQ3}!Khc`RTNOISw9{+u7BD1#5>s6-X2;YSc1=tKlbWHEwKjA0xTn8XyO zF@ssmVIB)u#1fVvoqcOjiZb|6j!IOa8h!*J@9^nF1W9Buf>DfN921zt6s9qQSxDep&EV! z(Sc4xkVFDfN921zt6s9qQSh#-k9MlgyojAH_m zn8Gw>FpD|NV*!g;!ZJ$MbAFVf3_g^j5>=>%A3=1W6A>hl#Rx_*hH*?_5>uGQ3}!Kh zc`RTNOIU_<^shxJ%HTseDp7@M_z^@0IuSt40$#Tdphfk{kZ8Z(&19OkirMJ!<%B?oeTl%fni zl%o<=sD>Xwbf6OvB$34kMlptQOkfgIn8pldF^739U=d4LM#({(AEhXR59O#t6{_J! z5FO}51W9Buf>DfN921zt6s9qQSXKm8e2B{0O20oroZbEJiSjF^ppZ zlbFIZW-yC6%wqwISi&+&KF|44iZb|6j!IOa8h!-Pflfq_L>40$#Tdphfk{kZ8Z(&1 z9OkirMJ!<%C5Lc+l%fnil%o<=sD>Xwbf6OvB$34kMlptQOkfgIn8pldF^739U=d4L zh79tpMJdYQLpdr@g=+W_LVhrP$z$B(HjTy{h4)a*RB9^d>k}q(6l%fnil%o<= zsD>Xwbf6OvB$34kMlptQOkfgIn8pldF^739U=d4LM#*8EAEhXR59O#t6{_J!5FO}5 z1W9Buf>DfN921zt6s9qQSXKm8e2B{0O20oroZbEJiSjF^ppZlbFIZ zW-yC6%wqwISi&+&j^O+#MHzf3MVhrP$z$B(HjTy{h4)a*R zB9^d>k}q+7l%fnil%o<=sD>Xwbf6OvB$34kMlptQOkfgIn8pldF^739U=d4LMoBg2 zM=8qSLpdr@g=+W_L%AF@0+j#{w3ygk_Y}aekDd3_g^j5>=>%A3=1W6A>hl#Rx_* zhH*?_5>uGQ3}!Khc`RTNOIU`y9C0m5Q3fB%QHd&4!;c_3(1{3=$YKPe7{fRwFo`Kl zV+OOB!#ozSh$Sqeq=ECJ6lL(C9F?d-HT(#o1D%KK(M%2A0bRKt%TI?#y-lE`8NqZq?DCNPO9Ok)PKn8Q34u!torqoj%R zqZDQEp&XT{LN)vdq63|XAc-tSFp4pZV*-rg5egx5hPDGGI79$wN z7{)PyNlalHGnmC3=COc9EMXZXn>as8Q3fB%QHd&4!;c_3(1{3=$YKPe7{fRwFo`Kl zV+OOB!#ozSh$SpTUW&RFr6_|B<)}mzs^Lcv9q2>^Nn|mCQH)_66PUylrZIzA%wZl2 zSi};RQ4-+%C`B23C`To#Pz^tV=s+hTNFs|7jA9Jqn7|~aFpU|^Vh;0Iz#^8gjFQcq zAEhXRe*beM9E&Csse#r1u7<;EJXlQ!tNFlcKCqe(tmXr&`M_#Eu$m97<^!wwz-m6Q znh&hz1FQMKYCf=<53J?`tNFlcKCqe(tmXr&`M_#Eu$m97<^!wwz-m6Qnh&hz1FQMK zYCf=<53J?`tNFlcKCqe(tmXr&`M_#Eu$m97<^!wwz-m6Qnh&hz1FQMKYCf=<53J?` ztNFlcKCqe(tmXr&`M_#Eu$m97<^!wwz-m6Qnh&hz1FQMKYCf=<53J?`tNFlcKCqe( ztmXr&`M_#Eu$m97<^!ww!2iGbK(TkKuKsPuA@F{-+|&Q}LH@`7s75bN!iD$+9>Po5 zYYnexKoyQg7T?EpxC77Q4eY%WTbW}kPQthFGdzyJ<8A!M&U^9FC)r!g-K)Y~GE>@dEyZop)#dMARdQui`tn0r%r+ z?6e23T|g6#$0_(OuEza%4FAGz?;kixfcEgr}7*p0~Z8GI3~=)>udcOKq} zXYnRJQOdc{g+crPH{*|Z3;TY6^Pmo`=!3jJ@M_$QU*k{s7yjcvctr;q(1Iw=!uN3p z9>$A!6KnV8b$VEbCVUxjoQg|u9qz}Acmt&*fc?>g<8dNR$G31fZpA~8cjdi{5ADP2 z5)eQSzJ`nNBiw;kvFpBE13rTqY()xRhrFNeYCMQP;Vta-AzlH5gHeZed=+QoQe2P6 z@H%!cBWzIxKiY62zJ_n&3fzb1@D4uwVXgy*<5--GAK+Fzfxlqaj}U+GIUI{qa2bAu zr|>R5_EEO!Mkh|j#kd2{V)u`64pifKoQg{!?;VqOjqUt#_VmO-Xu}{b#4UIRui@jL zAU$9cjzJU`;x@=TyI#R=|H=NKI1EQ4fs1hyo`Jki>q9=m5zPqW6kLW|@dxbmNv;K7 z#4#AgS@<~~##`9;zc>aqBZKpC1MbA*katFX@V|L&2#&z{B8Ga8Y?g}4^?;5odF53l3*2;u9v z0{7w>?6RKMSD^vjI2+eN-na4>ytk5T!{ImvC*lHJi$CD6cpGI05I@n3M%GI1Z=cTet@Deh_&l$cxzZbKDCK zz-AnW?KlG$;5yug$06_U*!^I>k1t>ojzS-XaVD;Wym#XmgwCgBJK&<%M9!$tTdp2q9=&==aX5~{$v6*J;(k1fSF!t-xF`4#!PjsVZpIUk zef~?UDHG9#0gT`~xB@reG5iDXui>0%L=eu<~?4$Azb8*D-+68Hu##m$iY%>RZr zQMQ4+3)_&yX}A6K>+u*~!|t2SJ+2Srzegg1Gx1~Gg=et)7QTZ6 za5RSTb&TUm+=rL(Z|oD~y3vdn&cubd5_jP**!f7x349K@%I&c?O49na$(?AywD5kwLbn8G|>!A@=De`rP)~l2NjE(5QshGgcxEFuGi}>I%gf)&v0%zb-+>Xcacf9Azgdq+@ zC(gjNxCf8p-}vOQqyfb7T}qi9c3}n2AUDVw{Z<_!6Wz+_Ub1O z!7&)Z7$)%uUd0FEe2yCQ;4F;e7kC`Y*gHY}1z*N?T!}~UHug=@)u{a55<8nNLm+^r?$|P(+0^hNR(aV$>6S-2Vx;P2S;G}14=gjQ_FCHOIZg}-9&(>V@0k;Yk=#4UIbFXMw}a2&KE zgtKueeudxSIlPU1&*WI>!Wp<6Kga!e4sT-5uM-w%L=~ao$EI1U~(2cL)hxi?y#!J}kT+WTp zp&lWm@l9NYn=p%cynuh>6X#KWq87*C6r7LCaRctc6ZjW)9pm`;3=YSU=tTw>;%fW? z_uz57hMmvn95@*D*n)0+9hcyG+>Iyk5=y>By2NL27`7sXQ*a4x#6x%yuj75+rhSY5 zhr`i~ZVciZxE$AG7Ej`z*!??{UpN>YNZ<^N<0rTmFJSizXscp9zJy~C!&h-WuEs66 z4}Zm87xGn3 zV)ALUA%u%?E#~k7-uDCYARLO#=*6kH40qu%yowK9LYzh&x{$#cI3GX69r!KQ{E&JH zHsJ)EiE-S7=kXdoF~PG(0%Q0&9>Ozt86UcoG>#e^g|A`^6Sx`A;BWZwWqb$SI0F;7 z4!_6qc;DrOA?gstD6YUS@BsdRk}Jrg@Npb~8nmDXBRB__;T}ATSF!JpsDolNj>YM? z26tisui|4@60gvSlW_&^!4r5F|8*7RFOJ0-xEM3|D?U2OHN(INeu!J~0^Y?wSJO{{ zMx1~%aTV^tb9fDV{Fv~;dK`&fd=o#$E%-fN$DY@a7V!lfk2Eg8b$ApnqU0w$Gt}XD zoQf-O6Yj&`@New-Q~H$9gkzD#cQB1#<*M$}g;B;Jt87$x(eCRsPhvV@zoR6FE2zLEB_l9*i5}o)eF2RkM z$2<7=^^{N8hV8fzSKmB1MwC|;7Ii0G+c-qa3`L|JNVBVX)9nWPR4b(2T$V- z>~#~@gl3$8^YByLh6U{M3*sU6!=d;x`f(~Q#xHO$UcheCd=Cvc5$E9txEp`L>)7jN z!W-L=#wj=-*W*F_6Cb#RD{&ZA*oGLsf{SoJp2XYu_%BIw zXuwez#5eGLOyf!X6>p*RHtMWsLI-+~#wi%bHMk9r<4@S-cG4gY#1S|iDSRCl;iq^I zPh-s;+#5cNL(qnPd=(S80Z-yJ>@h@CwTACO+XP<9XD zj2K371%8F!Va>gi0XP)LU^~8tpW+_;32)@&-~V*{c% z1DE1@JdXF=$N6v|>Jh=o_$H=s7ygK~_ft25AN@E5=i+<#32w#XcncqUfP4j2I04&n zF>b<>_$%JUM;_$*(TF6zj>~a3p2eQO;rU`CPQ*B_#w~aP%h>0)QzxB|D~xA;4D{ypgqhoK!kI1@j_ZFm3+cnP~b!gp~5TG5TOaXD_pJ$MpJ z*!5AuAC2h5ATGhRxC4*kulUGgq+@Ktu{Z%|;xhai&*CL~;BoE=tvC_i!ezJt_uwh) zJkN8-L8wJL`fv^=a0BkgJpPU~PjFm(5?{bZ9ETJxz?HZK593wr@+4&g4#FlJk2JoH z@8BxjiO2Cg-o*$1Ks^bEp#@=N@eNGkLHq+B{Udohj>aI)!zH){kKq-RJVkinbJ&PZ zoP_VY;{x1>-{5uZ`zP`sG~fhm z$3?gf5939A_|IHF+R%*?@fDnnpW$J=jkV8nZTKu|aV%mu4_D(xJdQU}`T}(z9EJ@D z;cGYtSK$u)22bM+?D-=348DvJd>@mz6A$BMd~lJv7yLK|NqiGm;XeEoZ)5krkiOA^ zFtWG+SK%hyiRbVpKJizc2kLP=M)6}jh<{=2-$+}iMG&XpTeubX;c>izz5bVUjYAQ^ z>6pUr@C@F;Ctl(>=)oBn$211sR-=DLjJb@lWjbPvRv$gGLxg;M=$!3wRxSzs7lS7&ah;Q}H9r;uXB- zU!*^jqaIt)i}Nvo8}KMz!`j!Wx1t<}q7`YJitpoAJc4(z-!kV!Cr-nK_!(})Q&`3a z-k=_VgHVg3ki~_#6Mw+2Z<2T6Fl2+qQfa4R0cOL*VE$@_2^wjhHG za4Vk1>)5ko4RgNMlpKr=2qBAeaV>7c(^#`+P00tbACANz&cii$0&n8IJFO}C2r97! z#~_aLaV!3eH9M~<`3!;>z<2Qz{2H%g?R(ag{0|Ppu^7NPxE8bcCqA{ynvyT!1PtQ) zxE@d8J-c#^XhaXr#5H&jf52|Lttt5|0yqX|;u<`FXHc?sP02p^66F7yj8r_F^0g$4 zZlB+J2W?#>8b2{(B%^WrPyVnm7>>t=eT}hbZ)6~Cf6yL{^@Y>EmT+%05jSGKK)5>^ z;=gs__yEV%hiuFYWKz-eKs4n1v^g;p-oMosNF-9>^k6g=3)^3B4#yMG6bI{1q@o&Kqi%p40~Ngn~~~Dq!JYk-M!&ZqQ5Kbt4n0! z1J2JkhkUh0a)1jhJmuDSv?pqxs5P02#s}8d>Fa0<$HK`-BJSKnYbYF#hJ0HF!>L#z z(dVo6?FW4Wo8?`0b{7k@NF{) zKF|C1Ct^Ihrc^lWJkgd!s4p7tjTrs;flwPx4Mf8$1b&b!2(R>onwZgV#6w|;7IDuw z(UdayO2MP8iT8#*f76yS;_2bopb?K6Tz7weCLWdNmmfcxqj57vwM2Q=cHlJ<3>)l! zwGI#>#O20tD&@q1)&V1KhNV~JYc+WEzUE9{cz>Q&{;3ZjhM8Wu9WyTGAFw_g8!&t|q=#A~9S(%LNjI?~X(E_PBqicnNyHzHcc-GE zJ`$K*iA>^m;#R8>i>A9W-1fG0HS4_6i=S`x7}*`B?zT+uO6IH6BY6fyece$pzA z4@KkM&dKXil9}xAs49ts4Q|OJQ>l%nIO=9X+CJ|_Bb5pdIR9=j;@yc@lH`*gssVDH zNSIu&P9hKweIV=$5=OqZaH^l2#huqA!^9CIwS!dFE*H|yo!VE^YV;@5i5=hRmWeE!3*vM+rpo46ekq%qXz z+v3VmtpdX=awH?S@83^MBLwRbae^xo8c-K%7Zq{2Z0ldG0~9nvJZvdliWXHtBNI#O zN8J>rbSzc?$;}X1niKBqg;?J=7!3~<-e7CQ7#PTq7z=Ja5c1W;h&f!4U5FNZiJXr7 zG-8)m-hs^F>N2STa;O!aL>q-_x36JX@^C8*C`>7=bSMRkv{T~LC1RQWF7n&fFbN~! zDyADb%YKqHcx}C0ep=FxK1ORa+}o3ihPz2tl3(h-ThDr1(QvBI#6yNF!4!r>xSNDn zM~%TbV(WmfCO$yn>tx~qBjc_X984G!?d@yWG~`M=l#WDvv$*hl-khV6vL_TJ-si_& zf7(?qkivRMuFeixvnG`2@onjg84;eOeHm@UGzr!abt8%JRvfJvNc0&iJid(vi6R&w zB1e->GOQ!Bp^VQEFYP1M#f+5Hp;Sq1R?rHregjFTm%5p+jyN#j&aDc*x-p!JM|*ib z^(i@dyw^DqHI?odXRb+cI_FmE5>yo^th^&^v(d*D5JdvV`7NE}P zE)ll$JDD3XAue@U>XD&nvRF>PEn(h(zT_eyDskA%_jQ>=7)Y@p1%i6OR0flQOsqSV z7?LF7JhgyS&AG;Ao`X9iN2ES~Se<*sPzCN1)aW3?&k- zirJ3K1^u{+1cJW8x=12Kql7wechP4RRJCpA4)UXUkcJ)Yg1YD+1yWvQq9`KUu^Njl z842RXD7l+cO|l+9z&Ih{$_6uOnzX%6BrAwO!AvTo@+t3lP)8OQr)5%QKa2JV^%Nex z%JrN_O0y!7p%R#XW9{LAOuytg`5#avQ|Y)^^2w=ao?HQ-lzGB>OUbk@_kvQJxZer^ygI%tv2C7ulNpOXQoL@D%iQ=yAgg~@g zm659MZ72PLOEe=peGf(Q6{*Onc93^WGK*JsaWFKb>wU2IJll^b%dMT-K=09fhNyI7wswLP;i>a$i^5>*9 z@^$Kw_Jg#^3x2(s&I8V2f3Y@`qBgI8wo>(kz@}&>4mf2EmqNW&nuLWXsyE`QVOVel zJjj6_%JagX1d;>Ju_+Fv9nm^WeCT(|^P>#HZL`#kRpYPV=-ffTNJ&@3jp+mtwW*ZfDRjaZ8!q<2dste8jTSF`yBFCr*(A^`M zF>%!XOzLl(%^lmUSXB5BHc6k0uO^%#-bu#_A&|5WWcDGr8&i!j3QOq(B2ZIKWyYhV zkSvPohm_>B01~PoPbHnSWadl_{gm^+!H+gVcI4I(aZ`_>(E=% z>Ck!}s#MF&XlZ@mH~OP7sSHbR5G@W@n?Bk{Z%W^=&z*(}t~5UrPIUR&r0P#+lS)C> z4|L_qj03I)SX;C|?9_e9ZY1GV&``{BIqnKRE#3^FF4e(q8op_Y!a*O^A!=I{%?4eZ zByruOw@w<2(K^iSZzbiqx*h`3aU(5AvyEo`%nYVlLf6a$a{infdIwi>39867gD@vm zY>82gHHN!V(kZH+u~c_dRaF0BYiuCeFV9^6p^ZKysmWz}jF9vtQ=I4Lol*@`f8_e5 zXHnlTac6+IAjP%2QP>g=caz;T8BQ{(@on^NQEl!X_eyaD>85<^Zd=+C5LUEHn{R#ZgN z6hTH@`V_b-={J(*MV*uL)DR`;hNnh6Ovcn7rI$;dsgo`#S!r?(_ztlzvYt9ZU4$0C z^xo@BqW(HCOqGQX2I+8jWCIH;w$ z;QeWv5%P6N237R8(j{hu18qyMFleG@ zha9li^9z1sV1=Li8S3haWqNwNf6q61h?QyYZzQCd?)@=O$@9bJL?&uILa#fd`AC%K zId~qVHeqb1;E;mA%%VJkxjq~+$XC7F`z;yDTB^O$QgyPYKq8(>NUm#UFZmIxHbYKH zA*~y7WK#?dbx~EZV^d2e-bdBY>keD{IH~HOFB;8h2B_{3ub;OW+k*n=t-*Y3qOj2j{IzoeyrccufD31rmpbJ^G z>Kw4LF0vHzTvbulsiP*=osbGZf0C+$efqjgEGCsjyXEC^iuSHlsG`joW{?b6s+I(n zx_B}#_uyJ8p%R-ucPj(PDr&0yhisU>`7rgm#tg0K)^LjUJ%4m3w4Eetz-GtvyIPi6Y)g>wbGGkv*?j7ceay%tF4i6tjlxgyk&&} zY@LieQV+dpQswgaw3)CUb`5T+N2)qSc98Dv$l!6{;?c4q$kl}C1#q6qR=O2Ej^WRc zJ-B+Rs9YHoa{75T#u$Q@!R`F8B!iIdupQ+qd1qC*oj$g{`=FeHGaB7YMM=@Bb57ro z&AM)*ZQZtYb~4aMsU=Q@dl*)r&mlwR&zKR-9@i)o?WIAfR7yJ`|1Mm4M*c@_){X1D z#2BLAnPYfm}; zJM|ZSLRxM!hGS$vI?%1#uH%nR>~0Pl1cUT#I1xvWQMbFtl``EbtI7{xCs+$FK?fOu zNdHNTWHT$=LaV{Jm6R;fAS!&2bYmI}%-eCu4$-_q+topqf32ICE|rcrGf1oep~lvy z1If7w>qAC8naw5L9JC7a4_HfCQzL^y_Qm85>R2J)5>AIQQiiLt+zIFA;dq>(acZwl z!DGb;_vo+3!Bu#gg;xG``4dCZ7jqP~&0eo-lQ^daV>}K|IO>sHk8f;BC59`uq(k9^ zt6Pdr0E$uq*$K(QtLy2JYLyJl(}G!eF$jAV_Md-$~Y`&!B%nDVB)JOaeXHm;VK8$lh$&IXPCrfy^l!^sTJ$9q+SH z3+|Q4K`UKIB$`ZyhwO=n1y{guMO-Fk=^oF5FA%pjCeqBIq_p$Clns(33%i-=i;bsw z22NDnM6_fMh~$Z$1K@U4(80PwN##WSP247vOTs#X^m;a1`k655boJ|IpnkT}sYR`3 zy*)%M%@Ebj%$=&>&Zq5g@rYsc6Vs4VJr-Wy7^a^!>}#h56d{<4cDUFnBLB`Pd3lV| z1?R3t7At58Ee5X1QD^}ctGzg(X~zQ&&gEN0p$?>t>uT58xsP>S)JnP%!_pnQqu_8J zz5Px5bovZiT_dCWSzU)tK}Kgi?eGC|XQ?B2ABEalH&IQE*6gU}Wgo@4yn?GTv*W@H zfk-2RD>}aFn{cO{f)DNU75T)ROHecxSdYk6_4J4?&a?FRg7mY?TvI8r^P`mO4mL*_ z*QQolcze={R`nYv;pdI7v?dd3woAb+)-$=hunLqPer=4*NOJJHI{OokJEU%qHZsnI z=U<&GYg^%=GqYPNk}~wQ(zlr8)0m)BC%0pNaIw_^P_|ls|!A2Y8A&NTccdesm2BAK$78Cr*E@)#ZDF` zz*84zK+Y#fH^XVStT+hJLDf zMn+8)EO;c1bZELB_0h&K6>in-Xdi^xZan%{25$9XrF&mBPW2z88X0wZNf}`~fkbUx zL>pb54A8q8%(bq`m$lI>eMkk@#o!&~hSlb2WmY*8Me}2tpRv8Lt8-WU` z&#a@}m@^M@8G)udv1mP=TN$YSj$paVkxp~lzdT3k|>=%U+K+GF~2SpekB z5~>L?K|y~c6W3)JU*;Q0w-@<;&a5DrCK+Zzr+4+anS(bw$MXf~y>4~>P1@(M0mC(H zUDGc;%H->GBe|vqF-?J4T*c>HHOXKl@zWK~sTgBB|lDr01L|EM_ZEkJ6rKpH&uE^+-V^F{oVD2+-GObbs3Z0$E=; zNzzswb-9b6{Pf?*S|2<4I5iA?b*f$M+p>Q^U!fW<;B@w&zWydl(PV0d%67K)_dBE9 z8_Z=^I&sPOivFJu}Txe*h)V+K9+`k=MGI)Z_TV)_sAUz!!JnGrHQDBUd` zjrMKie3>pV`_~PIOkdL<*QucsD}!^DhV2YeFm5F0$j_}-C>QO*S*D*d=4Q>jZcS4E za}QqBGHrp2U=Dv+CN-$ZedcU2bzu@T?cLEq8F8d;BOdOQf3k5EDXkNEUtr6>%$t7ygNe4|E=_z2PLwBKBn;}?ILu3}@#rc6F1$wuh zHRHZ7DbQqQgB8^3DHImHGGHMSIh=`2I?Ci#C{>$LYQ^>uoyX$w6Ti%d)04*CH`E}p zj;W4bdB5tMcdlrqK51E+$Z9i2g5CKHbN=XeuqMwQWM8paA0?%FH$6Bk$qg+DO088C`MD?ch4oD~#LQ_pS!{^hG*DOI|G{3WvN|dNp(dP%zt}>hYlT zq3sj@-_L0dhEjewvDE7%DTC*?(r`mz5^Rq4kkF*+IKFfwtMF;`M=JdG_toI2{T*^HdzOxsq8bNe z7@(Vb^0;H&EvN&`ePxFnYM+SFE;{SBGg;mH(sF+4OfIdZXP}#Du1@ajL=)+7*Jq}+ zN@Gr!4W11u_gShA{=EJ39j$6$WRwaB8KG6`nVsL#1fy?BpVhlM-x|#_l+6FPPpIeX z=)$ZZbBL0!d)F7OY|{x&>xoGrD2282LH>bNS;WLPs^A_EwTanWsw>Rn^I*uS-$-*$ zX4|tg!oD?P(TN#XL$!hGgRJz`kE)qY&O|&CrakX*2EQ?^rj%KM)8J~+(ksyK-4Nn2 zGQE(dgq1bt_uAGoctKuZM-MC1T8%FHo>lK{x#}~N0>6vI@6Ay(bS;JmKNlT=Ri3~~DrdIXY{SStbsb#;=c6WEV#{WIKZ1uH`s z_Ovg;OpKpDga(os6g4b-qs(QxaEfWnNni7TGc%};`HBoM(&11L4XnIwBdsm9geiB> z)X8^LMA=U*=`ZNWvPQ*Nhi=Xnx3gD$6QmgKqKoP2KGzHvkMQ0|9Ax!NVO3R{HP-T( zqLr&Umi)3lM(VR>6{O%g%=Us6h90M<8Y8Q6&FYKw;M#cnEo={9C+DVUobT*kyTARH z8umJ1Ae0fOyo&EO#x3$%Kkey$)l|^I(_+?U^*^21(9E!bnQ549j-0Ar3mv0gaW;_X zqS8>&E^}1%VOzr|W)j168W*2kLV49>49emP{R6WZX@!=niIShl0@R14!mNL%r!1(I zQXZkqJ*E<&yvRmoqL0za&J4`B%Uh7s7S8nWXZ9xOSOn zp)JtOn2~#VjyzlYJo@C4T@ufz>Dbp3G?L-{X|W~L^l@hth^gp|a)(*)mfz3_gySqa zFmh@@)c-?$RMPDtmPNGb1QYh{^GN5S(XVD>nzi;79?m9;Df@@52D6Y{Z2`0UUMhLI zXRILlN{;LLg)H)rZY+vAW@in`oJt)a4YG5GWXc3r1uJ{WQQKMOBy~vVOF_Ec!m8!w zRUMZ&tI}}s21I)zMF)M+lqMHaA^mdtid@g$D|S$6WwvpuTQYe4GiDID{~6>vdg^Ch z+V;zA$CzA=%n7m&P-~F-*c`)(2=?C_Vyfn(&m*m2S$-(XUp!9GmP(x9x-y!~)~*5a zND9(ns83ZmD_rrzcEmK%CG9dle7IgPFNLR3%VuiIGIF)oVEYOf~rUFLHs+oEvN|o6$B`7i+ zQhQM8fURw&)7B~^>rxq6<71CVT7PaJEy?WZg6LW!0l|_*`e*Z}-20tyVQD8zK_pwz z=b=z!@(urXKMAQs+KuWhsU37Y%YI;bh@*|xjT)G=Prw#91`{1fcR|)}(&a(;niDcq zCsh7vRUe$Qnmhkva_A6Oo4Y8tg=y!Mw9V92+>@$^{|z$Pxrwbw_6?D*e!Dcil~OI@=-E7)?jIWL}|uMtau0 z{jrVfDw^dm8$c@%*yO?*IXT#e`&h7q9-2tJI<& zk~HEuZBXY5ZIP&ZSB;>||3BbBr=ee@WUlFEUmUALGh%&9hJgWt8kgq4)rSX1cK zzUZE1s=uprsyA3NXg?f%?K8V5C3E-8YNgttq>V8ZCoOLvZs%-`8W^A{ z>2xkr7SgTjr0q6VoFt?Ok^wbcqUZ}(9fMo?X&^f%kPR`~4aSX`C*ZDRA7u<0NoI?9 zMGt3ChvzSGDnygXj^8bbL=R8eelW5Q)?94X6k*yBk=HfgZ`bssaFO!DO5^#Lzd~nI zell$}dYQpNuai!HVTJ%)Ng{VNG!Q0ZDV%_=e_S)LUmJ^%Ymx>VefT!Av_EHizfA+K z7)XXg0@Ry`NNi_uyi5YC52xum%8!@&6gw`stVC_K4Xi;t+KqXsuHZ?S%{_(*orh7E zV5W4+cVtHG#+n~=Z46hizJ>WU`r_0eOEA+#x|fVCOcjVWGUX*J25O|JckL#{#JM3S zHkwnpm`~suXDm!t4TDA~lUpLnZS0`nvBI@2LJyDhMpDhx2{o@>Ul1lLG-}kAV^;jA zV*wYNm68^knFZnWvgO{j4v;1iybMvOG_Wb29h9XN`a_*N0^pK^xO2*oWAZ zjAv!?fw@}4DQpg?I!Gonx)LvGj|#SQ_%JPzRJ}s=%;{Oqt9|I;Q5%-zMJM8Nh-m{G z2^MRenMWAAa$fh0BOMr?gR63KwG|M_#x+yPssO2tC32^uFqBPJ#gKtr;kAR!oczEJ zH^anWIdFxO+ZTT3(bqw9zWzqPM9)TiD75ic_;Vu6bxzEPAT`VYLySmcAYxDl!^WX<*Is+ zA!g1xp9NWT?xQ1~-g({mZC1Kjtle8s=&75sL(nUzq?eYKi;6lc^>q8`@Elf2nJUjZ zJL+*YX>u@E(zMF3{d~DuNWsc0v$&Vps9xJSZ&oF-6g@kNHZsSB=>;k0i}ro%n8h|Z zMmj?_-cL1AIz{Yb7JRif5q9@x=%nmjj|sA0j_$m23MhT%jbTciwCu%^(>|7jDOIPI zaM(#r?A*$FbKf?qiz}|5Q8g#C2ISge}!W@%b$Im|H0-6Yyi z0+f-#f*5I^klb6AH|0(uW2TJS-KzLLEBfwrNxxP0VUtBzq#%7C_IK!cVzmm>bhGG2TS>FOp9q+ys znM|xE;ujBLyUAx4KY16SPh$UBdOPT9BF^YohMfd&^l3vK`%rT3|cm6=kf0 z_w2Ev$6UWn1`mDoWx0wsx`bsnP&;_*htxos^y||lPvwP1jVx7AjT$?62b@P<&o;`m z3ko9>twOctCO>3VcXH0Y33MH@9?hNc>C~HBEw=j;@|x}{FLg>(m6;IdS%BbV<$6fc zN<;;rC~qT>Im%Y#&7B|17CElXks6}|+vzxCrlgPcJMA)YpxDqnRkXBpP1-@*%;t=0 zQ|zLn&h`u|^Enn-C}_>%mPo{mfUwNlbInH7HNV{GSu?=SC~Vy(7s7xY4_^|URY(R_ z-V{xB1U4~wPO^#|g;d2xc%8E2L& zb-Wf#Uc@EoSq{+5N@N}FRlE*_WYF0?$H08ZEPbP2McxDwE++?*o!!j-9P2qaGi7zk z$bUdqrBR=)!CnNFKOksz^XM5ddnW%X zisgy9xv4&wtHZoVWK%n8%G94oPBEd|9{H!0#i~;HvtEW()${(t+%Lx-8bCpFkFC+Bd0^ zXjn2a9Tc>A;!)Ym+fG6Dm+h}GM&X){z*4Pl_6%TzNZS8SVzBO^k)l-^+nd8`V}OFA znR$j4SZYofS&4h4YLVO2R}#z&uxGB$_ncGbKN6xD9qUbMo`uXZa=vL@oS>DusYObkr(|^0u{A1E}qbuyWv6a8--Msa^^tgU(!Mv%~v#Efb~WR!ig(?9Y;MdT2;e6hnHbP=?V}6bbPvjhra2 z6OhE6qMNU9MfqsXQB!AisQuXtUf}3QWioQBCx81}7e3@unbdnZr{%AMlmsGMP zGN^eA`uDZ$z^m$Jc1$dOT{Po~He?FCL4asdBv$K&bwPm;j5@t%-m%LGA@gD9JraGr zGM-LZWlzoV>H(3pXS51*B+tv>8p&PU8w#iiSCXt`zu}yj@K$PL(G!PjqjO%(b?KL> zwyLe1ciLOdZvPszq)&rx1wO4q z%Bl+0MmM{#%;3t|^vhr1!lw6APqv?Ox2eqjS@J?sGz3pQ%V*oSU&YyCD`lZqBGSaa_5VBq`gN#@DYj zhNdH%cc_}@Dd@uC3iMu$1y?5vb7i0nnpKIL9a94VvD*FLZ-dal#^{-WxLRFUoMcVLs;(!xb ztfaJQxZ)r?j#(8EeMoaktjbU%9?I>84C#o?50OUMMabPntF|VPIsqfaPW`<|Qzp#@ z3Fey?oS4qiG=6Gd1TQPG3nS<9^Dn{9l9;W&J9JNx$MI0-od7%VzXa^>h}iZuGU&`zz1i4tzSo?1r};k@IE^*u*G zA}`~7X8)a6h^XE+wk$h=&8bMdT)dk7TyR`h1ft7}D$jjNq+tqUzUZ_qXUO162Bb)1qfsf0n!$`!NglYNp+6^HsZ$tE?< zpHzKLDr;(8gLhkmffrRF&RIce&i9whUw7ITTp=Mte}B$e!@&K(jrbilmhSN9gPb71eopLu)xzAb8sS>7|#J~bX znP17ohb?5MD&jkVuc{n0`&BIWxS$$WFM&B5#ts}E#_dKItDf!9)LFIDGp4^Nxme+> zEHw*6I+j@u`3%Z`Wv$!QEgnVf5!|XewDuxoSTxE;<=+nI~#l2fyhfm zdGl`mOf0E<<%EirKV(uSjB45oMipCakkhw<(bhMdg*iD}`p^Y>k3AoKr3p zGy(}9RXx=iBK>(%wKB&OolT8un9?Hy6XxHm?2F9(`$6{Kr4^R9SXC#<8gs95{a|)H zV@raO5to&M!LEXAmhB`8gPhtc9p@_@!K=WRaB++MmOVQ+EB*Oq-;^!{^k>b+uzPH+Na~hvGIfc? zVF~vR73OZ4Rz|3svjvZYK}6M7(x)Q;?Rr)IrL2(cvIuxcMjDy%o-@yFo!tN;eY$Gd z`g8|ZR@$Lp)<4uLa{Vz4$ebxk_TzPGh8{^IuTiL4qUs78sd5*4ZHm2Ie0XviMb z_Fn?*|H%L}m3ryT_k6x)2NHEQ8V|CR$hxbF=5T_hhZ-!?f!z{zTJEg6Fi{t&BZ6ok#&1 zEo7=}Fy?+QGs^{d?`qr`9JH6$cm{!*&5={fqe1HZ{+xEholZA0)rX3n4mbP4omMd~ zl#TGR>%y;W4b-%@IyqQwM6Hl~ff0b5y+zyU2e8k;maJ++V_o3OoD_8zTj;TrF>4)$ z_M%Wm%j`b}DAgo8&3|I;p~0NFcx-{7A_jXG$rNvf+j2JU4f3{n_okT=4|`)z?urJf4j*qHN!gymUaOkFeB+{SJE5>s98bf4$MS$=7Uu zcZFS$^xm7Y^}K7R&6)^d;RJQiNpNIlYSuzdeq&{Xt+Mq8+n2G9Q$HO08XCjIKg##K z>`(7&pVL=u4ae8mKUP%>8a8=5uecU9>9{596bD%B=|neK0MxCz#-tKtACe47Qi=P) za``ed(#bU&>C7Q}VJ@g1Thrmo77+|9a27kia?NY4OANT99@9MHviW0qE8BPs$$LVE zo#u8MmCHQDtsUzEU$7O01Wy%3Zl_EpvNP#cCCVCd00- zg5E4wn`9D!eeGrnmc2RjL$LblXt$||Ck3|^4Vn_&<}2;Vi|jwL1%0nU?YUcZuR4F0 zrOWvna1szHYj&Ym?7D=d*1v<^jxIx=Evc3kJq{baT!?-1>0$ckCT#b2mMyIc0s>qnlF>uACCD#=27WSf!$OgaqhNy_A5*4jO?)lVKkyDUE z(8(Ezx{J};ikxNqg_(?8maBoVRd$(^mr*lJwjVu`^7i2T_3PG8)Lk_jBrSs}=?vY8OV?^@pfq$)!o3`5M=01+Di7_y)~{=fa1 zt}dxotx()2=@Vs=Ku(VsGY0e@547)>t08O2S@WZ7E7Gi${Uvfr86GZ!HnPadowOuJ zQ0ur|bK#^b!qt?ZY@-Z!ugPiQt}AMYU(7Vsw^|b?TsIo##=JV9^oMrh$sJWynGz*| zYikPq3pyOs+r+Jwl3h^bhIdV-m%UUy2Sr&+G9Wo7B^N7ioXkVE-^|FUcHwxcdqxGT zBhq9S(kAz;_#Z-cW54Nv4h0G|yIELd>TST40p~8&Y?N1-H715sg~`f@B|58#3f8}y zW!?g7T4>2wMN>|9n>2iSdFDYav0aUQ6Fd4dtmZ9JVAjNvY>Y|jCRxcO+%$85 zWD~OHnA4dey|+EQ7}YwOeV68jwB{4$ozH6FoRd`S=V_SR0oNE#0%sdO)=jTe&r?ec z*-F}~UwJ--dfDdEJy%M`dZkN4r3iM9wJ&2h6p1-SWh>E1+Jn0PN)-`y;`E4g67*E| z?AcvKYp80gUs=(mlR{q2tuElVGZB4pbT>s~lK)74V|E4QMtA*IBn_+1xZxA{ZfV zE(O%*3}m`lUfY&%Rh`(;!JWTQlrfrV&JA1te;n>rdvXyB8`3Jj*C#6;2szuLN7*+` z!no1>j*u2wGHm_8Ob!Y}&sY{@th`@lXuHFn@J!OqmbRvvXreErS!xCDFUsJ=hA!Sx zrI&OZc(BtiWzHB;jkx^Zu=5dN=iM`umqrSAlH+CFN$Sq-sjR9+z{X%^OU!zGhQ4w- z#KZDN^_4bxZ)JmQo|&Dl=#yh9ocZtk^%c}5!lXne8>_e8 zp&>!&_to?2BK=L~l*FZmZ>OcagUe8dYZFp(xcw=z2x57Of^Q4^v#=MJ8YNm!*A%n0 zSu~P6Gb87b9dLm2$n4ZA6%Y0Nc9135RbG2yO-?n0>L6P%#8o)t#{njUC*nE1l&n@V z-<-|C)H{|L*>QS1RKZI9O2WM+6p~oG;)3!hm2lTsyUrH<)*(Do#D;i+eWZ2CP!QeC zh9?iwj-xxuTb%=1?~%$63Ar3tHq10EhFMZK?i@#9uZ-GGFs;7MOK0)n7}k>;$Ql>B#{{ zs~N%8)v^4sg6Y!k3brnj^bORhEfb2=G>DawTv!3aZsDE}Fc5OKMrt%Nyh2$jemc;d zL1J2I@w7UgKCw0CAk_()koE(%f2+UO%HuNE+gtAwa1O7(LIJ?UZ#EYTF)diiAANrP z1zHjEonpnFxo`Rw=e-wZ462DSxlo33i}abwBwVILx$1*zb}7BXEY^swkkhIiGo^@; z@(ch8MeAu;rNWsH2 zt54>XK>ee3*{r2zUCX+HZ@0Dt>g@B=;VcWTbBE*VGO;A@Z(C_mh#DD{cWtUx)q2*{ zuD6frm+gO5gH~UR{p}im(05SzkxXi!rA5KwbQf*epM~Y@R4VfcNgC#6YXx&|>QX94 zmuPDx=)9S|oR(STOuXyqk!pXz&dk=YoXUZwp=~K(C(jJvaF}TBagXW73b?VXq#!Bgd zUU_@^N|g~x;*_R8aji3`2M$h<^xUxToJrBf<(GGq^S!`lRHKZ>lILt zeKJfn^DXugd zXK*(mWTZ)M{H#o36xrPD*IwMKji>{a4O=SIe6O`2K&#Z=CF*$N-(te+WSK$4SUb$k z{n4xy2m-83`{M}{#}M$`B4-RAGavAU?RLhrAhwRp<^&kX(}&^WV;>@32#?@S1m`8u z;Ws-Hc$goPT815Ly3!UdXTSc4u}Ff6N~VBB>}6A_h~!7Ibs+`|MU|qVg%Zj+GMmns zdv5vxEt6Ru3|xxn#*#9O-!hm-LApJap$O}n=yu^S%ydr45%$tkS~4D+iIQx@uqd|<+hGk4e5wrn0*~-> zIakEQtjiAKm(2YM3EHrR9Z@=N47W+N`?5pIQV;JVyok+E-FLy7A6l2%0#}z0*&+*| zXej~_xx{_e%XMcy2t)gq{10ScpzG~?+XAC=(STk2n(`(h1p#dosEP6rn3afYST7(I zLpWVj=A3mp=ENbnqW77*vJi)x?}=_&b4kf$>J4ZCS}nzF(D1=R%9`aNQe7a|quH(F zm^x5TN(l;w121rE9{~(XX8u@@}2|`I_#=3J3jFi=7v_{ z=!;De;@P8T#$f_f6$Q36_j(XAt9m+f@PAtAQhrg4w{9}vKZ|UCu=1E)IVh%^<4r=v|#3TbV`}gie zx&CA4K(vy@>Kri{ND?=rBst~Gn?otLW3IH8ig-h`auItJ%6ST9aUG5x{iP5}u&B&w z*(LMMgq!&Y1vj9&?eWYn{#RAS@Y1nZunymwlQDlhh$5)S=tpFX9IPm>W-u~EfE3Ma zww2L*#pV$A4{3ScY}SF7DM^j0J}EcGCM1ig`dFKxx0*sQU`OtioJYNdVv^x4Rz57- z}6;vk}LzZSZa)3Ntx{LTnoP71zcu5>Z58VDS*;}u;^nW;LkoJMs2J@i}PdJwb_k!Ee^iQ_+ zQx}FEmX*%!-TPcX$>?DQ5CPZ(WMV8K_<@sCFEWa$TGOX&K^|3G8zyl#H+iE}JjLF* zdPlMdaEk?q9JgIS=#7u+wJ;d68P0NyMG`2RkKJ;18{RGM3!F$)gfBAH4!c=!EGMA-A5}5Xna6c(p}WM!qE(otd3!IS zL$Xo(K~73sy_u=sOo~Dp8($@F66-L&w9+{|%GH5e4kJSTw?%fPE0YzuJ&N< zqN2lk(sJe?Xs8%4UY>X;2ZyTIX7G(bK*>?%IH%NBL|p0%Y^8;h)#MHP1kb35e4l zz2it}gAmn#O>^C0o?{4UUei%G2%11+IJWP4g(l9mK}R`LfLpW4zk~XZeo5>aS#b2X z!%l45>7-GP)>}(A-;TO&Ah2K~sa~-+4>U9%|B_`Lfi4mD0pbR)aT;!vn2dtQXb!|6 zb0A&0V$q_n!4v0B3rPHn>Nn*~Ji0MLwnVfHdQ2Fb-cBj&6MDfvxu% zRaCfhr(`CoE6rC7onnV|q@{*rrnN+bEzle3_?+1Y3JL3Kp`^hs>tz%Lr06-+r1hB? zIXVwQ8m`%T5bWW*aeF;SVrNPf!fbDmwXgw#iZ47CLkgVE|16*_Yd zLIY%kN27u=&Gwf>Dn*vuB(_Wud zv=Wxx?r)7BL}?+SUp9fcrLQv!B*QcK7S%89hqR(4h^1b>q!`uM{aYOCjr0cWdJ1^ zJs(6DL+`Tfe(NQ9xb$RbbHsNxY9v|~%ao%;mY5wUw}oJfx<9_$fFuFSU@{6O$4tDJ zod=2vK{UP`KAy{};EJn9GEPleAOO)|Lp zgm3@JqtGj7b0KJeZY;4?`}TF?LHMyT?qdNpDvqD^5b96NA+|cpXGfp>;d0m@iFS%6eSl}2M_20aB7@AO=c`&g9y1mGeze(y8$m^ zKwCUO31r5!0;EQfF>!4jIc8?%b2h~dF%z(B&Z*FNfnL>c+)Ewh?CDSaGv<=1rT-;5 z6*?IQ8cj6f+-ON}J{)^ABPODSQVfCuD}=`2`iB_5$bYiwEsElf5}@A`WBdwQuVnQ!D}Gu>P_`7S6XM@SAW&q{IYQk2i=jjF3> zknl*^2?ISt*){<4n$^YTJ0Q!*6@r>NtW-sJvgo=UO7HWxd?hVR51Nau1M*5J|9bpk zcoj{bQEzOssYQm-8li<9%*2f-IUdzq45Dc2TsU>jrz}z%xTE!cW=@;UVw{<{utS^5ai%8Ma7Nv=rvn4l3;tI|7Ez4u-(<}xo*43G&qUrgjC-Ihqc;X*?@X%Oc%q3FLawMmsY&b|Nxu%#U=EHu@Ehz^!aRD9ta1O~ei$jY%lqA}}Hq zqHvBan9l}@2d6@Fb3hvPmt)JONpKp)I0%JMTNd+Kx~-XRKqiFF{ETj<#C>yQLxSPK z?u>kpKt$e%`4FH90Nb$!67HRiV&tguLVpRG@yGZhFx6*8#k4_D@hv8-H*p@#Amn=B zbu9q~8q~7(r5RZkplgCPq7SthQAOv&E*atD4T$RO(;a<%=Z}F$iUEG zj;l3bl-bpSrskwekk!1>5>R(E_~>D*4gW)2gIkP|3yTaQ+Id@=4W+uws9b)c@;qcj zK&V=C$eo5%S}V(5Y*q8HV2NkqgyTV`g87_K2k>}i98_X?1BbKo%u(%-_|REXZOZUY zz$NRF%SxU-)T>S3v^!8dEuRymdQn7?lyWoqO*SE8@vuQ*;ewf{9kVoJif7Uspy8YV z0&AWJGiMD_Gn??W=txTY%KwQS0;)w>-I!@a+qCyBoISU$oDhW*3@*W4JEU>VIl-O+ zIA4Mb@}{9rddU>nHPIm>Kor20TO2=cE_M}$MqW?cRbkG-9Gc`Xdto?9ma6dr8}}(> z=8Yv*hFFSs7)bJ&=hy5zG9nNcwjDl59eYjYtjr0;2~k8n#?z&8R*>oiW&z)uD387QJ(Nib>lrPp-BP5&Y&tq>b@`+W{h=a zL%lgRglMLH=taVFi@CHp?rT$OM_;%B62k4MCV<$|G^ucua(|?T0ecvwa!4px1uOld zsvm}cSy0Z5MR4_w(>rAhK@2eR%BaDOwIWX$=}t(AxT6Bc#4BkeL>xYD6!-D)aY*T+ za0Ti{qI@AYSh_0A~ zQ9gP;q%H7^URav0d5xR6ISNRc;=EQQo$v>}A7~ybut7Y{vGW32qJz>hq#0e>lx4jM zPzf9+=S{E5myn;NbD zb}gKY#^qzDPf4J-4A2=uzhLeIV$FkbrxthCZ@Ka|{$$RKFBw7~cPxw;mj*f#-Hm|e zf~yZ&1s*~cyEzVmrh@^-wXhsqQ5U5l5R)MY2laVTF^7WEF}9y-2BdiS(Ug;5zDHt% zL&g$>X!|~7MZpiS4>6uNi2-x0n70t^Gv~UgY5WM>PVOE<{Yr;Vw}Kkx?~oot z5rbxA4^R>9ByiH!8;G?Siqa%RU9kv!m&=CD56y#%qM4F0BgO%S#F}Dd0+PYd(VvoH zTP&ds03o3G0Z$@ctqtyD&5cg*T$|f0=|nkI)|x;+hY753eXnq(rH#zRXl#$n=b61)vgPR(x>B^k6Dt{yT04~I3|Rj^ z>nQY4CjZrLiXQ7^0G2?avZ+&>5uCuRD8T>7 zqrshdpz3Dggl<4bB}6ok*k8{0#CBZ39&W0*D&UAxg4B( zYs4&%&pfvL4G!vb?Vg%b8a@|&7-HsPI+lP!sRJ=54o8Vz+Xk}OhQt}+PUe`}Z$VRg z%UEsBV{rlup*+hYbS4^Et*W&WxJWU=t`xT-&X~0T5h1eQ%%5AeD4Aq1i18Tc znb*^KW*_SrbiV)x(oJi&AU3Tk5ISQ((1honF)OOm`%rjG6D_R}Pg7`LLn`D5 zYa(D^3b9FZf|RQZ{g!9d!U4nv(9Oxhfq=}Rq%3K7VtyVcQ~>VD<S&t=M_UR7MqC@eVK_c&|K1`~P=_SyJ4-RcXp?9#V0U0NQ^#jU>it z0`l!Ij$U8%rJlc5X z5XD?V0!?$N*}>R5W|9@oL^vx>H@m0X$$;7$i}5IM5yF_Ln4*3J+7M+7wr6rThwwNh~VT+T;q0yEIO~fPt-Ec_eJN>vr+S(j+uZAL-6;0|#Bpi06CLkl& z8iA_nD5jv9Eq99D79BfJRzr&-C4?eogd3YN0NOhs$Pe4W>@|ooC*(}T`2PeAQCtdA zK00qRs%14XIHVQ4V}^+0PsQ3*-8BwF4WB@jtnm*H0a8TJbITl8FduV;k{51q43xkD4Re#A-pt$p zN^m-C|4nfFL}aLRYNu1U!Ddj<12Ii>oQT=#+fuVqW0FHY2a630FVe^-m4|IMB zL{r?X%?EIDD2{EGDB(qNo!c6Px%7y3Em5-5?!RE!-p!Y1H3rkti|U}Mkz|YZy_7$h z)>{11P0_vpr-P78jSSMJo z%!ddLHXimFJe??H4*B13(kT_iRyek8(!zZ#X}_SA9cM)dMBH&tS)0APP3hTyvfMwwK?60_%Rh* z3)HM{jiE#+bAh>Ir)cNI`~(l7aFzQ|HCxZ{ZXS4()IPXnp#pJ=CZ{cbUqFS;_5||g zmzID!VWY*U_304mn9}lrTY3c%E@X>F11)5a!HqrA zucP`NG^3Ebv1Pb0(j@w3U;C#_uvM+Oqj9=+Fxtt)#PM@yPl(YFrOhhVbEi>bDr@x~ z$|P{3+$QQX=#>@|c<}|Nb)DP0SHbA1Gc%(~r$dP8*@o-6pk!;qwS`0}(u{j)qC8KV zNoLw|{P&oMsc^0BIYMqxvwHx^WQ_rM;(&a_TE~!<*3)s%E^Enwrh5d<$6BV95M;QU z)h+se*?G1054CLovM(h|x;gDjnkMGd@=N{~5NO+fHr#2>z>Q4ADbvW8(M#^nnV6)1 ztdEXlHCmku%->VFhC8NYEvkS67tdiOcFIf~@p|Ab11C3!LI-#2kj>Aq0>aIZYt9{7 z*>vX~Ddq!1N`QVr2AC8SnlTNDw|4a&m&(SaAw%CqN$>y?7h<>?L?`7NQSY$U9eeM? z2$%h`=Ncpek3o_G|iV&{|eln zBqSY^_QQs3fF1=vjZMR}CypBjN{DOGfemA*l`=+K5ISNLLvAz+ErXrCh>f@0!+9ET z(P_MXb91e#Jyh0A$8AU!Ir!(zi(*aFu!Ji|GiydDcCvBI77$_EU*)4tI;umk{e?N1 zATmW~M*%FbZlW(sAP|YX%z;>VRC_uJ`Xlfr!VMN$jO`{gtlu3X?G$Y}632YUWY$_fZV=s2fjqaFbCF4j{L9{Izh5|Yk^SmdP<2?0SDMo%{k5Xx4_eL$U_=Pf$h?12)aiZ(Lm>>K$Yap zLiI2(rC7id00q*KqwHWo-Qt7`ZmdHV0Mg}qk}l(TZ40x6#fTyXG)@HVPNDAHIt-vC zWIT(R582TrBNHblIiKt|>d`qH51A^sTFFewgV(C*F6I?y1%;TQoCDrWRSQ7xWtLA7MQS zDjJXK`6$$PIQV-A+1Fqq2u^mBoVl?XrNe}1Bq<}7W(GzT;xVoXSz?kc*`~Ul2)&57 zQECiu3KwrYrbw3vlQjwy87PP>I=|T!wV)J$=^ti}g1ZS<98gmdg zl4E@o2-5XEw%WzclE#hq2?#ntqswvQ>?iH3#Ia)OPOK?ClL{_H{F9giR!jkKYeVw! z8T$Fyx`F}pGV@Y*Q)8HO&4*y6>RvPvnt@2X4RZ;!ZAmxtdGc_@?v7ss(Wt%I-9_-7 z8Z@h`I~ z&3ZIinxXGJav4Ej@dRxeE_CB1OeUKIt&3f{dAh|LVQA>WAV!oMa0KMYTQa_sda}+$ zf(*Q2XEPfE7q?(y;B9mBb={`y@jw%lsb z!4=SkQ9|4?@PF`#fcDqoEj#J>&`7v^>0Y!c58>g#3Za zas>T%cu8q0erwn0f;s}DV6AccCZZG*Y18T!UzMU0CoW^e#zIoY?vGz8ayEf?b7!R% zHr|vcgG;6Z3bKZ?sQ^$92|4pU?$Q$KY#R9|C2@J1=?RBenpDexEr9NHt1gwFsq|z#cSqCOWgCs}9{C zYyK)`H=Ny@i4l9t9g+Y4-~VX`+B@XG%Tvx>`_}Jn)%Ae`8U5~as|(W8oyVQ%QJ-vV ztSmmxqt;JIuU+l+sA*^Yb?XP8xmDKe{WZru?N)zfrPoe+!>v4R4;Ec^vsej{``zl9$&Ez=Tpm?)-NDL=Cb#gg9(KHye=h8>O%tK90ik%wwdZSPU@)8>8m@r`bE*}~QpS3c~P zab9t&&4ZGPS3KrcGxwa)VOOSG)g?65tTNnc-@NpS#;e^*{gYUAZ6}Y~du)2`QTW}% zf27o2_@i4r?W@ZuTkBR^c1DW6dfBbg7apov__JFLxTuxm?+ZL?;{Mc%uD7_=`_1$N!jH|K#XRJvn9{8wR{rpH;)t_Ix z)r%(|i2UI2s4nXh9m9va)s-_6il1EVR-b*gKXL;0D{qOT;Jx{#)uW#`xpwYSvVRzVPV1!Fzo)p>>Z+vTIhAfT zW>ku!7W4gbRa%ul+oRI5n#wONb*l}%4^_VHajV`{`)g*l^{C<(8fu1r;8yE?O>(qq z?NR%N?yJ54^JBVL=~gHGU0*cjR=4W=KxQy4 zV{kA1-YYz6#mTLW0YACbo}`BAJJ0f{2Y*RdeX*W37pBy{|DIm|dbhfLQmfkQp3$EV z@Td!l8Y*wj@yPyQ+zIU>mGg1ll~d|nNuV3vpRh;H@nnxmeK4USfb-+eaZY@0DIOJB zS6|&5{J_7%dGUT^Vf*aSqPm{xS z18UvsticYo@_n~zyCkV<5$4b9t#+&P>*^y9VE_0$&(`w-KaObCQ2FJvZfky5UFC3= zT<2B|cO)7&o#auEzn5e@eyT@({6vDv?&wy_);CoDgZ+7EQHl!o@u(|DeDT4Vn?OHz ze!Q>yAK;_M57cB%0RN~%u75gv)H~~%YR>53Q8V)oRbP_nQ5y#wa9xb^9NN?r@i&5h zZ*8o60`JRxl%4!4|3Q13tX<>CX48Ee0CtDn9)P;=W>y&s^bS??bz8obu0 zR&|J!zqQY&KA#`Sc(&H3R-SX9GJUg8Jvgl{8UI6{dg+=2l`DVssj-V&saJo{ z-y1$zFP?v3S+ZlyS3Y&mNl6u_KIoHud&8#&9(AbvUX1(fJqcBOj%sD}6$LFZxvQ`Sjuk|M01YFBzOL@n4^sw6((p`|&$I|Brm?#t8>q z;VPfH^Q%LVMc?^^o-rPu+hY9gf?=)yd(NkR?a~-|?Q{LyKR)3HJkNCflTV#Iyde_a z;Zqq)_eC1R>zT$_mZF9Q0~JP!KQ(vB%r;Z=IyzW2#FIs8Ijc#h}w0p_(}fAt8gkNM_+PhA>LRZraKQ(YcT zt?Ge&<#As1iF|q3r(B8k)jwiiCN6L7On%HKa^X?^_eZ@xy#JIt4i?Qz^sCuVC8~oj z_|)sCrdK6l96tBk^uM3=sqfEeT|5o@G3}0Y#}uqTWy*|$PyOW+`GS36IkMWP&fMRs zs^k0mT)xr2!}&e;PD<@Bzv=x+@C#q9_o-V?Nhsd3RqqSFXMX-&zqit-j=4GAdF~3I z@Yg;1_pkdzZepH)ElgIoFZT)mKdJYt(I@RNhe=(m4T@O@$71DgVR;lyv++NdbfJ+@XcSpw5 zQkPoRsV<|f(oUA&&+h8M-CXM5yhP{z6J5fG6I^P|H~XqX zB`%@sZ(VB9DLX0`UFA~et~!+AJq7l~X^F*^gQ356wK9GitJJNZwW*y}?o#e!(rQQc zR_fXnO_lHEyVUa4d#axq=u(|$B^FQ|h#||5(D50~D@jlYS6O{^l(EsjuRjHo2JBoh1 zz$MRrq=b*gy4AEc3C8OyvHne~9(?a7rHXtFu2B!+`TDw=qET*jZ$*-`{a}}Rb$OcO zSgeEf5cKzZUDJv`GL-spSR^B-N~zuh6N{U^$2`c+I>D`azTa4$h54}^bTC^zTD!l< zv%@9w=u;*3OEuPUlB4*Xx3kq%?>3ZQSL7DHxY(smdo;OX?>416Y^!ti_zLs6Xus=P zjMq5o*osXzW{bV}vJ!a-JLiOXO&R~boUN`;O>^^u2X zy42W9_m}_OPYK;%{_C^$Wh4h&s_FFuls4Ic&6 z%I$|-fBxy$c5XnieSD2yomG0UsM8aEwRdE)>iK|Q?62nnYWdZ79@;iApsH4WP}jB> z=1uxo1=N*&QykZ9@vGcv4XzKC`Nf{Ydg_O#7LUWeJh3UwapjnR@cUJMwcLA6An|R# zy7bukqE-X_LMKND#ICIJs|^peGETcapc03rS3LHCU-g-uTJ`m^fO>gbs?jsxSJ&Kq zsA&7}fI9W9hRWdcezm^oVD-lNevwo61k`Us5>y4g|0C^SdB)~|>h@uMQOfszwf&V8 z=O)b82-Q_rVxCt!8#88~5m19qO08-?$gfgftE*hvKcIg8uRi1Q;eIuKVq(?UoBU!A z-sM-7FCD1t(k3AM{fA$@_f#Y!^~!*{<-EG`3-kTL4|#sIc3)lOOq^5Oyo1$SZq(~r ztJkr~uYPeSR~@>~uMS+EQ2WNsewEgg;Jk3IUv+q?v8Gi=%;(BO8H*?Db&e0H|6WQ{ zCl&g|j+`G5xp=op$!3%Px%3L{Clk&H`Mt>&)?t|y^r_vJ~;hq)!heNhcK@l16n(t1l`ZNx+&6q zp`LGwUv<8`wQAi<{|S|4h5qkcSCc%% zFMi;-fY|3<{HkH_ftqP9KjduZZ*JKSeN6T@oiD8~(=YZ(H^2I+Uz%gzMSk`9MM=i> zc<)IsL?Z42zv}kX`Kga)`$f)${pyO_u90-zovd{22%e%+? z>a&-x?YQ+gzZz%k&-nFpy^m-6)fY99>IcE+tS4aiv3$dP+1|uDPOMBUejoE=KOg7B zdZDZS9r$PazX=t|*jMHgJje8c_t&~ojXsa~#U2D*v48lbU!6KC-T58(hsVeBmrQ9Y z+6Ovdx*O^jy^ndH)h4<2NyrzT7v{ru3(jfhFV2nqnUnNi z&`VDHR*qZJ{OXpO`)V%5I@#~T->0wJSAItidq3GC zQO!MBLG^BSr2M%3+V421{n35e-vIu=as}VFda@~F2=I&^OVf=phcvDMKZE7(UGQ&u zJ8B;a!2dm?K63HBzym;5&%N$eR}?4JKD)!M7H)JHxv3s?Z*`>n+*NK>R(P=TbUe>~ z3j9pAU*Cj3vnEj$z;9!J^<0m7wAcPo3x9EoyoEo_elgzn^f1+-WDWEt;Scv{`~&_J z+n?|=v#)5X{s{O3+qv*R+3r6Ne&=(IKMh*~e|*e^kFCMq0c-1O9Pp>uFM}WUhH5PO z4fA6C{F_^CygJ-7^b^*5^1HueT&(?8_;bt;+udT%W4)$-%XU5Rk=C(#`7y4B{bHP|TCbztEp`R`YQ~@L#^?RvkKr%V2kz#ofb#Q%M<-w)EKUi*S`~m(qk5{Mt=v~_H z2i>vW#Xd0IY;>!CZcL~>7UOl_5~=(F<1qdQ9LB^!*uU$B_dML_`U&(S{OZyA2sjkk zQTJ;+2+#36J8C=y|L%BWYc+9hKs_?@zwn+<0%~#kh1Z|`Wk7JEbNs5;<^-e7F@CYj zh6UvPzXsF@=L-kdwF{~dL((e#I5r@7%gfsSdeg5q-yEr4{{r+Y?H4{@T9DwFhw&Nj zO9`ksB?pR%ssrkm#B{Z8WI*iCynqVdIzH6u0-J+>nC{)>aKQ`ldIJ;QPe^Dmz4sK`7kp!#oj zR1AWgW%+%ZU;d4GPPnh_&e5+01h3r%IsV)SnT>A-RQb+|hPTfQ2>u7X|6l5V%dYt> zpt2u1l<^0~6+8@fZuR769}EPR8Zx4vR!hS8Q3%BW1=@ix^S*FM8}nDoN-{k48IeQ$czsCNP?`R08^Uw|%I4r~snZ%=7* z{r5~j-SA?PbLuC0{po(eu~uMx#HYUm)a+NfcS(NTuh!H!S{D!1{>MJpE9CFD4XVoy zC91c#1=K|yQjAWIWBy%Ii_<_ibc z%&2`uli?6Eetf%IJ^%Zwi3_h&BDe89`>CHRHU7D#$c^xG2ejYsI`dkk_IC#|`J)nf z_>fx-erx2~G|gAzRQ4JC5pY^8eiSdp=7nG)QiR;iCJ zPN*7!=bxVRUaJq6y2S3;uGIFCD^6Pse1iQ0;3{kfV7|k;B&p-yRAN78DDmgu-?M!> z1#yV?Qfu#BuEcJHKmE~FjghHX59{Mol*k9XpZyKsEAyr&Rs8yzQtdLAJ-Ty^QcvF6 zp`w10ONBm2HZFrd%=S~d62Hq0{rP-~dgfBZCm#5yfkG0-n8PjPOH zFEzN;ZPz9^e*RJk{&j_0ExtZd^VlQW9{5DR2mU?d^T1PB&%dqIL#|e}onZ&Dos*<- zey0*Us!9pn;=PQkfv(uU#C$eC_nR+sB5;v~X~pHo;GD@n!*fh`TS1qk-x`(J8JL%e zn@syUx%kd6l*SkJxHwuR99A`X=eeIR%jQpZ>+{h(%#-CVE z@5buqFfQ8(HA?(>;3{n2V;+p#V?F1l9w^@ee&Bcm_KD+VnD^%=mgM{t!hFeJ!24Og z?*_jSKA#0XAzT!6&U)!09oO3ee2DOi({-F@mlAn=4&nwU9CF<{#w~gV$0^EY-n<7JGe>XP@9#?*|^}iS0YLcd9bM{^n~Wi zdc2o#hFc(CD2~`)sTI5SM`o|XKJVOKIrc%9I%Dj9*Ty|ctzJ=IzWNWyhn@Q(@BORg zLL1l_2M*M1>yG$^qisdvLoSi8*e9{iATKK07+<}gE&lu8O3mKfRC&_Rnm;yZd~Ao! zCua<8%D4k`#e55Swrf=Wb9dzJW!pbNI6a8BDob&uWc0B*b6QGCNX z;HuYbN$<2t(>?Z;aq(-x_k@>$E}73Bb^)kNRmE5b`*XnSIIfCw{_}+7s)u`MdIx;9Ya z5#Dp)jeSLD0mnS<`vm7Nz(qN(jD2E!6Z(SVt#2ubxAuh`r}*l5_V^%;#nDfQ*_4$ifoy2K8|`LKMzzA_H~E8a`--*X|43AcoNXZ-DWw@RM=#=O_B zcd7SpOLM&8)%4WErS$>g&Z*yC`YrbJk!$*G@PPgn?O0mW1N_Q3@M~IM=6c2cgMI(W zEv=l}Zt<$B`y%Dvjl+OMA6IwddNA2>tUeS-YdDRE49maurkI3_pUd3|xAB;!1%T^Br zMeEwEI*;g^#a_WBuklKJAlWDJyAfWYqv2kSPkF?zzt*N*vR_Ikj zs}rlv9O)7Iy1^(fxUe(iXV8h6d1>J`6h zKlMqk;Bok#^$^~}>%zXWT>jlFa(ua0^yWgZHQ%F_wN{^Jc*X8t;?a1Xp661J;HLNL z@i8v@xtHKC$)mAev41e%&TlkTm#^>&u7~qwJ$9~F?56qp_ZNEAHsAip{HfRvic|0P zNc?fISL8m^I{s-@~8$DOFWpt=~TezoYoY60gX6>@(vP&w9ju!}&_w!Yg)Pg;(q@>@(|`vk*@k zcIUChf9rF`{2A{l_KH5A=oQ=-c_iH$4^(%?)7ofe&~@ANw&c z@<&QNGA`aL_@mcaC-37U9*Orp=Mh})O5`z+KZW_QooIlM2;X0+&;L!Y@CD|>{xilM za!I12&uKa@VY658otwOZXJCA`b4Po{{+ob#5$+rCN__rWuX?k4inem89(^QC-UQHpWqmH56eM( zFSwak@Skm7HFbQl@#tKi_?x%*Bwl!qj;A+yL{1#k=ieFcCHoEXfN@g9ZP`ya$)|Qd zTA%UQDDXMu?_fXpJ^5a>^Md;Fm#*>&el|_xnLDsAi_(kx@AXPP%R0pO3Fp4wryg2T z*y;BBY&pjJ^sP_mbq3=5l&|!?SB*OLVC0StK9TDWdxh_p`P6^glBzD=?iD*1e8}hh zgO+#TC$>Az_euT*_K)}F3$Nh*U9}w8;}yDiN5}i$^QpJC)D`Xe*Q>5syT7^}@&|Z* z8xYSWJi5j!`-ZrAn|}{v?ES+laf1)ET$rf$6MW3yKc)HYOVB^XJBN5B4tW!Bddhd% zi1WO?sq%8{6XTd4dS(B{`vkXItmkuuPw3(dpV&#Kcm=O&@aTA`SLDHu*spaDz5M?B zkQ3K;y}3)ZPx6lN9+pdx|Ln*0@rwOi>=SwYvrq75oYS8_r>XhrK9N(u=)8%eyb{Mi z{GIJ+{AD`@>t{WJ_%_?OkT+~^LtZeh`i)n|-?bdwpye0nhUM@f{QkJV7Y*y{6M3@L zEA;Uh3^vj?IF~Pvn|buCcXhtSZY}?xw8vq5%cc2$jh0KFdj%&$JfGu?preI^?=JC) zo&lY491!zoxtopiq_~X&oexI-&Qm^#S0FEd^-Fii;em+HV&3e3_1F0mpckeS(4F{i z_P(A~wAPb|aU~99(+kIO{_=_(gC6BPoUd{IgqN?^`5?$2ki0CP(Elf1!AUS*_V<4G zi5$f`I4=4OM3eH>N6Z;kNLF5{6f6B9Y%O~fJxC+Pd@R#k3eLhun zLYi@VPru{~A)X}mJn}#&o&-Ff%F|ajvFC<#Q9&q)i^H>{KNTSzk<&x z&+ZGI*VA8*H{36H6VCUdSqnDYj&tQW1n@Op2fpWcz^Q)G-^h1je*|$Rey*cm@>r0k z!f^t`T^LVB{E6`uQAWuthWqm$4N2XuwE9bA^oH$<+@gdeb*ax<+vF_0alZ$tpq2o-oI`0N?KHg{i zJ?@p@#s&D@LuZ~--3IX|&Z9(plk>T@>-?YIz%$QwIEwJOc`ocXORqnn;5;&-1JH9x$Bzl@)!AYSHAt(v;WCwTP^$Wy`>u%1&? z_0F1hn$AIA?ALbitC2YeBmbU^{EF4^2eA)~|D2%z4f_3O!@i=MlJxs7*Ks-gUGaQM z#)H^T)+gXUK2Ok#xz8N`0bMbjV4WtvlpNhy?w)|(lRt|2F~7k6obp%w^SftwB)+~BL9gTiPDLClIn`OU8+oj$$&Lw=JmO!KcxAmWARn_d zrS|08kcUlq74W+lH@^aS=B{gR`r!_b;3}WvFU1jG(f$wK$8yo*6&zrYN95B@9`(@u z|9UrUMLdjfRm7#nd76rrV7^TEpL*mxu+Hb-+F!JJtVdn4ZGXl^>pfb|>Gwa4xFqAh z9??^nFY^h;XT9~jN8{`DU08 z^BL%d_1II`*H(4qzhJ)(bx(9Y0DqM2!(7B=DL#VVG2RdVjB)sKoDcEgO89}~cU;bX;d?lLmdCJj`QKAO|Af1Jr`Lsj=C|)pTOsheQ%smpW&LS>lUzH#>Gc_BySw^;5r5HA^R1eE5^6+9Oo0@TsaR3 z>tj3lZS8kmtK+*^Kj$H0p6u6uhWS&y1kSDB#-v&wKIi;7`0l?h!m5^LTRR zqFXkDPaO0gp6`=!^wuHYc+`7ilZ?%wpx{j>=cr$eQ=iNGI4J!4T~J-#KT^5w=b*%m zz7NVdt`3TvSRWL;t1&3@{^x+?nJy2Cp6;C^_`;uv8?iqXl(@qWK{aDbu)x<8l>NCX zsPl1hM9x1H)O8&}q3fMNnRoA?>UV0wZ#{lPJnQ#_+O?RU;EF*xw}znjnUSFQS;qz? zkMVZIX&s+^e$SeqvQ1GPoIfCy$9@P1>L5cs?VI0E!@wwzV z>-?+Jb3`w^6;zR>k)n3^+vCK9isyd~3jduN6#Mzjpx7rHgOUe_`Ln$}I4E|`(4hD` ze*^_DIyxx!&5c2|dex4^E_nZ$=chUbtO%+LKWlJZ)i)^lt!Y7tgI%2?c4#0ddg-~K zy5s5n)vtEQk+{?sLCLS_hk2fOFe9%^j`+>r2h_*!))n17J4f)I7lT4)9dkr3Obe<@ zdL}x)$M4w=!Fsta#h)W`yG@Ra+b&1w{iLA8$(IDhZtfZsd>Qn^e&8a^mvHq?LGjaZ z&WvkdoosJa2gQEFI$7_06cqi9bNjBp>$59yzQ0`dMcru7ALE>>g5uxg2gQ#c5)^yz z)1bsb9u0~;{6bLp<_gT4khiF>mi_AKiW*_LuX)@t*J>>5g+iPaH44 z7ySAj;)eK~?RfA#$DvQm5&szH&2st2fU5gAq2g)C57tYSL9w$^HNAok**}^S6nkoM zQ1k~ruiTkf@gew-*RxRb)!LxYWoeGcn*l+^ehAKo>E9Vt9apAS-I|vpcsJI;_A~Mp zIiKyPpvZ+U^t$d0iv0`z+qZ5>!uYFkZpTbn^+RS*ZJPUi<^aec&ZFxWRJm{co?Npq zN9-x!0&Fkcg}ge-pIQlji{i5IpBPVrea!Kk%YDNCUu!($cI_|U=9hTi9KY0)y{i41 zY48v4NU2=_|CRHKX89DyC&u}tj%Tn>^f&w*w&UmN{IoLI!xZ1zjeLEQLpR(0EZ2b* z_|*0uO*LJw^hw-djP`?ywck;WJW8q`gI&vYVAsL!<+z%*zwv(d=ik={0c{5+rJF~Cn@`?}CCxW=cz(FnhV|H|h8|AynOcj!6< zyr1>LV%YhVe==I?ZMxk7zl-dgd~N^3FXVcTe|+k?eg}#i!%@!={&0Nf*YrLt((|6H z{m{#RlTAy`9E$zA<@aRAC-6^h`sQFw0P|#g1fTOf@RxCHjL-Np{1M(4oIC5mPjtOT zn)aWj`oz9^NaG^F!#H2M0rWTJv!-PiApeE(4z~N%V}S#azQ8*;4v2N}{)5ig@89GX zy#RcT>jsu+yx>w@=hL9a2mVoWLXRI)aNe8;e2ZW3&3i#FlqY>F@^&9X-2wa<`5yH- zKaAehdp2+c%1bHLbs>NFgb%OPelE`Uk3Lf;RW0|aM}{r?aSQ01{p2#A%4*xO^VJJ{ zYW^8F{Wsmv_$KN_*nc$X12_-sfg+#e{oSDPBKUXDe%l!70l$;S!+Eoxihbt%&&fFV zev^Mb{Rf};r`SivrQlyP&I9`7x-j^W?5B_NsjHWbUUAV%UH<~U;QU9-lkF?;IsYDh zHsffw`L&;>>$1Mr^)sLcY#h}v$6l|Zvq$OdOGYQ*R6SVUhPEW<4{~=GH?&7f6em?eujB7u5c&#k@C!uN5uKY zm@oUM4{977=gIL{;Nmb3RIsfZ*+rpPU~Cd9`VDefd$4Yh0i99O}O)PxUHYFSH%F@<*so zx!EUi!9g1T2Y&U%Q#bT;fSy?oK7zdO#`dq}gT5GVKF_a`uWWQ3fV|^8A;beYo(Q}A zuj1`9C!Y>FB{|mvbdiwYc=uS0PxZwOUddl-`pbQ~?{Q%KTuA^v;dMx6H$vPf_@i~t5lSlH9)_Elk4cz*i8Oas*-->w4 z&xfk#z^~vu6yU|2|BAnT>A!m5$@8|4e?7-1akX@fk0Wly_Wqr~+s8MRzk_i;+4I-0 z*Pic_yl=$!UW;6G0eW_+)OHj8ZvDPjWmWhWHDX+e%Rnzty#(-mu7~&%`0*pC<2@DY zr}`@F)30SOeR?tce6HhwAACY_s^g&?;Qzm-I_po?@ws6>)z9fr5!Fh205#oicKd?`XCu9FPU-crd%>Op+ zuMg0Eu2177m=EJbE4>o;-U1xI4eFn+((wVr3prks1bKEE>c!5{`Q86|M6Y99mLH&} zri!%GqhHed)=oc%edRb4=D~GS^%{3c&~XdIZ+xdDSNz->csu0><9wN(aE@Guv&t*_ z|68x*NvHaB9*K@~e}#Q+Ojc(P)bekKj@QB8Wjztle&)40fA=4+z#`D?MXU24KpcVJ z-&OyhwFuRG1yj`QJqal|KieZS~&{?z|QJY>mz@2%NA+@2Tf zhi~*eX6k*x@62&H?`)B#zf)2F$#q3O)$5F=j9%CW#yi1}9A|=jVSD>8uhe6##{Tp` z9)lPBMfq4|X5NF2FC$LG`8eQ8U51%KVXZ--W z2`}JPIGhBL{ z2X&qYK4*JoJK}=}C;s+udoAaW^{Vn-t<>%_z2bKQr{O$9hnCxrV=SNU*8F*?j&J_y z6@L%(!u*JH=e#GZgX_;Ax2675(+Add^y5?)rR|@$w4HW`Pw;>PIu4F?aGY#~w%?xA zpTl0@^Iifwz02ZHP654Foz(01&d>PNmYxmOJKWkHhFs$Q1kg_`2VO?}DUALQy?v5b zxkBTy5zRMUwH*lk#`+cS<$eZ`{~QOp9`+sOS3j=f;<>O}s9tTou2X6Biay<{@%%$x z$wO?b?Z-C}H=+C(*jrpDzZv?0>bySp3B7>7xt^xME4V1u&-Usz;MAv}&bSzHnSQ80 zf}P2@-vk|phrD7t?Ny&T_S1cl%R%29C&fA#PlSEJxIOF{UdK~ju{&1jxa#{l-h%PD z4yX;{mQ=5QKlp_5>9**&;C0%b!}~cO_(v@V9@X}Clh!YoKkN0|blemC!u$WU_Ajts zrru}V0D6@3;b1Rv--^58r%+wm8Su-f{toNpILEs_sWZ#c{vPJdeEFVF@bh={xx@Zs zyJ@4=8&iCeM=@RJ4dMJb&*MgIC*Yh|A7Z^6xB5uu@4(LD^w79!k*>4y0O|m zT!Z)z^=(Mg>&JSeo>#|TL062Y4Trx;ai6=iJjHxi{;t&HLyvHL8S`iVh!8em9`6R!S5HPsNl6aFW@0fx4X2xI!WhCoT=kdc(2r_c%?qQr%&*T zYHeqJ0{Wr+cAO9ACqbTY9WdyQ{d@2?+tHv~=I5nao_4YG3)t?3{$sm!rmjOAi}g`H z1^A8a#QS_w&jY=}em3M1=WT%g*-pWJGu?fq=l!mZyC>=Oyy#Uo-Pusy8GOWeH|!a% zliuT1i?<;G9D3~ck`7DX0eudb{>@F_K_1<;cjEDl@XL*?HI@Cae~c5rj^_HiQlG@1 zu}=1bKi2DiUfUDhG+mbKJUBz=aV^t!2A*R*0e<0lJ>(6?rRuQ{RKEf_#^+e8^M(F^ zo}qZ}3$P=o4*3xs7l6KCI-TKFTh^ZOYu%?>9_8sg49x$l7afj;Z|M2J9^g0{&V|PV z|1;i&&pD3>@|EL0kf)mmp|8#>J{7ri)H@rpk)Kn6dUVhe*C~Fh=@9yY{V9yke1gyU z{7t#>l$LAYXUSXEbPs;ve?v|%UJSbBcpB_5*0VULkN@ig!O z%6Ir!%PE`_=et6_vmG`J=RxsDJkR?AzTor0_$;5GkJt`{JZ5^t{&e1X$`>PGhp--c z#jAdLeoxk!=Vq(5Z#Py#9INh~8zTF=WQ%<2tLxm4Q_3@U;3LPk%~rQ9`KPk)jBL>t z>#|ha$-8PUd@EZ$@>N@7%g!v}PlRcD-u+MYf&a2p<`4TS@5;!Menj7At1S;6Rhz%v zrTPu-;K)qOmU_dfO3fV@akcSe$@uu2*uIT(p*u_DpHrz>6OS+c>eMWC=b1ap_YTfd zH~qOQvh?#T)#v)1uCwQ7OWfy+EVU}PzUJrMS<3sx_VSO9&sKNb-PW1s&yx3zcBx}N zPp-)OBTMi=tYcfjMH!F%m@PQnF3f)$>caaW-~aesH4C1~7W{Z=mU^z?Xk!N6H|f-) zjC~hoi$1Kyx*tCj$+#y=aGy0U_4>*V&O5Nb z?BC-1kG|Vo{s-p4pU=*geCW@!)!BQGGDe(}txoEGu=)m zhr)?7vA8gEkrsy*K1A8miW=@dVQF`N#Cqbf6r2d zSGKL)W@!5LY5sUUOAV-RQ?>HTEWyvWXGvTZ`^J55KyNR!**x{=0ZKjp^^Wp>pqGnp z-w_$#CtE%I?LV%SJ+jsLBX*UytQ^rgmIc5KL%Y= z9t-#|^8f$)KkYz!cHkV2r;q7dfAMp92FKMu4H;C&bYn@#*p-n~+-XqA;J$6&=NVmG zn+jg)7c#it&)7VJ>fT>om}gKQrHzdtgK)yWrFq5=Tbs&HI3{Gw+fnZ-J}YE!-S0bj z2G{kS8ZwsmO|1Q9c*x*5==?l`?C90+e*4jI!2H)b3+H)K4s`>0ntW4<*1JA-*f z`O688Ic-7)=NH@_GEV9^|B?=K^9;s$UkMqE2c8r%-i;(WmtkD@g!-bio*{$#;#?Cl zc)JQivX0D5byduEBjuy5$+1M|J_` zN&NsW%`>(hYKR>3ex5<`{bZaY*9kotGC2N>e_#1}V|7ZqJmap%&baX=JeNOkOvae) zxyE(%3GLeq4H?gN$q$@)e#jVbcVqcuC53W+{zBP@p@p)(w+ald*I86(ke!-(u+Zq3 zlH}O2v%qkClvMTm!-dAcVJXGi-zbpv94s(i7?oI?Iib*aZB|3ZJ3R^wwg*2cFh+b4 zaZRi)FgQ-pz0f%Qxdi7$7`LHKeR<}1ODJ|6C=hxmDm2({#9#8)`*kcd zI4|!|fx-1mee^u>J3f!b0^{sk8Y;J@7aFZL9V&kX&oRFKb%Ff*&jN$|nT6Gb2KjZH zr|5OhFErSG#OIUOM`|8riI6ktYK=>Tz z$?qLlXuRE~sWLLA&|q9?VWIJ1eZ{@6{!(C!Iqk78+Wn066J4z=5WdeVH1Z#B%=j)+ zV7%I{p?uZ80^{;|^^uDlg+j-@3ys$=Pj-weC^R_koKR?d8fGQeompmapCrb z##1XD#eWSb6gdR?Bi!qvR)s>JoeB+#Ur&Cf(4f4Vz5f)-e&ciA*AF!PT%w=DzA*m! zY=OKF^u+nrJ#!7tvppr(;QDuOu0j2krUi2i(&wL#$~8C-xOc9>I7+)*gZ$C5KJs~& zi*pUeBYNZtzhveb-O3}8CkEw;oVi?&cTTQxUMLdrHjOln2{gLa73LZ#m!vrV7?5jl ze=JX~F)GDTTc46^EM3xA^bkHjp>ChItbU}CzxLs7|Mbl@?(gDomf|_a^If?H;S*Jz zbB(JmPBxk@%{4gBd~~j{{?yzycSS}T19B6b3$M`g?wV^1ygk8ahv&IpBF5*uFUxd!7Fn78-sq}r$PchwJx&b)JT4faQ{Z#~u}J6B;`=6mcH z?+?atU7zT<`;1(p`!h*u##y<>eNFW>_hSD0?s8P!bwRFi>3xY+pW?l=Zw+`)>zw+G zsxG;Fj&EL+YwWnEsl0GRuEG7z0(xCoH}5xxTdu*l2;R%}YxtbyL9bkc@eI%d+xZ7a zGC%s-=QHygYmUPD{@#>a`yuAR>lV!qdONUR!vnLg)| zT!a04yqDrp7j()s{+rlPbWM)lH|z(GkLS5B6ZZMpycD$+^wG7jzWRH-m-*;qJ#Vaw zai5O42G{3c-}rqv7mm+f7dDQrZK(Y7>aan1IrmKr8x#*7uqbR0uJb(p{*#kZ@!Hd2 zW67-!BQ!fKa{K+Tk@|CE&4lS;(IcORg|9Krdl@+Rh48F95v z%NKc#{iAuDewElqU$x0M7H&ix$^!lG`}BT(C-gRbLfB~gV?pR>_ z{AQ%O{{VbW`g2d1?TB5O1qS5-Uyz<}a6IqreB+)6>s?RO<_q0pfB5_4e52v(ri^Wg z`NIFJ@(sq(&MXjl_ZQBQ`pHJZ#yMrFE1aicy-y?;?`jMi9Eb7ei@Yt%H@4SLzw79o z`NrTrP1U2<vF|xJj=s2m3~LRAavI z>r$!FY^7Ee9_C`PwrP)i}_K1X?MQJi%aqi&NB?>8&%)e z*PI7B+}Loa=9la9jhcd{n$PO;jVA!tBp;h^a6UZvo%7VN4$gnYeu%uu7y9{E^C{MU zn>VHE&C9SZvcJ#Qe^1R9JJpwOaNY;@f%CAiPN~PwH}3wg$u;a{J>Kd0BCjz|%HP+Ra2~=W$ScCLz%Ojio~QS< zGw6-_ulCAkzbUsqU*y)Unw}rha%5Y`;CS$XkoYB?!p5?XldB5O2#XzZrk0c7AGWuD z4jJ5!u={m8S0CBjW2(VNHkHpL{xG zaR0+!LZbH|_nF?F4T)ZZzG&g{u44hJ&N#_^b!^l1+n z3og9o?>A3}JiQV5WE(;T#pxf|5n{h(KgMG{R39>q-gQ;#LnF1kemErOi22QXHBys> zedwx^sw(h%_KWd5);nXuhG#^QdeaEWdEXm0lK)Gt*mE271oc<=DJ1)dePO>gH_Y<< zKb-IFTNA3%PYes6{2mgySRFFXe>YNjKK6^_px7tIv%U$5{>5L`9~og|#nQwI1MA?t zgY_Yy>pP(jPi}P0cWC+BE^JJF#^E$@p60r_A3Era<;Y(6oA;pKG{$8=3%}3IPBB(s zzO3g#KWz7G(&zJ0NbG;?2m1loceekr9_nX0qCNf+J}@}U=T?S&V*eZKV||7FkUsrd zzrntteA*xX2npX|oC}JR2Y+xwzW6;`LI&gbpnHjX37r?=yg08pMXw9{%6Uq7?!*mE z)u$a3Hn{&Z}v*-oEykF8Q!Oq|Z3$UTdzoKIdFJ ze5X1yKUebodXDGLRXwHqA%t$6V_xI-A7}?|+-H0r*7CF4X5E$}>&bg^WqxvJuGjkP z_McrnUguL>f3)Pxtow>}96&xL2hMIO8GwBJar=cF(F^*o7Z&~a%Gd78@vi!J_tq6x z>%8pZ9Pi?aK9U`6rN6ymX7A6AoS*CF9kW_?&;9Q^90|+39l5#k zcc*;*e3kIc>jSYJr*b^;2Mx>o1O0I8RO-{MKbdd1btmJIpZ*@^EAG923wtZ>PYArh zJi_hc?34WdBPmz*XV6FI=e9fSZF*tHeLEI}Wu9K8^P!t^J$JrqWsY}A=ktRDD2JOz zGQacZ*>4=o@!a>08nnGpKDWP-q3xq4?4?gSJ8Kl6FP-X6S{R(Zm#FPBSLo_a){?zj8~C zcin%^jY{M>_xrbUWxYUu=)U)Of%bFH<%qnIgY9e0|9<ZNblJH}p1UJg z=DpYEc+TF$xa+UOpSoWAwdZrBoiQFf9SeB>K^|`3ur@5?7xhu=e;`AkJFiE*mVSR3^}9_`@AQa&Z29!-6TQM4TSi^AGU{cA_MeMC6ZLlfC^2;Pb5XD8 zcfIQV$$c(dANBtAhfdzdgzo#`ohNz+0{ve4>rQeAGMl z+FzIb^v{~VXQSRvF8=$fB{f97>(_qtekJdDXY2=;yi0gZ-oa&kR!6=1 zH(QrY-5T}Y9^Nbd51!BO{I5|D{z=n&vB(=d;Lp6j>Yje5uap4|NGsi;@_ z%c7g}Um)F@{g>PuD)OFx;HIDb5qU(fF1UQtHBoQ)qul~;Cr`Q{ z?7=O4{}}bopL|7S^2VslQ};x@uYJ9HXnmd58}iSOzysi!VL9T}eKtDhZFPwXF2@4S(N zV-3i6_q{vc-*sD&_wLz&-e<2yz0oDd-fudAzNXY(aekLC^d<2x@4x@~U!&gKKYuqi zX+u=xo~QNsbdh(@rmqLrA&>7o|JJ$ZXQ=#pO!Tf>-aGUF_2={gz5d=?m;7yi_le$3 z&wdcNq$%oM_?^GM|1^5AEt(Sh@s_Cfad=1|jNUtYWxckKZBcLOi+e8VLOT8awD-!{ z*A#hOUhf&|Rvh(;C;YJazlM>2zy4zS9`fnRb$OBZ)aP$qvi4lm+x*10f|tJ>^%ey$ ztMm2wKSu@x3qLDRy(kp@Y%TDdedj*~QeT}4r5z;{N_#n5AaeRgfm=TnClz|RbN_ZO zrKG@n@a-e#a=H|H|GxaaS)+bm;2r+kJ) zKlk0=WA~ODHWhg8J46o`%D&F$1=2r!@Bl;&JbA9{_zQhMJB>X3daEq( zW?gsU{TqiAO1s}s;I*X&g9(cYy?zbvj*5}5D<7Et+Ow3?^$WcUy(vYLXV1K_(Azz# z&#begJ6m2T`&bQHe;*V`zjM66bLU`q z&dK>)f%n_LSM2Y7o62ETOj@QhXvk{?Sq1UC+^ZaP~gqD`um~i zjsnTonF492$nBB6Kd9?{b)npc{Cf`g_>z3&BH!aLlz#bJs=w5q(`%l0j&xcK~d=6S@~|0rgj>%PBVr0Xu`iEf>874t{`@A;e!JNa~G{^0z` zd*#SJcyf-+cZTM8dEa~Z?i%KS7hU}MCD(qNeLes0F|ls=-kUe1+`Tm{`l=bhiqcbTX9c1rT+=1r_?-S?oG=f(yl1m7fG zxBfYS{VtF1z}*#=>tk{}=QqWC%k4*2huwa|5avhM4L!4LAkVpV19EcvhC$trq&#jO z-e1>8taCy?ICt*w^{fkgf0`S_{`lS|+!E^xk%T2M~nHM^VjIZeDCh_g74nSdh*)0 zTi$M!_1dN1&yjY^`q`C-diBeFnELkL--mQbIa}whsCbeCCAw(`m)Y* z^EKY<)?3Kgt>e;k9YsF;{CECUSmgR!*74&$e*Gon&Lp!g`T*-f7BHA;;-yG)u5MozMSgC7 zfOWFl$D^LydK7(i`bGV^b;<2vZ{BNXCtfo$jhyJxX(Q|jCu2s&R&Ri=gw;) zZ~r^?H&Wh9MxPf?@BBsmI(s$0yZs&H;C?4`>l5nFeHWyW_goe57OiLA?)$M#WPRrU z9f}LlyRR>Qc{%bdsIGeF)XcE=-N(P4{n)ou&#olDzTIdk^Y_D@yg966oPBmhp47*S zy5IOP>&q9;Z28$ktaE(3)qz~k`G?QS6Z_C@d7k?_D39gIe&jQGUirvQb=#lFb@r)P zD9^1M2i}n9xxWX+`+WP>{wLJl$@;~upK5Zw{m&+Z29dse$0AScw>f!E&)!*u=W{GqLynlfMgaYp&<~=pSdj>e~T$ zkK4bwQSyBU`9dfB&@wCzjv(G$=-O|@9 z;?5rY5O!bs#}~qRQva0S?U#}tw;rC5C;jm=xw7AaTvtEYJ}P5dt~cx0*@?B>C+9qo zqp$Zp^Tgh@GS}(d*XQPXyQ|vY@4q}(>^Kjyj@z9O`W?^xu=UKS-s9CyK2FN@efB-Y z&X6bT?uYX{_uVn}E8RHKJ5TJ4=!3JjugvrO@9Z9|$rC#V<#OkN4zth8_l{ToG1oiK zKR1P5ID1K(T%Yt}p6C4POLE12G(T7L;ki6dzH6T+`;F{#y82!j=KFVutEe=TMo^+%s?DX0FN{VY3A@`XH{ z-jkk7m-jk3u|MzjGryfD{cL)k=f2yd%)=9f&=^A7}IO=r7K1zL@vB_JN+b{j(=?UHg9b zPr6=j(*1=gy8rY`-A^iz{hrGCIiCA|$o)A|?~Q72yg~LAhi#JUOAqIG?z3-+Ts4ahH9^&uY-N^nacGx@rj-BR3z61I< znOFSuE=l)^cXa$=ymR){M{+#(y%oyk-hZ#|bG)KN+=L>Ul-2Uh3+03IF&x<`ZJjZkA zitBWKvPkTD?X@{x_zd6SFO+?tpN!La+~b;m-skq;_G`VAvu}JSe;4&8wX?F1=)R9l zx~`x4YmUs1s5dvC+M6SOM{{z#SAX!)%RRPXuN%7IovIIXKE-psUqfH=>-==6ceii1 zS<|6BZXBatwmgQoFh|DUwK?MdKzdFuk*C{#=KXH|_kfPG zPvy9N;yVxOJdx0ipQP)`N9evo_L9zXr{%~zTzSHcYOhW z7w|}?oBx*nK2!V*wq;7c-w{O`lfBY)2Bf**^s`#zf~^PzV$MIX9k$vTRBIll({IR3Hy?5L~u zXG;I`a;DfJ4`#Y?{D${3MV}63ieC`vJA2PDl^1>;&cEWtOx?%Nl<{tTrdPh}rrZ1A z4J14{Y7vXmC@y<-=S6M{*&hA{F>AAmW`-bY}s!XxR zKc6Z4^T^H3H_;dO_of=O9<4m+tMj*c{0lvH`~Rfp{I~Ec^Zm=dw<1&8?VmF{(oc^Ny0QKhld_T_=d)_J9vG3n-V^&AFZq|8MTtK;; zyl6*m-An%cb#p0lcJmhW)Y(PwKlAO0=WWSUf8$K)hmnu7x3Ughe*K0|&$9k=eku4D zyT7k=d$!b5QMTB#zmYBL$*gSgkLbd>(D&PXFk9@RbFe4--&MmO+JC+i{l4?lEzg$y z64sM$UckEFjXQbS(%(MI|dD$`#J}+DBc&}v3JUt;>_Df2$WgdDt ze%AiHyj;hZXtsCL)1RMvygJ*vlFw)S*FQ<;&)e_)Q7l{fAJTE_j`VC9H%hXlKiZ!y z{aNp9uk@v(cf5Qq%X5E^=9}3fpU<+LziLTgw)nRss@)WM_4{`VZvoo zYrT5nZ|{FE>|4CY|NA=qv&BE|Y?k=zQy=bpX1)4*kWZ)o)2O%i_`VwTGSe}7)K=gv(McjwUF$`*f@u(q53$`*eP z{MelzLceS`Z~yG-Y*`ml|85_N_T>I<5#@06SIX<^nYi=+yg1wWBM!pPU;Jr!-apTU zemg%R^5@P`e}{bd`;W8-rcj1W{(ya`zvgUw_490RZ@AZeMVudS`@Ns4Jq&x+mM6!|p7mhV`~8;h z1!hHx#Evk&$lI{~cXcf*o||?$5R~&WwtEq9!VKpE9)%y;bC0 zwDhsL4`SDJcA)#zZu+~Zw`2XWbGym6+wUfHb}-U+`6j=Y4o{e$Fi-7OE23g&Sfuu} z9YvD=ziWC=sGYDhDt1+`NbGV?M!kl`O|vF1jLN<@c0FfLB%jWX#QP4ucxChbUtvTx$nYXS0r}k zM~lS1kXz*avFM{M71;fpJ%ao=`wIDS`}(}s)#vCUsgGY5$^HTIaP~>+(b*lbQ@eEL zXu0!?ygdu{of}sj6+6-2hSk-Ud`ckk^qQRKt(&VF!F zRL+t7iTC;TIP&N02HfwTqj`_~IJ*J$SL5t6njh-vKjSaIV$mAp{dq-?Z<2pk&(y!O z69l7TFS!)^Wv91CB~m}mzWrH|mwxNz@kgI85_|KZBC-FWkIuf2{X6d`=ij>J_oVOJ z8?jTDRbD%0GWoe<;CBM6sShXbN66nbwKv9zyZV}id_TMR^`9eWXScss?Z@lXu8O_c z+0`Yw4IS}YcI|o^qA^3c3bzIQ`)D!&*|Z8wZoDR z*DlGYv!^~3_1?Vb8{bgbwcKwPNq(P-s-3P#+S%G7vGd_y;p}P4HDAcXy@&ideS1v(50K;X zuCwM`eJbkBdgjv)ZYJIAg+Kf7BJ%0h=alQ$d|v2>Yq9(L-!GiOd~!p;`}C76@mo7T zTl`4sIsfom{E6??a~40(^6t2(ed1^3`1NznyK-ul?6dKl^JC!Ll>B|eEZKM5ktKej z#b2EJaQ^$88*qRB`*zMv>^ytP6^(j6AU&(ud~E2Cp*j8 zNs{p2_vfcY8yJW9`#8@$o+b17-|0EHw>gL9pO+!-{E&b4#rcR8xLLjPkgh99&)FA< z-#Yi2#No`>ZtC3ShGh#i-xFC+eLE1p967o3Z;aP&|7A7vKY!mIc{Gh(`$X2GS>BS% zI)$FNFH82zevvKvM0HtW@Aw_(5B&21jKA*u{@1f)zvW?@M`nq?>kC=3e&5LX27jOP zH}c;1mSl-v-Oy~A2O$r)FFZX<{6Z76#lMyF9W~x1GuuDPl5+qrXM5Edf#B9%T0fKJ zoLh+eR6P6Rn?`)hJj?&S&4rw|@cjyZCgc8{q+juaExCVV9p%=46?%T8g!4B3xdGM# z?%W8WuP3)Wq3JU}a^KfNU!48zRy_xFjPsBF_n{_b$+@??<-E;*eVirxF{iV<*vBj1 zN;|0MVxG`_0p#z_tC1hKe?xiPJfcR+LA}b~L&y^Q-W^%u7duPSC;Z#N<_jNLktKe| zf6em7`rkKuEnD_YxZlmoe#N;I|J)q${rL~vmD|AlaN(JWLEh{3&&#r8J&3&JoCou% zU}DWvRmfv+`>sOZ*mT&u@RDv-c6#-MWQyLGHW=`FH;1530WQU|r#VFP?Ve z?teAg?IV4Yb&G%g>c2?em&@fZWxI9DBGPq!ZQD3s>f2q&k2}Azk^1t_hrXUIexN+( zzIQ|1tplhxvA=2lY2QvSxzG8NqnEB;X`k+V8uE1g^7C10htBq%-_|L93GLCHXJvik z`^7(USC-g6>yeMYzfC{o_FJcBd(KYCy4URoP`|EUL9d)&EqdYX(&)d_pL;lG<@;?? zUoNEo*qR#qa}N68?3|Bhd*?q>`cd>TX+J{_WP86~_4)fb^moqB?4gMGCv`6HdUd+( z>d#Kx?5$XLk+XK&5ihtVsjlq$h|G^x-YoM*;?93AJtFgj(Gl@4B6Rbpkr5fU zHblfPjCk^Usb2Y&>gRD~MCPfXi1 zD1G>!GkE`^LnlXd-J@$m@#jI` zERb^Sx>@9RYef8sZi&eJ{f3Clziy7m{E_##dHmRj_>o*25&xmn5pR9QJF~VTZ|4Vx zJl%LbBI1q8zclp0p@_`e2SjxK7Lj@9PgLHYQcmpt*IgI!hAl|=pld>bJU3j+`HiU5 z_cdD1eqZEA=7W~L`O8FP-Z$%u{L6eYB664*k@;n+mWTYx_XHv`FB%#VKc2%8nYVqf zK*GBtUhTKm|M>&t@8&1S+xhb#FXu;<6_Itxhc}D9QXc20b)U-PSVa7peiRY^qfuX^ zXzVJTx zT@v)mtp_SpP8VsqpG0K+vtR2Uy>;(Ff1E#1SM}RVQF&ZdAnS&*h_2gIjsqj&-?vZW zyH#Hv*7tm^K<1H@$DKb%FP*xttLS&x#g^TVazcIz+tb9avDLe6Vmc7E(e z_Vb)wU{cs~-vt^NmVORDBDe2;OIYUf_#?S<^!@cbAK#5|{xtX{jf{WZTKsO<+kN|0 z>wcJw-L$N8{JTYA83%L1p8G!O@7aIy&sqJNb4dQVh9B|$3jdtgf5Ogh<&HPPp0gWt z%@IEs&TaHB?-VO4)bl@o((@1aq50=_<8yE zH{|2aU%rO_+OIm-y+181`=*@Va`T2#mD6h7kNhMo=l<|3a_5^k$K}q^A+Pl-&z^hh zsj$q0o(zk<4SynkU30??VcE|s3wv+;zWx1sDaVEW_csoQ-FfoWm+AR1>ebEf?%_O) zf4-Z2GB-Xv^o4xfbH_AY{PCP0OK<%A{PQx+>Ob~#{J5^_+?-y)c`tu`aWm(t{O`t3 zQUAJ@u&irl$T_k**>87#cGrc)PbfPq=U}^GclFO_Kf*q>e;%B34DNhvEA{C6d5|wR z-`#?IeZQd$Isb6`<$AtkYFOrBKT-XdfM1;NuQHi@`RCTzzjNoQKIWX1f4-mV?mRXA zhHkxwUO2nM>tUG}lD>O?V_43G9l`%D{*TL>sVDb+Vy-*?qeDEGe12Wd3!Ja=zsE`X zP9K-ZIk@A0Rewm@jq_{7ukFm#jkn(ay|A3Cq@2z_0sV02!b>z?ozQQ-J6%rP*`WvI z$T?2x-T5^w7rolXb8h`YdvbOl>e1QH&>y$|$#rKx8xofFIeOvBMg6&TBl_h0xq_tc z+h=LlZvT{aEq*atpXp(lS6-_A6_nq%cQ;;u{Qd6;MD!fqw{m11gdE*ID)s8tyQ{Q* zuEKxs?$6&JhTNQ==<%@3i|H5KdCgR{r&l2--@k&YjihSHTPM&xEJc)X49zAmV1LVv3MXm^YFa71`3xC1yZhz$?l^1&E+wJar zEG+BZ9@;ORuYMd|^qd*>?D{MES7&D}q@DYJ*Je)GEC1U42M;~X`6+*0NIP@f$!vX4Uk#g2>`h@WKqaO+RLV+PA!hKbZ5oJeTX`7N6(6K-}3W=H-h0WuKlK{z0CU z|K>coAHPgDZsM2dzRyJH_OS@vcYQe5?)>LS$DQ-cQ@=R;AYHq7Jy+V_&(uE+zeu;g z#<}9UoX){|&Y!vcqwnPD_@#bxoSS?k`^T^Ec_3H)v~oS?&-iQn)^0m9>W}yZy8b%} zzfE7C@zZmDPWUOh{_!82WAp9c$irn!u`&_@CNGVbY;t{ zq<1^pdQX?-$-HK#d`I9j>cNex_;Wfx>)Gm``i7pbr@mafB45r=8UIDUy*(0;@AW)% zzm|h~aQ*E%&Ievln75PA{9)bqMf&8)cVWJs=k|{ewd*;1^5Mo8LZ@%Y&-pD9cjE_s znXa87clY<5(8rH1jHG*8$fxgzg#6v#GuV_X`%&ksK2l$9eu13ad53te_<6jLEAy?H z`n`j1sh=hJbNg|>SHILqo{SH?*VRWN-=F%heOd2cA!pyemULbF!w=cn9q-GP_WrM2 zvCFMce`55=?UVfmKVZHe(e3&?@kh_e_1t%6(F>>7l*63|K;F*&M|#dKi2rTcH_z@r zO}f7SI)M_r0^1bLAW??cJUC&(`y=v>Sha<#ae#+Cjeh+mavm zov}Y?{jJS)^QF$n!?g!b{dD`PU-H&mY2W0_^)L8|I==|=>-@QQ;K%Kc@5s@82ZnOF z{Y>=6&CBk>@6-SOCf8lPA|Jn9myw>cC(!;~{nFlDIZ59?zdN1w`oHyEEisrS%eqpO&z3zJ#H;hI1th zge8pMB4Nhk8c&xn^>-4s>hsNdUulh8FMB}m|CNNH$r5HfB%wD=!j>ut13e|oeM-Xk zeG--~kZ^pRgf$xOUnlYEDhUI9B+QsCVd}$reT0OC%OxzUk}&^S39G9mY+EE@v*xc% z-=8{1t_N?`-yf4OpzjGJOFT{Qv-h{@`>RzBfuP)1r*cSsM$`MbrZ-Z<0TR~VtMP1& zS86;eVXDe0py>rt^mlp<_piT%gH(PsTCYnq?rFVM&XfCs8uolt;+B4*mTRBMbEf>h zO0Qe}2Q@uQCwRZy=czu#_4(8)xt_65!jQ_@@)^|p1ysM{noj+La)13J62|rYUX{f2 zHJ+jIn96U2>g^hRU!CT&tX7^gxdiljt?ENi^Ifa?snqxhT(4WX%QW9D z8a8V=O+V~?iCQnIswe$5-DWLEgT}{b{ylwPOs}_C{b~B9m-#C1Gg^+ed!)RLnr^bn zvsKdxY5Mv4d%j+8vUaZR!pdjmFg>lYd}#j4G@h*O#PlLv<*`lk71MZ`-WO7Nr0e_l zER}ql{5-usq`x09z0xpfa+sjcX}=cNa+toDoSJ_l_tlk4*g9Rpz+D>tLc&m?#={ae z&yp}^?Qf#~uJ4WgO5)bf1qMkxq|bR}8qbih#`2jf@l>s^_|GLCxIx1K5+++YBNDgv z5Yv3eOZ5J$B((a97fZZV%N^49H);8;zxTAfp0=y_BzZ2Vp{MD1R&MQo>TZ?$tUnHD z{yN4J?Z2!(14H$G3#Url(hp9Pc=K&~pZ04u-UM#e>tiIWv-`9j0>6~&R;~;!XGgv0 z`$8I8z1LO9bCwTFC!}(-cwFBT(sEX+9$S6cd&*3{MVe2m9}PnVay?iqVf;o7$4eMU z)llV>rtPav`yCsvnl#_7rUx;3E?@5p)kwTdlan(aFPwumJ+^YIf zr}j?ecukp3`~@X}h!bY2#K$zoh->Djm;K=Sw<)F%s5j{RFfhDb;!i z=zPigsU*#3Q0u2b^{1ns)p?EeSCyt`)-P&(+Pup2DW-bi6-$1atUuF!&a-k)mETR@ ztbI1xIH37y(*A$SBDsH)Uhk+!m0y#}#rjJd|80Co*5A{$9LXxbT1`Kw`Ww*St-eDV zFVk@*sQT5W^Nhp#yw$&rk2WqgRY|_eB>1G(EO)s zeb#6?`&8~3TCQrX=Y4u#qsp~b7UBm^w`ELo8MczP11U>c~GO)XUB7zuT@$;PxZ>mZ}n&WY_-bC z`X@_2UGrn*vih~>1Ex2cexinHst>_mNcla@hh4YyVk#edZ>`G3#sO<5`>Y-`Owsq& zT6vy;%8bR9-PHPpjs~}JJzGBPzN9bp3#BUeRDCYPs3D14s4y0 zujT2GtB$|j7KQ@;za&jRuFqS)6W4JwU+bks`^#h6j$2gUZJ)x%+ZHWHV5+2_Q6`~X zue)91HovoR&-z`HOT0qv^Rzu$y?2ZgI&ZRdY_s+&sa5iv^nE%%w0^(RA zSh^~I+h3?xeX#kttphvOVJhcT6k5$p1Nzr1RaTs*oQI*f?Y3j`cTIPi?AiR!^4xdXs~u zZ`VyOO)7^bEq6!xG+wIfR?}mfkBoUj@)g%|1s<1ptW-kl7t2%*Hm=$J#^O4;&-5n{ zl6a_6pV$1_y4vR7sa9_#`n=6QZ`J2*y>N@BW8?2iiCekj+RmHweIctClY_SZK(;<- z@4Z3dHXpX<0>kCH%>x5JmALf>!O0T0@x|uhCMR!_{NAkVpKfa;9@O$QS4iC2{a%${ zver*r^V#iLxvx}zH+>HzYWkXw9#2W!_B~3Tlen#aI>KMd^|*$%J~ln8U9QjFEaCih z8rOPh(fq7fE!XSx`j{6b9@PG%S<7MTZd+dmhRJ=N^&?uZt*Td^%H@=nC#dz*{BzBR z>PblZ*>=rGvz8}tz1}xa!dC4^Z2oWKQG-60rtQh<&B`0PO`f-PXT~0BnvRuQ_1pFt`)j#7 z=KUJCc5Cy9GOf>{4@-La+OEcHJG1_*Tz|LyOWO~${&|!B-g||lW8?au#S$-lRl*UP z?oKUljgDhW^t$bv2DSd=HLdzt6vPQ!6r}h1-BrJVV z!nnS7v;J=T-dW4#_f7i#om##XdjFzS;U-v(MOmyN$1#^!XJk-w7&@#y`mOr7G8xs^>3llmr}=Hs_nKaos65tadN$5lIc(pdTFbdp@0+Lj+opO_wp_|FM(e#*^K0#G zk6xdl^69DdQ>f|1b$qqeP-pge49Ru(Dc$Dko3H$gf@Pc-7fJ}`g_OxP47!KeX;qJ=I4y2 zTc_hx-IvN^?Xq6mb3mW7at6lBd)wwnXydExqglHP>HNyp&B1E9-_~ok-=CrSWAj_v zPfpi-+B{{7=EKG>s}Jk%Z9mRJo4?ySs;o-hZ|jqIxx{UKXV>d1^t$Rt<6MbXs+{fq zWX+%1qfMUi$#TE#x7OV+akDR^*g8g^55?s7L0Z0i{oU%pLX)e_uWkR-emA|eeX<6v zA5ZJoAaJ_PZ;q3ncQvN>*>7K+LN_6+cyiSzS{m< zt;*NzfwrCssl2RxnA~k2aG#dP=8Kk(fXdVM@2%XnKC^Xx=x)is>20dE4_nvUy42)k z{ekIEnYQP8O~=-)Ca2WjO8WM`O4WN?kJvoO`URV}nf|3}yX%;@Yrhx2N77B#`ikp( z$@={!Er;bdN%g2f(=$7_tphDS)Y8-bvtISU(oNEI6Scl(_4lC4 z!{$vvEr<2PR^O(_Rxg%s>o03Gy%g&YwO!i%t*T$9*VccSUYWi$tA6d%a%HG|P2LMt z9wF0bU3b|$XrBIV@@P}J*uJWbo3`&@=~}*Q9%1d=##57%t^ciE*uG_xw&w;Nhf}q_ ztRM5Hh<;f8S{PC}S$^#Ou`;>e`r}e#I`pXL768_gjB#`z+R;Y&^35tx5GTsP$QGdZg)F ze`NNnkm`l)Z<_qAeI=?~GpZ!NW|y#egUPi{e{aGo!Ka=x%)#FrspJ(-^VXEe*P208Qx7pTddS8S7ZvIOF zm5aU4_Pz4;zI=VIRl}g>&-x1+zhm0o6YYL|uZ?Rh`kcwz>d*2Q*ZkXf=xN;c?QMM@ zSNW%EzUwti(=ep@Hodp;$m(~W{%&#GUo(4vjW2=Oq9@k>$Fy8lU&)$IlGdB)tKDz? zrS*5FPtBT+ty??FukF&)_m*n9Hg7X|=j(N=kB)s?ogZ2MW%)OGceG1=zty+RtL;A9 zrw^%|ZC}siWA$PEf5$$i=BrZMLA{2RTJJ#{|8yQ}eiea!B4_jS2u+rFU9p6o#;qUh z*w?#Keh=kH*pbc{iCaHr`+DYw5||*rTm6K7sn3TcjO%DquTPS&!|reOd$U}RUoT;zwzs(IkLjJ&OCV3v zvGQf;^O_ISBa=h?TKV1f7h_tl0Zrd4*5`kw_oQ&gH`zSAOyy$Zh3SRu8=IU0qx8K!H5@2mjjo@(Vu{;+ zQAhuw?c39KY3n2#*KD3^?ZdPE8bfmTe}FVoXc0q{WgEMal!WeZG5x-v}TUnZ~bXV>)+Z-Q2Rskdp7&3*-gysjr@d^6&v{Bhn~!?8NxWJ0%*q%1 z()bb>EBDzrW&ZVMFSGpw>$gLX%Keq9hc-@FJGT0@c9Nj_pRq!oi%*o$_8n}U-qEjW ze_?Uc16y|mwEj&WO>Um{a~*Ovz3wmXGkvyxz{a*-O@_T~qbLhN1{!@KU$D!6*iN|$Z=&$u3({@m&{aZ-q6`u89L*==AeQ&w8hZ&at zfc!q%;@V%-70Y#N$JV~gzSO4ocZ~lgw_nP0CSPmcwoa|PMSi#IW@j?{tLcmFFPojz z?zj0)osJtd+MflqU8L1W`hk26wH-ETKe0#m$!qS?--k&U*M6y^KDA#pJKJY3$$e$N z)BCTL(B^Muhlp7{X?+C7$$bIscY->e+BjkB3ft#f`n23{}W)vnjxBlp$aE1~IU$GS!J zxOugvH%3BhSGL}?`fAmF#L~C@Z_~$}*50+fntsM+OS-9d|M&E5U(xi#<_Gcda-X$R zo4?ubw$8C}+r|@H2j@Sp@6mco()Zf)wobA3Yv&5AKZxr*CUBjkWBruP->v+%e{1ip zTPXM2cxUx&^F#CZsMmV8_F;CpxX$ZLUu|CF**FxCf7UOU-8ioGVtSgd?XaW&86f$x z@usXw;wJxE-QNuAb+fB5=Vk1hl+1Z|PY7jF5Egx`pW~k5--M#`Ha=hmDWRa~=JT&L6Bj+Wad? z%VGV6cZ2&NbNnjP)zFKV<$PHczV4 zbZ!4OuIYE^iOSW+fnce;r%dJ3=ShiMdhwXV(^W4jwSMb#{HoJ@TY5G>GrhHTV0v># zFOCYk68#k8K~t z-e>z{w*M7Wy{)a1_XTxd!sZb%ozGZ%vhmI4cWL@u$NEA0P1}zR^pkYWPT8@3ERpNB z|84u;*00$4T^pawU$e#LGuqxwepWtP4_W0G*RJtW4KHkv>s|D@ zUYjI-SkwLUW{FSM{C!RD@B4~e@2cVF`utu`uJ_gSFWxBeJz9=|8ZOZLn)oXI! zrdK6=S>JEvdEUyQ@Bgc&(@-z>_tNfo&sw=YS)V_x^7w44T<1@@1^jiy+fp2xI4j_dpWqxlGJk@U}Mdj0kN^S8?N!z?P3JkSzbwsn550awpAV~i=IigRns1Y5s+K3F&z;h6j^^Vs)x!!+=a{~4 z-!{qrH?~Xow!UwOJ~u>ve@5kysO1=<<(y-3RQaT7`ajh7&C=^PHcI;SZ%CLa>BV2x z^skWn;v1x$#GlaiV)`49=SpbyCYztxeZeaE-9lUE z#O{^rwK|V7Ie1!*Ra&luN98^n@2z}EDhE&3!Raa=^Ix;^+~zU%{#JdjmGi(t&7Z#4 z>Y-BaGd~NPSJ*zD)nk&*rz5r`2h$sqqsiU&%g<>2XJ~yVYk9_~o|=E?9(|9M+v+=@a<}tt z3-vi$@0lK?>U|-VLz>oKy4L@f%VqhreWsA=S))E@Zx)}SNYlc+3d>JF3eBV+LQGIty(^lm)Wn| zR4;@2yV>JQRBxO0eWuR=m4~&XI?cEF9a#IZ`kQU_uX43{yY&l}KfBM`RZQ#ius(0) zTBYe^Xug_MugpK!*0E-XNY~%(J(j<8O($RFZFca$*)<{H~q2o zgY_@9T8?~ehb9+$-t@1{>c{e>dR(vhNmjk;qk3WflcvX(KWpd7)(`3PmLDsR>4*6_ zBesBzmj2qf8k652X4ev4kW^nR)F#4m-(5^tWQ*EJrn zfA;(h`uhM4`)GKLhCLM!x{pL4e`!pTp)%X3s z;z4=N_91N@Z~Gu-ck9ScRPX<(hL(@P8c)&C(hYb4_ivP5AFkn04XxbQYrIIpctqot z?w9Vj^|kkNz5iytKcN4vka*JV5_Z^+Ob%ABcE6R&>MtPAb?ozmByRmwT=mWNRm^VM zA@?uqh3SKp-^yk0xAIy3Cdm8DZe;uO=Fidb9?P#iXZ2zEAE@Q9_YKmx)sH=A<=6Mx z{*KAn{6y^BTF3jfz5@0>OV8wMdOuR%YxiYI-1N)rsU7dL=f2dgJKi7o(m#8z<=^zs z%B`X80|m6bbo48&qyBq>nx3`Cj&{>8ImLNFS}z*tC!aWEbxKn7$%7;+&WB2WlXh(R%wz$7Sz$uI?`LK#eha;Shx zm<}^wCd8o%X2Tq)hPf~g=0goEfQ7IKYGE-ffu&Ff%V7nqgjKK_*1%e*hjp+XHb4Vx zgiWv+JlG1`U^_Iz4%i91pb2)v9@q=}U_TsygU}3z;4mD47B~vW;5f9x2{;L-pbbvL z8EA*VdDK57Ko>}auFws-LlX3Wp3n=Dp*Qq_z7T|d&>sds3JionFc?x{2n>Z`kOsqH z1dN0bjD|5V7SdrHjE4!30a*}+T*!wA6hahYPz)t72})ryOo6FT2GgJ%Dxeak!wi@S zaj1gXFbAq(F3f}ZPy-8KAuNJgSPV;GDb&GoSOF_x6|9CeuomiJ9ju29&;T1@6Kn<# zw!${p4vnw_cET=bg59tO_QF2c4+r2NG{Ye{3`d{^j>0iG4y|wkPQoc@gVS&Z+QD!9 zoge|aKq7R7ZqOZ)pa=AXUXTpEp%3(hAoPR&FaT0uAPfTjq)s3ehQLr525B%HM!-l2 z!Dtu*V<8>J!FZSe8IT2G$c21}Kp{jS2E|YUlb{qP!xWebWiSoOp#mylI?RBX5Qi$5 z4RfFx=E6Lf4>hm=7Q!N^g~hN0mO>pYhZV3AR>5jm18bok*1>w%01dDaHo<1_U@L5c z?a&B2U?=Q?CfE&oU@z>0{cr#dLNgqK!*B#z;3yn}p%)}WZ|DPkAqf4TKMa5r7zl%4F!1LN0z+UZ41+Wn4kKVBgkUs` zfw7Pd<6t~YfDFijFyul$M4%9&5QAbUfk{vblVJ)>g)*21Q+dUkE}!=nn%R1qQ+(7!0W}1ct&eNQ2=p0!BgzM#C5w3+XTp z#=`{2fGh|@F62W53Ly$HD25W41f?(;rodDvgK1C>6;KJ&VFt{EI8?!Gm;==?7v{ly zsDTBr5Eel#EQTep6zX6(tbmoU3Rc4!SPS*A4%Wj4Xn>8d2{wZVTVWe)hep@|J7E_z z!EV?Cdto2!hXZgBn&A)}h9l4dN8uP8hgLWNC*c&d!D%=H?GQMh`iBJQ0*TNSxFb2j#I*fzyFaa_k z3&M~K`4E9Zh(ZjCp#&yDDNKebFcr#R8k9o?RKj$a0W%>ERWKXoKsC&Tc`zSpU;!+I zMNkWiVF@gSI#>=XU?r@A)vyNELOra5^{@dNU?XgT&EUaS*aq975q7{%*ac0n8}`6n z*a!RJ033v7I0T2`2(-XaI0na|6;8lOI0bER8qPpF1iDcFkN{mE5xPP*=nhHH1A0O) zNQU0f2l_$~`aypf04XpK2EkxRg&{B$hCvz(hY>ImLNFS}z*tC!aWEbxKn7$%7;+&W zB2WlXh(R%wz$7Sz$uI?`LK#eha;Shxm<}^wCd8o%X2Tq)hPf~g=0goEfQ7IKYGE-f zfu&Ff%V7nqgjKK_*1%e*hjp+XHb4VxgiWv+JlG1`U^_Iz4%i91pb2)v9@q=}U_Tsy zgU}3z;4mD47B~vW;5f9x2{;L-pbbvL8EA*V1=K$zKo>}auFws-LlX3Wp3n=Dp*Qq_ zz7T|d&>sds3JionFc?x{2n>Z`kOsqH1dN0bjD|5V7SdrHjE4!30a*}+T*!wA6hahY zPz)t72})ryOo6FT2GgJ%Dxeak!wi@Saj1gXFbAq(F3f}ZPy-8KAuNJgSPV;GDb&Go zSOF_x6|9CeuomiJ9ju29&;T1@6Kn<#w!${p4vnw_cET=bg59tO_QF2c4+r2NG{Ye{ z3`d{^j>0iG4y|wkPQoc@gVS&Z+QDD&cY*}y0*TNSxFb2j#I*fzyFaa_k3&M~K`4E9Zh(ZjCp#&yD zDNKebFcr#R8k9o?RKj$a0W%>ERWKXoKsC&Tc`zSpU;!+IMNkWiVF@gSI#>=XU?r@A z)vyNELOra5^{@dNU?XgT&EUaS*aq975q7{%*ac0n8}`6n*a!RJ033v7I0T2`2(-Xa zI0na|6;8lOI0bER8qPpF1inW7LjrVxMCc0LpgSZ%59kTKAQ^f?ALt7~=m-5_0HnY` z7zBeM6^6i27zSxD97e!M2*GF=17jf_#=&@)02z=4VaSDih(IAkAqK@z0+XN=Cc_k% z3S}@2%Ao=(VLHr!nGlC6m<@BF8s@@0m=86u02aa`sD;I_1eQV_EQb}a5>~-#SOaUJ z9@fEn*Z>W%5jMeQ@L(%!gYD1=J76d5f+pAvdtfi@gZ*#-4ni{=g2QkGTHq)ggX7Q& zC*UNUf;Kn}XP_PY&Av{M09_yvxigPzX_oK{1rTBq)W+Fa@SU8BBw6 zsDMhC4l`gT#Gwji!yKrFxiAmrLk%o|g|G-}VKFR$rBDaUVFj#&Rj?Y?z*?w>b+8^b zKm%-qO|Tg}*b3WVJ2b)$*a^F!33kIC*bDn$KOBIA&hq z4Nk)uXotXs)ITIZ7f6Jz&<(mn67+zc&~M}VGXQ>dRPbRVFNV4M%V$-p~j7LJ;~ve;5EMFc1d8U`T}_FcgMC8VrXKFcLyA8pgm_NQZGS z9wtBrWI-5mAs-@82vLYZF_ge0D22%|1*Sq7OoMW$fJ&GSGhimfp$cZh9H@r5Fc0QK z4J?3#un1~lF)V?lPzTFl1+0Wsuo~9DTBwJ0upTx*18js%uo*nq3fo{iG{O$p3A>;P zcEcXn3;SR{9Dsw+42R$_9Dx=%3di6$w89BE38$b9PQw{!hX97)PLKdyAQ8GkH|P#Y z&;xoxFGz;o&42Kag5<)N<#=uxehjB0-CO`&c zK^Sr&A0ki)QHVh?l)xk?g~>1lra~D^gL0^VN|+8aU?#+&3TDF`sD`;P59UJ+EP#cu z2x?(5EPHshu|*e5ip1un-nOEi8s5 zuoUWGIjn${unJbg8dwYUunyM4255kdun9JU2U}qqY==hJ0XtzAG{J7z1AAc~?1uwz z5Srl-9EKy%0!QH(9EVmo0Vm-Uw83dO1MLv_CiM>q&;=5qD|CbIkOV!TC-j13=nZ|K zF9e|<^oIeE0s~)DP<6#11Ko*1{7xEzjg%E`p z6hjG2f>M|aQ(!8T!89m`3aEtXFau^n9I9Y8%z5Vtc7}52kT)2G{8pK1e?Kwt*{NYLnG{fov;g!;53|pcJQ5hIza+-fkfyE-Jm-pK@aE&y&xHSLm%i1LFfnl zVF0ASKo|srAr*$eP#6YjFdRm}NC?4b7z1M=9mc_Um;f1&1!2gAe273HL?H&nPy&;n z6ehzIm}FJeUtPumBdqBB+JMumqMu9V~|xuo70m zYFGnnp&r)3de{IBun{)FX7FGuY=iC42s>aW?1CoP4SQfO?1TMq01iSk9D>7e1X|!I z9E0P~3Mb$soPstu4QHSo0^g$kApyETB6Njr&>fPX2lRwqkPN+{5A=l~^n?B|08(He z41&Rs3PWHh41+Wn4kKVBgkUs`fw7Pd<6t~YfDFijFyul$M4%9&5QAbUfk{vblVJ)> zg)*21g)*21p%)}WZ|DPkAqf4TKMa5r7zl%4Fr>l|7z)E64Ti%A7zrU54P#&|q{BEE4-+5* zvLFn(kPi_kgeb(I7)oFgl)_|~0#l(3ra?JWKqX9v888##PzAGL4phTjmA4M8es?Qgk8`CyI~LP zg?+Fe4!}WZhC^@|jz9|>g=26WTHyqogj3K4r{N5=Lx3}$oge|aKq7R7ZqOZ)pa=AX zUXTpEp%3(hAoPR&FaT0uAPj=RkP1U!C=7!%7!D&~B!plzjDfL`4&z`vOn?l?f-vMl zK184pq7Z{(D1k{(3X@?9OocM|KkVHNnAOw%Fnp3u$4N+%BqK?ZBuSFg^s3iU(~BhS znq4zB%^rJZs!5V02}uY^k|ZHXk|aq;NRlK;k|b}5lO%aQYtKxLbNN&u-7&zn8VvZ@v8XTHlG2%TR_hf{~13G-DXcIL0%9JDA8MCUY-Scz~%)V>&aK z$t-3whq*k>Jm#~2g)Cw*OIXS>ma~GDyvZt7^Db*x%R1JxfsJfpGh5ioHny{ao$TT} zeqc9y_=UafV?PHt$PuOGKcy){S&pF`sX|q%kwkTBP?K8JrVe$fM|~R5 zkVZ772~BB6GA(IMTiVfqPNdLozoY34DX1uSF{i&?@_ma&`_tmI8rv6^>T z!&=s{o(*hd6Pww>R<^O79qeQm-|+*x*~2gFWgq)Fz(J0%#v8qknNG^PnnX+| z`#HctjwmDlDNPy5at!4t&+$~CB9*926{=E=B&t(`n$)5;b*M`{>eGORG@>z0Xi77Z zX-R9^(vA*vB84ub(w(04qBni$OFz;WKstlSB#Ug~~;0`7- ziOJl{6dqtI)0oZ-W-^P}%waB1GmrT!U?GcG%o3KejODCgC2z8d)x66Z*0PTEY+xgs z*vuBTvW@NRU?;oyjvv^~9)4jj``FI`4swJwo~0;F8Om}DSnGm>dZYueI|4s;@gE~L_(p7f$OedtR+(ilKGgUBR{ zY~tiHl;MnEB%>J37{)S=@l4AO$`7B@|i&)GO zma>fHtY9T?vWnHb%No|Qj`eI{Bb(UF7PhjD?d)JDyZDYD*v%e(VK4jG&jAh+2K=Qc zO&Q8^4CN@#@l>E9m8eV=s#1+4s#AlS)S@19D$|(G3}!Nm+00=sPcx7CEMOsvSj-ZZvW(@dU?p#| ziq*W!8rHIo^=x1xo7l`2wz7@w>|iIm_>Ldg%^rSXFZES0~*qZ#x$WR%}Aytt!Ya;I?#y}x{ykDdeV#D z^r0{PNMiu$3?h>(vWb(+P=+&tk&I$AV;IXg#xsFCn8+k1b1zePfT>JlIy0EbEM_x@ zxjfB0=Cgo>EMhTBSjsY%vx1ep$tqU!E^AoJI@Ys+jcj5wTiD7rwzGqs?BY9qU^jdC zg}v-!KLOk+ATn8_?=Gl#i6%{=C_fQ2k#F-us=GM2M~mAuI+R`V`vSj#%r zvw@9lVl!LV$~LyMgPrW+JAPm{d-#RD>|;L%I7qnBUy9O{p)AKxj`AE&1u9aB%2c5$ z)kvZ`HK<7~YEy^0)T2HPXh* zh{Y^nDa%;S3Rdzat60sutYIzdSkDGFvWd-XVJq9%&JK36i|_b>-R$8P_Og%t9N-{F zSmRlW(v+br$54*)98U!*Qi;k`p(@o#qB=FGNiAwqhq~0GJ`HF{BO23$rZgj&mb9iV z?dU)!Qs_b|-RVg$deeu#^dpS{q%(+2vdAV*E<+j42u3oB(Trg%;~38b?qDL5n9RLQ z;Q^*Hjp@u_CbO8$9Om*g^O(;97P5%NEMY0jSk4Mo@+PZT&AY5&E$dj%1~#&Z&1_*S z+t|(ycCw4__<`N*;TQI@kNq6rAmK~CQk13)WjTg&l;?OVP?1VhrV3T5MiSMjK}~8= zn>y5`9`$KJLmJVTCN!lP$+V<3ZD~gbI*~#bQt3`ldeNIc^ratZ3?Q9BWRgWTadH{T za7HkaQH*8`V;RSICU6H6nZ#u7WeN{4m1#_81~Zw(Z00bRr-EM^HyS;lf! zu#z`f#cJMV4QpA)dN#0;O>AZhTiM2TcCeFOe8&&$W)HuxmwoK#00%k37r~_{O&Q8^ z4CN@#@l>E9m8eV=s#1+4s#AlS)S@3LY-a~M*~NGKz;5>N3wzne zehzSuFuA7`r71&Mj-edoIi3nsq!N{>LRG4fM0ILVlUmfK4t1$VeHze^Ml_}gO=(6l zEon_#+R=edq|k*_y3>s^NM{h4WRXprT!u275sYLMqZz|k#xb4=+`&X9 zF`0Xr!UIfY8q=A|__;@dLZr!!PV*ANx7LL5{GVwG^c(Ls?4J_a1RXx2`4sm!v>R3Y4Tk zNeYytKuHReq(Dgul%zmO3Y4TkNeYytKuHReq(Dgul%zmO3jFU*f&XqDYsv5b>l6rI z?G^nOrum1dUg5QhoI*9uq!#Bsr5H2j8-re-hTL{z++T7XMCpPNXuYQJu4?!v!?t zQkv0jFe2cJd z^8>{DpeE;1kBex`<+S7qI?&;U4(Uv4-(ccK1Nut_zYo<;){fJiLVjXBECadfA|q$&Ee;Sb%x&% z))xLuSWox|rK~0U8|65GN}Ng(XHlE;X}~2kr3G#2NEdq0n+O9KOg4Fp;6}naz1s+D z^X?(6$9tHt2JZ>Ny1VBHYwccUId2fw)V)twNB0R~?cA4y^>W`6*2w)zSQmGsbx~#b z2gh>~RXCj*oI_nMq!E{qOdC3ICEdB2zC;;Bj9l^=#m$8EW_J?SnB7lUSN14jE!k6q z^a)1DN%(Ti(IBZDk*7|soZHB`3})=k|_SS$4qGkBb^ChA$jI;fWjYoA^xtao~k zu*T_Q!n&p}2y2R*h!kV8)2FB&_Xup0J+h6~Y>xw+QQYJ|L{s`IN1EMOc&b zBVirRZ-lisM_GSSmSd^F$yDVGYH}|1xQNDFPD`$!6J6=aHS}X3nOw(Eu4gp25Z1KZ zMOer3AYtvwV}$i8&k)wAyhvD=@)}_+$~%PhCm#{koP17LXYvhUZOPAs^(22#%36ZI zQH~R+#Hl247PUE_23$f@TF{n`bfE{mi7BH%92Gf*YMe5azOf zOPIg@Pr{t_KPhd_^4}@XiB#q^s&h7VxPXRSN;6u~j?ScV6@BPWIzxyvjFH?#mKQB+N^GjW8Ga9m4$Mj|g*)KPSvH{)RBO_-Dd=;y);5F6rMW#|c#8RFXK0 z+MG`VE}4`Dv;!-P4wPY~waK1Y~q`!ZpE z?HhzSweJ(=(SAahJNqSJzU=peIkLYJ=EWXqUSt{m!SS3#6;7uH=TMgmX~bnD(}oUQ zNq4TMFHr^&BbR(eaWi4Q>79f*ruP%(l|D+COZpUH{^$#YIis%<=83*dm>c>bVLs?* zggKyJ6Xt#XM40ROJE7BmG{!kooF zDQ(W$-zm?DROU3Qb2fFjfQDR3Gg{G(&ZKe`edtd*Lx?ksk=#U>3wS$W{@;CsIe(83 z=J`EInA`U}VLsn0ggJa~5$5fEK$xrdDPexzSA;ovKN9BQ{YIF3ca-^8WjU4#oJ>{D zpeE;1kBex`<+S7qI?0Y zy98Gf{uaU2gug!!CH&2S7~$^>j8 z@)_Isn(z3Dz5GrX@E^@F97jb?p&DmWi}R?@#WbNgt!YmR-RQ-&q>(`uISl6p#&9cl za5qzUh#5T2T%KhiFR_f*S;c#-<6}1S1v~hb-TagN{7LDPT>q5kL@IL{)j69wTtGuE zr5UYgM`u#Giazuwogu^-#z<~r9Je!x`HQI%Z(97_dGrYdJplXI!ZMKtDeT5<)Q=t@tnp&tXu(`u zISl6p#&9cla5qzUh#5T2T%KhiFR_f*S;c#-<6}1S1v~hb-TagN{7LC5u7ApNB9%Ff z>YPm-E}$Wo(u`KLqcf>oMIZW;&Jf}ZV(`uISl6p#&9cla5qzUh#5T2T%KhiFR_f*S;c#-<6}1S1v~hb-TagN{7LE4 zUH_ElL@IL{)j69wTtGuEr5UYgM`u#Giazuwogu^-#z<~r9Je!x`HQAw_Uj->)8Q6&9HQwYM*76aX_?+#0!w>w-KK`K88LofIaRQY% zl_buhHs{lTOK3_9+R~9O^q@Bp1~8ax@)*I5jO8{aat{yiFf)0Ar+JP=yv%amU^VZv zo=@1qm+a(w_V6nQII_CypMP*XCsBpdslhqa98OgMv16R_WtLaOWLBz-(`uISl6p#&9cla5qzUh#5T2T%KhiFR_f*S;c#-<6}1S1v~hb z-TagN{7LB=u7ApNB9%Ff>YPm-E}$Wo(u`KLqcf>oMIZW;&Jf}ZV( zLN(5$7Uxl)i)li0TGO5sy3vbkNh5(LN(5$7Uxl)i)li0TGO5sy3vbkNh5HQRlnkD@UC-;(qU7QKa~gDRFA+-~{&UixMXC%f zdHBysgXSG%XvxEWVjA?gLe`c%{Kuw2$B@4z5C1o(L24&OpyZ(>4gM#~LFX>YOUXk? z8vL)7gXX;ypOS}?H2B|94%#$VxJn*M(%}Eka?r7}LRj)pk_P{$m4hon53l5*Bn|!# zF9#h%?OpOvk_P`t<)C{wnUaT+H26<12R*_GmOPZCK}k9IZ!UvQSGiJ39!k=nq#XR8 zav8J;WA>7Vk~AnO2mc9|LFcwE=aPq#G$<(tC6~efdR5RN3}s3lO48u}_Hq!`HT>7n zfJ;CsGM9cL$M2h_ibOckv)Im_vxE`!XvDv2;Tm-4H`} zCwusvBg@zyr*H-#R&ISRC&b3RlB)?ZaR-yf4cx*Vgc!Kfn9Y1%R8E>`Hds~ZfzSUa4K~OabBOvd2r*I5Qd^rZI!3c!5`WgLQ0V z3p?4vevT+-eJRIt3TINA^Jzd++HfVk8NzUGVmu)(=@e%26weW2k-pA)w(vE(`IRG% zwM$N-8X>;ud4$-aO=v|Yx^WHZ#K~tAw=#(bnZxre=2hNi9U(?&h!6S=y9u#D|KO#1@DvMK%A2ev#L4`K5GV6XzTqeSAjHNj&q-9H z78lTzWZDp7V0PhZA`BvzQH)_C5AX<2@dDxREw3W{E#(l;@>_l-#IQWFf_j z(wGpdGQ_FuMu<__pBTdlaVc-%PVVCo<}i=vS;0Ge%;$Vdh&LJHOrAjT*pl`9JH(W1 zL5L;UjXn${&h^|xh#Pq~5Azt$u!v>6#acG;CExNZ2MMtt%X1Q^QiIxD$Yr!4#C#0# z9wQ85C^s{n$%MF$Pw*UzDT?D5VmN-vc0%07eHXmHh#hzwMR5=7c;1l92(b>^lgc&pXArrBxP}v$ zOo(MTo4JHIhRayRS~e2m7Vh8&_Hl$5e`P6(Q+S%^Ax7bOgxG}5X-#{&axG~L;W~yh znp>I3eLT!8Lj1u6yv*yY;sZWqJ0aHKKRHN147)rFWJR!93?(o1y12~LTtTr39SZ#L+qs(ud6cJko)9x{1#j~KAF-Kl*iDF$caXAT%bh@FLR`F>oJV6q9K4S7q&NKu z@$ar<7$NrEI3^Ne-p$}i7Vt95d5d*yAjGx%k%JV)va28#Tor0lmy5WR7PO-~edtFf zAy(Z8#&SE8d6YR6#id*7`D?tz8b0E4cJULxaiq9yhJ4+sNDm4gk#Tw9r7PRL|u4VvPg!o~j7|TS8VusE2d?8DCgAdrqXMDl8 z{KW74y{0;Xs+>)T|J8_=bf6p8GLRUTLVt z1WqA|+FV34+H)n>GLSfA)EM;5dUf~2l?AMu6?R-CiMvMtwL<8E4hY& zG<+)0RC^(Y}`)qGxL8E^A3Ul8I`{lo!E)mC1p$Z3Q)R3Qe{rL>_VS8^5C5+%f( z3h}0HaA)n$emNv#AduR#PT%MlhD!xsL~Vm?wFjmsrkQ zgm_FJ^EqGfBfs(oA^y@osK9B|qz(;eN-H|ioe*cKKOx3aoKf6Dh^urD4-?`kJ;MTC zW(6UR()(=WbH3y|e&!%$>)JOpIFAcyN?Sr)q@MI<06C1{WENuPDSS3UP`;jH1Q7 z%Gxs29yr#A!1B9D=b=PvH&QReUrFY*en@g{57 z$X34QNA?o_h+lb5Gwp>Y1u4Mp2$l(TVVIos_m?wFbmw1DBSkD%= zv4bDj$B~WXDV3>44bJCcn$e05bfYg>3}qy@a3@ok&SN~s%dBKI>)6b8cJl|NFR@Q5 za0+Kqhx#<4DJ|(tcOncSj}eUKR_^2;?q@oW^DK*bh1Xfl2YkZke9IpG;ONGVgGwY( zn+9A;GFQ-*s%Of}Btd@iOr zSCB$Cu3;cChH?YrxQB;$jJZ6|OT58aKIRL)VGl<&QAcweCvhsZIG@HO(}`4ilSYg@ z^0}EixtD1?#$2A`C0^%!HnNrP*u(FXzD%BT8fR0N23$rPy3&UsTt_}PGJ%J9hUa;S z<*ecZK4uGFvztFC+f-kQGdYKbG@&Kk7{FkLF^XHboqL(i6U=7`Z}1))_>7(G=ARsO zxjKUrIgRR^&*gL=m8(f(2*Vi7c&73=^H{`k-sD}@vxy!2$S?dsxn{}>)u~NGlIh4* zT+1M`8OrsHVFHtRlxJDYa@O!MoB4|GImkbn%PUT!2DQ0}CbS@ho^aU!R326ecEWZIEJFCwIK9YeW^Te*`dJj5)XW-%*S&8KYV zTYl%L7SfRlRG~Vxs7nKykjxca#X$17ft$FEdw7t?d5VQB;Z@$_BR=IzzGW{*v~(cP3+=F_VOoXTdD7;#yQmG z5?aun&UB*}5eAaYNN#2#_wyJ}v4ADK#(KWs8-C&d$F$ZTq%uj=qz)HwDa~k2CwefD zVT@uNlbOm)=I|oRd5blC%;)UlC-!lGGHs+YNz~*#F5ps<>A+R=Bb_XA8Nq07V zp*vTT#vpPS$yn}UDl?ePGc4pa-r{{Wu$eE|!S@`bYzK7(CsUnsIG>BTj23htm0t8G zgBUk3j@x;VM|g%sEMpbx*vMAC;(PY+8%K3iS5c8_)S)5CwC5`NGlU$5aRcL-#DmP> zah~M`Ug34#;X^*=Grs0W_HkqEir2nd)4~WwhW5uA~=z zNGHZ{ZeGt9@}Y)i{f~TtqWk(}k-Uz;%q|R_^9u<}jbv zSi{F`<6HLfJ7rQ`pH${FYEX~nbfO0l1`%fjH*q`n^DvLGkXKpF2YkZk?Bpl*b96U( z#tEFvX`IQq)T1FS>BLp^Ba5Nj!~`ZWjYpWvb1da8*0F^j3IBD8WJWUvrniXXq-R9q zImxkDRmWDIYTotGo$S@vU0rACYG62@P@p2 zc6xqlBp%+~qu`h4b+zRoS4GkWXJjQl)H;$M&CQJ_o~LAF#&VN7#`3aqBN6e!y zEgVKt+em&^v_&K4R>6aJJ?-Gk- z#Rf-{xh?t<>V$Mw)>a;CqDm|SN`&kwn}VadL-W2 zB2Tf;8u*v@B!1C6H#Rtu9EmFk1w}qN9vL_=r$uHY9v$L%3KRY>AC%~c!qP%Hh-PLM z9CGVOMtneIcw(dNBKd#$KuTm-ddS6;cz!JYm*2PoheWaxA4)uQjb!I#W=B#p2IWPv zBHc5xGIAq5A_HBk@fMlUq0vlxP9#RhjL49Tzig_bJ;Vk^qknnvfASv=Fe@5O96_tR z0Wvi5mk)M`4llUoT10YVv7AWZkLK~TkVJoZYpbk`w4x&^`kCrlk@}I8Xgr>u*oiAp zfi6h!f)@(%CnYc5Uy3GPN+ed-+;}W6tw%IBZ^+0r|aMzdAGEhAZ>9y#Us(!x~w zOClD&c7Ec;!h#fXrQm6?6HH`uC?-83dGV-bu2}K%w5Ty`9f_+sLwWr7%sBkJ)Ocv^ zGBb;9zwo#Z6}^x`iL-7SNlS|i>6#u59f86uD139#iG_b=^iMC$%2qi!(cy=Sb@7yN z?M4!%J~gx&q2=$|UwfSBNHovN3KwfuYpIpgB^37f`8{+1LX$eM_=^SEB6I)c&0Qly zq(WQ$ih{zfi3_RTYG^b*Ff@gUZKQ;jUAG`KJ8dFqInFXUBavjf7>5f>@%?ok5s42j z{zChVxOPuFmDIw;oD+}PPVwLW+Xsrudhs{?SFios2c7D_oMeYsUPi&`72jCmgUPYT zh?dd*uJ3r~ym(ToveGe@6^|9P^Pc7o3`IA;_y=2M_KOt%cjxTv;{W`AOX`0+(3Y`W zRaEhhwu!~kRDOkhq2x$@EH9};q+cXA9xd$Cbk2@uW(K{s5o*WhYzuZvgyNz zbEa)1tAD|HgmlYMD@Qv<(lX?CYI-!57J3Phw1PLZiRx+TN2q*@Z=qd8wHq(!lN8&L z(kEeJSuHi~*)bisZwshjIka9WchfiKECw0`()x$1c z6#lies9uLf@&-qB3kRpi;#r!TEIq}J(X;`fF4d5AQJW0Wn5D$>le%VPXJ>SY^tau% zd3yg@o%@FzOKRRVVg@1GS84F%z#e*LN8hOZ1j>F?B%_b#Z8l6E*e~PS584xC@f|%yD~)SoRdCS5h~ndL80stjT#ASqYfQF*Nn_i9z*HqnjHq!@viFR zfzeo2D21t7zVyPjNny!}YsgRvCZI+ z6K&lO2u)kd*f76|^f!=JUJKu>2bHFmmYgxLaAVE$oOf2DZcW#ew5P*+(BVu^j8+rPVI(s*BaCr6IjnBF$Lf-#)?(o#OjZ-NpuI=4TZ@|H33Ks?5)KZ%0u$eDnonSPht#xPj3v%iWzG z8N*{kif{M|xi(Dw-&HmhCRF>Z*ziP({SThV{9G+uEH*H5=w01oS&C4{=#cF6j2ySr z2IgeD+>77rakC>cl6|ID5!__(JmJI?6cXsG5MAu=_ zXl^3?{`JICG7`0)I(T5Ts6J0@FGaJPQ!w-oDSK#0Ry-v_2TBSV*%sAqnv0Bh;wYMj zdo>+G)tuOz)6@iw2#rL+s5vV)81l97N4r>hXnYa}UYJ6Ou0he* zyl@N6i*9FzF0{(Ja5$4_!0a~L$!69nsIe0#eNMs6j)KZClCNABD{+P6%fgg%FVYQx zf;+pRQR$bT*n&QFJlv^hk*H+~QnH|E79M6|%==%w-olkuP z(d!A9eG7emw|_$RA1bVcw?q$p_Alubi5DE}q2CtVq07x}6AkyvLLRhCoP1)NEh8B@ z`G?-xHQS&eQY=-9Z~4%>iock+fi1;D$0~7iO?OVata8?+N_0~VcAY^-cWyE>@^W;j zwL4n69+FZjh5`^SRyp6#@Y4Xul^^SOkha4Xr|=WF~G~C33Q$FJMDm`)9-o z3sA_PxVAARrpZqU9o9si6n(nrXREw{#y~~?GAwjc&i#VW-%OOfqTl@M&%{Z)KQ%D) zQoFcUrIt%^%!v*|u|jtEHI?&_f}|=O9TiWq#4iq=MmTvrRz2e(-G-==)Jq-pAN}a; zivV}ijRHd1Ejp+!QFjuv(h56DEyMfcX{q7I5QQ!^PlrIQ&?!I1y~i*J&^^dGoFs`( zS+-Oy+T5YzIMjRX5bdW@&I%QLZcb8)flsT*K<#BBaSIbXbm7$X!xGJoYQoWl!kd(w zr_D+B%Xs1>+lS7H3{DJ5iuPFaGuc-WIYs|yuCmZSX{*d8Zgv#C-X)e34dtaE>+~=6 zyAqr3*k1>xpx!=Q1P`4<;t&#fT3FBuw_h|^{Y!!Am>+Iw7xV`XB}d2>x7LT`6mCFo z!8k^5yXeb?{<)gMM3Wj?snm>tvLTdq&4c2u0>}xSTKBz&%1d>*&xa%`EIwWJ-QC`6 zuEP_L6r5ba^F+m$sgK@0Wa+@@;Z1fP-Y+(+=w(Bq@XblFOlqqeVB{PLU+VOaWfs+@ ziEFZ`sE1lIse9C|_^a}UMA~HdmM5OuF`5%eNsmRdbi)4fqwx2sZa_y>&s`$}1{j7G zz9%)Wzt@WXQTUd^e^X32=YAop7&Zv7;B9YqQM*RB4`zlv}0FIz7-!7KBO zDGM&H;)hYNuc9(#l%+~7+`q4rLSt-Dl=vCGQBBnR|AQxoGdPri!VT$(85<<}hGEYI zw?uSsb)geUeJIWTS_le1ohVK29))iYhG`-bUt|4iZWTMDg0n4pW8p@+YANCo7p?MJ zbUxuT;r?wje3vn>@Qp?9Pu%qlS^U@6|Ft+8UG-0o6~3o!Mm#d4p!b`Xqj`wv4~Bbs zh4(yLQ6EU3$O`VR#T_y}gQrcK)RK}^XwbAxg{DbK8%l9lV1We|SYUw#7I$}d zcXwFa-JRca&Yel7?Dze>@B8;#K0KY7E9V}&_nv#snTg9{r*1^ow(?o)N*%6meTNB8 z)K0aejZt3fdDNl9U~Y9owj5D|&I+e5fZA~DpV?NcD@4Hkd&1SHD(*wvjC-a#O1GIMZ^ybB!Xqh&&YB+Ru=RthL?CPE|d*PImjEqGwpsi!Fdx0|Z&^2hv%)LB!v~^7A>-#GozFer~j;HcMjja&27mZYvrmJ)P zax^y3n3`EG?9dx4-zRD381XAV`XpIeRm=Kn?3@`f=cjV@uGL=?sztwnDuv_N`F|+L zy3n|r;a}MwI}c*Zs(;&_l3K~UBy(d5hL4{rzJV1!|+Hy^|N1iQk&U5JG8{yaAW-)sz;~I z=#KkTyb`u3E-j)k^fE|mz9&RdgLjIyXQzQ&F&)>|k<2g9Kcz>l{6yETudu5surP2G zZaDE2jz@B~Pc-EbWa24#F(b{ILqU!W$(JwGV$qnc>2<(|7WJYMVN^KbR zlm!E|_u@!n)nSKpO}EgA?b_FApr3~DDO{OcDx?z%Y*!-8$032vLk~@?akO8Dfc7MLgcIl9Ugg4?}n<4+}2ZxT2-)BZ!2p>Jb469Dq?def|-?-$#I0|H^=2?d|K$=+_cXty4^hJRuY?J zO1YLecth7Xy&SdijvIQHLyv=JAdk3}i@ys?sKRlWv-*9rDriWxt-U*5h~uqbSlh&8 z&fY+`y~^cmR=;F^Tvg{&-|D`7B|OZSE8ncDk7V|ehfB?n+HnRSjOWFkJ&~{8sQP{A zv=Evh9UHaBDGkXrCtkE-_LeW)#?(T;zl(z{dvE)d+lL`Km-~1Fa#N3Ei@p6m?yZJs zk~EHx*R#8I>6cSKM`vYKkC}UjDQuw~R~=h@Lf!65vG$K{Gil3+)r_v{EzCR#y&Aeq z)#Pw*G2bF=t|43=XRO}3GL5m^aO|J-JZa4CVQ8jmPG*QrUz4G)Ai{mRI=py2GHsLL#Iz6Xnrb{RX`PSh z^5`{lX40)6dK;1|6bh-kZI&ZVNOHbvgYrX2Ij=$&fcUgmAJUmOqit5a&Q&jNXxppZ zxLMbP>V^NS_pSOh%I8_7wEIR>%azK7!0jL@P?JWcl_!x%#%|`?8Tkqwr*4H_%e}PK zM@#M?;pwN@T(;zz*kvYRxVj}HE7e<96bkBKq6cS2TSqt}$~^6t*Ral7myC3a-WO_ znfq5cCzDFjGTmV5EZs%D^*>Ajka>NjU+*pxRGRT2O~VYGbjA^q5p8>_IWBTx{z84% z40A*$44xhuev?PE8?f#61XVec`gespz_9i>1SlrW?UTF4nWvI0cX5w1h>}lXl8`HY zxPdFz5O2*n-C5yalZ>`ct3;3RSsM0L>S}ACf>b0Q-_DeFo7U6 zPGbYX*(y=9<=%MxS0jy-JBktM3A#o{m~T5HUe>}ax9RGA*d?4LVboqPSvgYP%+~du z4CR$Gpmz%Oa8I9Z>@Diq$o5%r0+k$(g_YbEVu#=G-qE7IcboK|y-Db1)NR*ai&G0r z*U7l4Woyc#peW_voUraU8O99JSB8`R>E!6ojiVOa~K1iU5QO^x%Cbw zRUJeBQI7%i$>x%UCcx}+)cbeozf3Zy_g!x(^zWUjUP*Woo4)atzI^+i-X+zkTr_=w zC3(^ms%`ly6LP##!+TTFze@>flM#AYROG8DilwI!(VVz~;^y^j1B&mYEl|{=*52R@rVGJ!4LG{0tBqaG? z&ew7@<7rt{9;$n1s5?o?)`b|Ai$9)1VWMZ%={=@h2dOPWHPHJV4qyGguN2ECQ#q)< zJnzlCcurTvqdA;7VdO7lVmO1#XLxxet~~58Xv&Q6w3`%H&$Q`kbERPtnsl1y8VBVG zUsPG_A5l~C;}aTbBjP>1I{RPS(aC4S{{N~UO6_8k>& zZZXUB!NfWL+OOI`Z4>5kHX%J+ zCBj`UJVJ#zI32!9VhYeq1Da+(xph@u2XurJs=RS^Js76QTr#UOwG!v#`N%QiLui<$ zQEqQlzB^F8Q#r?tZ^q)N?P%Xq?UID>fUC_svqf&|@C;?{B&Zyt(nKC+N`LIbnGrAY zLJJ#@?dp!tl5^&Gby0=MO!3OmufA=1GDI3b4%f+`C$3zQ<$F*0+%@s6y{~QeyTqBv zIbHWn@+jrph|Rj%P5X`5G|n-JA1$s_{AQ`?>MYNa?W@my7gu9D-Lw00BR(*fAL`4A ztYk&s-qraUpBrPARBgnhcVW+w#REHZ0%5ZUr`@xVC392x=Bv{}Q`n08N? zGgWR4HhCnQ9x9;zvG#$TJ=4Z_w9P87)4|$3vuCh4U+s@ zwMm%G76!vjvWe~YFp+%fjFCN4XPFR_bO|UVH%cAk@n0=ueQEl^LX*QBqUmi$KaC}X zYh&+KuaXbF0jS0BjPFOf z0nJdk!uN1YZLH+_U{jLEcU1~d(deIdC67Hpq2;c-$^}8jYhfg{G5I&?T#fh4a^;Cf zN!q2RiWosiW^N94wcfqQSZzpKlDFj@lGba}1miqyP1D+@mKTTKhEVC_WKvI|?X{g^ z=s|dfxU|hkvay`|m3WuyXtFNpx=v1ma#ap9hx-kl5vqe)uhq~lG4U+u%Q+|e?BqJ# zm)*nNb7oYZA(c2L=S#DZk#KVe^X5gllGNT_nDUuWF8Nsg;cO4lsGQ6*+f}0RzCIMM zSN-ZV%0fShYAwvld0ADrDhWy=P>xRdx>sH1y{A`FQIfMIITr^`pX}QxXef-b~N%T{ba^A&u}Qy%|%dxMpid zhigc=#ifZdZMvIgn~59AUA=d}zqVVHrZ#o9Pnlohw*fQN&w{#|=Yu$x%YTbPQcJoHD(y z2T=1RoNyZVp36E+u9@j-5x(*{)%C0VDXF`tGb@8cWiQkC_=Si0+NP2b|nqG`O{MRFmXm z<&jWVj_P38F79R6U8QcDGO5QG0V?zNlQliQX=AuQL@;T9m^-7L;1IL)-Ttmz!W59M zw#||Yy|KMXzAG_JcYRV`=s!eeNa~)N8UAOK}oii#)2}LFenn5k}D3C+NwWF|%Bq$}a=lWL;QYaQlVQ2@{*;iLSxkN;^iZT-nB(AwR9nMY&&`uaQi>mEOvk(pRc+ zYIoz5HaG3^mjGJ4o9T#^ypf&p%YU(Wb@zscu(tBidt=j^`AKs=6n1YFGHI%FmYu@4 zxBE3s>=$}olG|Hs10}f{i!oFh7q?i=GHj+wNC@9c!d zp|XT(S+2t6F_+jp3KTZ>^gnb}en@ih8=%s0h#G{?${dPgN&S=M>-0b~R4= zisra>#Ot?5?v7X&b#sJ{?aK^}&QR8|;p`snMwEQlviv^TS!3VrqpNLZ<=h+?9!h6v-fEg?LYtpx zyxy~NWql=BG3pm8U3rFLGN0RgKke2TzEJ24o!P!un2^;TfAPYXMZ3e}act&Vrbo@H z?%#)=T(&Ed>gN13%tbCXe4Mt!YZ`qEXGWL;HqP}-;U|+Ls}oz!oyyN+jOb|}*U@FR z!;Hyuh8s#fgwif}L>5X^qA(N(K__2!L7f7vnVwJ***T!%e zNm|y*a?Ya+Z8zZ|-1glSO>qhB!p14Hx=g$5%|dti&{GzthlHlo%(j6hmJQOAGQP`K zZ`=InMZ4#=O3kj6UHO(2XYZD4PB@dw`P^G&tMfE`v5qj_R37LLv!c5? zH!CM3e3i1@Piaiy7T>IUPBq}_2?v@c2h<+Ufq3CVRlOs+9_>Zvb$HL&s;>PV>E z;T(uX7CKeSm1vR?27OGvXBoPf49w4t-3yh=b2#-X=UTX2&+*y4Bn-pP+EREJmn{`Y%SuNykWH~Oj< zRKHJp7DADYR--hg;)Iptk{y03V^UWqi zs*l&YoYU*Vf*Hp2M!I1C|z@vIHgA$?^pjD9Bf01sHM&&k8K zK2;Zj_(LK(qcl}LU>cHaYnd{^uit1-Cc}d6Q1SNB_od5lLQI$vrvcT@n5^VwyXE$?8iziI99Q8qS>NBXjFtW~YO z-&n4l>bT+Sb5qJc3y^fzRpx>AZ8*SX$yYRtT_vH$9S4M&f1%}^RF>Wnmm|qH48z&b zp~o@Fniz?yx5-{fF(}k{*-N7J4Yjl#JIn$G9!G?uE7 z9Y+I0D@;SX+{52@0`%o}jC<8smM@8Fvgub3LjmCdB$SJ?b3P@Btxj019_7X165*8g z9e|M0N%_Pf3_ptUyOSWsG@e+#2i)H63)3FT!_1mF%d_`L;eMlgGnwHOGp?@$lGzYr zL^fQZVrnWUM*J|y*oU*dZwI+*2s`|^QFrnH-&Zkzclh2?cAMxKSN2CLfL@oy|0_AV(#o~)??f7tzOc<3bANx(g~v^ju-QHU3gnJiQGTJHt#6nyj0p?`>~pSK|Kr*W}bl z{tb=xu352F6-L*pT3N9(T&Uq|_P%`|dc(UqM~ClTg*!s;oAR(uD4QVEZzbXENos24 z^T3YTVMMLFdX8eeI`vDYXC`$$iBob_Yw8G3q2=%V^(LWXwg-z!Rq1_`>|H*6%GX%! zw@@JEYe;!v_#VO@8k=!Y%q48jv)XWVJSWN*gX%PdYk(VUa=YoPn7#2ThaW0jx!Kg> zsVRK-L3d(R>C|_1?&ZQV!?>va$K-ps;?bk~+UUR86>_}Ytu2}1KCCBqWJ#{uPW&NZkhT=`sO@Vt^2Pa`m$kYn?`?U@^8FNdM4^SbXWZ5 zOmB|GDEB_$|E|z`mk-fV7^h*y-)Bs6I}T!$$2)t2ugb~Tj}UL&Ntsk{A0peN)7D+T zDoqAoV-5YU*S-#jiJsWBE=;)U?ix9HirFh|J$tsa&72|ss{$R^6D!SRzfd4Ks%RjTo>0?c2UQ{a-}Ba>D&rX=qsLdo4d_HTgLuCt=$hX|1HGD%PWb{U;_f2nER#k`OX#dl{ir=t7a;=M5 zk_20)i`{RZmK&vgx4fz_d(&NgsT<_!K-a5_TW{6qyMV;oVlwg_ha9^-$5#cYBW;>{ zbXAJ0R@TbFo}`1V`gs49b^q6YNB-CU-5*&0-TLo-_xX1pKl|P1|Lc$coACdy!}~wo zVe$BDxye6&@Uj4lumsDn0;|xEwOOBysUeF$OA`Oi{I*`}@N??(`1$R5n(!0D^Ne8! zc40h|m`WEjn8n`g&p{l*;T*-WoWRMP#+jVUgK^H+!%b`*9G5 zas)?n94B%Lr*jtPaS@ks71wbSw{aKu@gR@#B+v39ukr?O^FAN*IbZWVKQqt#{@w}; zun0@A3@fk-{aBmz*_ax#6xot(siT2mj9?_&vm?7Qfys0*otf;(J{-Wo9LA9x!||NN zshq(%T)-to4K94xu1u5oTqu7m-!EG@g5)X8DH@oKk*y$|55r`n8jI|K^H+!%b`*9G5as)?n94B%Lr*jtPaS@ks71wbSw{aKu z@eq&k6wmPzukj}D@*$t{CEu3)==E3T`;+Sc3$YkWu^cP08f&sH8?q^B@@&r5^k)!5 zXr!6Zw6Zhfn8L~8?Xr}a+KJLS_U$h;cUk!#`o7} z*_Q)3gu^+CV>yA7IgK+pmkYU+E4h{%xs^M)mj`*2CwZ0^d6hSKhY$FKFZhNZ_=R~F zlztXuQI=#`R%BJyU>!DK6H??Tu@$upWH7_oj!}$dC)#Ld3e(t~9%i#I2XY99a}>vL zJSTA~XK)S|a0yp%4L5KLcW@66@CZ-v3@`8suk$wV^D&?EHQ)0y^DN|E$O0_F5-h_C ztU^E5W_>oMhAc(4WLxTJU>GA9$@c8Xu1sJu9ZY8?d$JD)a4?5)B*$<(Cvhrga1Ix6 z30H6pH*gDga1Rgg2v6_~FYpSl^EU7EF`w}j-|-W_G5^Bu1uV?sEY0$)%<8PgdThjI zWGJu&+c1E7hSEd}W7vUR7|$f8(!~sBu{Znk7yioM_&fjLpZtq|b2jI5F_&{S*K;$s zb2s<%Fpu*z&+{_>;Vs_dBR=CRzAO95>u=2Of#A<9%;GG~@~q72ti^h4#Ac+)vpHMS zpFs?vk!D8I%Fc{qBD>K^H+!%b`*9G5as)?n94B%Lr*jtPaS@ks71wbSw{aKu@eq&k z6wmPzukj}D@*$t{CExNRzcSyV?gcEwVl2gSti)=p$+~RFrliTUIa|}8K@6dhW=7M> z&WvLsyU|HEd$1S#aS(@c1V?imCvpm>a~9`u5tnfl*KrfKaToXT5RdUB&+-DV@H%hv zJ|FWrU-LabGtXkK11!KIEWt9Yz$)}(ZPsUFYRFP#OSYws28J<$k!;V7?8*ct)4_CR zvM2j+00(mzM{*3ua}uX=2Ip`Amv9Bwa09n+2lwy*kMIP~@B**!I&bqnAM+Vs@f|<$ z8}oZm{xb`+I7_oUE3-Olu^t<-85s&}!8Qz_o}o0+!Wed77sfM*sdO=eS?taJ{Dr^r zH~!8)_$UA3-<-|)T+HQM&Gp>O?cB}%Jj~-fUG}`!m-!EG@g5)X8DH@oKk*y$>lFAi z3$r*&vpg%aI%}~W8?q^B@@&r5^k)!5Xr!6Zw6Zhfn8kY2YHkyd6pM>l{a{Y5BP*H_=X?&g?X3K9%4ZjWl5H0MOL97YqLHZQ$v;_ zTe2;6G%$=2jAVOuWLG9InGU8ilRepo12~w&IFe&Ho|8D0GdPC}xP&XXh8wtrJGh4j zc!Vc-h8K8+*Lj=w`Iyi7n(z6Ud6sq^WC0do36^06R-qqjvpySBLzW_2unhyKXDCgy zFoqr2h4D;eH#+HN5B6d|4&qRb;AoEHL{8y!&f+{S;xew{I&R`N?&3Zk;xV4$IbPy5 z-sD|A(&X8kt?ADohR{eeqiJPl#xarI z=%kxH*o*x*h(kGoqdATfIfc_Xi}SdM%eac`xQW}ii~D$p$9Rh8c!}3|lXv-$Px+E> z`H^3lZ&~SQAr@mPmSZJWV@=j&LpCK%p3T{s{tRLWjWjcwR(56_6WNVUy4i!h*pGua zlp{Er<2aF1IGwXNkBhjBtGJGvxQ)BGkB4}Sr+AK+c#SuCmk;@rFZq@q`IY&WlYSOr zF_vOER$?{QWL-97Q_|$woUQ54AcoLLGoxu`XT~v+-RPv7J=lx=IEX_zf}=T(6FG&` zIg9hSh|9Q&>$r*AxQqLEh{t$}=XioMhAc(4 zWLxTJU>GA9$@c8Xu1sJu9ZY8?d$JD)a4?5)B*$<(Cvhrga1Ix630H6pH*gDga1Rgg z2v6_~FYpSl^EU7EF`x4_-}5u`tSJ2~z#=TcGOWNV^kZ$-XJcx}Qe;cErH%%MF@lk7 z&yMWM1SZqLbY`+A`)~jUa~MZ*499a4r*a18Z~>Qa1=nx`w{Qpd@BokS1kdmSukbo= z^FAN*IbZWVKQqrt($4}c!V)aQ3ammu)@FS+riLsS$mXBN)l{?8vT6U@{#{XC`~H4+n5ChjApwa6Bh*DrayG z7jOwza1A$b3wLl25AZOL^EA)%GXLQ%-s2-a<14=7Cw^nTRow?zh{afnyJJCivQ<%o?^e~%!Igmp*oTE6F6F8aEIFoa^kW0CeYq^nIxs!W&kVkov zXL*rVd4qTOfKT{>Z}@>0vhe zav+CrI7e|TCvY;SaVF<-A(wI`*K#AbawqrlAdm7S&+;O#@&@nl0iW;%-|z#!Fz*`D z&w?zoMhAc(4WLxTJU>GA9$@c8Xu1sJu9ZY8?d$KqCaS(@c1V?im zCvpm>a~9`u5tnfl*KrfKaToXT5RdT`&+!tk@h0!`A)oLC-|z#!Fz=f3fCX8UC0T|Q zScQJ9&H8Li4H@!m&ers25JPCBnbEYeGvk=ZZcJl$dYH|=9LOOY&QTo0@tnk|oWVI< zz$IM4HQc~0+`&COz#}}tGrYhnyw2Oa&&Pbu*L=^<%(IqzAq%hwORx+punPTHoAue4 z8nP7Gl5MG@fnkhbB-^tiyE1{vbTFNn?8!bHz`-2GksQPEoW!Y|!8u&OC0xNZ+`ui| z!96^{BRs(~yud5G&fC1t$9&G$e9zB>NkM;L0Ty8imSF`}p&x6rJ{wa*mLglSEp;?7 zj1i1vdv;`3CNP-}rZba0*@pu-n8P@dV>q6ZIF&OvoAbGt%ek8CxtZI!oBMf~$9bCP zd71z47Vq&9pYavn@e{u>|2q0bS(wFHn&nxU)me-6*oe)@P+$wTVF2|ErHK~Cumig= zo=Hrliy6#fZ}#Ue{FT4)cmBaY`4|7@Y|iImF6U~l=Vor_Ztmw{9_MME=VkuGTfE0d ze8yLN$4~sm{Od|T3$r*&vpg%aI%}~W8?h;A@@&r5^k)!5XkU$Vd^T?ELkY_%**sgpJb~Z+yrO$OtJ#n(#hLF<%nK*l;Y{#$(z(9y6aDFlAk;Krsn4 z?Q;k-gp#&R+PbuLnQ$D(4gd>+{y-!#ewh#1@2EuuZ`>1?vm;FW9DFebKU_{fd?qeJMrM2!qta$$4w4pVZNJpQl5JjTp!F;oX>f$`4A2J=4}_V#x_OU z6s;>-SG2BZUCHv2Ok*bNLpINt#ykazxx$#iHY?->n72MJoP3EfgNp@W*~m&PFIaB#OwlqQv$!hw zC%h3S|J$R+)-{%-1e*!bv_;0}j7_p3iauwpi$@Me5BM_inb|vjYr6j zX{DmW#!_KSOHBr^Qr{xwEotu^uO*Wsyth1CgZHA_lJh>7#(p{5jU z3+qZ_TJpjWpO(D+^VSt?U+}r$v(&egiZwOErIHMJij?p_1xhLZq->MQ)TL~e%2B|k zDVtj3dgY(^#_OPT+EUVK=cm`O6B)APDQ4}RwRd*-;2fo#g*hSTL?S2job@^DEppR| ztMXn;c}EEW`F94}>A2r#DB@{D7}^jVj&F6(pFwjn|xw2-iv7VmrGZC&2yf_3p|(o+lx zvv0}!QiycECNt7CiII&NvJ@y%N?Di6k|R$M|C1$0fg+`}9h8EKMgiNVg=BrDo=r;AZkdHAxEBK!7)SB z$Wx$5sVGd*ttol+f5?t}STwMy&L;^ADTo;*7U9St^q48O>P@s|)d|nYmEJ_!FT^tB zZdO>?@ZR=W`-c?9go#N=T;4W$`-T{V)D&!25W8Z?0k0+NOEJg2=G^C-HJ9qO8Jfde zw3nK*?(@y=^Udz_%_;w*+0%;lF-ho&j}-Jn6n^fy|z|!h!UDE&4qkwNZzr+ z`@Gfu&xEZsX{-QXezaVPod_ z9HMLgm?K(p&Gr*jhYhK+UIQ|Tf{X~M(ok$JTCTB{MBnll>yjIHtM)*vyJ~Aq5&xqN z&{}YhZ?)Quw$;tEHA@cn_g44!f$rn2=~~s$F5xYjG__7J+gpZKL#x|+tJ{04`)F%{ zQuvUy4!8PN_u$rC2sgw6EsR#T{Z{v7%WGSU`4Dgjz=m$bt!~7vZp5wH1Fa#};Ufh% zW^oR2!*+$Z(5r1~WnFDc(H8T_%U^G9_$IHe-9dADAPb6`8EwQd7q?8v{-txTVHc68qPXRZ~n5f!<;}q;rs4W!a1}XA{&qepp+G2QP z9U-M5HjX&3SQ11@G)jUfIZTKlg_5LD#K)QttB`3S_KqBa$k;1muZ)mGri6s&Y!ed| zQ|G;HbJmB%#l%=1VjmLJ8+q$u3}cGLprByodQHgLY*G@A8wzM($ThhwLp6MwG%lKI zhBvu&H)%RFxebqUdmrW2J}O6E<7bo>LX%CkfktJ>QA!VQa_b*eLn@Q?K{%P=nmJ8@ zrcP5y6Q@Ztph-AQnm0|_D5Eq7nlwO~G;Nx~k;$Uv(^R0Cx2@()lcr5m-gbHG3XY*k z)1=7|H?rZVg0KWtQxv_TxG}0IPK+wrwrE@Jp(a6S!8B?2#Nb?-Ma=dg{w3>6;^BYo zpr(+@G+HHbH!;v6Y|{8iR@qY%F9wwnT*$Gk&sj&xib_arOlgRDNI?k7|27lZzJnHI zn#fA|D8Y{syHPQZeb#OqC8ndqB4)HU)u@c^wa!L4%qTfEO519b!;O-$v4BEh@3lDVT~?kE|l@UTo}k zZLh)FQ`V(2s_4|aDOT%RMK9;}@>c(C__ z3lu4(9fo4YVQi=w=2ci;vg9db9mI}}VL?{d*`oKt$=Zy32rzueId;zaoa1_%AxoY@ zPRvQ?9VbL2F90h%hj=Y{jj7X~jX}r-+Z1dQb}R_5;Fty5NmeRJ+Tg6$a44^hxuQHM zibGKr69SosqCB%tDAGoeR#35wG>2uJ&oL&J*wI@1BTs?hwQ6szOGd3rhU?exS|@?))bLuTW^KvY<4%I@Jv!8S2&r|V)rO#ONvU;G zx!Bu>0#0RDQ#*$hP6@XNgpqb!r$%j9gv*Z`gyZ3~clEVTSm@&8)`0DuKD9o2ymQU- z7LQ=HPEZ$o`%wx94*@x?YVB4Nq8knug20(q>&&WkCe^wGxz5_hX;vGuAw&shrkjv$ z@a*l4FmMLD&RU1F(5=L}kZmz5y!YrMv3P42OF}ebj#(3O?0?LOu-x_`H(Zhb=Tuwo z!V$AJrcQVvDlwJTxq!r?asi3S3sH1+cALSvm<4FAiQp@oLr93vp_V*HBA zTHy#QlzqL3df>t5l+QAh8n9-iLtJ`{F7qkqa}L|;;B zj2>I>^Aspj!vE;D63H>D`xw=Fj8@YaSEn(xrJ6Awesw>gFMo_|#=c3gu1@wvHzu*^VT?%SNk$HZQr!xriYBpCYu)SLygUa=#I5)Y#9F=YoKpzwn(E9G22j*j0`#QlnlrjjIzLX zxfo4DMbd&{LBm7h6QYjKW5avTX-TB=;*lRRwkTN{a^xvcl1!h&y0PkeC&$82A%$E5eS2#-dFLF*6Q1Hige)T`2wIbI8Gv6Bv6OYnX6ssUaIO zMnQ&xQD!0kVp}*|I|FQD5GseyA%P*{Vr2Xb z$C8OjMukEM8D@RKdIOop)Cd_EGQ?*Cs0I*`fS4lr5$aXBu8hsdCm9)2Brap6WvsX) z8dNHg@I*Fx{{hK z^Ry={Lwikz+nNlwH95RdI8U3_Q3@LydTYu$Hd&0g8PBxN5M2CV_|2m!!Z7^SzYSglv-|At$t~EUS|hb&_5um+ErX zD}p)$lywFt>*P+I!O1$gQ71QIaTV+%SL$R#om{DtE3wKHr8w3qsW!;!>0FX!WvmT~ zOgfU9ARAP-rdYaiF%+wG#A1<-q{Ks3*+x2I(Z-UtE|#oip+rMf5zkoUu@u9ynEi^# zHlZ4cYf^%ihtdmGCzh6Ni=kv}7oLrq3>A?f-;^?d-JmO|rl}!CCafi;E4Lw)ZqlOl zA?JP0Yu;@TWd3tU#s1^<{1Rcl0V4c4WnI`SrBrtu*gLQZt6>2gNXM3ad9>2*pHQ@0TN7Pw7 zIIFNl5*_9Z;e7#f1qNGY5J>3cvLn)>5Tg@S#!GAfzllP0{^$?h39Ze@f^^z#PXEzCw_yhZxE4&lGPzoLZo!?SrD^2WM7gW zCE=7D8-rF}9W3nRy4k?sQj@k)lXjBS6S5^#fsn}-t3=vMIJ^M>4-*vdS#9vVBT69y z9a(K^2sJ3yj*yw<@|G(xse%k8(V!$^iN%tzPH8lR!^^D(6{SH1Xb6Q8bIfu%)1X2$ z$dv}U(qNWIgB;O=gPby~qU$8qCtWb2Zds+S7)cqd8pnziN-wT4g{=~PY4Fs;eRSg_a3u$G#v*R0pP*Syz)*Mirg*HY9{ zV_t%HWXTae7bw;YYe|zy2`(j=RL*P8tKd?CN(qLRl%Qxy4U_-&r$CWX%3_T2S}96t zQKBU+ELzgS!f>@$QA-Pxmb5UXCPkVerL>r5VuXfi9E+HR8DVCGlMxPvx{(fac}bLQ zvW}G%epc97;fjLfglKr0uq}B!w8jiDEbi4lIs4>npG4Ioh3&&)3KS_hv?)$WqC+5g z`{eDD{GB$VOYt#kQ3p^A*7O`zjcC4{e ztVMRJDJ3)8=Kec32j=F$+#Hyj19Nj=ZVt@Nfw?&_HwWhCz}y^|n*(!mU~Ue~&4IZ& zFgFM0=D^$>n41H0b6{=`%*}zhIWRW|=H|fM9GIH}b8}#B4$RGgxj8U52j=F$+#Hyj z19Nj=ZVt@Nfg}h1Pyg=h-0kMf0e@bn_rE`Qw*ZT<1k11jtI!WWIXTbzY)lPVifqZY z)X~5&nrLARJFpAmnZ#7On87UeW`7Ri5Dw=kj^zYS<}}XaTrT8NuH;&7Fz%7H#e8gvb#drL~Z_Gcx-xXzH7H4UeXJuArE!JZrHX}oUE!c(u)H9SO zS{TC)?80~^F_kW6FpIs}pTF=|{>I<=2mj<>{F}2mpNqMitGS+=xt+VYpNDyzr+J>2 zd5t%ChY$FKFZhNZ_=S002>!@|EXtBB%ZjYZ8mz+xY(k10CAOlLfedCi+cAo<>_i*w zOkouH{B<4D7I$@c40h|m`WEjn8n`g z&tLc}f8+1`gMacb{>|B(&&6EM)m+cb+|J$H&%-><(>%}1{D-%AkB|6_ulSCi_>KAh zI<= z2mj<>{F}2mpNqMitGS+=xt+VYpNDyzr+J>2`44aL9v|@;U-2D3@f-8|JG6ghAr@mP zmSZJWV@=j&LpCKvjuKn4Ep;?7j1i1vdv;`3CNP-}rZba0*@pu-n8P@dV>q6ZIF&Ov zhYPrbE4YRmxP?2ooBMf~$9bCPd71z47Vq&9pYavn@*}@8pT@wSSct_~ise{|)mW2t z*^o_1lV@|brayxiLL<$Lrj?x;$3%9clWz84FZSag4&?}r<~UB|6i(+X&f_93<0`J> zCT`;{?&BdI<0+owC0^rA-sM9+toKHw9+;2VD67v}YMX#dE9EXtBB%ZjYZ8mz+xY(k10CAOlLfedCi+cAo< z>_i*wOkouH{B<`j_k?=Cey)m zX0j*yZ~zB$7)Npp$8!>=at7yc0he$E*Kh;3a0mDB0FUql&+r1T@H%hvJ|FWrU-Lab z6CMQqzyd775-h_CtU^E5W_>oMhAaiPU>gQd&rq6ZVGKL43*(u@RJxeKEcRx9{=#4R z8-M2?{F8t2Z_eg?F6MHs=6Y`CcJAhW9_DeL=6PP`KfJ|ze8gvb#drL~Z_K}_`v42G zI7_oUE3-Olu^t<-85s&}!8Qz_o}o0+!Wed77sfM*sdO=eS?taJ{Dr^rH~!8)_$UA3 z-<-|)T+HQM&Gp>O?cB}%Jj~-f&2zlS+`qx=9Pl@GtN#Y?=RW_x@HcqF-`{$fG>Tv%JWwyumwsz$bjcH~hda z%)6xfAPcf6OR_90vMOt^4jZruDRPw9ifyT*fnkhbB-^tiyE1{vbTFNn?8!bHz`-2G zksQPEoW!Y|!8u&OC0xNZ+`ui|!96^{BRs(~yud5G&fC1t$9&G$e9zC!<8RRZfdyEE zC0K?PScQJ9#d>VSW@IR^1=}!ydWOX0bQ>^B4Zg-}pQK;Gg`9 ze{(kHb1|25HP>@9w{ti5^DvL|G|%%g|KTm(<0C%fE573=eq(-rgZ9rX%;GG~@~q72 zti^h4#AakDQ2G12{kJ0oN3$iFnvMejIDr>L~8?Xr} za+KJLS_U$h;cUk!#`o7}*_Q)3gu^+CV>yA7IgK+pmkYU+E4h{%xs^M) zmj`*2CwZ0^d6hSKhY$FKFZhNZ_=S0wm3|gvQI=#`R%BJyU>!DK6H??Tu@$upWH7_o zj!}$dC)#Ld3e(t~9%i#I2XY99a}>vN0w;4CXL2qVaw%7GEjMy2cXBTe@+eR8EHCmZ zZ}1Ku@Cje=4L|S;^ZFaKe`G-xWl5H0MOI}E)?ouSAw`Z7TT#nE1~Z)P7{yq2qK$T@ zFpb^mVK)16Act@`M{z7Ca5ATHCg*Y?mvSZ7awE5LC-?FokMbnX@*=PD2Ji3zpYR3W z@B_avufIS0M;2sJmSkC0WL4H+9X4PSQsgMH6}1dxFvHo7QH*6L+GuAA)7YIJX0tB` zatMcW6vuJ`CvzHSaxNEgDOYkWH*za?axV|^C{OY%FY+pH5dQw|dwj^Je95=`$gj+2 zFyK!t#9}PPa;(H^tjW4;$fl&pvpHMSpFs?vk!D8I%Fc{qBD>K^H+!%b`*9G5as)?n z94B%Lr*jtPaS@ks71wbSw{aKu@eq&k6wmPzukj}D@*$t{CExNRzcSy7($7LH#!@WD zO0343tjmUMN}4>Ivo-x0#1I;3W;Ctr%s3{p8=Z8s2Yay}2XQDza5TqpBByXVXK@}E zaT!-}9XD|scX1yN@fc6>953-2Z}Ki5@+n{PEkE)r^Z6UJe_|mPV=0znC01ii)@4IB zB~6~q*_!?gVhD{iGn!U*W*igQjZV7RgT2^~gE*8UIGW=)kyALGvpA27xQwf~j+?lR zySR^sc#Nlbj+c0iH+h#2`IImDmLK_*`TPyqKd}&tu@uX(605N$>#`x6k|xjQY)yX# zF@#2%8BHrYGmeSuMkn3u!CvggK^)2v9L;f@$SIu8S)9j3T*g&g$4%VEUEIe*JjPQz z$4k7%o4m`1e9D)6%a8oZd6Okgq{OlKy0 zvJVGvFo$s@$8bC+aVlqU4i|6E4-fDNPw)&c@CvWpYt`}^E31K z`?K@&XBK90mS%ZYW_8wLJvL%9G8EW?Z5Tj3LusOgG3>xDjAs&4>0$=6*qi$#cRxtsfWn8$gV=Xsg`@D}g!5ufoD-|-W_F~7e-`)3wr zah7IzR%Uh9Vm&ruGcpv|f^8T;Jws`tg)!{FE{taqQ|V#`v)G&c`3ryLZ~UEq@K655 zzd4)pxtPnjn(Mil+qs+jd6>s}n&)|$|L_*?@e!Z#72oj_zcGJ5>1SaUXK9vaWmab` z)?*_!BSV2L*oFbrGn6J;7{dI*%y6A#H5CMYdf&dYrL=cJyn269sC=p!{ zAfn&j9^t%j-&*f|>$_{cch~*KiyvoB+x5TqIU`%=a3ZI224`~~7jY?9@++?625#my z?&5d+o(K6Of8r^g;V-rC+E|}Wpr~5J={nyx6{YH^z#q{ zJkB7`GQ^7v^ExBE%P1f7Prl$AmfBbwumY>FI%~5Y8?rH*vlZKsVDY*dy zm6!P&Z}K+p^AVr&IbXBnCa#4n&&sUETCB^4Y|Q3t#dajfusu7m3sad+BfGH&d$BM3 zb07zE7)Nk4KjRmiz$u*0S)9v-T*4Jx&9C_lzvWi$p4cVB@*^2E*kYRgvVi%?|okn(J5B6eT_UAwj<}i-n zXnw{oIDu0*owGQX3%P_VxSC({8*btj?%;0j;{hJ#QJ&yw7V$hU@hWfd7Vq&PpYR!9 zvBYNX1z3)iSd}$dhYi?>&DfG{iIXPBj!a|<)0n|5c4rQA*^hb5=THvkD30Mcj^|`f zV0#pJd-KVK#|#$*qa~nBM#!n{DdRV?4>9d5*vGGU1PR+*aPh``_?Ayp`ARdWG%(*{|WPyoJ}B zcmMx-3-ABNFX8oq7B9{9nv2Sdcq=dBt-Of0@*>{Ki+H`Z_P^PScs=odx5~?Sz0~&q z$d~a}-o@)}w*Q^q#k*H{mvZHGyp`ASR$j+jc^z-%b-Z36TX`LC<#oLO9bd=$Z*Sub zuksB|P}=l{fNM-pD(-@Z z;^Vu1I=+7NZsW`9$G&@f@lW49zU8Cw^@S^qXFT@J_;PXj(Gm*oPi^D)aiy8#>x=hy z6~DW`?~3p4AG`9q`)l6+?*7sTh5qjz-~9LS^`rM3KYnPZrOO`{m!~E_zP`9T zv4h6fZ~eBvM#6)+{8@Z_-PzwgK7Z%tn|?UYBPzZV zS7F<~$JzhNdO5cL7t;GSoc~pxWkX^7SzNyVc{#qV z9%6vU8RS`pc#&aVXM}edG!s~nYSy5J^{Hi3>ez-DDI#_t&twWTP-HeG z_Mw>rXyFiASwI`d(#}bAa3-CcPZyWb&2`+s&D_Ra{EpxAAb;dfJjtJVj=%CUf8$Nw z=6ycmQ$8m=pK?jl>ar})%B;p(tjmUM%;s#xb|lEKJv*@rQ<+X9yRip*u`l~`AO~|8 zM{qPh;}@L3DV)w(oXdq=!WCT2ulWuCPtT`()cz-UnngU%OT5Y(yv2Kb$R~WpS1e)L zUWVmZiB(yXb=ZK7*o<&_*_JqIa_q=NrZ9~e%wl)uFqi!Zmzwz;%HbTvF&xM7oXlw~ znRIeKU0g;t*U-a_^m03W+)FGH(!`NBI$-@;P6#q>JmaEYHfU##*e)hHT8{Y{hmY$gn*-u?tg~P9wXq2YazE z`*R=%a~MZ(G(Y1PoWLoZ&RLwxgV?4>9d5*vGGJoSu z-sXKi;!{57YnJpZ#%1}>K8rHp*bLjVBNLgzG-fc1-I>E&_G2FNIh4aWieosA<2jkr zSjahCz{On7Rb0#U+{7*1!QI@)13b*5Ji*f};(1=;Ro>t&-s3|);WNHsi3!4<rXyFiASwI`d(#}bAa3-CcPZyWb%{BCJ zBfZ>CANSJFLk#dIp5ht)!VA2@Yy6#e_<(=#Prl$Amh%1TKUjfPSe><5kMFSwTd+0X zCrOqcurrg`m3n5<#GdTU5BU)X@ne3%k^GdO^GiFI%~5Y-(wTDU~9flk__9k z6T2{#=`^w%d$1S#vOfoMFo$sjNAoj&!3mtg>72#6T*xI{!PWel-|$;*vHAse$fTd^GpGHlOI?7~#0)5vb@!Cvgk z{v61`9L5nG&CmD+CvXa|B2nk9W1UY6xqnblZ}b=i=O*_^G|jszLDXD4=HD$|+4EOuuObJ>r1%;!)J z=O~WhIF9FJPGceGZ~+%{IahHl*K-rMa0hpD9}n;_kMaahvxw(;iC1}pw|I{a`Gn8- ziX~Qd4PZG|VpY~;9X4PiHe*Y+B~F?gJ2H_eOk)PK*qu4dWk2RIpF=sEqd11+IG&R^ zjfI@U1zgPKT*b9q&rRII9o)@*Jix;|$`d@zBA(|ZUL`z-^6$LO`+USFe8yKS;Y;u` zEXPW$%9^ah25iJ;Y{@pnND;9Ec_ve!fg-ahu@B80KnsV^$^zOrmUd2}gEQ&me7d-d zZmyw+8|meC`nZ>V9%6vU8RS`pc#&aVXM}ed&(tWPbQQpYyL zND;9Ec_ve!fg-ahu@B80KnsV^$^zOrmUd2}gEQ&me7d-dZmyw+8|meC`nZ>V9%6vU z8RS`pc#&aVXM}ed+DRpc^j1&<&kY_Rl8YnWG68q51 z0km)ktt_C8V`=9kIyjR~&ZmpZ=;j)FxRG9Nr;mH-=OG4ooI##th!+{=bw+rXQ9fpj zFZs_rhjP=^)SqpLks@LT@=T^c14U+2Vjr40fEEs+l?AkMEbW{`2WQgB`E+p^-CRQt z;W?DQX}Isd$Kn_71!FFBD@IfJt~kBhjJEBQ75Up#}d z+H)D#poaCSWmD?dh8QU#b|BAW3N%n;HYN6m(k5N z^l&4++)f|&($7N-@Hm4!%MdRz%PArmB`^0xMF@8q}~pwQNcq+Ylo~ z#17<{Oo0Z9G_ePJF_--~fEEs+l?AkMEbW{`2WQgB`E+p^-CRQtH`2@P^l>l!Jj4Kh z;whftFTB7jyvCcn&HH@Br+m)WEa_Q{%d$Kxvnp${4(szhHen04=KCbc@&k5e61!5* zOq$q}z1f%jIgo=njKevKWB6Zv9_78#_&pEu2#@ja&!il({vxmN8sV9g@9+Wt;GcZK zH!M|SE?@;#VRhDKJ-){#Y{AxipCnm+z|Kr!SL&Hb6ML{1`?4SNn9rdc&QTo0aU9Rd zoW?@V;Q}t^a<1Z9uIDCh;STQRJ|5s<9_0z1W)aWx60hvL9LIAqr?HT8xPXhf zoU6E&>$!%U8Z(&1?#y8>`!SFC9LnJw#W5Vm@tn+QEaV(6;9@T4Dz4>vZsHd1 z;BM~Y0UqX2p5SQ~@jNf_DsS)>@9`m@FvgdB!?K>uxI8Pf8f&pG8?rH*vlZKsAj9_T z#4b!_I*shc9_+=w?9YK5%wZhC(fo{GZ~~`rI%jb%7jg+#a23~bJvVU+cW^iN@c<9= zC{OS-i+G-wc$GJJi}(1DPxy?lSYmzs&vLB9s;tR6Y`{ir#+GbLoHRLhWFk|T#tde$ zJ9C)Je#~P&hjKVaaSX?CJSTG+3ps}ixR}eiifg%^o4AELxSRWUfQNaMCwQ7gJkLwK z${W1Jdwj?ze8yM&`!gw5@{Go6)}V%3Hen04=KCbc@&k5e61!5*Oq$q}z4;+O;vjy^ zPdJjF@^gO4iJZzAoXvS$#HC!xuegpIxS89yi{J5k9^{YwiKlpmzwiRD@EU*T9X{Y6 z{F5*EhNU(%|FZ(CusUnA9^YdVwqR?%Pm(M@U}q+=EA`Bzi9OkyAMzs(;>Y}iBl#&m z=a-zwshq*toX166%9Z?z>$riNxs5xyhx_>hkMI~z@@Jmoue{9Pc$2qzpO5&I&-jum z&tzPh39LvpYf!`b)UqjcY(tC`5j&7)GP^RJ8O&mL<}jE2n8$n$<#3MT7>?t3PUbWg zat;@8F_&`{*K$2KaSL~FH}~-X5A!Hb@HC5fo|kx)H+YNp_>fQdjIUUt)*Qfcti-CU z$vSMnMr_8GY)hOpId)_sQ<%mKX0bbSn9F|5V?Kv+I7e{|$8kI-a~cadhYPrv%ejhc zxt^Q2g*&*L`*?tdd6Xx3nngU%OT5Y(yv2Kb$R~WpS1hrS`m-D>u_|k_4jZr$o3SO^ z5+_ZL9ht}!rZIzA?9LqKvLEx9&!HU7Q5?f@9M8#|#zM~F0xsrquHss*=O%994({eY z9^hdfS18?X_Zu_fCQCryqWnaC8TF@ss`&K%~l zAM=>cp&ZUp9K&%O&&iy|LeAj=y10yPe#Ld%z|GvoUHp#U^B{lZPdvpl{Dl{Ih1Uqr zqkM~Z`G9}$Prl$AmfF;{fE8GU)mfW$*^rIdoUPc7@Jz}y5j&7)G6fnaGMf_n(98j} za0sm|pp9c`=R{8B49?~}F5*(IfAR(2u+(PSf#q45)mV#l*^rIdoUPc71R1txMnRIeKU0g;t*U-a_^m03W+)FrLkAVoy3VPazZA8b!d*p|p* zd&2gl&q>Qv68lnVY)jdec23%Q+UJb)GCpTASkKy*wJqzMth6HQk@d)W2ng&Pe?x@?L^vA`iYFCA}6wz@=D03e5iaZ(`3kn z8ivzJktHIRD5gVwlCnrzPbzv+@<~Z2C7YCFQt^|L4LOHKA}qt9DY9tF@$!eX!^V{J zQ_f8}H|5;W8X;Lyq{)yamv(NbciOpW=ceVGc8(-MhlExP#R*BK$&e)?mvMYZC~V9) zFC)Lu8lmW<2+3tadxkoP!iG#k0$Dq<%9wRdR(?K)jt@N+svU}-CPNhZIrK+pvq&0| zG(rI)X++@w=aC>ZSEzQHP@Ir_L@vZpP8vDq=gJkgbbhY9(^CF~NC~|dnmjaJC|Yj% zoLCG|6Vsb9ogdTjG225##ceAGUdqzGxP9>m`xEw;gC}%f2$~QuAz18B*q@Ych?Jyr zllCR;OWLPLLl2jSg~FDHhJt=K)~(z3KgaoaypBi7cx;ZhOu1GX;QuYq{%^q~k8(iC zzZ@va6(T4^LpfMNFX@5l#PjxKlP;!gbc4s=cwT6%FOIp$v-l{H_) z;+ZgQ#NyeQMHrSAhL!)zAsdS|G{oZ58e)lQO|c|t>lt#k<*Zu}Cq*V^6A8lSh@2!$ z=MCl)2TBX`Fv*67c*=Up=akRVjYrla>(e|nbXr5!p@AvTY0{8zL&AIG?6O znyk;tMVPl664M%@kWE5yG4(b?N#}=zF`rw?H>pm^jL-5<%0C%dsuxL8q{$Fz0+*X| z)>##H9Vj2rlu{1Yw}w>OQdv^cOGz)KEUtA8sY0k}j0{;N_Sw}&DF|mK(vnLnue_Sl zHl$T2ttrxykZO!L$?+T-GL~5)a&ok<+zPgbt3*T2C8u0x8HUSELndRHMLJ}OZ1UL^ zuUukREX|Fpiv7~aDwFna$f{;m{S~}ic$cYi<{^=ALO3|9yts5(DtC65xGkwr3tN45 zu^caf3s{4TZ$lzdv`CLRBSqw_7&^g4)v<(aE^hW~5i&%%5DK9yB#r|t!-1-X7ITbr z%8f4_%Pejf8eCLmC#0tdp=l{~3-KHJI&_ZQ$3s%WA*FwXn?}}14I#wJG2xtW?zi2q z>&I)VyBqXlL&m<0Hq+h>au@$BZoklRq226Lst{A6S=uYu)lVvvhneJ$q^ti%p#zi<6uxiY+si zS*A|3%dO+o$#KFm6`R_SBrLNw%FxaP$uePM8QGq*%vnzLAeE_;lZ0i4EK$6Cs;NR+ z*e<=P4PkpOA-zOW#wp9Rr7|TlmdcgLTFL|A>2u_>yl6-$FG(UvSWZrnCQB|MPb9A` zIYdO#aZ;YBgMFz&D=6JW9XU})PSlDM zwZcRl=nK}=i8{p>ENs^azF^^VHk4Ea%7av6D9hw>Yij)R;1g-z4!SVlCM!!h62rhK z2eXQYAT9@+W6MDndO(`xV6smcLU2sZ*j5gT5D>P9UEexbEfV6%XB;N*hxn<1&uGCsM1fBh%rN0dzGp!!8Plt!jHVa@qM1L--Z`@;A zedAuG#$EO(rA$~RrlRg4QS@I}G{%yaNz0UF$}(-4w#<~da#@dj&QS~r#EHnoijB!w zvB|obyJ!Y3x;rYmJ1RE0D=Ht@7?)dIRy5-72+89bZJD(%Ybp6~C<(Ge@nWOTt`xPT_N7q`F$STy4c_a;iHaY2!|-D9|0OFqBV9 zDR)ZRDe2Ofl5R>Dq?B0?sg@r&D7(Xw;ZV|Ku+6QP^5Scn9nw~jP>@itaNxvna9X+{ z3({mm6NRc^TVsZt?hyr{t6Yhd8{2(}m%dJ(NTW)Gj3IMzKfeWG)X8vb~R>+ zGSWm>xN>U;>~lqyUg&U*9W-X8=L7@UQr&6Hs(4n>?#@V>Byp^}WaUNmn{rAJIz|&o z&Cy}phA}(QS>;jrufb+}+;#)395Lkq5Lz$P$gxQcEqYvw$MAy*SU>h1_`5Ehn6Ekr}_~Z zMo2j_Vp`is)K+0KDo09a{qiJYTZmL;a}TOV92;h#FoLyRlfm1h-O96tQRqHYZ&^2@ z%8^};G{=Nlq&#x$3$uyfE{~!REn%iq#-=b!gi#xX(G_~yc5UjOm2~(Xn@ELkwPB)* z#V47AD{3I8VN#X13q=|9q#8YLy zC-^?*qa<;gVJXSDM0-A*zMPI8ATNg{IbN$#d6xfzr^_PJ@A=<2>WxAOK4L=s4RSC z@Ppx$+W7{Yl8GOwrsR{-mV~9D?6bP232sd=)LWE&j9^K9l@m?O0${u2|JY2$Od1#7qVav%mrySaj z39+N$$D7f5=#X;ANv|9#(k#b^?IA9V&vK0at6y#VS0~A1anESq@)-YD%Pwxu&^?RW zBD90;4FlU5u9L7|L`Vdl~ zgLR9a_TiW?r-X4H##|UB;=UYqf}`AJVfr-xmFJx>7l>*BkNqNAOk%%wE6)?+(2u4F zF=&67GjsNR8%M@-Ifne`$5I+0c)p$K-HlIb)Lw329BbU(?XUm^|M{RXP0sb`I8~Sy4Ea( zFBDlOY9aRtsG&ZAtwSt-{6KZ zw3|cJJE!Q%7t(b}8c#2$d1=Z`P3LyYT8W{%wYh>|+Z3Z}N<=u&{_-dj{UIzu|0s+) zV1Fs9pD}sjYy&|H$UIC671rp7EpojJekteW1LyVWfHbbZ! zbUG}Q$@N;nZC6Rx8bSrbHsvf&T;eLG@+PAx@|>a}%k>B|kJ1_C*ssB-n0=<0DyA4^ zQ@$MyQw*gkM#B^@ZJMH$(_77R0@?Md4W9yeo{ZPT`gDJ|_hgVj8N?cr*Xk!F}$!*rLiEo+-;t~?QCtw+`) z$AqajvORLH$*MdB$1LMv;D;GC%)kb$JoQJI4Gp?5SA{vnXKDC35N6CU!9`)4 zWhCmS2xbjg?%Yf{`bBGb1PD^sn{csk%?T|a3Pn$tCc>yHN216H(P*xpA}Z9rybKXy z&UcK%1xaMy4$(42v`p0L;R-C+UAk;G8-|O){}m-+N;05SGGjEEy-HzXEEinwg_cn( z%W|zO%e9h82td=DK^F#ixS}gj$WaceVqA$alV^G23s>Os)zi9~j9IWrw9PMic`JxfF`Iny^8 zNu;c#QZqb7vpyvSe5o_iKQi! zo*7y#F`kHq{!7Ld`>zp>9pj`Bq?(BDa+K%bbZEg{ywNa7b8xBB2orU^<<`gYR3L3RX;VCtKW6fjQU+? zOs_A*Ql#q(_7$>mGWDK2TVH6J9R8i#f9c_Im6N^+zdpbC&jcT;siBrSVnpOAP^3gN zEws``I~{b=MK?Y4(nmi73^K$pBaAXe)e?SJfof`~rH&X8c?uLM(M$`iw9!rnopjMn z554r!&j5oAG0X^~j8V0u{HdmfTIz@qk*7eB63w*GN*nET&`B5F^w3Km{R}Y35W|cx z${1Bk$)9R!sHKh=5qSy}DbY*|t+dfj2c2}$O%J{F(a!*b3^B|Iql{6twEU^2hFa=~ z5s{}rkrK_c&`KNabkIo`-Sp5)AN>q4$PmMfFv=KJ%gCQy7w9rZ$?R3yd7v1#GOCS9V zFvt+Yj4;X=Ri0-xfof`~rH&X8c?uLM(M$`iw9!rnopjMn554r!&j5oAG0X^~j8Qeg ze^gULEp^0*$Wx$5iDp`8rHytv=%kBodg!H(eg+t1h+#$;WsEA%a+*LjHPli^jEFo1 zij-)kg;v^Vr-M$q=%$BW`sinXL53J+gi*!_4=tWRH8s>yM~sL(1&WktriE78Xs3ft zy6C2dUi#=~fI)^BW`t43sPZhM2~<-b~@;!i*9=8rH_6F7-WcHMi^y`D$miGKs7bgQb&x4JOzrB zXr_f$+GwYPPP*u(hhF;VXMjP57-ob~#;9^3oyM~sL(1&WktriE78Xs3fty6C2dUi#=~fI)^BW`t43sPZh92~<-< zEp^0*$Wx$5iDp`8rHytv=%kBodg!H(eg+t1h+#$;WsEA%FPT6!HPli^jEFo1ij-)k zg;v^Vr-M$q=%$BW`sinXL53J+gi*!_4@;gvH8s>yM~sL(1&WktriE78Xs3fty6C2d zUi#=~fI)^BW`t43sPY_-2~<-ajdnWdq>FBP=%tT-1{h?BVMZ8bjBwLGfof`~rH&X8c?uLM(M$`i zw9!rnopjMn554r!&j5oAG0X^~j8Wy84HKxQhFa=~5s{}rkrK_c&`KNabkIo`-Sp5) zAN>q4$PmMfFv=KJo|iCzYHFyZju;Vn3KS{PObe~F(M|`QbkR)@z4Xz~0D}xM%m|~5 zQRSHh6R4(!TIz@qk*7eB63w*GN*nET&`B5F^w3Km{R}Y35W|cx${67x=@Y1?hFa=~ z5s{}rkrK_c&`KNabkIo`-Sp5)AN>q4$PmMfFv=KJerJCI;W-71pHWcfbBu^Q1&Wkt zriE78Xs3fty6C2dUi#=~fI)^BW`t43sPa4W6R4(!TIz@qk*7eB63w*GN*nET&`B5F z^w3Km{R}Y35W|cx${6AI^~3M#hu_l=zoQ?1KR^6#e)zro@H_e8_wfr9DbY*|t+dfj z2c2}$O%J{F(a!*b3^B|Iql{5iD}Sn~p_V#gMC2(@q(n0mM)Iec8fvK{Mns+hMM^Z&LMv^w(?KU)bkjpGee^THAVUl@!YE@@Z7hGP zsiBrSVnpOAP^3gNEws``I~{b=MK?Y4(nmi73^K$pBaAXe)h6<%ni^`UBSu7?0!2zR z(?Tn4w9`Q+U3Ak!FMaegz#u~mGr}liRBbAMs;QxtI%0(1gU%Cv|G7x`z2|1a?>n~= ze$Tm`4m#p_Mk;>7bJ?y6K^p zKKdD8kRgT{VU#hdHkUuu)KE(uF(UF5C{m)C7FubeoenzbqMIIi>7$q4$PmMfFv=KJTgsnmYN(}-7!i326e-b63$3)# zP6wTI(M=D%^wG}%gA6gu2&0TqwUzv-riNPTh!K&eK#>y7w9rZ$?R3yd7v1#GOCS9V zFvt+Yj4;X=Ra?uSYHFyZju;Vn3KS{PObe~F(M|`QbkR)@z4Xz~0D}xM%m|~5QMHZy zsiuZn>WC4Mr$CVs&9u-;8|`$^Nf+Jp&`Tfv3^2$L!;CP>7**TKpK5BTrH&X8c?uLM z(M$`iw9!rnopjMn554r!&j5oAG0X^~j8V0n{HdmfTIz@qk*7eB63w*GN*nET&`B5F z^w3Km{R}Y35W|cx${1DOmp|3iP)i*#BJva{Qlgm_T4|%54m#7$ zb~@;!i*9=8rH_6F7-WcHMi^y`s-*m>riNPTh!K&eK#>y7w9rZ$?R3yd7v1#GOCS9V zFvt+Yj4;X=RVn#XO%1iw5hEf`fg&ZEX`z)i+UcN^F1qQVmp=L#V2~k(8DW$$s?zeO zni^`UBSu7?0!2zR(?Tn4w9`Q+U3Ak!FMaegz#u~mGr}liRAuB(H8s>yM~sL(1&Wkt zriE78Xs3fty6C2dUi#=~fI)^BW`t43sLINpYHFyZju;Vn3KS{PObe~F(M|`QbkR)@ zz4Xz~0D}xM%m|~55&n{I0@c(|OC2#H@)RgiqL~(2X``JEI_aXD9(w7cp8*CLVwe#| z8KWvEf2ygWmO5fYk!yLoId0h{#i*NQq`zXr+yI zI_RW}ZhGjYkA4OiWQbu#7-fvA9pq0nHPli^jEFo1ij-)kg;v^Vr-M$q=%$BW`sinX zL53J+gi*$*+EM;gQ$sCv#E8gKph$^kT4<$>b~@;!i*9=8rH_6F7-WcHMi^y`s-5Id zH8s>yM~sL(1&WktriE78Xs3fty6C2dUi#=~fI)^BW`t43sM=ZnR8vDOb;O9sQ=mwR zW?E>ajdnWdq>FBP=%tT-1{h?BVMZ8bjHWC4Mr$CVs&9u-;8|`$^Nf+Jp z&`Tfv3^2$L!;CP>7*!MHPc=2vQb&x4JOzrBXr_f$+GwYPPP*u(hhF;VXMjP57-ob~ z#;Dpw{!~*#Ep^0*$Wx$5iDp`8rHytv=%kBodg!H(eg+t1h+#$;WsIsx@~4^_YN;be zM4kdgN;K0#D{ZvXK_^{w(?c(P^fSO9Lku&*C}UJjmOs_hP)i*#BJva{Qlgm_T4|%5 z4m#q4 z$PmMfFv=KJQ{_)JHPli^jEFo1ij-)kg;v^Vr-M$q=%$BW`sinXL53J+gi*$*+ExBk zQ$sCv#MqJP?8yNf&M!EFF0SQPe$V4P&zt;%@Q-#@VqLZ%#Y7s}n--4Z1kUC%uIEl3 zWRRD5n}4$OG=EjchHOp56n5i>9Ktc2!g+La6Zh~(p5;~E=L;rG_g6n`%=g)WY3#v| zXyrIg=OV7*7VhUy4DkjZ@eM21`>O;tCrO?e?8QMW;CRmBQhK<9KkyVU@)n=6RD=Ft z1GXZ|WM;81KcXBg%^KIcDX_-i&cVmp37f!*1kpKvUvaUs8=m-~2( zzwkOA@--_oiWN2^!Ok==hXXm1b{298*Ks=!@FXuV!Y3>_(_cZeK3kGu5=G{6FhAua z&fyAfppS?7Gq3P2pRsJwUujaywrtO?%w|6hrqFVU6{!}%;#vrpO$%t%y0e45eq8I zN;_2IpfV0B^FU=DsLTVEd7v^6ROW%oJW!bjD)T^P9;nO%m3g2t4^-xX$~;h+2P*SG zWge)^1C@E8G7nVdfyz8knFlKKKxH1N%mbBqpfV3s=7GvQP?-lR^FU=DsLTVEd7v^6 zROW%oJW!bjD)T^P9;nO%m3g2t4^-xX$~;h+2P*SGWge)^1C@E8G7nVdfyz8knFlKK zKxH1N%mbBqpfV3s=7GvQP?-lR^FU=D_}_URIP%c_4msq9`^`Th6tc2XX@g1}RK`MO zKB&xzmFq&~a#*<~sN5D+ZVmqvx5t(DS^rmG&ArO_V>`?Lul4@~dvP$Q)5X2K$T!57 z@O)E_6K z{F2}BBp^(fmyR5X5`ZI~WIE3T4h&x!s z>wLxLD|;3&b2*r^xstnhkuOcJ@*mb zbNU(8t9q_6dG_WA&gVw{z>9pqGOKy^F?;fJF6U+*A-pg29ll_d)ul&0Eu6r)+{%M| zK=m5RM~*#dBfOh4ypQv4Ugi_lSW|u3k=e}SEUqNHH}i4A`!T;{qqX!0d3NJq&gEvF zv(=JlR1c=6W;B3 zKhN?8U$EY~+K<`nF=T|CP3yvuUyi9aGrEZ|!1;0a#iOV(W9GpX5?AF_aRxs6A7 zp0`)28o!{^fAF=8d#sxdm#NnLIO+3e^tY4@7*_$5|-c@!rxA6q;v&NQUml6wDNO*_X z11w^xt<;Hne#B9n%njVb3oO00z9UbGV>pM~cz_pKdK+^RJ2Q{-xr=A{l(n{1ANJ*V z&f`|XyQ`|UGglE~C-&kbZstM$M%DK{7n}q;(?}}|xt+i87S%E1hB=(Zgnb z&y8nSN*qlm_wxduux>&=?9=5ab#aX;Z*J|D9|Mj2>kA-A!Jx2eh+QzY4)pK>ZU@(gdYN~9j_&QH0R zyLpC>SS@GXU^WZ5klT2I@E(~}w>MYO#QvPYuegub`I_(jza26!n-h@8;?@={HEU^Vs*^9$Dj~jT9S6F(gbeKU4=Wqkz9SncrbJpM0 zSY~Htv49gfpYT3~*O^ezr-b(<9LTAJcO=}%{k*{n(;P#dCJvyDYq*;i_>>ibu4j-BSZkJgvMa+DXvzW)xoXU0d^EMN9S8fU% z#Lu~a>v@U1RzC`BRGNUxsRuLpAGgjS5eQAoX=f6$w#bNvY(k8$tB#xB0grN zIp#v9Fqf0KjbT3IE7sUc+c1rJoXutYp67U<)%P}Mu`7FUIHzz4ck&b?EV+;NVFo|p zWUk;|-sDrN=eo2ok$L|)62_SH~s=B+<)pa^Gbl<+942Cc%kq8<@FeV6L(4e9ch=73bK!`$Q78033goqG9 zrvG>Cz1QCRoKvSS@AH0!TYZLo_Fj9QvbE8w0_fX2YZUcs%HWtHA5QE#P)= z2l%0NXc1fj9s_<8ybQb*dzz94Gyc+xy_%iq&ctDqHz^{QvgC~L>cqVuecoldv_yG7i__52_&)~73 z2c8G61AhtL3%&yGvyCnReif{N6#OQ50k{^t0o(?@4DQi`hk+Te0-gk(3tj=<2R;Sv z06)BgUJrf&Y=HxC9e5M?6!-?Xf1mFFD_{(s4gLiDIk*LU5!@$bKZ0q{1y_IC6b;CxUAZEyv+ z9^4E*06q`y@-)^H)WH+LQ^2dh+rd}B_rZ@m9r^)Bz@tGM9Du9AYr(s~=fJ(5fqe#k z5j+NT!E?Z$g13Wz2lx3cY;Q0R9uKYpH-NteZv(f3`(MFc1INJ=z~$g-@D6Z0_zw7q zXF|{5(I5rS0XKj*f`0@54IXeM`y0%GO>i1q1O6P`0zL`u@htp6;8EZd_zm!U@MiEq z@J(>vXQNAiBVZ0BAO%-~>%jj7{|4>=_k0ff7EFUDfdP01xB1AYfw2i^g`2)+gG_uH&BsDfVsmxJemmx6bIZ-5{9 z9ljG>0#1T9I0OC&+z8$YZUbKd-vrLwz{|j2fcJnefCpa1JHao5Wv~gJ z3T_1N2VVyF|6O_&sO^Y=AT155djgYE#MpAM_&xBfyaYAa1D4RxCwj+d(k!fm^_rz_-AI zUII;kKKKK0Gx!L&6Fl&b&;`IWcr4fhF9ELx?*rceKlW1gB3J@j;K|^n;ML&m;NQVF z!M$GweSsNpIru~H4)AGkmp?`pfL{iyU>p1vxE8zbg z?)E1<2mC5Xz%KX$@H+5r@E_n_*P$1KUj@Got^_xNTfrB={jTSGz#_N|9DwVc;1l3~z)$}v`w}dJ%fa)&jo=pWMet2@NV!WaK9TFCzt|{0XyJI z@Mqw?;6K2FUk4q526!^~WAJz2)8HH6$NvHw18jk-zzyK-;5Kk4xcgtivp^G!z)Qhf zz$d_W!Gr&bZv~s+_ra^cTfrB>-CqxVg2#cUgI9oegD-(|{~Epzei1al4tN%LDYyxI z3EcB;Z-5{BTjmJNf+vBefER%`g4@8kZ{Qkm30MOM;5p!W@D^|@ z_&m7FP4I8<5b#UjB-jIg2Hpui2)+#-@J7BB%z*?v2fP@(1AG*G6Fl%u&@fm4yWsc1 z>%jZL?clrMXK!Y|ferAx;0@rz;J?7n{2l87_P|x(_2Av$GvH3}!*7O1f_d;b@Lcdp z@DA`<@GbC=x4>7xuY)VV?}3}a2f!WRL2pHW0Z#x=1J{6?z=y$S!Cn6z`3D{Wj)TX7 zE$}pO4ftE|8F06^aSeDP_ziFaxE0(1e)R3gFt7^t!PVdfa4YyK_%`_Qcd%DM6STnZ zfLDNbfKP$@`~&+8`~o-uejRLsXM$_MYr)Onqu`sM@=oRs^uUY2UxSZ=?}O^Q_!jU4 zkb*w|uLXYxZU^50_xr!l8<+u)15W|hgLi;0fV;gLIRqBL1~?6#2VMu>20jGt1P^)- zIyGp4E5OUaP2gkT3*dqO$aBCN*ayD_t^$7#ZUc9DFZ>eJz)A27@LKR8a0htc``9;N z1q{GT!P~&Ufp3F*-@+Kc&x6NHh!Gk{tKLo!9+F%S`0$v4f z1-F5_e+at*{4!{Rr-RpmcZ2VMpZYLk0c)TIo(WzEUJh;o9|L!Qb3X!2fk%NQum!FJ zuL17`Uk7*nDE2F;gElw=t^uzE?*(54-v$5A$G8ssD%b|k1TO%u1vi8Dg0F#lew^`v zp9jZ43jPq>2tE$}9efWw_+O!6@I){KPXkwhSA%~9-vO0RFb7~AoB=NZuK{lXp9Vkr zN%$r>2{yoQf|r0dfPVpB1^2uS{t6xi=D;?%8e9wB2tEeRxt(jkqrei_00-dt;4i?( zz!$(>|BXEX>R<;v1^g*^E4Uq;^C|R0PzS4E4_pCW4&Dad5AO15_yt%3eQ+gsC3qY7 z5AZ$ku+KotUf`0^G0zdLOXbzkL z8{hyu6TBL{5Bw|m3OM)k%qjRk;CwI**1!RH0eCz3XYeWTRq((sK*!*TAO+6^*Mm2M zkASa%?|}z=k$nc{z-8dM;977qxD|W`d>j1Om-rTNDHwpO!Rx`lfG>at{yWbB^I!uE z!E?a1;3n{o;B(-lfm`iM({51Rqzvc@Hg;e@DlJQ@KNw}aNqxAj9?xN z!OOrufDePuf$xBy_!{E_Q=kRTfZqWx1#bZV3cd>}|Aj3DPJ&%<4Y(1!1>6q)3;fX6 z@p*$IU=3Ubt^%(E?+0H65BvstHkbt+a0R#;yaK!ld=`8Q{N$ay5Bv&vEZ6|g1=oR_ zz`ueogS-DX^9LRUj)QgZTi{x76L>H99Jt#zc_z3B%zy+u4ZH~43~mK?fCqgGeg=LC zJQ3`GXM@*+e*ymq?(#px`@kc?Ja`g#9=HztHFy{J47l63(PO}I&;ic^uK;fcw}Q`s zZ-O8B4s!x71~Xt4tb-Ih6Z{c)EqE)q1$+X04cz^^_;kR-z$IV-tbq-11-J(M1^58? z4EQFv+xNH!oCh8Sj)6@v2YeEI1KjQ0bI*A&sDfVxi(nm`2G0h6 z0{#NL3w#j#2ly_y&kvn@&V#@s!2)Q55qK838r%T>2K*!VB)Aj&$X(7o=O@6!z^{Nd zcrv&WTo3*Z+y?Fh_qpr2=lmpi1Xu(Kcrti4crkbt_y_P|@MZ8rcVj%@A>d*#1)c=@ z;2GdW;70Iva4WbSd>x#7ckTm6K@FS&>mUWc37!pJ23`Yh2JZnM178O}bPv7>{0z7V z90QL5ZEzaA2>dztJMdoc1@L|F!}ny)!Np(>Tna7+&jHtizXtCF9|3oOd)@2Yb1LAM zz$)m0eQ+gs8F(FdC-@q;*S#4Jm<3M)XTS@=E5P4^4}$*!_q)%z=lm@AMbHF$;3{wf zcsuwQ_%`@o_dWNV3&A4jfTw~#0IvtPfX{;Og8%))&=6Pv9q=3AcYyrArOs%OR%$!z z<6hElbt=uyV6V%6=iNEiCwi5sWRP~-{+Gq1(i|nDPNk9dmDvF!>JBUQWPQ->cPHG@ z9d*xi`oqdnr`>JwsCuVA>I~v%tR_2*;h@q;2HoLS@e!+?)5)+hlMK19&!;5);ZAor z?56$7QqtvVeKRZbm-~kL#dNbf9Ccg6%7y;-deYnN_QTq(boZDI^OlksT1p1V zXp4_M)#=BpKAVmQE%|*a8HVRArR&|WUW>_gr^46G5J2>p0`c}8s z9(4K-Wt{n)R$E{1>~(v+LpGx!o%Ie2qvKml+6R?%qrzBV5=rr?x#i{3sbs{sR?=~_ zsLicTuUBbwcRQ6uq1CzW`jCtCEhi`m*s3fi+ohX2!)~~`k;*n@KF7PALq2G6IOZiu zkEb_V-Hx!j9Jg3W*E@qzWwFv6Z*GRwWe1Fe3a64lVaq$hjvS>=caxoziE3^oJA;@` zjwcY!0xZd2I-ibrlFDjlFzBqOEVuuIneIK=0=Ze#mq1DUPq~`Bw`^pZ)m8T>`Lo$N3CYk9m6kECY zeE)efl^P4w-p8ug32Pi+*L%@TKAfW+)peockg_6!@eND@)9#;nl6qaG1jA zkM+Zjs||K{zclludU_Su3;MPOq(e zwP`*!GwP}FfN_|OTw(0dhB1pe-RX@Irl-~E?#a@N_93&ZbTSQ7WJyPrODZ!g?k1Z% zQ1w#U9U_(e#SNqHut5AWL1NeT(gPTjtWbXGR+3i7?2P>TYdgtlCL3LbT>=Y7=pG1V z9PuwbIqC#DQOcY!5oT$I)rEd{b4yrfZUt96JG+&+K|1cYd!4;b5XJM!pglsZ%HN;?R*{Hg#^2bbo`7vHqXnTm`a#yy-X<)q+UO2ja7e@XoV=*@jGUPpciZSMdA+Ft z6GyMoQPf7~t@?j7l5uY=l$mZLK_f-CzSY?=3h-3Y->y_EGNR+mJ38YD%QU3wx{>tQ z3&P7w7XvW^OYbM^D8(i7(u6QODCDB4%_alcM?7|v?$*elc0}>zm8?PkUuh@T1y0qUkX|2HPpq3 zJR)*vjyjHS$jFzV<6g3hFw|+UiUdhm+POie6GmQBp; zzHQ2}v@ZL^{bQc{dcxJBwQ;vSxtA)+9Gb37p~BRB@IhB%@mt`X*`5$=pc@x znZvh6T{JNLZ3#W6i-n0|s6Vak9H~qlLG2z6dqyCtU7CO6ap=@oAXZz|`(=Js40Edq zFKlhE=t;?r@MkwEO(AHbF=Uu^lM&Cd$6&()zPeIt z@9|mVh_lV6!U>UcTgazKLvM82Z6se4%RCLjUzBFCC5l93d1J;lo@aXx(dV=L;xHCn z6+ejiifPm@;~CKpoaVikuN#zPm|Gp6;%229CuYvC(3AqU)E4O}ZbY*92Ad|TmL zm*wi%v9^TlNcUxlxJb#oM9$9i;N)VTlo==xvFuc%z3E)8Bn$~2azgx7`lE3i?&1O* zAwFh$otEg}{;%F?0q?_ihh)oH+b}pLFDymVSuQCU7Wx9|m z)(TiR`konv%;gGpn~X2_@>A?9L(-=@%%#!Wc)cHdt%4lyCAa}`ules4YkqYwZsD4c z-{kQ#r;P^8RyF3KUOH#i2cuYjm^po#5qdFxUS+1g$q+C^Wnv%|y|8fSRBzm=9FJJ< zH2-!6sO+xwm5DvY~swtv01D0t3#}fJP(j5 zVB2rPuEs$RTuX3oz>t*^^~U7`L*{ifgzdwWFk|yMF;sZSe7Z0GBUM*aGU_`bO=n83 ztG8Q~3xY^r#Z%GWj0DJRiXPR5;ftfxKcsT9a?Jk=4>Ek6wV&;YHs*g{OAcVVk>Mn> zF*oR9N%brE0#cm1Be5f$G(gt0(jJ=D7-k(9&IOk|94BUfN1S}(+u0UVA$Pl>#9u`SDH95V@# zjTb>oR!h!CWznG=>sudghF!}t;rHpZF~ght-H`~oqFv8bhl__MbKDWfuW)e0wRIk5 z6?CUm;{6|qDjw{uJb5m5){{QFbXDw+U6c=8eq(&7GBW*`CG?(c!`(CAh?rvEndg^H z(>&&jaL_bTFmZhEZoxCr8T*z+rqT{1>)b#KFtQFN2LCXA4hU8TBvdie?uv1ZS1F0~ zhqcanYmjUN0`dA<#w%eR5alyszjke_JL+tuW7w@wN9=g1BhzrA6+Eenot^cVvkPhG zH*{0Dfn^%9M7T-&9URQOqTO}OM1EhyXy|VmacPF2E73r%*V7?>A^l}xkaR@0>AzRd zN0^!mFA2VcDPy%-J)u5G;qTGfLT&OwKefmD7#Ks;4K!czsN$xOK$1Q_44^50MiLE> zl3`z4n!qX%J2~f8BZP!rT(Gd0@tBWA`kL>pM-dHpW)go}(ATVeAcGQeSWGq{vPA|I zf7z5cjIdipdS)z~+#iBn>b(wz^H{(5TAH>|Z??>=7Wnc?i+C7Xg+vb}u%Oda!?)Xz zc@#58e++XsBk{UjHfO{r=h<5wjHrV9OK(S|K!JTMnwEd!Omct`Y<8f|g(&hFqZr!> z4>|q;QOw*N#7e#3vev5k_9AhaJr(P-hGAd|5=;n|V4zrWi(zj4EauV+OQ68IoMHMLFV%-w-%Kw# z6V|SQB94rM3)BXY{oS-7m&yzxwFlYi6U;E`opv(FYOZdLl>L^3t_^u}D}IBb88V&V zdkAk@YE`DwK5@3KK$mW2Y>a-Ym!>;e1psPUPf-X8yh-AzSucFVm8|E`2zn(J{oFcf z0Px?EwN+Pygb^D2vD(T~yZBfcJ6ZO8gy4h)6&hoY&K48iSG zv@Ew%{YuT-RE2((+=i8uWfT_S|GGBlU*`XDVqek)@b>y&tpC7yYIHJcNJf?jjl-E3 z@Z~!4iC|ffA;D_R&*gL?em{L!gQ=)hraQYM6PD7SnTeh1EV{R47s9KX5_~`kWi&X{ zMYF3iKVq_w+%PN%+~qwOb>_bkaLI+e-%o zX0xAk;&^3#pIwY%QmqM_s7&?RR?QpkrX%OqSW9q3TVZV9><1*yQDw(*#tRm^*keXi znpuhd*u?X?ih6;fWrmiq2$)Tgz;gL=)@D?wI+O+hq0U;P8AE#yYmZ zVj2j@D8~C@y;~=!^W)5DZh~1~`I8?&+CxeWv$8zHQSdG8wAGc&oP}F2uRQV+6uyGD z$cZv_X^z*)d#N;&4bkACZRip4j3S6qX}5?WXzMD8sR7n6HqwejFJtdm4UuR9yWU5Q z$psnsk=4+iQ7thPyt6^Sw~@3uJLIzj!AnlXp71KeOL!4ma9T(T6`Xgc=?3%dpS-%c zTfOMQhx>nf@5geBs1QVM&4s+!J%&GMMIP*L^d4d6S{(jH^VHyuKE}!ACjLossSqC{ zc7T3K7`l1ubU^XnyY1cPh5sQ>Rjux8%R`&)XwJU2pZq8v%4iP$d8^krubR? zatUvk>7Ri$SdNGc>5^oSF*;53!4Usyav5%utw<}ZiHY64P4iOHP#Wn&&?nwchL_oo@VvkR3T=P`v)u z?DoW+VD+WKv^DoxGSn+iu6mnyJ(drBF+E6oNkwRrmmZ=?&50J(6wifme-#F?zzFt} z@irMVVaf_u;Vv;*3^{q4Vfr(B@Cl~==p5N8Sv?1p1lLedpQhlA*5uMzWh-8A0W-&( z>nz|G>=QzPCF?JRVKo!pNo2+-VQ>y*K1tj7ag1J=8?ru&7a{mED_gBBphUCxBZ=-w zfbC!En-&F}RW8}v^PN77;#2}D7?O=`#|2Ccynn?l#n^^y2~sWxs1C-4)2Y%gm`g_^ zJm4WxM6OgpDYqd7colyU!xU5YkT0p>NjGY=-M0jQ#V;w_i7gzdzqPY?>*wGFNWf85 z;trASe@rcDzogB5(rY57wV3SVGL)38I3k|^^p(!R7Ti>40yQp0^7|b>flfr1oEo#) z)cJ-wA{k&gl~Q=7N%0z_WVcChLAWZcDRjlF-pb+cm1HM zh+dPwrNbweXj6jiI2KL(M1ObI!6Dyeh{I0-jO5s$NpVCL6kH90`RvU)=KUNMtHNFz6|)ygqR=ITna)@~Fy zixjW2?S*?D$9BoylcZmv4E)e77h%n<t9jYg|9oq4n;i#hCKt0ogz@ zRoqu9L;N~at;LI*OuUZxAN>n$vhXTVfS{_03`V9`Ez2#erRDjXI7mfh$P;jsDVdqb zOltb#L1bti+hkAa1mNZnO45Jg5rv@b7uRsw72juasR%oWGF})=;M-H!?fp$BPxE6A z=6>lGSnO`XLvUeY&=NzLngESI)*i+0Hxu{Fb1ccPqV^e zd^8NH=IwjQ7usfp{aE}m`3DtvWfMPXe>1C4FNs7F9jiXvtnw9mOpJe2d0x6n?y*$r zv-5RU{Ox!ud0}yc%NdFnsb*)cj%Fg6Lxl&CEpB8g290>8+0v537_2Ab?J?n4KbYLd z>-Hl07k}U?dWP^g{d1GC?1V^FVIY2P zi~ML{!ASPb2piaiEemp&yuU3Mo5lT-p9OKL*SwXT3M0?CZ_Hmwb}gt_GHTL`h>0I2 z2w0B;D{hQFqU%aLi3sO}Kjh3DPd=*VNl+{|U+AX1LQ>J7oBRhhkq}}Z7%SO(NAhZm z4hz9zt>gR!RencD4@S-LWGJptr>{7lhy1G*)zi!)?Jzv{2ph*iHk2XBUe;F_@Lr=W^H;Tg7mAs&QwN{sCg@_qCeAD2;rbq65a zqP#M{LClJZK9$ulq0mPJ3YDOo4X+&XO7g+`=;4Q4A-=XAbsW39>ZL=YwHpF?#Y$Z0 zUr80w78$cM61LwIwaS0H@u??0u~V{k&~#U_IS!-a72--$WAX~L^vO@NK79q>h~#MK zzk`SFkk3McPu>1NA!nNzLJ3-|I)>2OhSi!$N{e)p>BK1}hm9Ox@s^>(!`Tv5N`@`z zn&&pzDNN5Kzbi6sgGpCZGf77c@^8e@XG=^}q)t+g0xd~FP44YWSmtbQm4<~)Zc;6p zW5hiX|4B?>g43&tN#4Q0^9!cr940eTCu9MLWKdT*apQaZqz=c{8i0+nGZ9wnb3&X zJ60hJQ!-)n#W5-c=m_N#lN~X>^mZARiZMP&rd==g=8`R%%Ejt>5&@e}_CsLPmDnA! z=2J2YL0sWlM|<5e(#GrQvDlfhl^-r|ir`BolW(ijTbCHG5{Z72j=zrLYrIPnRpYfz z5031wO?z-`Nu{$Py2^}kRh7~ZS&3UII%YvpNAh@4qz||1!xsK+@(se&>z`5DqdX|L z39WzHUxFzmp1d%(1Q~lB(SjW_#$gbQo@KNEBi-47W>NiRmS?#ik)Zs+da6W)@oS(D z#RJ6ROyFI!33UUg3uT^>Mb=qTOG$1twZr;Asxoa_LVm5x-jfJGo}0rEC8mtfl%>?? znBb}8e}oC~6s^~I!pI4as)?JSsR;eL*;`?M_9_d!B`?iu16-v3x7ri^b z7|=QXd-09?K#SSWZi4;e{16L+r%YK~&w=X~y&0Io5dlwi#W-%0+LXCxHbM1^V=ZK- zK(t0)xNQIV_T{5!*RO5%tE+o{h%Ag(P$xxajJDH&7s%WxIk;JsES}2z5u7%I6af<` zUyNkQ63Sf<|7sbMw8{B+DN>vSEb=2m+l(qQrwHRM`X`@Ax8WkOM&jR)5w&iyV^XgQ0ZZLTSSR_Ev&d2Z<|RoUhlVAV zB&`k#;vvk7ACjLSKe<-fp!j}wqVEI7)W)xB%1!O=F|WbpU9N%EHw)ZWUxze7DzWu+ zx!HfF^!36E{df8AAowJ%gG1i5A_e}ox|3{4QqO31K`>q)s&8$GPcX&7mslJ8Fyn({ zKQz`uCXCS!cDodrK^7FEyP{?ZIW!MiRMJE5rpjpoCD$ljq2MaFC3KX>2I=Kv@kN)v zd>$+Kz-(IuTS1kZu=p_fWjuBJAu!vJI=2Z|>VVX7sxyzA z!p|>FAV^qjMS17cL!^YIg+Y;Uj{7qxt;@|>OaO`PtLvfU>x)}hhk-*9|Cod_Nz~^3 z#*WiJ*0Py{C?eZu3B2$k7w9jOP6U}K5AX}RN*$DNTGa~0%e{hl-6C-zupmh|g2nn} zsuDJp1`%vp9qWn&WWybju!GAztOo>O^kc-$gdlYf)t0O} z!>Glqj0+CwZ~`Npw0Ry9SPO(AE?nm>wT%cW^bhb~Hl6lJX(t0Dm&RT1Nn#rHlS2Da zFL|sheyk(@#$_@QiRw^E6ctlS1C2Pkvew!?U0L0$28Yosc?@W-*)}IZ-1crvJR=hV@X6zsI0M6EgxO8j$%HnzLoBZ`?JyQrBT+7l{<$d zv7DHy;~RX~+Ulv}Kj-Hn%$HqMG)O9%yvT~`aYUpLUnjJBh(sWR4m}qB2YIqb3M)=b zu`OH0Mw*2IR$~gCCX5HU2Z}>{@Vu;TXSbhC1+zrpwxUiZuEKVOluzv9P-~*ZUzq7I z6$yFK#!Db&3o5Z-?^0);U=Ib35>*}Qb^7vor1}bt1rUN_$mRdMjB5av>n0$~er}>E z{x?ddJXIT%#2y2je?}MCV!lgLuTGe}7m4tcFfyGJH=4p==Sa+#pj-Kzp@VlfXxHIy zEqN0h}g+nyTh; z?xN#K6uQ8!#=zAf%Fq+?CU9N`MZ^U8ByB>cr)1*w&wkPjo4{ewidxXAR}M#sq&Si6 zJIDm_u=}mos4*VVu7D5Iv_St@9jw03s?~)*oBT$jM3d!4@n?nxmS_VO#5no{b)_w+ z0G?O!bxX;nOf5?l)=@_SRhTK%?W4a_-Yb4*-I!+nG3g|nu9xUX_>1%pMfJp0D9R9F z_ZkS)>pc_Kx9J~5+BgXoc!1GkqCqfz+@$^oqo|;S1$WNeSo$0Yt0i@P$6FWf3fNZu1rH4Hw4Y5w-bdL@x_)!##pdN|w zthPR%95$-Kf@Cm@B;FQYB<%*!4{h}9(m2u{Eq~ZcdG8v|7!ii$v#Jg3vP*Z=$i#@n z6&8(v-+;{#-Yi#4AQ3W-GPQO>HVF7pcQ1VJRJu=26B82DF}bX<#g39Tj9Ch+)JFqi zU8d&%4$r+vSsM4?G0<7~DVuHLDa0+TFnv6JlnhG>4puM^BK$BHqBN}>tfxqTu#uH3 zIMyHb=JGD{mD6_2t}$s^mOmK*lagL5!GGP%!N}uhv%A@9i$~Vz-O(czx43UTO_)%H zC@Sv83}u?!J9@^+N*1y=*;%HJ$fTM3=jpyUKBgNf+&oL0g~`+VGU~2O8fk*Nhb#p- zSJIw=9(x&qA^uDDW}ZuVt>aXvRm1j>q*|)$u%iwtQ{5=j2Opr+iQ#M_H}6uYqSVYI zCun&*+C`T^PGJF(eHpB`h&>mE6l=X+%{U-=kkLzRu+F1;8!d;mw3dxfO^>B$A@~-> zeIdL?$+%<%R=40=oxyti-AnMr{70;ko+}9nCY3Qiv2@`e^AqjFgm0J8Mnt1`UJMg{ zHfd`5F{@q4?)Tpo&ky967u44CSQ9@l3lz1M$R!g&;;n5|ciJEv6O#1RrTSWHoy~Um zTx+-EnakCBE+*7PPO-m{!O>2&4dlc=E$70syT$=~V%)+W$0{>Xxa<;X@X2Ykeq0*T z^Fp{lCUu&4t@{#o6T&K7ql{>w1MQcO({S?@(~3t1V3@fZkl!E94VqWZCkq6n=NR)3YwPc#MU7o6~sGLt6Mr?;6L)gj7CIg#K}?9o4mB6CwWq<2b`A4SMS*kTdA zHfGwk2qg!e8>E@uyf~(?10h{9#Ec-Lg;?1^e=!R5-%)O zc4a5xu$Lf>k+4yrCnj&yib{s3TyZjMlPjvIIi?8T4?*{9fpD4=T^u?Knv{{%*(OzP z)N(D;(C@b-nrfmyXx|t5p^$cDx-(}#RNuHLUiPfxxjCkoCsWN+q$tUVF)99K25YFa z3xuif%-Mg%r{|X^7#)QMCR2nM8=1;Wd5drtr=aLR5z2`Va_W-mh)B5CPJZ@g)1W9X zYh}|@3oCpov##>C2CX|n)2NtEi(B13!3}dd?!D%vdGRJ4YW=`=Xi~PLzXuW?1>4K2 z!QoH1XoR}Gw9%WrXg9UPOrH~YB|E|o^dK=Z-iFldW3*}7C4SJPZ`7HOL79+!Eu^QmW613ET>FtK1GNys=*y1Lo z=nGUqMM(#d}IRA5|P8NXt^esGI5= z&8KWSN~2Qx#Wn(z?_!}A%GpTQ%$K&H7vEK`x8kI)j4h$U^cWjL->ze{MN7(xa?XFR z2MAv@@&OW+t?amw)}usa1;!3By-_Au%1trrQj(7gOGZ&uo8A>{cSDrQ)no2^j0!>; z;pu9KxQlrO&t9ZxINlQajasx8gpdBkWGOte$; zCahWb%*BZmSL9BMRF5tjtp=+iZ{^i!9zWboqD1ypX2z&M;^oH=9I?=896A)@975+A z{zS<}m3#tByJ^}F(o=xNF64u$N~BBSye#m#6OtGmx>%n`*n4IVmUW4k9vrDO`2R2} z7~=%4LCrOe0KYXVPrOi-YL%3%+>SK>p!jp-v?W=OE;$@=6>?tez4-aTM$C_ap#kN3e8@)u- z+DrWC2n9+VxlDv^t3^^Hwn$-<N`;dg9C@q4d3~CMigT&ilV#Qc6lKZ4DfRm8Ih57G3IyYp!tkI=^r2a!9 z46FV4Gj1cgcUPu288_P=$GI5`|*5VXYMjq-Ga^J+4xDMvW?6!M&1$+X zT_h&755Z!fV|ThuU-r1q@Wtm}VC&mzwy%;tNc1d||C~zsK&%o$fBeZ>1%4i6JDDm* zy)H{|#mo!;uIbW*?%$Fdf>I?X3reOf0)>BNn3|MYN7f}!ME8m^!Z^6y`f zV;T^NBv|NcmxhwQXw^-7lVfo!$b5elvL0iSad;ZY(mf$KY$el7A#WN5i>^$-EEzLP zVi^-G0W2fmLO1{D+7XiJr^Xc9dq+==)LS8m~58HX^rY!nF# zxjRv42_2mWS#mbkfWqmxW3;gtMCH}15ozMV(tkpxE-QhbY)Of*#lWd@9Sr1oET_N! z&?tlipvCy3xeZ-X+kFUM-%FesQ5=Rw8d;@;xTZQ8FyWNu6S&3^DVH|4Y%%K?ciC*x4i`Jqxo0?~9-lVhRcmK9R}N67Y&!b3tq!?>JZ z7z!FQF$Rs3`cW25+ZjG?ZZO8%@7D^^CR&ENY6yKwGQ4H#I$k+Qz>3%`R}Bv_6*rp+ zO#}{E-RUDMc5T(epwFj^A{I|?Vs|(1Q`L*-I7#!|6y=+P)thq` zr6HcaqlOQMrpK(j>%Zf;ueBFRT z24usdM*0`a0K~4OIFpW&+SiAReBQcHf>A13iRqd-so5Uwq|QW9k!EGh_*ng0j9oK@ zITKa3AUf7jGV))XV>Z4Muxa2ZZj|$!c_IHhqu`i8IsLW}M;Shfpr*B4vV{t)>ThA? zU7}aBN7v2V-KE~h)dMtbW-`CGmlCND(v@B8?8^j8!>0U&$X-a?^pPq24R_u+Z$P2& z$QrOs3!7Ts)<|IVhio?F`&kMqY*2YVR<@*qcoRCo@)wSfcN`ffrVe1<9N|Xq8$SV! z9ZK)@&*6l(!WYXW&Tw#wZP00sW1_OWWWyXHB_MC{5tJ|^-Hk%dVJRRc^_b@L90^1@ zWyOy^Gy=^p<>KZR#XD3Mm|h@L2w%~k^H&)cR$!YtDGh7M8mES2S?cd34M+7POB^*A z7&IZVka0!K#JI&xqHE!;*py>)uAYA|dtItB%IC5X|;a`=&)YS9?twTrpYvGtupT@gh#nV;fXuS+C2zeu=-^M0+eVa>U6WKr&F1&`r`Ue4sZx;pnpe6g{hF%veS3^dBT z4NVrb3%(gmo5O-&ZlZLVX0F29j`*?FVf0!E*NA4daXAuh!_{$TcCBw&QOYdHB^_X1 z$2#Ytm>f87eAjX^pF+b-KbrYO+I}k~n3eU@%^H~`r66N$k>6x{!Y~g+fowOD3%lvy zXcM1{mzn0zN7zmv$bQu2~%`qLRJJ#Hv z^mZxLHcdLkpX9$+XCbIu&c{-?VhYdpND|>oc+O03JBY)QYZ}Q8`>PQ=u+yCZ${F1w z{b!)N6Jti?F;zA)SSrGnBG$aNdzxH}J)B+Mo13AhxyX2U6$le)o9RC$X+}K=hqGvGf8w60yK~kzy)MM7qQjq;3C`B<1qoWR z#H*Yfc&MP$&my|hK&Q&-e_o7OvoNetcAM%5oBab42Xl#mmgkFOp-AT|diJCaqg00C zSD(;t$2y#)=eKHdX0}8LEqaLM^gA7?3#kPaBFdmH>@|o0E+&3P9i~1;y;+fb#=Ob+ zuk}*n+=^pe6o`?-8i*Rs77_eo)9r+;;4tGhdTKHX%DD7&%4$3P(2-CBrZg0qij9lH ztm_z?-Oes%I{AbLQs*66I%_aXarKa*Z#GqQMgeLduH{l)X`a$f>8;}!88Q$Ld-nKh z?^=`ozmj_9mr1AwPazAC4F*g7ErNkk7O{!cJa^x`Mr30CNHfSgzibe>tn(2m28!4o z8As`MN#=*C!V`|5W3Y_Fy=r<~nUcD1Z+Mh#LsIEYi~JG|UG_1Dlv^(u#@U#1V;uPA zprSAvbQOa}5NC3Zdia?(u7q~7-5GHx6chr>C-Z87pXy-pa zc99O>+WAHa_cRsdVMzRnm7F4dH|X&MOvOJ@@=7_v8$~^4bh=@jv^F(=gxTnS5+`;_ z<$z6<(ZL1vL|0c_30TJN)$X~glHyOLifDy_T;UgGnH-#JyVoT=@82UwP&dWhh-tl?aB=>lcBO5zze>{mZQ=%q8Po~SN%H*l@R0WpZcoCHG9_Asjqo@-}Q z9~sewh%nsEUbURa`o!%$L33qw>0NNBajj9J3orNuztU(^yVRn|L3KJHQ)j?wDUO(| zS7m}JCb|5m?M_dUWH7xY7gd(Xyc{(@o2H|6{BTrYa6*J}-yc0`%Eaf0dUMdNf56&- zX)~p=%WuT2?%y1ngBXey=n}_9M<3+FZVi0fQ4WtG(1%KJ8b9}TFnAZcXqdu|ETx*f zADuh>M5bGPFuE1}=t*ejudziYI=J}f^ltnZ+mMlnU6D_?IPuEJbL9LQf7QvxQr$*? z_QkT&o1L{ZRIklQ0Lh%%=Eq^~s?!wG z6|ox2nnqju;&w89L+WYv@Hq`Sc*ERWrBnNmaF`0djmD zywxSz9BEfmDYlNSzgNe#V{#X{)Eu4k)h+n5L=Su>gZ{;Im!rvudlsjGiRMdM^v z`a-HmL&1yP3uMwVOLFXG)DGSrzC$YDCy!&wuwYrx#PJ*)IHbf8 z*fRF5&KFq;I38))?H*aOl;)9UTjVZS#xyt5J2wVjjEls~vXMoW!ns7>LHi^h!98QU52rq`O&N@FS6Ez5j>FGFl#VHlZyFcLGO>!m-ew3h$bex++`As?L9nA1Ujh(aF7bewc}8YXNQTSb`hT97@- zxf&B#&`PqC7;^4cV=dp2J4}K!1zAr|OJ#z-yl?taa^?)@fBP9UOgZB%r!c42!8BCA zzAn(>7%IkrH_Ww>kR;Ta_~IcWNBkj!c0vm*P7m7cGKH9|c*x{DxE)Eb7ahlaC^{?I z1o$Y66vxZ>6^?8R2Ix_PU{sE)_csyFXnSZT$NV#E>#aw|YL(&kwo)=r)eVW~%Q9bo7ZA19`IKzL@|hRK4Hq81e(qjBU>Z$ATb>T4JEZ>MaA!6%#yaHIhicmy6G(5) zeT~a3Y}lwVajYo+4YI-cAjKUJmrxmGo4eh36s$j9U!dO@7YRoOasD#=4&qahDr2Ow zIhm<^Vw6fyyArlK4xhj%NI^j$*xG*`!yMk68Xk?!F&Ccba(;KOGIw;*teN=E$f)l! zQ{*pJR=bimTBzn)JW{D0;g8Z6!ybmb)S-$`U$DXs#wd@^@Q^>rvtz<{Y{#fy6F82N zlvMe2(bxku*Lukgr<*F@(jAaXw>a4<&FF1N6eW>Hk`cSa$&x+Y+~`(M z;fq3&>DS8%L2*uvp~4xo>rFZUMlH(%yVW~uQ}ycVDgU5FRte>GNxIpEg#9|o4ekz{ zg_%w`g$1bLAL}Pudbo*vidp5UqZg7`sITX?~Iql

zv&q30a>cpkzsUEHd+KzA<6^CS8&* z;{df{g3htN@zyz2gvUW%)LccrC23G_M9wI&O}=Yrf;RD8>^jkNtQ^-bC>s$Euxl(C zB7xqbeePdzo_oQhh2)fnUWb$hii%|*V{ZgOhK*H3opV9KDHz7S}~-fhI*dhWD>JyrlG(|-fD?R ziRZ@h&7&uqby>VgRmaAnF-@Lzljx+_JxWU@4e1nWOvSet32=sGtdT(a2qa^^+NpJ- zQlC!>9(E=iAQFkPIgU%Fs`D9$iWV0g7~9nzT3PZvCpi+sWCZ5^jtP$_j$(Y7RBlVa zg%4ay2gnj4N>b{Y)eMb`9iRSwaDU)XgM#gL(vLKhm8}I@AxBwE&|n^f30vjxOc&{q zsgNZwhNFZq3Te%38m`4Bvrd2r_FrP zVmd<8F|Aygh{U;D+Gxw_1e{0`6d=F78tToE&pQP-J2584Ce}dx13hc5sb?M`-3c_F^fZVsTw6r0#oHhS96$&!E(#=fzq#PWj!)k1vH$%%{ z0>_d%H&NrGG(;S9A~Wr_D7g+Eid=9UtK^#1&gnz~^J-tqo5GZ=N(F`_OVvp24_eiUWKRT6f$5Lwu|2AKzVzi&9ywa$*%wWFcu!?D&jFl3P_n zl_9EYR)@>lFQ#KzBu^!UiI*Ko;x>sv6G%;j=mNI&1TD=q++Il!uzSRiH?DbqRJ`0- zG^6vbxku;hU%qFK0yXO54l5X*A#2%0)Qr>o{7d{)=Kc_ZH-_6FifWGIPA3Skh@Z%4 zR|j}Sq=z%&Oj)E(vWdyh0{b z5bX?W%CN)W<3GhA=7iK8M-Hr^Fb;bFrBn|u^9fznKK9_)l1v#ZMI^Z3qf{{CrBjZN z=U}q)>tubg77>CW7g>i1!k0#D&~c`|Q%z+!jTlQ#^6FGAC6|d;P5-$J_m$Eu+=6yE zXz&o|5W<_m}W?k1OL$&ckcLwkz~PVwCj~4 z$503jF}QQLX($~zA(n7LtdB|YfY0GMkSski-*aSTm7d&>qRbaL!HiXj2!Z(RTCyii z2O3m;W+;UJbqbW@(|=jK&Td@`)M7+!F_n;QQbWDdb=DgRNin)f4HscXVH?h?Lh!akbn z9pK3;)9B*;?e))fcZ!4XF(6KuQ78l#mM8JD4P!;Q_!%O~k;&!B%(bq_jLmFc#yJeT zE9Q$b$Vm#%!>V8m~w*4{j7+uwk8LmhmDJe z(EM3s0B-KXia(?RdXrT+7n*!)bx|<%NMvAb9#oSx23l3%|~u z8R;{Y5aD>@Xi1x$XFW7YnU`L_NaqyVW(Y+^2`(j+D=LHp%bb5J|14VsrhCc~tz_lv zyYTGCo(RdNk}&0Y6)7QSGVDwktu~WcgfCjkwaSfcA@3Ry7}47fQBW48<&kLWrDm;r zQyJ5Ms}lY%kjc zIp{BJk6Moe)Ik!Cg+Kd-oMrMPmX&ic3WcX_Vd45t);vDe#)<2aZ9YpqJ&%k?${8+2 zC;YVJf8k%{lZ`N{55|l?&lvF4iQlJuA?n1c2E%IeupTqA$)~$yM1-$R+Lw=cv}#=< zdXKXQ14lKTY=%djrmT}8pGJSFhqCO!i@79SQyFAt@K(pylkzY$ah&nJ@a;k^#SBgW z2@{sgsZhL;fo@wDe6F^;2joapp(hp6HVjhoxMevS3l*_Elul)k>X7=~%|t5E*2U29 zOHuOtz$5*YnTe69p2v!ttl!JDNotsII~aU;Sm7B(ABR{_QsK&`9GG5f)~w_i(#jwv zX#9xYE;^i`jb3jwOym8|^BOo`rX09rPUgBjlSfm_9|OKDIaE%QJcjc#5_#4Jw~dnX zyFy5UVgbZnCNe36Aj-S08ag#|Xm~XS0d}p?BMJd$+9Y5P!i1;0(vL+ny8|0OiH#7? zn9Ass##NHQ;`EF|R?aj3Wo+U`_52Gi!4U#W4%~X7+Z&K?UTa-ajXdG{Stp0BSmP*A zhTcs{pm3s`qK;=#Gj_Oi*6>$K9yJ|7wn(ON)?5i?p~ANkswmBVo-wN&co<8j5oPqo4bdA-VY$mI zEf7NFXfNNpLVM8;E%UQWz>T6sNdrDw+o9dmdY6v!SvLjD-DpLJ&`RF_cK!&Oo52+~Lr zlNZW5VJ1yV|52VYnALx6q*U*cG&*DIbBJ7~<(buU@L?XNSc28 zYULMP7@WxxI!|yjPiK-$32C}Mi1{r(e`JbcwP{1erg5+tTI9s=);}?Xo|vZ2miFR_ zz7Mq53f586@)U`*OwK>E{9U~DlKWXTSwDsnGT9D=-RM-!>~xEaG9wN_0-7(SgKDiy z+bBsuGi*;XhlDxEB1S_b;`ssG{F7{I)>%EFkUDPM>iASOZ z1}d>D)3WjqI+Wl$kB|;DqZf4c%*Fg*g+d_VTrgi8zbn*hh1gQ z6_vskscZ8zM+I&q5DGNnv{b$R6jEQ=ZsA(%CG3EAKM=U8zQ2QI^I+85jOY+nX>G zB=Ngd9Mw*Q6$Y-}d&ou^jJRJktvH(pVyTC)8Csdo4U~;6mWgm=)B{=sNmC=+aVw+q zt)!Se_<%T1 zpHCO(t3J&sBN(zaXemRc>cm*Us{x7SAerS{9z=&+~ zyYyM}@0}xMWf3bH*Hx@TZr~ZuwFFjeSXMtgGdslb z5pndEfghBS9J(3Jl+jS-#2({j&|x1>PO}t?2oLcA>aSt1lE5*veFjRNZTpDZ3B#Jd ztb^UCkC{Ow)c@@Rm}fcG{A>o1NWUrckF%AZG(- zW>vDvxm04BMm15R!8%`Z$@v%i2j+I6U3VRCtj$W87^Ez=mdZtxE!Axr_6aCIHZ2P5dXeH0E z^nbQDNm#gIFU>uN`Vn6Ws&i`Ru_Q7{-8j$6E-dCZG~(PtLMeekI?how8Xxjc_({As z`8UxeZV45rERp2LhYB1QgF37)DUN>WfRG(l=>d3@hM6Oz{qkD@KGPOroH~L6B@JN< z3+uXC$Ye%okkb@)a+}U;u?oWIZQ0a$Oky0>)T2aRGb4tGq@dp+@Qr5vu$irHaOcbr zhm$2z{$*O_iVr&yaVwo&d+t?yp{{FP%1dA`r7>Fyun=} z?yzdRK?Q*m_KiPFs%j4MkZq)3I9#qY^P~RUUqkU$zxFvKHxqhe9fK z3kybH3VT3yA=d96dU8+b#&TTrSrv0NJUXdqi{rmzhl(mn%*X{uN!F@KDlVKt4|^4w zpR5E{10TzOs=iI%VIp^=)(<$b(tjfHU-TK6i5k55yMz}9dtdranTmZm4jqq(aXF(Z zP4HGqS2t{IVU0Qh%OM<#oGj0nYD`YO;e>R6JVecyLo(>K7f;Rm|NR5JXc~!$)}(hg z<=nxgZflU@gKZJ!MjYF}iV`Jhnc|Qkz+I~Hkf}F1gPuklne2s%bm@(rFV@Im1YjJT zJF<(zm^jvnOh&B4T;8BhVv55>_LHM^fCm)Ms58vd+XQFZiG22sX<}2z=Lj+rx3v+1 zp15^J(Z$)BTeiZD{@!`=bX#O;1NB#$a!a`#UL?JpaAWt3s4FG+*<4quI!(la8aHDK z+cN06By-4vEe_t2ylzRW&az5Bd)n)~`e(SBBtuQmXk>##Zqrk70BXe+hpbXX z9KLL|-MZ|k)fy3Lg*7O=T69Mo56OmXrFh93*|I%Z+bIm_tvF$KKG~5*Z3Thp=h^Lp z`g&W^jz`9G>;E`|N!RrMa$HUolah%vYCAsCmT4&MR@t5QQ_o3I(R@v8%fF+EWF}{O zljidhM{>7YS~4|Y?iWbY_;)(R3Cyv2@ohs}@KW*Jy4#lt&B=WEALv|!WqJ0e8B&hmEL&%=z6e1%qEDT`V!A|$Pv$HMcrA4pg-w*Bfxxaz>Wc{p2}id5 z`cb*V?vzlY>r3mWI_r1IPq^JdM-AO$grjNZh(JHfs~9s&&C0_cnboZ3=qzoC|PKjNHCTZL@S&R$Jq`O$?Lep$fj)$MZX5g1EmD7%C zGaa`rm2X+(;2*JNhSh@gJ>NU8q3wR0S43vP$kJg*HO)^{erlVpB*_aG5o)q+YfLle zcIwPd)+M-Dlu=X0tXE!&TN6WeVEP_}RVPDCo@;6&rRRs+2+I_XSIY7+>3=WbDl`Qg z6ncl#KH>Y)v`1N`AHQCjuX z`TM5GtBP&=4CzIH*E^t=COXBNB9TO#7+376pMu2 z6C3^3b(341St;32qM(P;-eK4CpOybi(En+5uHpfs@O;( zHg!Uw2b+>woDk`jDv<`1rbsO6jX#jr)yXO8MsBB}AbrzadhqyAO`!eE>LhK67q8G< zSKt1F?BRJlQvL>^g^T>ZmPnq$g~~kSccxoU^5x0v%U31n#lbH!7q_#Qbk>M}+G=Eq z3pqFl{)~8#)R(I9U+H&P7H;h+eR_^48k|cMzC(gRixf|?0fwb&r-h}8HTJ0Tg*7A^xaF zP2r#p&xnBwf*4p#+G7}3MtZVvh89e|e+eBNGB0AYqP$1enzO1`I5h#oQaT=p>T(RB zfD1HQ4cAQr$?xun?R#=>@H#|BD&`PTgto-gG68b4+{n+xian(<^T#>si#|HNVVV)s zTr_enBkn^%F|{YdG(7dAoL~<=lViF}c+? z=hJKDY}N&#VvPEM@C|2ErfuXTXCU|)XpA!lR$2jId<0!e;VJV#gs3I~X?oADe}GM_ zF|L)c68;vQNbjZ|nS%>#FsVsX3)$-Kv#hX~78zw~uM4eOoF}UAaIbxkAVTVav`EO7 zqHqDdS8T!*+^!Odg^b?^1!SLeD`Y~8${8F2(x=XkZ<(T;B2OJU^tO;>mn5tY3 z$x`^ra!QZ`ALu8bPj|;yIw4$so0OGQosp>bk{L{}-Ek-VQSxM&Tm9#fgzJg2ls{Rz z+~6M}{^4)BG)=bYzj+8tJTcfR&17HP37RUNS%i)`pSFAiWHb0z=XN);vt~M33scf> zdbl|)J!m~Bpqpf$>7PX(MJh7UwI>BQ>B(C4dX!r#pxn>g-F zqK;l9@|8oNsmG%u6z(8N*2z|-SPM32>I~cH5f_DwzNO8ehMH|>d>e->3#tx!l~fp( zN~E=9xE*P?GTyBEtmC-wVn3s6gexPO65eHV5AWwN&^{0>CtvntWTVJ7yH* zB{B`DeVcDoj-Hr{435seOGI}xJ5N90sleIwtDJwlWY!%W9y0kFnKBOODg!kgwEWYh ze+J4%J72>i^#xWrn4_@P9x5U>M&?GN4b>$pk(>eo{}M#>S4?)?219q1W(thk*9M6( ziweC@MF2%+6Sh{C-b{mX;}a_msg(5`-`U2hfNXuOd#oZ(?X)5>03}JKLe|=ok20H= z;(_S!YS%rn1L=)2&Ee;ENTACo*=FOxuTgSFl2jRG4q4mWa&gaD3LC#U>c|O5Bz|I) z2NC2_;+?LO6$SP5%=!WS)}_P)4I$6umfEq?)I_|DG?pH66BWb7o!}XE9^D#jw3#5n zOC#!%wLtKYguFv88FVNcEqN>4x-uO(1cgi5Ah0oF^I!FYBvrWG>|5!3;;prfk5WmC zD5}`W`U(-Z_!)=_m_`$Nm3f+m)bz&?#av-}Xud_>a#;mlox`=f=8I3bWFm|kqU?_( znV3MXzTbT!u1z9U{`=gobe+nm<&y(l%cwxv?)8!-jVfMBAf?YSCmOr+!yMmR%eIBH zDsEn{&C((BZ_fA4J_t40I7!bE^Rg_u+?rIS%MCAxVE2cTMXA+h{p^Z`A?iWCj~Tpif1+pnI#^rv(5QaVGY^f+Rh)g#kuZ$0U~I^VJSBA zO{}!a$|gta=B89%eq!8W`ex$jP&RAiqKhuPz|8Z^YdqR zi2t0R4B_R&1d%Vzlq)Sra8^85S#cGa-SR$(uuB!hN_5Cd*dd;>b!d@qk3Bm%Uo6^* zE?FhF`F{YdO^6|*3#f;hwJ5EgL9uBkJ-UL09jW8?=iJvQmZa-K*^=^fcCXyU(aOO; zuJHqXoO38R(&Rr#eG{$J3yg7)_3J~rv1d$ekk$RLH5W!u9QL$I9G z9X?S5(~*<~)q7QSYM9hh$iZwOjsxRtN`H~+lzg{ycoDIZ);;*lo$I^o$z^D(VqinJTd9+kPfgwXf({d ziDEUSe#Gj;vN6!iI=H`ErVF-y>EZ!Jm6%;7jqz|#ttc5B<}18X@3wlJsP`t#Wb$-P zbGR|x&|_7$Ax$LoA%3|gbjfK(c9!iuU=-BS-q>WRnt~E$&{X~EJ0vyBoFkIeN+rdU zxQq}-$M|!KA|NiSmsym2^BSK^C?}_U6S#KAAefv}F$g*f0j9-X(_)N^)g1 z0?FP-Z&$7+c?s?*^7^E@AWbYUxDdO5jDilG4Z@$<6_V1ZVo3imhcljpZ}g3b2Z<$Y z{hN9jI-HywZ`?Qt^31VW2nCrX$txJsE=bh)n4Fjl(Oc|>)aQA#-cXD(j>3Y>Bd=45 zQ6ofgi|E}*5kfpmvRkBWR4?;BeU+nJp?|Sa^J^lRwq2Ir%?z_E9l?i`*Iq-s594MF+bu+srrE-DGyGRoID?#r05g zRN~4U%bfdM4tV0#N;J3y z`eI|apRQc^2%N3qymmLch*MUggrq~Zy=_?3Ot!?EW~^;|C*u7up}Kj}$uKSLFAe&y z4MnSU-ahxU`Ver?^fo2^STC1iDE-GuvN__=AyXS@ycN^wdRGqFbQjN9mzDdMcw5#oN`gl}c>Hc6{Ig*t@TboP@vAckdgd|9D zjJ1C|i5xOVR(|U94`>3e1CTHYtq+WM%>8{n-GVXd1#ERWMN~OxB}2pzmd%SX1DmEQ$I*zpZB@uT zoJ;P0B~_ybUyA8yS_}|cX3PK8;cRz_VBix8<*Rx>9N)dC@Hc9XARYdUy?I0*gUNsHVn{%mw z`UTSYol~5pe~4efCDU2oFR>xg#dJNjtL|P}%f58!z;sm6H>Jcp#Scybj=e5?Ns~_4 zJ0y%jBIXs6n_yD|<8`pP^*qi{KRX~Xrz^-08Qw(AA{sol1&I{4wAc+H%d3{RQFlb8 zb388HZ6Pn^g?@&``Z1}e?$`l$>9qZnHNDk+{#^F+k8|2%_7^M6kSzL2=P7XiB)4)C z8M1w_OO~A{HOz@^u48IEM`rJH6^;gus?mEP1hP}P`Z3PoAb>fiB=G*b1TCACfs>}?|Otwa{YlpH(6_LAxsx3M& z=Lyo5XQWb}RarWM?*e%xu1lBx=k8_6%<_;Rk_xYIKhu>&r(3iq1Tx-GDVegf=clV? zQ@l9pk4QR%#ZB%BoEk_V*a&y|#ZX=LdkAJp6;)nEFe)E6_gFIj9_!XIO1!>+w1Y)C zG*zAvFPGae$Ft;RT(Dk$Gb0*ouQIuKe3W{dHaIgO&8lD!IzWeAiwfv6riT38xO%S}-@MGU#&EE6Ys#3QV6bo%J9YIcDlnSWXNEZVERs%!IF0B9_fnC>`?)k zParDCISkp)vL!YMJyOJFAK3aB_b8irm*t997Pt%CQaYBdBQOVKS`L$WKj+VOM$|VW z1l;}N!Iadf4BxeDrRW9r-KfL8_xVJekSk1<}{Tr8nmu$>F9 zUnFB?h!$S>gUxo9gOnPE8@T5fMcas%;w?@AEj)^1C*co;-|faU^EFSVil~0>E%Vl3 zE!<&iILwr|D|7XU?$^c`$4};SIhtvN45yj;5pp1?AeK8T1>dZoIF7kX~Lf@y%vTc4NOcC{tU_&yQy#i zJJYh$?&=9qunbdbA=n|ZA>P6@pnlngRm#<)%pLQy|;>QGI_&>Q#af_!F6$K z8<|L1T#_`!(iB7Vc5J$jGdp5&M0 z$;d6&tuy_lkJ1)~^EHag@ISc%^vVQsUY7MowgJf2Z}iCjQ_S8{fv^7q=HTB#_eR|K zKcrKsRG$C$_kTr!f}ox9r)`?){>m8pGTlejrnHW&sQ4wWj*p)0_|q?`i;=N;Q@m97 zzUf(b!Bj(KZ^nLpS~J-a`xU~JKFJ=<2tOI6yeXKYY#lCG7Gg(j$ZVsszPmeA2PN37Lr#T$tB9@7_s_JJOwUY-om#E%gqGxqL>?4wlYP=a1E~n_u3! ze;Tf5>ib_@nvFW<_b6YC3v@~R@G)V%N5>-j6k@OT=~cPmv9=dFmc8k{>t!K5<6gzMhUr+v+r^R$pu=EycH-wddNF== z!KVkwI`&^{pO|A6bnIDpnnBynz&a1lpY%RPC+1h{S^rf3*lJ;nRXY=$l(kyNPK_#< zREt|Xr*V1ho^a#fN%SQKX?{le-i`!RF!n#Zy8lgZHJB(I2Dl8u85vx-OL|fv96xY z?3ZqcWO{aZTaM={#%;SQ*JWR#W9QDLdP+3cu^xqT+{XPncI1yBP3tTj>wVyzCpuln zPW%Hd;VP|iGzaz5L28h$SDeu*j9vhgcd5EUs zP(523`PtQ~yq>)XNO!9%>)F5t-(A*bIw7Z!_x9U^V{c5=u}kqjF=J-wS(RDuJ%48E zSARVItEE!8Vk~UPHkF2FnVJ8+oWy?PEUZAb4;zO00$&BG zUUsptf!zZ%rF0fnVZCqc_p%liGBeHXZMCrEI=P9}hFjR@Xivg#ct7P>Zrq8w7Pe>j zcU8T~X13;(SA74b7Iv&`Fb~&T*u#E-NtY^H#5${5*vg;`_XDSetxrmInK0kO-1LNJ zr7djldw*Vcl9|ozmXi>Gd1+sGZMGrZvs-HsatFHf;i>9Jze@Vdu&~4jei|d*`>*nf zZ86Ql+U4eYBDP}wisuJLV;_H(%rZpGw6JRnGh7WLENq%HEAD!ZnN?evrfz!2%&I>0 zR&`KY*ul;z?s|{S0yo~7*^yLzS~KD?8)T}&)GyXtMacd z|F=_Sc3kgq7yHZ1^6kq?xOoG=9}>v@ye;hQbKj)g<`#i>;1khhj78{Iu9-cppBZg}u5LzjGPb5E(*U?+NSvvH~b3ZGgKKMy`hS$Qg12qkHNPd8>MW$!O zh1IkO`wMxZ^&d5}Hv3cE+g)<~Hpt`npxC41r2c{4#5c^_y<$M@bkMD2oOjI0?h;Qx zf7<5|NeA$g=T@gzu0i(vzPhAF$u-Hff1NAy2eF%twC0Bgt2c zPkc06nD6Wq*X0p%|CwgiLY0%4-vPZ*Xk(eX5^kD){_lq+e_Y%zN{RSJDm8cf372aWVF-UY+8} zIShTS?#r$N7k=^t#yFtgWFH_$`xg0d(-SkR-jTg~w!tjE2QKV>oEdj;nuYo8&xl)% z{go}Gif@E*w=eOE4+f5qUV}c14tpon{$OVP3V7mv1^x4I<8WWE_}%j%pKTlw$Dr@z z7frCR09~%T>p%9ko0_PMzU;yyeKS0wJIP&k6w8VLuANoLcIG-H%p0rO`$C+M!NoA9z{y;7Wry3#NCiLs~qXDWS;0NjLB+0L;7B*wIk7fw?O!^1D5?&lJvp3^X5>`Nt z@^GwX8x=cm`GI$|PVkNF6vnww)Z_jG_LFepi&=~Vex9fn5Oex7?3Ln&LJ!FPfUks` z*jKp)>8^3WZSp^{j$*gHG!GyrWjkbhBJoOg6R#wv&@1{~TMKL5IyLbRtY_yRsjmO7 zO8LNZ#K$-b+v=B-&ecTgyk&3GzK<{DR5{ zu+GQ%H~q26X<-M-2gdtAZ{qF+#|*^&$UZ=CPyUzXu5s7Q41edk4ux4*=N6gjYLz2| z|31>p>IeI)9w%B@`RG8+txp!Vs(wzwj@^3WMgprvQyCOhuI15LLyktKLb@)_L;=EkRy`QhZy%kAZv76?z?1!m~SEUyss}` zk5?t;P%SdEIU`dNyRNaY;)cXu9p51@UIDDa205RPnO)58SbYaR&+6bG)2CVlTfJfb zS)W%Hc5&`#!?VB$*8E(y;WzASXg)7~0P7|G;5m98@5yg)f_{ph^RJnCw-1cnaM!|~ ze#tQ`gZ)V_aB=8bRRr7eG~GSEcm#X8CWu$S{_d>{h=0{2g1wvRl~m-R^b;1C#XhQo z51UgGQXtQ-b%99(YMa?IReS4v?+E4|;ul{OpLaUp@=HH&W-|r_@HPn+_SXvRnQbOvy4plw4G*VQR>u0$1?ak zYyIQv6oo#i(&Bb@HM4~$yUwkYY7y~7{s_S@=zp;yx$Z3ZLG)a(nT1qRdO}rEs z@3~=O)&I(J`JIqBw9~@gTT(s0VjS{+%0#e>VLp5s^dR|zSFGsCb6yp7WUPYu0B{bf)zgzq?&QS!Zx%> z^EC33cI&lS(7kztz`e&Nwr6r$+BH8am@kE;OI5xUn`Q)8Q1&>8k*ZaJ@*mo*@d zD{@?G@cjG%K}l0v09XIrF|*$t=@&PM5ONOvq4*fj{qZux^|^_ek^lAH#JUX5b){e( zBp3KS=}p-Pfdl_a|F|ah*E(!yU_bFRyJ4@)`U*n4HnY)qvrj~2MTZ}Q$E zd+@xjf_F^ZBMY0;IK$l>`Z#WwPwXSeWvwEaO>cnzr?p=3ZJ)q@`{Z$5`6+@O`<&_- zT|a`I`o|~cF6^|Tx z(Fbxh`9^9&0gGAC9ds(zDKoKrvj|rG;TT8H($JG%J?icCrGNDnex0IUSa*I~dcsT4 zkL2yR^bd3vp@*NC)vX%#$% zy|Aa`A7kFd4YT5gVLW;c{2)JKlS#y7*UZAtfF89h7^IqGK-{401N1t?a$JugSMBD^ zeColtexFi2Coqoif21D)dqH}UU}lf!=EQAkB=z^PTsQFf%<>%H9*r%mW7~k(7Y9wO z|IuKLFZe`$Y#~W^;B>*BzDYeYU~m4&j{DhY7W={HBClc*cIqqagn|o?A@38P-DA1Z ze*#@LP6&u`heoiV&AIBfli){w4&sj?FNEV)r5^!2m^33Np%0$-U-vpTB*h}+sDqSi zkJRfl3tKopH?I3N#5?bO;*!Bv$=k0}_5PcEd6Q7GY;FzA1mYtJ^aRE4n8qF$i)>>)b2%yI;x;_&_)S z|IAh_!*COF_qeSWiydkadaROq0=>@DZ`x0#2)47t{CNuhX#E#t9CTkR{MubwkvIB1 zjP>z+b?2mn3jgnWINLn8Xl&M+FxI=#S3{W_p{(HQuN8Mx(6bSHKN_w#)w3Rro)tZV z=R;3_NSM}LC-iEKj#VrEIdS}9J?lN;R6&DqOUAxVytdRDCeSI@AvT9(!8 zljqDdExYzxA%3?7-YfpZt8g}~O^*7`@o+YDL7-|dK9Ag*FFr6!%XS}+xt;brRM?x< zVQkDl{;?M>VZEUR+10to(<%9gyI}%1$Ld(epzOGRI%wHXcT(aO)zgc0W`_!YrUmkV z>k6rK@59A>pOuv{N5qf56e0=Kt23nCX`8iDJ%_Th>+sb3ew?xm9 zSL9bMY@}l~d!@Td9}Hzt4GYI!nij_T#=Q8Y-3={EYw%G$qK+*+wpAo)S+6j{tz7-%v7=0YJ`cr-=ASDAi<9pe-tM0I5}Lzt97+vUTZju`{W(_ zmpY84RxGBPh5YP4!-{HdfL~>5q$kXH9nQ{~KP7aF)v_iXKfCjH(6a;Qi)t1`YT1_Z zDT(VEAn&W>M}xE?zFDdj{%uaU$Sa);7kS#pI@a0elVSeRFt#J<^ORYgwanu;MO8XX z%j)&p8v66xFt*efz>}|Og+Eb3%gmRP-Djq2#rQkJ1>d`cvGMPc6KcNG3VJt?c~gUy z{e9$J;+kz?Y;@Q+^`aQ$OO?FW>~QA3UyT1YLdyp4Dj0vnTgw(K&abh(3=@9srZ6Fg z>%xSbHx6gb>*b625Bw7OVXdTZ7_0R?gm+vU#zqYJnz(09n2^UYc#Y^erA(PHR%y%E zIG?_Hk^cl8@3!}-Th`Y~I~LB`zw%G|3caFy>oy%*ul|kg^6Y_TE z>Dfi=#vw1h`?D+HFYr;xH|`E&Ba`37eVG!*E+={tR{a(({HBlLA}@0U^i%RN0a}*t zLz?<~a+r)$b*x0Y_pa)n!&%|SAJqFd=~z`u5zW!lVQk30L(^(r3}uZAe^*eFRO-TsQ*!c--`bYzV}MX$JVAmj!gwrA%0rM?HLJi*gwUM zm7y=)#y7r;I>GX5A@O^WpC$X~2xqmkOF!LnH(baE^3JrbLRv9D^3EluUYdU3S}3bg zsA$X@?1S{8r%vE^*Ko0~d0J-pcYX8AzG3Wrv!b`B+qJBId}`vz<;~gmUp^$xnHVPO z1rI}6>)Bro_dDuY$JvWqFOdH~GA2K-UQo;Wx6AUZ^+8=h$=~~8{#$7Y7eT+8UD})8 z_6lbUwx%Zh{&bu&X_^Ci_*&N7+f-526!pSv0P7jmzj(}*C*iC>xGH{0YdxFZ zC0YHTLKvg`2IxV4hmV$ZI{!JL;frv_a^D*gfg?oU%{q~f|3%MgRLSyUn9zprY2Fr-`c0>?Lovk3+2{CrWPWuI4g0O z&YnnYI{ymn1J#$jLRtIFPwo!DS<0_xhYP*isFnF%sTU=}gnvFFRMZ1TqrRd1ZV2RT znRonIjb70C?@)n@Gqh~pig$61Drs4dn<|ZZR4D5Znw&U%j+CPwS{BqcIR0PYSkdcYa=r5*t) zJLGj|zW0fpx1&y_=ot!IeI{on92=}<>!UxZXO59L-6~wx=ky{zg}og$G1pTA>!ms$ z>@n44vclOfb&K;*tb^=YxQ-RlFY9;79nP+Jr?`jL)(Jg>J{M}8j~9S{aoh0C^Uo0Z zd|92y9~TP~diNz<)DvBLmOk6(O-XRL#6u54S&4DE>JNjZ-nwO$>kxv@b6Jy3%XV~X>lD{FNI%1@ig*$*C5sr^KLxh!#5)TDB@Q+ z|1kWnh98@a^#{-OS7j865OodY*J&Mymni>_JQL-|Dq7g1j7bAdBG0h?Vy@v6{L+jw zUa?ydr+itTrQQ%N^U+v0;SS=nCSUJNI*+^_Lgfq9)0VEr5dJye&=ha#RdK*>v|() zd{q|ta-}{RX<^NMGvd}`f0PgShI~}gA8pEFy=&e^S5HA4U-XlzL)U4DvuD-r`>8E{ zr^J^vkS}cX6F*OK89>lX*kBEJd;i44X{p%n+ik-dX<)O)(f-P7w8yR)juY{ zAN8JVDG7FbPyPVvij?2?mHEux7Ix*QK-LU&$(tuHFHZSRJlDUhd(**i3%gt)TYbWV zc)U@1*10ms>xFvr%MFl^SRKfFgYHz1`XuR>YyMvy^H$Sb%P)wxDPK`t)_ZDO*zgfv zF`Fk_M7_ABh2_c5k}jS^L$+De%L>W382hd9(i3+F^Zh&8C#Gay86R%6u=KS#hJQcE z`T*i_;@>10zj|BPip$yRqoGos%Oihg3UHpefVfG?|J{;#7CrK^${+Yh^%BSh<>T5| zSl=DFo|zM*eiW7UlSNYgn1%h)HP!tV@=N(}$SdV7&8Uwmbv-;!xLQT#H}Jgou`VY& zqdq}-eDIyt0s2v10r5Q5zmgy?%DxcaQ68eBl*bAdkq>Pul{~PzICq5AA-+Bw|Np@tTHb?RMrndB+h-8b!jK^a4UDV`i%Wp_oc@rI%K^G>m#{V z>gh@y8uCo_7svtCK~SF|I=8b3eeQ<5MTN|d4#@A6rlAvV{r-dh=aVxHulmTmKH~DL zH8T=e80tI4f|AYw?+CYoe(*g$(nqr&e68EnwIdn({pypQun;&!_2_i)t;3@GAAv6& zcfTok^`ztz)&My(+>R1tl_O$iT4!OgRX=Nd7nqg`dvTSr%)3(nH%EkHA?aUb)z0b zd$w#3I!`n-i9UW>*8hu09B(hjJ@}(;PI_=i=2I^Js7I53_*}{j@RjPeBc%Lee5%vb zlI#Cj{vNoS$HzO>vl7SQcT`^joi_L*8peC-r&uS)fu7!-pXDAf$iikHQSoo!GvOBa zMEwPz1Lb#Iptn+w!F)76@Q3=9fE#&z5X-g)#5{%ECvACIvJmi(@?5}KsuMjk3wsGW zLwbO9m{UB4z-6+IdP(Z-f**2Vi}KYBfSwIe@EvxU>V3fPJh{rV2YGcUs*7R$#P4dr zIi*hkbf@+9mV5x-(fs|T9d9P}dkE;+%s0tR5*r>{ZEMPcN#Oj(94dHMysBYy$wqrMg3!I)s5q_+{W&i${< zD`Otgm-RpF&Cn_tiN49Q&j9*HatS%3IHTYXyGQ*lQ-QZ-Gu0O$H`Jd{&%$bUUw9@Z z-6HG@_Dl81`Vzl4%RUw0FRgFuk98VbP4=q~y(Rkvx)JUIXDR<)R_4hzO5D0@`ClIT z-eFHd=s=6`Q?YNt59lq`Szvdlj%)#)lzPbvSYWUu#u{)YoKi=bbW_lAAXv%gf2 zgdP&k)P=mqoqgRNIQG&1X4jjYQRiOJCAG>1)amz48nomO3;W04SJf{V_Cdkslns6@=%=-zp{T6ZW5nQwHy>guB3{e=Y>XN3@rH3!nq}uaza9K%Yte zk$)$@40Or!OR4Xruk5eFdh_&8)VpNe7WYmw@+04>L#Fg_aVG?z`GA35}{;^zVNt5We zN@YS`{Efn1CNV~O(w2$wiW!C6-DP6kc#iV_PZ`^r@nvO+c1Dq(tY8#=#dRj)2&^l4 zpP%Nr#whZ4M@_7KRUcLyb+x>D;<}BQ9(ATk)XOdyMP9s-QS_lNGYWqe=)uNxReJ-fJ(4Yu(< z?e#`>BPGLAxw(-&2}*Uno@!)aMg4f`14a?o$1_n!%qRI~FtNpt{54tc8KXXgJ3shA zdR_wjSLznI=tETM7V}La?_+{}?VIcVvyEBQpUN7Aycac!I{iN&&yAH&bE_CxALS4A z_2Rqzdkn!oRiy@%^8sI}Pw_STA6=4BiTXe2tn~Rlz$@|fp;6S?ZZHw=g03p%FVM&|Ji~CcvQgmN&$6BkxuUw{ zf9NY!>i5_;)ukZ!RF8+eQGFQiscr-MQ$G~;cW?7BU2rp_=(F%K3S56EzXv_Zu0CU8 zpCyf=o`v;Oy$SQu{?NEgbvwML{yRUT@Ovs6#ky-4*~|Sts$Ij)q7IVCSRYfaYsG3= z@4z~yCVD5$!S87O7>DHip-K3`X-w45Kp(1yr!et-CKGkvYfRQF85=V%ShF<}aaC_` zUULZ(bv5v>%llMySS^!~-yox`yE2*Y11>1~g>_K9E{cghDD0EQd7f7%HVXTJ^--N3 z^Hco?@6QH$C)GP4>vMQdeNNE-rw6@~hG!bt&8;(!k8nU=a(r2>3=cL;Ef!QQy5M*N^e8750k%0Q=bJUw@Y12f3YAZFW`Ah2r8uM)oRFrTPo6 zR7b|Tsb30w8M!=FJz=M;a{;$R{fUYER!_*!>Q3?V%|`ZoT=|q(%rl~1s(TJzseYt3 zO8+0YqVx~%g5MCC8n?H;QSbx%qdGMBNqu|1@avR6$SLik2l@|`epT3S!g0_&PcA8M z47sL0*dnN}*9&4_fXn1xLGEh*Rkh}%2&3qiYlXNXJL5%mSPmXz;ZWz(uB=Rn$`3WdP((4yi(m0`bz%FJI0#1vg2k0*QkFC zxJGqz?3eOIDY9N24!l<4H0UAqn*dL#AN)HL`5)|);xW9RztfLx1D&bv8EsLvJV3IN_Yvr ze+&;+Z3fPeU)`Mv{|IA zzV**`O&%oW5c{Ay9o9*8Q{XrGJ-`>L--7>??}Oe_-#eb0{=U<(3RoA_H{mx?{K$;# z;ocd{ZZW4BXos9E=dz6%tBxPGqGE~{+jr=@_F!! z@CEA+IT*|?zBY;dIZZ;(c9=x}(eEaq_ve|&drm^%jFR^ng+2@=KLxrG9(Q9bv6Odg zuN;%;pTYj99}fJceiYbc!t-!^uf(0FP3)fLV?rmG zgdKxirX5Og)r9XV^XJ-6w@4#o=H3j2B3h#z*F{7C$c^tp~%=x-AvJ8E6uav}U7k)MU1qxd}-uVy~qq|MkD z_03{_^2_i__NK|L6A+e+&}GA#YS?n=kv^;9pUE zl?C}!`YK>gM0_pz06LLB51gUCp_WEA`oG+`G7C-Yj|F~7FUHHWrz9V3W#0|(n&M{{@T5-9`#q{j|9+Q|U48xd!}tgAf6DM~8u(Fv zX3Sc&5&OGf%}Tu2A9|gw(o7m8{l=3zfuo%nD_A)&*5G99%Juy19^l;7-W^$q%W+b1wTqF=os6M0}4{B@;IX0$=nwU_DG?bt2ZJy9R0e!uy8;kUMCBLA>b+RX^qIi-&J zO(*JxLv-xlkne`yd!yc@;KqY+5&z)*y7t9Y8&PkfcoFoab3=3FIX1jfKCTDk`nq3C ztKv-bzXCU@kEbvE<8s9`ZI5V$|DTRN2&F&nPbU13mWVrs`Nv7JltTL+v7`U~gyw!l5V2fygV;b;3BUxRzU}Jux#>_8H-P zSI@Qf#_O2yx7z8MIkN56xcdgte-Ms&lzsrzoAW&=5WDiPaMp3;*Gfg1fi->RlVs_L z^&Zb~EuPKtUvr>`Yr-7;7ET>%*scI<~QP;T^eHFV#tpL64O4FgLWUW8;D` zi?3>hKg1XtGJSuUHZ$ZtUK&JQA9ZNbC!Bx#wR1?!tV5E%gLT56UnuqN51p{5%drpT zToB}#`iy(R&rr^BK^~}&rFIy*rY#n8sI`H$e34=}>m}v)G4xRBUx>#!N#%UpM+58f zG_v5T69!gz{g;IKuXOD6tuO8uSP%8H)MKJgV+!Qfp071Efm7?`>3_k@Y- zbxgl5Q~jc-LF~JhL7XQns{7x$R66G}l!<=HT1@ykZ*(H=hP+XpcfLXNL*QIv(N)FR z-UnI{Cq(Ml_t0XCHv=z-ZcSm&Uj(XZuax}Ru4Co}d;11f4`Z)N_{OirdZ{lDxIu9S zeoy%|$Qktyf=_hr0q1V1J_))}ehqmCl2h0-%9pM(vae@7uEBTZxz1dyqZ9gwJqEVC zPW6r7FX`C9m0uD&q2Gb>AH5l)eETKjp_F_V`fDg(Z#9ViD#*pEeJSq2V`ZF$I{f}r zpP0srbmE*L@PhiQhH2T(s~_D>2O8wLBAI`PN8em_AwD7y=UA0Ko2dpNZv*x6JP7bw z=_i7Gk^c@qpU!_R(6MP3f_bwYdVxDQ-%EMIE{Ja-ycTv#IahE5_Cz_~2)&_m$1|Z9$~o6>=$}x|XG4CeKg$@-9wk1ga0>k( zB$oyz^m#S%NJ@W~9XP7=FF}r|A7Z3l^sj-xln00W(>ZG3P@#}QG07cpUR&wQOqTZD zsuT7Oufjjou`3@#l8OO`&e3^XocC4E{l!Z9{-R@az8UAAson{{g6gEub2|3}xh4Az zJ5POs&{wkCiXBzX|4!72KD&7aHluh^_AmOt=zJL5;|uyC>^I;U`5BO7@?U@h)Q5N$ z=aRE=ZWiNH{R#Gi&O2$D>{rqK?{n(2JO{g>_=k&RJ`en${#4MN^4tBGn71nv{bJB( z>JLI6$)umXVl0;ojLzi&k7)gnKgzQr-$;50zk~WDebLXVoOdpz7k2X&&YROYVc?rm z-+mh|^y(n`2u)tGv+6T;Yj5HBTAg*mU+AM3=Kv9IP@Vfc`qbK@PaF1^{7CGV`u2gV zgj<^pqF+XlALYDTG~y_wZvpa^M=v`690|YaWFfXCAzajJ;UAHn;(R{QvAtHDGcTxT zcYiICl>eGeoT~tx=)4#B_4)L`l}&F*96pME(t$w*7ter_-m{Wy?oI@h*T z$7(eS)Qoh)F30$**1*rCyu&z2Z`dD-%V9UD|LCRci-P=6-ls77eRdS)A4{Vj=v_h0 zboBR9KTjKZ{@sCoROMVY_Pg?+uc|lV2kI|?9FRXU9`+}~Cw77=Z{4!b59@MyeQ}-p zh<;?{+$rcs=giUnOXsIbz^*Fi3gBN-e-iM+JomFY9(IfBU+@D6e;_ZEKe;UPfpx+} z-3Is~{7v)~DSfBFMbf+H@UN6}mB3Bawe})VE7zzF==h@-+Qho`1qQ2BldN%u6(bzvv=>CU~C4-8@R=HpheggPHdFLo8 zC(xTyheFttB4I3IO}3$28^i%U(f6;|8Rb0qXlYkgF;Vw{9GaY4I+p0F6Ltu4PxU@L zw{~k#Yzfed@gWBa75OB{VS@(2Y&YbZ>YfhhvvThIBopU# zn#jDg!yxkg*eB&ju>ZdzKEzcXOJuhfq|0d`1<+wq>x1OCF;u3IJUr7vJ?&)i4-RBGhs?)+A3 zJNzrkqsB{r5&q+*=K-qWcNnX3R(4?UnTl2$)Ck|guk$( zbpHbUO6tEGq!WGuaERco8xz!edf{kZRAKwJ^k0qDuu1Nmc)|0(Se;)2Xo1p`MR-Y7DaU*7mqC;Dg6 zKmF*$hs2go(ci4}>7CMvd?EZY+An@jc}t8(_Wy>CZQGTR;CzJpK$QC>uIhw84?G~d zhj~a}@f`I(Kf`!RJagv9`l$YrE%Eqod5;O`PJM73`ysu>cuF54=ArvIGT?{MxhH9F zFC;uPwQ=SKL0rgX2A7r-|%6Jm-Ltfu2;TZN$eHWlhZoSWjZFrvUOSvHL zMM1nq_e-ScM7()e$7a3y>{)$L-rs@OynRzY{X_XV_CxtXmF#1`1G@MXirs%&C;W5V zmqPXi{3Uzyhg{!D$&YSfhxWeloEV6@%l)7Bh+d$$Lgo|F_Hh<8`ArUx)V;XMZt@KE_w5XDH{r zs^Wa8a&JRflgLvpH_EunDDoHQjG_*T=dVwG8Cd!uUYp~5+XqzljsNAWEAn#0@S;d`!!JKr}L3rC7-Z=I>&|ekv(yu9;U>* z6-8bIK#%MgC3c8w3BS?vW|iKMH(O*7e>f>d@s- z$5HMfxoi~oP3$m=`V~H>`*k|Xx=lTk;0N|kab7p0ILBy^pKp=;YhjfAxTuRO=R)S9 z&Z@*&Bjq|wsF%2whb(`Iz5pek5ijNT6X>PbTg*%6zmLo3i5Gu$oz2!*>?cC zWWM#|qkc1rb0NoMy*1Dz>WRPs(zlbCPtjw@E9t{UBcuBS`j|vN<9b;yWXK;Y^%N`Q zz8U(x8bB`k;#_{3l)FkM(HDR^9QDIR$n}GN#CIm?b_RMl6aBGWP2#*S_)LAAsPmHk z0gouoF`_?2=>t6~g?`&oLL zM1RW=lejMjcqjVRr95pliavnDMo}jRU8s-bFWDbqhTh)BJruc2^lzg+PW`ysWL;zi z>`|;g^TIfX+!+bEbBxS)c#dH#)=lSX+L_piEgrRhC)6F4dfaF!pIMNrKhggI{iS#y z(j@AXsLzrAj{W>!T`u?ke&i`A93Iu<{C-L01EM(bW4?oToa>X+Vxfa8_ttF>isH)o zHfu-}Uolt3?U7M@;6qR1y7E!n*e}Z!;2*`6IKSmg2PeI08O4>n+Qst@uH@UAcZ%ZF z_kYhJo-;>r>Ss-N@a8jANu{PaxTB{R|NXjye@f3)w~lgf)oGvjCvzRVLfIU{uY02S zl2uuTO>Lui_fSt{VJnu6j$P-B_|x5>My$-oX%(9mCk?65T94r=iv9<>(@4& z<={ITr7il5eUseYb#SF$$FbbON#D4G6V9D<@Y!R1V-~M>@YPXXs&SxCp^dm#?}>wF zc;zNu7#78q^9Whp9Gv=i`#N}ax5u-|JBlmkb?3f!aI$ase0f!srWe*@KH`(K73-wu z@ZPJBD*g+eU)bK8WlqOD%6$)U4o>~q<)S#n?_;oU<=(E2QQ~>5oAkPn;CHjd4t}7! zud0t*{yqxxEBr4R#kbr1*c+_>RIrLSyXfF_&%_xAx7JrBb^R!RH`Ku=TXQ|L!8g+1 z!cko5_Zj-PgHu1oBnMZ{Yh=fRugX1fSO?`jz^BPYz2p0W?_>v_JGc@D_Uq!H-`7iU zaPnuDI5_nkKrY{$P{n@&Unwr!=HL@H`Nn*n=-@GRd^P_-KIq&V%SV!tn-z3)tD<``?%gR|zkLSgDD<9CrC#mHcE8m2+ zMBgb^A$JK@u@1MDH~c9pVboHq*xzm|r@pAato*Xau=D0xE1&UI=!o%2PG(y9zUvp0~RmG<4vXcDwoMz=I*Rwqb zF&_0HZME`lopT!AIfmzy_0OO);-LL&>L$rI>__3_Yw(-K!K7*NEN^6s94WkyeEF+J@J2reBEc|lt+So&^VwQoks&5 z6~Ay0zTcVd#kANrJ%@czzv+A{SL(haPYL=BnrjvI1N#$sB`a6_NGCquebzfxy_2A9&q3%y&pdYI+0%CceEa?lk!E_7xjZ<{5(A&JN74VBp>>4ur68$#vfl?6m$1eT%mIq*cZ(Y9HM?g(5Y2>znJ7h*uQe`4&;;UG3fKWvPZoW z@Eya?2r6W(1rRafm2I*`5t|K68lij-$4&M zeesEHj^`D5y>iw{{ze6?lhzA*(|xm$6Y@(S|D+e7Yig66xGkU~=_%G-y+Pofa(M3H zc3)Np;Fak-S>xtc2TXk(~PQDocNSzk}cEvnA~_K3|rb zmALdbhgfe12fx(#??*XU2j$&L!B1SBzu_f}v%b8(a{Ukor+b;_U|k9>#yEJ$P>*XU z_CbDXdk1&#^-_&VjuiggNC&6B+wYOWZz+uN3)y;C^@2a=@zxx~tMG3e{MUbdH2K#_ ze-r+#f@2=|_sTher&Vx^qE?yU`D&pXDZ$}@{q0h$kx2+B#w`&~2 zPlR7fdAJJjE0ufIIyp$bCQWs4%5&ho5`R?4jN}xSeU9W&7rkOO!q0bX%u(Ok?%-4> zho9Z#xF@a&{LzL-tzjF$Upm*^#v%0W7YC<)>wXUY@n&Y?c)NoiZRDMF?R})cQ_zY0 z4Xj(a2QMD{+Sx2OF8Xbx@Z%sC*;jMb@5@NPx|obR#v&du8s}NSr(*y7w0DLd=&bl} zSRdsMT$77qKqF3Ag-(E8*>}`Av%F?|3s)_E{8cd)j#@!&I+BXIe5!HIc|ea@)Pu? z_zdfya~|La(PI_9zoN~WlHb9L)b-O$H#o@u`=hFi!?0e`EATl_j!53YN0O7#;NwIu z%_FRX>^J;=((lO*9-q`RB0u;``6|dK)t#Y-gOz)UeC7JSL~^=c4)ZB>rZ)jnufPYz z-c>DxxLfJhg5KReooVXVR+Na44GkJL{WDC1?!L%0mNqc{wF=$=34rUCk? z)Zxy7-g)vseoRX-zV9;7MTvig%XNec`OGQq;K!zPUlr~J`LeBBTRzCa=^iTJ0{P+D zk(}~H;IpDnm)s6c_t6c+{;We+FUS1U*BvS83;vckn(6NFJd#iB$aeVQ_w+sJM{y_Q zNy%Tgf}TI`ndJ@vUJ#u(ig@ca_)76K^qAu39x{$zkNCGb?zhD{6h6!Z--9uILxpMD# zL6d_AJ0C7|KL>6pXLW0-ehKb3IjJ2qjD3^ zm3HuRL%d^qK>sP9kx%M5#-)4WppT^*>z~ZI=-}esXNhxlrJV?M@Lkc~Nk6@bdJJJ_?SO1-(e`Kf>OGWWB2ax(+IxZAf?-$th2b_e%b#;!3%G;D7J+ zUNI)<72!30NB9T6H(j#v$U?kQyaKwHAERPbq30s6;^1#9da-Bt9p!_7*WJujr@sK5 z$WI(0aT4@ZdgFI1Q270a3T^iweif5b>?@Bm0^?B40d6%?LkwVU~Pr?=8#r(>@)!YbqqC6?~ zm$1?|J{|f(cnJC{@p#GZLXW=g1P*V__Snigc=+NR_XfyY^m(7y2X`edHFj|7!;6qO z_$*TRKYf4L6D2>ju(rgPwQ{|9-m2t*AXk(hV&HolQ^sI_*oB`TXczMwvI}~Twexo^{bKhQxAPOX8d^WSv$e!GZgS4Z+udhhu2 zc)neNcYNh0c24I8urJET_K4($5d&`x2A#>yV;sf59n>L`Q~!MBNZxBqj(Vio&Z)1b z6n>}lWn*0x#}?jJ!z$<7X%~4v{C-7S-dduO|+ z*RqSa$yfdk`y#)-pPkda8{oI1zhR&g`PGB$oX*oXfghs8L#ymud(4Xu?rs-$58qQB z)Mcl9taU)7@N4(l1-@cDI#*jm^0}v7*h#GG(y=V}rF?cCJ6XeK46wtGdemSvo)2%f z;Eol1R{V?!kT1$>Vx6=f$V2dD@0f0-?IK@_-&1@Bdc@z(N^Cq=83+Hz1N)q%A_Oqr{Xuo*g2g$!#s4)z&N|e^DYEEmH2zKov*9x&DKJGi2jh@hY8s(cNaUSKG?=` zKhOih!t>_`<+|H>#4Ev!xH$GSLSk>@K_j7lE+`%7Nu*lBozV}&n-d>mG+A$sUQt}BKrF=oo zY2El8*@Gc=VMqKW-P_uQ--G!nFN1ZFKZEC|9v<1bCghC#wb7A6ABqS)T3gS~>D(~r zNpb61$f1&-2S3Tr-(x4eop;bK>@?(u@CEzPMHDF94Dv$uGEVA6oSlCh-+zt@pHp75 zm&7lOOZYGf>#yYf@>y{^SMKZiufLRctXt8;ec%h_0eaXuo2K2p26|3?@K_Js^9K5p zpZc5BFFa2;06Cl5Ir-(@fsvf)%xxFAK2WX)^w8Gb6=7Lt=XCFR&&dDDE9I{t zAC!+;Xcu|!qIQwbhn$e!fX~DiJV*DQ{B9R<8T5|g$Y9`(lE239$v)S$b2=Xd`6k@m z4m~}C^LKbp=ji%Jio6^2fp7%)NB7HuF7wSfbq7tBIEnGezpD-Ux5`#`JsT09j{+J~7hTBEm27IP` z{|u?$;6LR}@k;d*@P+(b$Qk8-wn;mD%1-uc+oeds$0p!gTQA1Imr{N{s*j*2(FgKC z^$f^2$=M)@!z+Pn*Rnk6qayi&>bag;c(2%vdB8oYi}kV#KfZ*VzmJ{oZ=&KWp#S98 zLXIiFf_>8dF+Snje!K7|3)n>+3GzbuW&ED(Ch(i=2;^?;)P8&W#RFeH`}BPTJt6&}~8cL~^C!UNF1Vwmp&-z{>zvnB3AFXHjzZ%9Oxy*QPb`G z(JNJa`$Bf%7lS{P51)(p#@$Ah3wbB}39<{n@>-ZUQpl63FKduyv`@&#g+ThAvbi-c`uuYQ@_|m z9{q{TGvf7qnBBG{#3uNI{94`D*6xvStfDUWkCoRc=@t97sg2j3&gu?tVB^%spJ@~M z$waG=kHT`?OIEI2x0m%m)?x5UaSq0#yw+8#urrvK;>TJxPWK9Y#^<Ks)HhbNqx4rMgA}Dx|P%YEhZbU5!P1T4 z2A}JXc(14cyrg{H9V@5)5j1koDsj+j8$UdvUj5pgZK6Jj=ZL;Hts>4pY!iM= zm`&v4K}U)^F)zh0HEo>kM+3hoKZ-oD@>&Joht&5`wX0(j_5I>Df%8>uysYwnV7|(H zDfUHi2jqeB?-+;f1Ie~=>dSm+<(7_3#y2@9>S%$FW&I1ki`kW(*rA6_*b~tA_D*lj zcYGiA>*Anvy^Xg}{?Er-jH}!qvf9S!|4u*;$e;Z0hx`zpyps7-%tPyLZsUGk{4_6$ z+C-kGicQD~#-)4?=Arezvp~wXuasfq z!+Ja!H#SY?bN>|baITU~)XS>b1YTo)@|U7*BLDjW^+3gM27Q*j^5LwAjc<-o@f76$ zDgO>Rruz05Sr1ra+d%&*KF7XDzpzjGKU{cT$y0O$evsb2Mn1f=Z|H?Ao1ianp~L1Z&+1s4 z@RMrW1TGtG!cTgfe-qArJd>D*W&IX`fT@`e#M;ZNtuA?ygnD~NyI z>6YK#fbsnXk4WEg`v?EY4ndFd)V&uLZxeK{ zVH0++9)5ShocJWt#$SGJRlUeXo2V-_u~FYc{ZyNX^T3DRGVHZT-u(Wen zFU3b|g}fJn{iS{u$bGT>*%ODhwu$-Xldr)d9}gM7=CYK6gMq z*TKf0WoITnC?({kdjXq}zm7JMUxQrH|5JNlBY)lpazOhAPEsBi^AP{=O7aLiCw^g{ z1HizeAz_ILK`t-CaRj z&hCT!P<;*ctGqZgul`8&P3S-U|1;$& z{sG7@Fan>Z8up6+~4@a(E)pt6y%%i_%~6f-41`5{4mU? z;Nb?~E9uF1o5)*1KdHV0dq#TJ*(UlhfIH+T!md!?RJRjn>SD*GzlqNY7xLTqkl%CK{Qg-!Ul{(=jNgNQk8<*REuN_#&320X&@89G9p>bd zPv+Mg-0S3(jy*EOG;#912~}0@B~FUVo;-Goei z4}tDD`N&$ORl8a_d7sw!PkL>f{BBr@*!Or(_Z$7@6#3<`P9AtYF)?eSlOMU#h&7rU z&As#e6Za`Dnm_%y3XiK4&FS3E@@Sr3U!(D@8!h^9Haq#7O4ki@_c(dj@_eeh9i#c> z!^xgogXO%S1D*RB@8nI}6jl9n+{wlN#gOxi%v)!)SnoI|pOBHBxYaE8(>a>cef?#k z#eU~Ix##rFxSw}+=UWbzg1tOPvgpgo?iO8F~=5Qe&zp1%yIHl&X);e zKo8nqhLhJm_tsr(8`hg#y8OVIPEPkkY<2Qam5U^Gz`AMt)AIB3PM&1@6 z`QeWD+-H_MxuJ7K_H2riEB`NgDd?OxuG{=Iu^r|emZVmBkBsJ}p48`~mPU)`dq#_O zUjFgB^8>zlYIOiVM(};rHaJDxJ0_YN*Ot@21;5)BJrXyst>jmDG=G#+i>J+X@-OwC zxDBJ7qV9zKlf0~Q^5h4llD5Bc@-a{oap2$o_{w47nFMQ>yL3u@4o8Ujo%+zbHhCV zubJBS3Ex2XF2?fl5q+Gz#&4h9gRqW|FaL9|1iuU3s1(avJK@JTTRTBVTAw9a$)TT`zjUc>M6^yXUV?Zj%oM)O7LBu@_ZmGY{ZraScFwY{OrzShaN|MlE; ze6gh8FOnZNCwI)b?Wtjp=EbVLR(FP8k$kUo^0vR%h}FG=9Nm58iF7zQ-QNhl5uJbw zq=!2tAECcX|E(Ec2J0bxogK|XN440_W4tHI~wzvS^3`=$G@szi(V@IA>L?&ZIUcA&2Fb z-7P&0^N<`*mpJwZaLph8-xK`q-tLW|iGQ@fr=ya;kRQrhK~5($tInc<3%`E&i5&rd zX#c<|Iv=5p7IN50${+BF@ z`9G+y>~S9k>;NgE#wIFC7d5C z^%!=M?8^q;SB3!`dq|d!2UcrwcyoS7~*440;*yQB9M%Pi@ z>m~I+QsNG9m-stg+F{5QJqNxJZU;!b1s}+70$vkdLJx%gN__&I^85j^LwJt#2Yip% z_cC#uQLg8Rd=EP1`EO*eus`GVka8)loP6KGZo_KhdBS1*p5y}0liyQ6TG)xr(97^= zRhw^-_zHa_J6u@GE#@a&1@7hfXQW?yrMy5N>3jGkLHP@?!|^}%N%9GtA$%Dk^#iy` zat3(93;cg>F0wSm$VN6|7PCi07LjEs#YidAQ$*wq~vlua7Hj9x)Hs(udOc60gOk>KX zl)JC<`Mlq!+xz`Dg{*BflL4JmEZiS8k^4K zXA^H-5^qJ4UkR5fUoY3#e)BhKKfZGq(5l-6I_q> zk2PPJ`iOKf@i!~=JLS&w^QliwzN0-c`In`suc&uSx{*GbA56MueW!lX@0otd<9E8B zN%`vQ&+f_f)1UXv{FnDMy^rht{Ga^k577QBJ**n|Iob&`Uh+1_w!6iSou|FZ`$D04 zMnCJ=d1>X2`=-4YPkpA{vG?EqRB7j1f3wm)-~UO+K6kBjY=1ERlAU+`SCw}8e#br^ zsdwBT*g5&~g_j)nr0PY_T)boFZ(nlkbNNBXJm(91)^U%czxCno{W9|Xam_f+>JF zWbfN=SGwl+@VhSAc}E3~oo{u@vEu+g?%479pL6WY$mF^c8-}cL2 z`XR0>^uEX^D((FKRL9Ow;CrT?Ik;rsn`(CK^E~3iT)$gsj0>WDu6YkW(Q*IkEwwSujY>O?^%lpb6X7-Un+ca0hx>mk-FJNPlb<@~ zc;-EajY{`>GT!*>J401=-k{fUBUh*1@r517-pBuCrTaGT7r(gw9>Nc=DF9?|61w3{@=YA{NXakF3Eppyr9jo@BI-k=K0XgN;}T6UumC< zk8_^8zxSnkryV!@#UJ_4@BP6`cHH@0j-6NY&yM^4|MXj5>mWYOd@|zwn?L;iFFpIz zB|HA^bL@Pe|K!-`p5$-ydw0BNX6Dzm+RsPGH|F=ZNIx_0g#2m7Wrd%v&4SBz{HvEA~JC8fpvGeZ;w;2zcuXJOaH!Q9bZ-0M3Vs~}Maj#yF z2v!nLYoX`Hf9}}$;CSXeE#lRT*ZeT?6M7$p^fmL3zv$TZHR_UU#+k`?cK)Jc=kYZ< za-UsgpTBlH_W29-g_$4u&y}|RE3R@M-zH;`J|=$1w`Sb(1CD*}_fL{9Kkv9l&EL53 z(uXVE*S_=PzJJMa+}0ob$)DK#vrDe|9mc<_bj$zt^PgVJa?E&o@+TcT-;Q!`{=JR= z=-Bsd$Uo+Ne9E!u53g6cl?kQa{^*=z$9cHE4}FN|Yt#pCdB^*{FPd_1o_G9hr5*1h zpPGEeb(ryK%9WXKxmRiD8&IE__M@W8yf1t9uPg0%{eP>p^zh9P^yx8>HJGyl3a-e)3V0@5NxChxa{0&o{UZGau|Tj{C;-fB4gB z;@SL81L3jbbd~mae_CmtJAdvasSh$GemWgDBIAYK*w;}m-pqY;`z8DQ`>l>UQF8Sw zU+=tR-v52~lS(@;mGWxt`+x0{Ykr6FvAhrb8pl2t{m+hV|2}xh&fg+m{rKVWo6g^> zwBz=~-=~ki{mN^pH$NA8{uN=%*|#XKCVz50CZGR%$KHorxMb&*P~V$+n)=l|FW#-R zh=N$W<#UEALad^_%%!~Xe^+9Nyl6W)e zP5Kml;|0Hmd}DvlsM0=1A)MxU=_5(+e?z?+`W*_+clLcR1b+8J)OUaO8?XBS^`Chk zwWHEL&snT=eFvw4J-_3ad5WJ(aO`tO>N`_@xZcn_iuYDHc3uhfnEky}$MwGFd)yx& z9z*|L)gJZsw?296WA7#%P5nptHuW4!GmcJvGVL?hXT~u(zR3@Fc)ywVWYeji%(&}i z$G!XYcl?JtACh{Ud~4nZ{QXMXZc#s&=Wo-Ftw$)&=D7vsJT%^&OgS^}V{KKMdB^{q z^Msx!f9)$aUshk0{K?YHKc{^(^MI*`Y=5&d+#ZPyc@Ktm$viKn{FwRKv`=RIz0k4GS-L9i_5FFJeGh^7H}5x6znOXVy^ehk zfb092cku63KXPpOBELKc{hoXV=MUYNe7ee(Q{vyuza~GMd2htK$v;2p*v~2FCg0IM zn)kD42hDvw-#7jI4yiZEf2P0xy|$j2{}G8-%8R+K`}V#2vwv*M@85D=CLPIN_IY@v zc^~m9<-+{lIQh}c%lcLFQ|NtB%9H7reOl6m>o(6#xlS{lPrYi=jd(N97pM=-zi0P$ z$KJ=0UZ(#4xMSx(5H1t1j$_~Npq(@6yCmi1mmT}Og7OfW7xq!gX=omE;)6A?IG=w zsgHi%vGcNtXVbqQud@Ax6vxghCf&_ADfOo5w{acz-|2B|y+ONV$}#a|=B2W~saJ_t zQ=Z6Q=JyUbznL#lE9H#%H}fyKF7w=j^PA`Mby9y!QE!Ca3x7(v2+hBw9x?NuUUuwz z;|P;gGLN19cIf?}i;k@q$xrq@FzGju?@c~@jkGuPcg#4zZ(g$V->6^q z7QQw3HO_CoS0(*r;=|03BLA89&?tA;a$osyEcK#^|3vyvq4y@K2hIF3>QnQ+2H~*p zKRNdK7WMO5O|t)uAHHPgnR{(KfBFkj4{|*7objimoa{L6yZ(~jZ4Nm0{*!jkybnUY zH^--*F#oRFuw$PueUAJYdS1Cr`y1*P(SDn9M7Yg+036@U%ck8o^EX%Mw}jqHqx}5n zubdi>qP)@zYhNYbUQKKM+zU~TonKQ=eYd>if~UJ3)6W0Jo5)|G_iLzc&2u-FU+MhvUk(y~rXP^+*!M}ee=_qIIvkr%ilp5k z{mt)T|Av$YuEV^)KzLVMJpLb}-u(F&BVYP#8~x+Z@8+H+JwxyDlJ7$EFaCk0c@EC? zn12VG^f&L>lW)xPY4V+U|ENXUd-^eE{@0{q=e12cWq@7G^j zRp`D=((4V3& zk4=B`%XNSIr{}oN%6EROv50bR-rN04`YWM%19xrv^*vwZcQ8WnP5;33^Etk`ZoX&I zpL)PNk0!m$byF@){lM|e`~RHByl+gu!nA{g%lt0GU(4@Ra6Z$I^PA_8oX?bR;>GkoSep8ocaOX5I+x%kpoZ3b=ZH z!e{aU>*jaNNGCI2gyWm=vcH+%#(7LSvY(mHM|e#7aa=Qxh~t>|0ol)#U)IgMVb)E% zN4QLXi}W||SItVjMR~CEr6|{b5aCU}F7@LX$Ib&LzRmkj->kIrFUb$4Kl={HzIRCf z*3{3`XVo3wdL=uC{(R^?9k!eKS+uuip2#mrzc5+qN%{k(f5hjezf|qm`!o7=-gm_< zJRrZB`2_Tn&3u2#pLq}I#P)x;=!cv7^a=SdG~ani`oZJ}Q=id~G4Hj}uABGIYNXwv z9x(4O-Lm`tAmK3W6Q7&+UTA;JzvDu=H}5lWeskaW$I_o5T}(fKdcxG}9>>1-Lw#)S z&wAv0)bnQEGM}686At@3cGN$i`Q+4-=KbckN`LT0#tZm8A?FLU)1mq3Zp?2lZF9yP`@Z$r=A}wIFNbwA-)_rxiOraaK@nEBc{^k+lA)AA*$za||!&*v)=A1_I{B;T8G zzuU3*sedHpn)nQj8@%hia{u{Hj4y=VbNj07{{hLbb@X%p;nP%K0 z^gBrZRn`wH?Reu1{q&h{zw+NGN9O*5@@V>1gwv!O{Sh;6@;>?{q4&Ee_ga2TK4JXR zcN#wR~pY2)i}Z2tOj&SUQTX}?4FT@joo^t(lW^Lod=M^FAX?_d15 z#1Hj^d5#mjWZwVzCi|J+>7gDp?}1SMOnOk>&F_WGlfI$fnZGIV_BFe{M8CkicSim- z<+;qU_xJza_B%dI{b`PO;Mo2S>1yu(S(Tbtes%oG-2eZ+ z)QA6Q>$#a9a@_ZR`o%!!YaDw&cZL4XS6}(^*x$+hdWD=n^E>fj`sd-7h;eLwH}BL9#(6{U(NkXDAN_*+hqPDbeuDn5 zdB2i!Xx?9?-P8Ma^SdqdBTPH3hFyuaRY}EPqm#DYAUMETdeH`P2P8vR#hrNtJcoUaafpTOQ9# zvYsSM-CxfWC);J|*2;RKETg`A8K{>azaZQ7d+B!FeVc5Lk!9Aa_S1ON?HcbI9$hb& z?`iyc?4MgE+cmy*f4x2lhv#*&UxF+(9>PnH{nL1q?}v}C$BUQm>$+T5Q1V@%!hRlj zv+Sqg(WS&sI9)Wp^6dV*e)*oBC)uut^Re6nI&-7ucn%`+Md4dfvCne)2t!UdPYNcKO`*PWj$NS!(!vvM$H> z$ufV)ZudE|)bL5XX#L=k<7)Zwz1{A=`)hXD5U|Uke!C1vdDxZh0lmH+`?;1Mt!G?0 zzelgXPWF@hrR6$MWVg3`!Y;L31m0oSHD9S_XYY~YRLSQF zb{W3j56I^d?;2k3FUfvVfBITvUDL@Ue^MU9^{nJipM-B$zUPsAr}BsNSdqRJDeR@2f#^+n?=izWjIrEj;?VA!Gy6(xb z+x7e!KZo6RyHE0ip2t&Sw`)D`%JDp}m+eyT>GgT)<@mMoxz(chn+bi2OJlS^L*C^Yy9(j{p56FHRFFr|U--qRMi9f&81N#GV9Em@Tmw=>O zI6i*L?&nJW)AmTuqw(t1e4ynuUyiTkN6LLT{F<*NT<*IhoU+vX5hL-R{t-D|tSq%1 z(DEYngQi$MNa@ zn!Zww^!VCO3&(ezJ+8ObE_J)MZ|QQ~nl2jufuFJado;hwb^A0wSKH5nZL;4RWGU&O z{S2S%=auWxa-rw(cG>S~yWo-hq~&Qr>xTrp->&AjOgW!dmQsIsWIgykyWQ7sm)bAZ z@~h#{^w;>%deI}-?@E6D|D>ms|M2m8?0K?ex%n}>?v?fQ%XZx_t<|5^n#m+Vi+_z6Lqpp&U0()?4Iz8VZw4X-X2Bs@Xs?;OgyPu8_w(E4;t!tF|YXuJ(|+Hft)bp+)69Ra)DE8jbm?`gby zUzJ{ca$Wj;jb}Zso?oxWC+8cIWrHjW<^1V#Ud5@hXQ70{mHjk*wZG{|{z;ek(RB7mKG1b-pIteg9;ZX{ z+opuyC!g=jy5_@lEeCQPr4qgt30J9vBSyAs`Du~k>G`!B&C2#DIj;7X`y@WK93)Hl zk|n-1y<%j&MZT~3H%jukey;g-Tg#Q4H=I6l9G~Pv-G4#i&nL?TXS za@|_~H5@}4pYnYzZyLWX^1aztokz=gP_{=&`1HE6*)J&P4QM{^@r9zx zqw!j*=_mO^!=?4xvgE%$+0QTODYuSnUzX!)dS^*EwBFV0^2q+0?iyd3&f)q};>(re?DzOW z!SOUmcw6N9TjY4NvR~n=!lB`5k3KDOYd+KV#cA9iTHDB;n3uq*9}E9vKv^w)Mz!{L$gq4oGek1rHFkAAPP z#}``lXt=aK)$ndhxHVi_@96hE(jN=x{iF7mPlfN>cF_t)BW?f+^2 zTJO*F`ohPze06pie3xw3_?2|C4Kkzb=)a@ANbSqxu%cASKt@z zb{%I3pZC@IS<^RGj-&CN_}%9X$E$u{_fP%q{q(v6`EveR`8>@oy%H`Rx6u3>KEA|X zcwNKss_WDHu%T9aT)ltw$a%C}>o`+*T;igHNAs5+U%&TL@_B|`1`1`V`CIqX@4Zp> zm+K9mU+WXiuab|#`9}BGcucUz3CCZ799PrBFY7u^S1IfIeO>0+?K*xDl<)bQWq+x+ zyqf99KV=cn#l2YPd9?NkDXlc!VDp`Y*S^+>t} zG(9vP^*oxtrM?WeLnRWPpOdB58=7vCFEo9$ehRmf8g9uS8ef{fT3(jpYIwBXl>8Hv zcnsFbeo`O!s_l9>{WPAmJ<;{I%J=m8^*ZFb-9|Z%*4qiP|2t)=^{}Lq+aTKuWtnN0 zTJC%rPT8*GBmw8U_Ycub~w4Waj+okrumxt`Szr!wr62ChB zp!I$Dxs&8`y?@dy3z?bo;-)pexyFf(DLYh*zR{I;nHzCy>E;ik?{1|rJis0 zH)Xq&E6vY=kJ#-VIiB9PX+I~u(|#V1eyu())BEVP-?E>#1ne^Ivv#TDB0lM#`0MO; zea^Qa`)mI?Q{q>jQ|!wA`drGD^~F!w)C9#pKJeI?}rWt?RE{X-mitnpCn$x&nspBS&8=rNpFo$eg2dz z*P-zfeA%8y@00aDxA3>^_CT3@F6rcv`)1#7NcbdQ^nJpvYktxEqt~PDqmJ*l^w|A% zJS$n&yMlIm-+*1}IEmiJIePyq62_%8ll$pw=hyxnIg#P|hMy;%%@%w9Oo>-Lk3K(fC0u%+uj2p>{q}nS36I9>;%Dr3%_qB( z-kSe>dLGG78V@>d5ij+LmVd9*-?0*(F><^PS=VyBE61Ia?K)oOm-6X(j}2F`hkNYLO z>5~51&UmGKZ%TT5q@0(^b?EUmpJ_erll(hQfzUHTwZT#r-7>y6D$9>XnRm=WbU%J0yzt zNj#+dfenY&M}Zo`?B3%?+5&?avr&V^T=OJpWUwG zenXNj$x;sdv-b1OWxLe-@J*=~gVGQ4yj_kX`N%(J*L9q3Oxi2W58AG1{Tq0<>@WQ* zy|35jC|X`!X}8^XN_Zq4bzEQjTOKLTyHf9$%DRp#bWhpu`z7CMJ?_eNyV5Uk<+^mf zh4Xv%duv+1$Z_8ImefhGIB@bdw^ZV8to=hJ>yw6w>5DQ7xf;H#D6NO{-s1iim%yk+Y9$*^>TPvDBOHJM8(ioNN2*aqM>O?`u7MDEU_VVV6rLAyB?78tK%z)T7ODAr|Huq?P|Ebl6;}%KTs>jmvAgd z`OtC1@n!q@uEd{D^0B68i(C&gcRis$y*}+nX!_;Ib@-(|*c`R{>;0G3^ZMMNPvZN5 z#BZO}|G`@OJ#ELdAFS{?MF_^y4DNYp6Y#(meWnim)cKh zlzgGb@kx8G{p=QvKMB7p*QN8l7d2l=c?;b}pe z?@Bz*O8q<}`P%<0_VXcWf8u)W`aQY-({cG-IgZ{}?S91W=aKxV>9o*ex4W{`c@R3T z87KKg+fB_M+V9Zv;+Oq;C*(ZRf7SVHI$ur8qu$5)v^+}vulK#-=R8sl^m&1{E1Iu% zTkQFC86(#jXtmpyCI5M4dr<48IQ#j4w0G+tm2gYFwAmx;v9e6FOTACj^bX4LH9quy zLF4Id(r#tRe&PGmbbGvjv>W<-QRj<=fmuFqdR zKVkRtNxh}_c{+Z*DdF=Z$bNpiJd}K|{miJ}vDi z8g5tG<9#_#p|;N-x5v}Z$0U6Fk`B9)zw~*M-tT(eY`+(fb|8>v*F8nDlzKwj5wDzA z^SxVX_tXACOS@g~ll`(r?Ydu&qv@X`$4|6NpX5VL7af0fJ}vu6{?K|?@9#RL->vBq zzTd5|-`k(FOHD65{*c6%jw5LQP19fJHK!d-I5vd7W>uFiK(*Ze8vIa%V@mGb3zll@+} zT%_9d4(T^8NPX@pwA-~k4ZO{+>;1Nluj)LAfb?hdxr?TY&Zj&l^_s@trlgPm7wvKN zInK%F?Ydvel~0!Xy`UUNuS4%gwVo)Ic=BkzE|73bJZSnXNW0$AC+C;?Oy^r@I_Q0c z#;eAIwx>E?=xLMVWJvgX>~dMsS^JIJ9&7!k`O7Q$TmOH+qxEQ(tm|=FG=C&~cepgYwI8DQr9%?G`W!~* z-_A;Y)BW_hMUqkCFJ< z?6u!t?~&tW+hvT_%d#Gh7YRoo-|na5V>&KgDCr-R@)sPp`?a3Hp5<7wOY>N!s6SiEnLhwOsqPJV^P~`6C)`SL#ijUoh4q;gJ4+ zxSf-7qvKGTZeGo2QjhBWt1IEr=j)oUOQl}bdPwWlaJ%ycdw!i)tNBvPk@h!}e@ph0 z{HpWk!uK&!f9UpbzE7~<3y&Yv+jYHejdvaQT9)wYcv*(z3oTEYpLJYW&!hbYo&OcS zz9f4-ZGU%b?Yj2IwcoAfGw>VsbIsqHZ?&JK?Xge7*(3Q^k2faip!rJc?eO;{{etrS zL%F_W`JR>|t@kuNm!+KRb;il}^*o!>PH1`Aly)tgkAKl#*Seff>vgUF`{ek3$=_c2 zzV^Q=G##}4mwG|(o3z|}<$g))^C-ElqaJ&Hz34*)tmIu!VtSz`e7{DP`EndNZ?H?Yzril` zIgR$;G#uf6N3ndr)GoDuug}@`B|io0f$z0vT6 z&m-Z{`86JiM{Vzd_4fO_@0R0K%lRb!^mv}1m+ddvrH)H&NKiB>9Wxp}0C%wb=d)u;IpJVF# zUfN%XACquPe^8&#>i1LSIJ2_U@#-3*~-M<3XRV>$)T1({X;i zuhI5oM2@TT0pny{=ObvpdqS=wUXGXeNqb#dzqzt~z1MEnaOin-o|D#h59N4zzpK}y z&p-Mk9D4q0=|AZ8v`Bm{NW5x((dS_LzEq6%$0R-*Bwy+IG(B`aqQ*~zT%XpjdOx%% z`B3ML=<^<(f6^fNF(~_K{u+|&(e_Z=dku$I`|I+(4mr+|lt;a;<=?UKtM$FUcc$lA zlX%hNYWyF{aW&uR_@nj-G+Q$`^}oJI?kor zqh!B03D2Cwcb4QEjW<1imXu44*Rlm0zglj5gLd5~*B_Mf94+AuNW9HS`uZh(Hl!SD zxOCpiJ^6nAq&==H@ucG=b#k6vIc~CCkMDzae?88M9H&t7O<=%&-XiCZ`jlPon6OK& zzg)Q}IFEQ-fENi!L=uvbf>fj- z9T~{PMPwlxImm?%dB{fr3Q>e&l%N!4C`SbxRG}I*@S_%Ws7C`D(S&BSpcQRsM+Z95 zg>D4UgI-)lANnzXK@4FSBN)XP#xa3O1Tlqa%wQH*Fo$_8;3^iegk@aA3RdCbI@WLl z>$r&x+`=YqV+(h%jk~yq9qi&h9$*jqIKV?Z!XX~x37+Bz&v1+rcwX>$P9Xx3h{9<^ z;|yYO7O^;oIGjg3F2IWfBq9mPNI@#nkd6#w;v%w;jU42{hdkt?0EH+*F-lO1GL)kN z4ysU%8u(F*I@F^9jc7tMTF{C%w4(!^=t4IF=s_Ip&B*tqZW0jM*|wsgl4p$6>Vro2RhM( zZUoSSUR*{W`Z0h(3}F}}7{wUIF@Z@0F@36=_IE1~PFGS;$5Xa^XWB@=<_76rmU;C`B2{Q2_`1 zlXjkJ)WDBg)S(^?Xhaj5(SlaAp&cFQL>IadKo5Fx8GY!-00uFHVT@oDV;IK-CK1FG zrZIzAT)`aXv4E>s#1fWq4J%lMi|bg!4XooPHgF4@xQ#8`!8Y#V9(J&c`*?so?Bf6r z@d$@_j3;=CBRs<~PT+|k{SkpkMBy}|aRxCsi&&gP9L^&i7vMz#5|M;tq#zY(NJj=T zaS>U_Mh4g9D@9qQ45Ml_)rEoem>+R=edbfFso z^q?1)(T9EvU=TwX#t23+hH*?_5%xQ;d4z&dVX z1Glh=+t|V#Y~wEOVF$aoj|bSpJ`V5@k8p^`c!H-m!ZRG>1fK69{SkpkMBy}|aRxCs zi&&gP9L^&i7vMz#5|M;tq#zY(NJj=TaS>U_Mh z4g9D@9qQ45Ml_)rEoem>+R=edbfFso^q?1)(T9EvU=TwX#t23+hH*?_5%xQ;d4z&dVX1Glh=+t|V#Y~wEOVF$aoj|bSpJ`V5@k8p^` zc!H-m!ZRG>1fEFJ9}$Q|6iy==XApz4h{ZX?;XLAT0bV2^5lKi!3R01VbYvhC7miwgp&kurL=&3Pf>yMl9UbUI7rGHZ4|;JK zedxyk1~G(Tj9?UF7{>%A5yTXxF@srL!5rqXfU8)<5|(idD_Dh#>sZ4Ltm7s&a0{Eb zjV;{4HtymccCd^4cz`|Z;{Xrw2#0u#CwPh@Ji{?g;Q2SCKOzu`D4a$#&L9S75sPz( z!+FHx0=!5-B9f4d6r>^z>BvAPE+Pxr$U!cA$U{B~P>3QFqXeZWLpdtopbFKffgiP~ zLp>VMh$b|n1+8d9J37#bE_5S+9`xce`p}O73}Ohw7{MsUFpddKB8VwWV+OOhf;r4% z0avkzB`o6_R|hu7@c?_+#{nMV5f1SfPw*5+ zc!pz~Aauij3K57z6iy==XApz4h{ZX?;XLAT0bV2^5lKi!3R01VbYvhC7miwgp&kurL=&3Pf>yMl9UbUI7rGHZ4|;JKedxyk z1~G(Tj9?UF7{>%A5yTXxF@srL!5rqXfU8)<5|(idD_Dh#>sZ4Ltm7s&a0{EbjV;{4 zHtymccCd^4cz`|Z;{Xrw2#0u#CwPh@Ji{?g;CT({j|fB}3a1f`Gl;=i#Nr&{a31lv z051}dh$JK<1*u3wIx>)ni^xJYa*zuj@{o@L6ru>lC_yR8P>u>Xs6sVr;72X$P>%*Q zq6y7tK`YwOjt+F93*88y2fetAKJ;S%gBZdvMlgyojAH_m2x1D;n87TrU=H(Gz*Q__ z3Cp;K6|BO=b*$kA)^QUXxP?vJ#un~i8+UOJJJ`j2Jis3Iae#+-ghM>W6FkKcp5YiL z2o3g~LIffah0}<}8N}c$VsQ>}IFEQ-fENi!L=uvbf>fj-9T~{PMPwlxImm?%dB{fr z3Q>e&l%N!4C`SbxRG}I*@S_%Ws7C`D(S&BSpcQRsM+Z95g>D4UgI-)lANnzXK@4FS zBN)XP#xa3O1Tlqa%wQH*Fo$_8;3^iegk@aA3RdCbI@WLl>$r&x+`=YqV+(h%jk~yq z9qi&h9$*jqIKV?Z!XX~x37+Bz&v1+rcwS5TBLb0#!f8a~3}SE=u{eh~oJTw^z>5SV zA_>VzK`PRajtpetBC?Q;9OS}>JmjMQg(yNXN>GY2l%oO;s!)v@_)&{G)T057XhJhu z(26#+qXV7jLN@~FK`$<&5B(UxAcioE5sYFCpz9c#FOb=<@TZebI*v4uO>#$DXQ4t8-L53q-Q9N-}y;Si7U1W$2d}BkG@%(SXhj>^(Sc5Mp&J48pcj|XhkguT5JMQo2u3l6 zaZF$mK}=y9GnmB{%wZl2xQazAVHwx3f>pSd}BkG@%(SXhj>^ z(Sc5Mp&J48pcj|XhkguT5JMQo2u3l6aZF$mK}=y9GnmB{%wZl2xQazAVHwx3f>pS< zjy2rCI&NYEx3G!Z*uoub<1X%D2fMhB2iU_t4)73d}BkG@%(SXhj>^(Sc5Mp&J48pcj|XhkguT5JMQo2u3l6aZF$m zK}=y9GnmB{%wZl2xQazAVHwx3f>pS}IFEQ-fENi!L=uvbf>fj- z9T~{PMPwlxImm?%dB{fr3Q>e&l%N!4C`SbxRG}I*@S_%Ws7C`D(S&BSpcQRsM+Z95 zg>D4UgI-)lANnzXK@4FSBN)XP#xa3O1Tlqa%wQH*Fo$_8;3^iegk@aA3RdCbI@WLl z>$r&x+`=YqV+(h%jk~yq9qi&h9$*jqIKV?Z!XX~x37+Bz&v1+rgdXspLIffah0}<} z8N}c$VsQ>}IFEQ-fENi!L=uvbf>fj-9T~{PMPwlxImm?%dB{fr3Q>e&l%N!4C`Sbx zRG}I*@S_%Ws7C`D(S&BSpcQRsM+Z95g>D4UgI-)lANnzXK@4FSBN)XP#xa3O1Tlqa z%wQH*Fo$_8;3^iegk@aA3RdCbI@WLl>$r&x+`=YqV+(h%jk~yq9qi&h9$*jqIKV?Z z!XX~x37+Bz&v1+rc>XQvj|fB}3a1f`Gl;=i#Nr&{a31lv051}dh$JK<1*u3wIx>)n zi^xJYa*zuj@{o@L6ru>lC_yR8P>u>Xs6sVr;72X$P>%*Qq6y7tK`YwOjt+F93*88y z2fetAKJ;S%gBZdvMlgyojAH_m2x1D;n87TrU=H(Gz*Q__3Cp;K6|BO=b*$kA)^QUX zxP?vJ#un~i8+UOJJJ`j2Jis3Iae#+-ghM>W6FkKcp5YiL2u)ni^xJYa*zuj@{o@L6ru>lC_yR8P>u>Xs6sVr z;72X$P>%*Qq6y7tK`YwOjt+F93*88y2fetAKJ;S%gBZdvMlgyojAH_m2x1D;n87Tr zU=H(Gz*Q__3Cp;K6|BO=b*$kA)^QUXxP?vJ#un~i8+UOJJJ`j2Jis3Iae#+-ghM>W z6FkKcp5YiL@O(e%j|fB}3a1f`Gl;=i#Nr&{a31lv051}dh$JK<1*u3wIx>)ni^xJY za*zuj@{o@L6ru>lC_yR8P>u>Xs6sVr;72X$P>%*Qq6y7tK`YwOjt+F93*88y2fetA zK7{^C-u(Q3&tu?u3_Op4=P~d+2A;>j^B8y@1J7gNc?>*{f#)&sJO-Y}!1EY*9s|!~ z;CT%E{~ZJWm%MKKuYMV!M|=7gdd(~Jsz+$LcWBCIXxdk3>PP7DZ|D(FXc#ya=MabU zh{pwZk$^-bAsH!1MHPS#RKP(Ms!;M2?qXG`9P>mY+QHwg%qXCU*LNi*>iZ-;P1D)tXHv;HEFD|1G{TRR? zhA@l~jA9Jqn7|~0n8Gw>FpDdg!#oyn6^mHHGOl3-t8j50Yq)`R+{6ZMVH3Bpg*({B zUEISCc5xpMu!nsd;2|F25RdT$PjQ52IK~M)r}#faAQDkHjcA-f49+4J=MabUh{pwZ zk$^-bAsH!1MHPS#RKP(Ms!;M2?qXG`9P>mY+QHwg%qXCU*LNi*>iZ-;P1D)tXHv;HEFD|1G{TRR?hA@l~ zjA9Jqn7|~0n8Gw>FpDdg!#oyn6^mHHGOl3-t8j50Yq)`R+{6ZMVH3Bpg*({BUEISC zc5xpMu!nsd;2|F25RdT$PjQ52IK~M)5u`sN5Q!+9Ml{YK24@kAbBM!v#Nz_INI)Wz zkcE#6HgOwUxPxun#Xam`7x(c1d)UVT9^w%W@fc6=6i0Z5W1PUlJD#Ty zfk;H*G@@|^F*u7@oI@PWBOVvvMFJ9$gk+>36=_IE1~PFGS;$5Xa^XWB@=<_76rmU; zC`B2{Q2_^4s74L^s6`#>(SSxYp&2b`MH|}DflhRx8v*p77njk8ehgp`Lm0*gMlptQ zOkfg0Oko-`n8g*$VIB*(ibX788P~9aRk*m0HQc~DZejzsu!-B)!X0emF79CmySR@B z*uy>!@DPu1h{t$>r#Qkh9ODF@NYWn>h(r`lBN}HAgR_XmImF>S;&B09Bp?w2*?7e3@69|b5x5sFcQQk0<_6>w06YSh4wTGXK)4QNCYn$dz*w4ogx z=tLK~5kL=maT$H+#{dQ~gkg+e6k{021SS#06s9qQSzN&!=COdQSi};RaSbb2g^TN0 z!wszCCN^*jo4AcF+`%^P;vROei~D$hJ?!HE5Ag_xc#J1_iX%M3F;3v&9nVvUKqR7Y z8qqj|7@S2c&LIxx5swS-A_0j=LNZd2iZrAn1DUvpEMy}Gx$q$m`6xgkicpLal%fpf zsDOhiRHFud)S?dcXh0*H(2N$eq7CinKqtD;jR1Pki_7RkKL#*}Aq-;#qZq?DCNPO0 zrZ9~e%;E~>FpmXX#UhrljB8lIDqLL08g5`6H?e_R*u-sY;SRQO7x%D(UEIe5>|q}V zc!)PS#RKP(Ms!;M2?qXG`9 zP>mY+QHwg%qXCU*LNi*>iZ-;P1D)tXHv;HEFD|1G{TRR?hA@l~jA9Jqn7|~0n8Gw> zFpDdg!#oyn6^mHHGOl3-t8j50Yq)`R+{6ZMVH3Bpg*({BUEISCc5xpMu!nsd;2|F2 z5RdT$PjQ52IK~M=gMFtEfk;H*G@@|^F*u7@oI@PWBOVvvMFJ9$gk+>36=_IE1~PFG zS;$5Xa^XWB@=<_76rmU;C`B2{Q2_^4s74L^s6`#>(SSxYp&2b`MH|}DflhRx8v*p7 z7njk8ehgp`Lm0*gMlptQOkfg0Oko-`n8g*$VIB*(ibX788P~9aRk*m0HQc~DZejzs zu!-B)!X0emF79CmySR@B*uy>!@DPu1h{t$>r#Qkh9ODEY-tjzz2t*n7{V|{Fp4pZV*-;1VhYok!7Q#| z4)a*RRV-o&%eaOWtir{0tl0y#NaGqaSm}fk9b^w7YRs25|WXERHPvt8OX#%WFZ?l z$b}Di$VUMRQG{ZYpcG{&M+F>Ip&B*tqZW0jM*|wsgl4p$6>Vro2RhM(ZUoSSUR*{W z`Z0h(3}F}}7{wUIF@Z@0F@d zdBo!ayhuPIl8}rPq#_OJ$Ur78A`98bK`wmALp};nh$0lD1f?iLIV#|w3e~8AAGN4M zJsQx6CN!f3t!P6#I?#zObR&Qs^x`u5(2oHOVhF<+!6?QsjtNX6h$&2C2D7+=Im}}L zSFwmCEaMthunHH~v4$I1$4zYD7B+DkTeyR5+{HcYU>EoC0DIWS0UqKJ4)GXI@DxXQ zhGU!{^pNiqA`povoJKUxAO>ddBo!ayhuPIl8}rPq#_OJ$Ur78A`98bK`wmA zLp};nh$0lD1f?iLIV#|w3e~8AAGN4MJsQx6CN!f3t!P6#I?#zObR&Qs^x`u5(2oHO zVhF<+!6?QsjtNX6h$&2C2D7+=Im}}LSFwmCEaMthunHH~v4$I1$4zYD7B+DkTeyR5 z+{HcYU>EoC0DIWS0UqKJ4)GXI@DxXQhGU$-!-L>ch(IKwa2nA#gBYAeEY2Yg=Mj$! z@FD?;NJ27Fkcu>HY~c>JaToWngI(Om1MFcR2Y84_IK*Q-!BZUJ8IEy+ z&;$Nch(IKwa2nA#gBYAeEY2Yg=Mj$!@FD?;NJ27Fkcu>HY~c>JaToWn zgI(Om1MFcR2Y84_IK*Q-!BZUJ8IExR5AS%MLIffah0}<}8N}c$VsQ>}IFEQ-fENi! zL=uvbf>fj-9T~{PMPwlxImm?%dB{fr3Q>e&l%N!4C`SbxRG}I*@S_%Ws7C`D(S&BS zpcQRsM+Z95g>D4UgI-)lANnzXK@4FSBN)XP#xa3O1Tlqa%wQH*Fo$_8;3^iegk@aA z3RdCbI@WLl>$r&x+`=YqV+(h%jk~yq9qi&h9$*jqIKV?Z!XX~x37+Bz&v1+rgeLc# zLIffah0}<}8N}c$VsQ>}IFEQ-fENi!L=uvbf>fj-9T~{PMPwlxImm?%dB{fr3Q>e& zl%N!4C`SbxRG}I*@S_%Ws7C`D(S&BSpcQRsM+Z95g>D4UgI-)lANnzXK@4FSBN)XP z#xa3O1Tlqa%wQH*Fo$_8;3^iegk@aA3RdCbI@WLl>$r&x+`=YqV+(h%jk~yq9qi&h z9$*jqIKV?Z!XX~x37+Bz&v1+rczB=n6e19bC_I0^*W-En+n)dLc?>*{f#)&sJO-Y} z!1EaRU+moln4ImMMLtu6Y%npJ7)gkcz`o`G*L%uMk_NsqknSU(xisu$(DVAqt)?i&W zWHYv=nIVj1EECw7J?J1ufig4LkApd!-*7y!SN06f;Q}ty{ zeXXzZChzf2J|p(5e$PDiEdHDYScD~6j+I!Qb=ZJS*^2EM%m~IXo}Jj8cDm@ML?8Qd z5V05ZXk!28$;6(|vx$A47ZZCsuO;?#{)O1Xc^|QF^9f?F<_r9tH;6r%9})X7zasWt z&TaqQ&zPTuS%PI*k=0n6_1T0i*^WUBXEbf>$ZkxglRSGfoqafv!-zeN#}fM(Pb2m& zo=5CgyqwshcmuI7@eX1y;zPv#!>5Tohp!O(4BsL47JfqPC;XPV>?Qjtzhog6XBnDU zm9-ea#%#g13}hIi7{?@bCBqb^GL2qlasaVU??_^A-igG1yfcYCco!1;?ye^G+TG0U z+(YcCdyLpe_Z+cz?jOW{xetgva$gYp;^wq3>L>hyU$GcVvjVHIChM^go3jlq45gJF zn8+^dNtV4R(nCM{a|p5D>=TqJ;)bYe#sWUi-3y3{YR}%Z6ZY1_T-9_wodW6{H^enNj=~ZGc(|g4JrO${xOW!k( zJu5$F0Ty9NmSZJWXB{?RQ?_Dz1~Y;&jAtiyr=2dkDbdHi97OB|I-1!3b272#=WJr1 z&&9;vo@{&PT*PoUe$zH*?#6@iXRUVU}Q7R%A8S zW_>ncOSWSW!x>E*JF**-=_JqIOlKbsRjYn{gtsALC4755|SWzKg4gy%skU`z!7t_EbDZ?4x*&*gNqL zV!y-(#2$$+h$_`9q7xpB}UKHt}pZz(6 z*l%zQvB%(d#J++*5PJzOCH43*qUaBFp{xMU}yHAgB%6Q%wRua4gKN7y7}XYwen|h4i^w> z;;$su!QV)%eZPxX@BRp}#{F4hUHhxVTK4yd_3NJzYu3MK9&46=&H^mLk}Stctj;=Y zz@}`)_6%kOV;Ij)>`psfbW@^_eL09&3w|`Q{`+KN&G*^FI`4~#wcXbe>$(3ztl_?o zShxKIu~z#9Vtw`-#G34nh;`Us5o@pKw*K~K%+JCs!LqE#YOKxrY{Hgo#~_9?nl^T1 zHzw0bp1qmQKE(Rw!-zG_#}ez9Pb1bYpGT}$zMNR2d;_sA`3_<&@D+%t(axEB)ZZm%ZR+TKj8uf2y@Q~MaPj`lfX?d(5@^|BujYh=G5*2T_g zUF1*r1;1i3mSzQ3VNKR!BQ|FnS{Oq`GX ztR=maSU-9lv1ar(Vx8y%#M;oOi1nZ^5o~=W`CUw`?Yov(&-WK%4c~ply1gfewR$fQ>+{|q z*5rLeti$_?SbI0O^;bV*eimj4mSsg&V{O)F6SibK1~Ht`w6P<*F_}*C?9FucA=bAY zMyzQ&mRQGj8nJfmJYv1t<-{7b8;EsjcMxmQ9wOGCJx#1RdxcnM_71VO>=R-=*|*GP zEzwW;B@3}Q%h1HCti=E}W(&4uAj25NI3}?x8Ky9mY4kFa1Bi86M-pqZP9)Z2ok^_0 zx{z3Rbv3cp>Skhn)jhg_RRL>D>r~W~#m->KMBlQKbE^5xoTBu+6H~xQv#fbmY zUpd3C=&nAKtJ(+3miiHe*(vF z0>9(;{DD7mDOYhFH*p(x^8kMr3bGU#@xRO6{Be!xF_wxu(@+>d%DsS>0 z|Ku~i=6mK@O#Wv97GX)2V2oi4g5(Z{|V#IHG;<2aeq zIh*sjm@BxJKl2yv~e`%SU|5SA56Zi_8Da&%!LhvaHBztj+pt!j^2u zAcixVHg;q;Ceulty_wEF9LQlD#j%{kX`ID*T*T#E!wuZR9o)-9JkHZR&nvvnJAB9| ze95=WwS@f7FIkAiS%xN7Wi1Al{a~hfASe$^F8w{E&sCsi?Afiu@bAZ4jZs3Td_TZ8NnFF zvlF}1P8Z#j=wn|F;@2F_ah%NQoXz=M%oSYApZN=Savu-#1kdmSf9DO}O?cBqIJjP#nj+gldZ}S2F;tT%GoXg4o z{DNPx7)!GPtFR{Pu@RfI4J{0%l^vMKF6>E`y(rQ{Kl^hCM{o=$@H>9bANV7eauwHc z6Sr|U5AY~Y@i$)LHQwTVKIU`2AqM*AWj+>UQI=wPR%Q*>WkWV&YnmCtNX9aOo!Ns9 zaug^tgZ(&|!}$%za|&m04i|6pM1vGe9t^9$p0+B zA}q;rtiSWkptFZPsTKwq!d7F`Ut~u_L=NnNITT z&2;wRKn~+5j^!jy<1EhOA};3|Zr~Q~;9ef$ah~RRUg34#;X^**OTJ~U73F_^$wDm7 zGBmL&YcYV0*@A5u$S_7Rj!EoFhAB*C8okWq01o9ye#?oR%9)(YgQaC4b^ZZsjiS=MkRd zSzhE--sC<0$!C1c_sp}3{Lca`!jdeQ?(mH(Nag;|1SS&`LP zoAud*E!mDi3}-ZL?8t6RrjtB-Go5`nki$5NV>yY_IE(YRh|9T#8@Po#xR-}`oTqu7 zS9qOw_>fQdl5d%7HTj=kvJi{23{9-cS`1)gwqRQZGK^7-V-mZPVG2{3MlUltfI~Tw z-*O_Sawg|;A(wGA*K;$sa}N*l7=PtCUgjUX%?JF8FZefet}g%c3x367EX@k6!kVnd zMr_VDv@n!bc3>jAuqRpeqDT+@?9U+_!7-e`@Ay4`;E!C&Rb0nS+{WEJz@t3H-*}1F zc#HS>n9uo!nBbq6`B;!eS&HRZnKf9K4cUyXX=Vr`8OsEAW)C{ZQJ~BW_Tyj<=QkYB zDV)JMT)-t<$)C89Te*w-d4wlncOSWSW!x>E*JF**-=_JqIOlKbsrnSWe8^8x?j z3;xZV>&XB7f?u&1OS1y2uqNxV5u39OEexfV9hk^2>`9irDAGee`*R3Ka11B#JATg} z_#>Bc71wbSw{bTQ@F-95H(ug3-r{{e=5xLw7Wd4{d@RVKEXDGy%o?oAhHS>xG&6*e zjAa5lvj-jIC{Shw`*ARb^Ba!m6wcrrF5nWbI`IfoX zm;d=C3$ZxM(8Q{&#Q-*D3$|q-!x+UlCb26SrZAOh^fHqJIFuv#Ehlm+XL2qVav4{1 zJvVbZ_wXQ(@mJ!{gtm2Cn`i$uI}9r6VDt!yVfJ6M!(etgn4Jw~7X|;1OTyu;0&(_V zv%_F^I+&deW)}tj6HCG&k)vk+H9HJur-RwqV0KaPe_lyAHpZo9|1~=dW~YPM*t_EoI}B#0gW1_&c2O|9B%ECm{{OKg9KWNyKl`uQVK6%#%+3b0 zi-OrD;p~!dc1bw9B%ECm{_j*0ju|OFX8$!i3}&Z;+1cQKPEip18vZ|VeDQbx`(5RN z5qOn9Kk@GZIBsYT+w|wKy>$-Tb>`Td?HSGl_9Vv)4&rD|=4>wDa{kQSJi>Fl!W;aP z&-k97%xMo0ah7qMW4sm{vL)5Cizj#-XBNj<#l0LzoKbuXr}76b7qoO_j@?UaSEpsXZ&8nZN$00ai(va<@*kw z@I61D$KEjF%-+=*z!nT5&gPxOZp4|qdoz&Z2Fnn?CmA5aR6F<2jY{xr#Vr_F-P)T|Q@ypV@QCuUMLu*@!qR zHqMD1%PzFj%?u9W1Ww~(uH;tk=W(9lW#XLI&x!M0=lZ!gV;NRw3tAXK8*y%HoY@-Z zwf1okzah?NJ&(U|A5ZckZ}I_OGWUG0pXG?NRpVUMtr$$4rMeUCbkj$iof>DRoD@fWbG*)be9j!d^nEPE(yYQdY{)hYBhDh-oxO9Y)T8m7|lfXB+d!VGo6Eovq6vLH2%mn+{EoX&P%+_M|{aV z3i_Y3C~?MT6Kk+BajxeG;ylk?>0l~*6X$pSnmD`jWX_~|X6Fqa-^#r_Nu1C5CXHuu z{!E3l0L#!soWZ#^tqd3xBFLphRTIh{CP^J1>xTB>Jj-tFAvoR3*%e~#o>PU9>t;0EsC5uWBb;>^pp_?WMm%lVK$ zXF--G&bM5h4cLrkMz9lmkflT)2XQpV6X#a`flG=1PdU!2yo>lhljHwKeu4PEkKSeoToh4t8sW~%2TPVjh7x+u`YOb+2_j^_-{=Mt{qI&LP;LcE_Ri8Byi z<6S;x9%lv4&+@EGoM{;688)6}*zM;M{T#&M#Myzzh!HDB_&K^SO*`sGckMu*Y$x;NSU(FZhl) zKk%0~WcFV6LgGyUQ` zzcpBw4cVF&hBKBO*@GNq`iZmp;+(!e5a;sU#2v($e2?-Rukbpb5a;j3*?V#BUYxhL z1{<*rLmA5?rck1vLpXvHIhPChGq-XdPw)(JPTu>(`FL?IUYv)w9ILS&n^Qgeu6piW zyXW%su`h>l9C5x~oNae8*KrGX^9XT{U7TO{F<wB=cwjoFgn?8t89>E~b$=M>K360YP=+(_fOW-s~qLq6d<=3YrWu^@4V zSreiUxC{QrVQSeiJOE6(KFmSOC`9(2*e zz8u1DIGyu}^R;f|9vNyhfaL^(o&o-|EsKE3qz{u`Pob$#{0Bi@ll7fgHt&oWsRj!HwL- zgFHi=NA)hB@Na&$hO(CBSdBPus(Q}UXpbkdC*AB#F9&f1$MZYl9H~pWmYcbU$9Rf3 zGb+xD`WN33XGG1<;;hJ;Y{WJUV-&j*=RfUDoc(kFM{)wc=K?O}dT!$Z9w*Lq`Umgv z33II_jj#|)(nOry6z4W=Pn_8_hDq#BoYPe10FLH\&Nax-@mXD_|X+r;@wKVMr} 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

S02cL7P_D26D9q}Iki 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℘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�_;L6Vl7l}C&f6fTBoFwc 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 z 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%0D{B_=it`*1ff*faovuA3 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 fXEZxON5?_qn+5ECPtq=B;j39 From 666d0124495bd6fac826f9705e2dcdc453e480b7 Mon Sep 17 00:00:00 2001 From: David Coe Date: Sat, 2 Mar 2024 08:09:17 -0500 Subject: [PATCH 06/61] updating tests --- .../Apache.Arrow.Adbc.Drivers.Apache.csproj | 4 +- .../Drivers/Apache/Spark/SparkConnection.cs | 4 +- .../Apache/Thrift/ThriftSocketTransport.cs | 36 ++- .../test/Drivers/Apache/Spark/DriverTests.cs | 206 ++++++++++++++++++ .../Apache/Spark/Resources/sparkconfig.json | 8 +- ...TypeTests.cs => SparkTestConfiguration.cs} | 10 +- .../Drivers/Apache/Spark/SparkTestingUtils.cs | 109 +++++++++ .../test/Drivers/Apache/Spark/SparkTests.cs | 54 ----- 8 files changed, 365 insertions(+), 66 deletions(-) create mode 100644 csharp/test/Drivers/Apache/Spark/DriverTests.cs rename csharp/test/Drivers/Apache/Spark/{SparkTypeTests.cs => SparkTestConfiguration.cs} (80%) create mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs delete mode 100644 csharp/test/Drivers/Apache/Spark/SparkTests.cs diff --git a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj index 1a1b211bcf..ebd30f6134 100644 --- a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj +++ b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj @@ -5,11 +5,11 @@ - + - + diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 9b7c521073..3e01e7427a 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -54,7 +54,7 @@ protected override TProtocol CreateProtocol() string path = properties["Path"]; string token = properties["Token"]; - string uri = "https://" + hostName + path; + string uri = "https://" + hostName + "/" + path; HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(uri); @@ -67,6 +67,8 @@ protected override TProtocol CreateProtocol() TConfiguration config = new TConfiguration(); THttpTransport transport = new THttpTransport(httpClient, config); + // can switch to the one below if want to use the experimental one with IPeekableTransport + // ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); transport.OpenAsync(CancellationToken.None).Wait(); return new TBinaryProtocol(transport); } diff --git a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs index ca29b879d3..9080dc549c 100644 --- a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs +++ b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs @@ -15,9 +15,15 @@ * limitations under the License. */ +using System; using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using System.Threading; using Thrift; +using Thrift.Transport; using Thrift.Transport.Client; +using System.Reflection; namespace Apache.Arrow.Adbc.Drivers.Apache { @@ -29,6 +35,34 @@ public ThriftSocketTransport(string host, int port, TConfiguration config, int t } public Stream Input { get { return this.InputStream; } } - public Stream Output { get { return this.InputStream; } } + public Stream Output { get { return this.OutputStream; } } + } + + // TODO: Experimental + class ThriftHttpTransport : THttpTransport, IPeekableTransport + { + public ThriftHttpTransport(HttpClient httpClient, TConfiguration config) + : base(httpClient, config) + { + + } + + public Stream Input + { + get + { + // not advocating for this, but it works + Stream stream = ((FieldInfo[])((TypeInfo)this.GetType().BaseType).DeclaredFields)[4].GetValue(this) as Stream; + return stream; + } + } + public Stream Output + { + get + { + Stream stream = this.GetType().BaseType.GetField("_outputStream", BindingFlags.NonPublic).GetValue(this) as Stream; + return stream; + } + } } } diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs new file mode 100644 index 0000000000..6fa2507a38 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -0,0 +1,206 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using Apache.Arrow.Adbc.Tests.Metadata; +using Apache.Arrow.Adbc.Tests.Xunit; +using Apache.Arrow.Ipc; +using Xunit; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + ///

+ /// Class for testing the Snowflake ADBC driver connection tests. + /// + /// + /// Tests are ordered to ensure data is created for the other + /// queries to run. + /// + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] + public class DriverTests + { + SparkTestConfiguration _testConfiguration; + + public DriverTests() + { + Skip.IfNot(Utils.CanExecuteTestConfig(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE)); + _testConfiguration = Utils.LoadTestConfiguration(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [SkippableFact, Order(1)] + public void CanExecuteUpdate() + { + + //AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + //string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); + + //List expectedResults = new List() { -1, 1, 1 }; + + //for (int i = 0; i < queries.Length; i++) + //{ + // string query = queries[i]; + // AdbcStatement statement = adbcConnection.CreateStatement(); + // statement.SqlQuery = query; + + // UpdateResult updateResult = statement.ExecuteUpdate(); + + // Assert.Equal(expectedResults[i], updateResult.AffectedRows); + //} + } + + /// + /// Validates if the driver can call GetInfo. + /// + [SkippableFact, Order(2)] + public void CanGetInfo() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream stream = adbcConnection.GetInfo(new List() { AdbcInfoCode.DriverName, AdbcInfoCode.DriverVersion, AdbcInfoCode.VendorName }); + + RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; + UInt32Array infoNameArray = (UInt32Array)recordBatch.Column("info_name"); + + List expectedValues = new List() { "DriverName", "DriverVersion", "VendorName" }; + + for (int i = 0; i < infoNameArray.Length; i++) + { + AdbcInfoCode value = (AdbcInfoCode)infoNameArray.GetValue(i); + DenseUnionArray valueArray = (DenseUnionArray)recordBatch.Column("info_value"); + + Assert.Contains(value.ToString(), expectedValues); + + StringArray stringArray = (StringArray)valueArray.Fields[0]; + Console.WriteLine($"{value}={stringArray.GetString(i)}"); + } + } + + /// + /// Validates if the driver can call GetObjects. + /// + [SkippableFact, Order(3)] + public void CanGetObjects() + { + // need to add the database + string catalogName = _testConfiguration.Metadata.Catalog; + string schemaName = _testConfiguration.Metadata.Schema; + string tableName = _testConfiguration.Metadata.Table; + string columnName = null; + + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream stream = adbcConnection.GetObjects( + depth: AdbcConnection.GetObjectsDepth.All, + catalogPattern: catalogName, + dbSchemaPattern: schemaName, + tableNamePattern: tableName, + tableTypes: new List { "BASE TABLE", "VIEW" }, + columnNamePattern: columnName); + + RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; + + List catalogs = GetObjectsParser.ParseCatalog(recordBatch, catalogName, schemaName); + + List columns = catalogs + .Select(s => s.DbSchemas) + .FirstOrDefault() + .Select(t => t.Tables) + .FirstOrDefault() + .Select(c => c.Columns) + .FirstOrDefault(); + + Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, columns.Count); + } + + /// + /// Validates if the driver can call GetTableSchema. + /// + [SkippableFact, Order(4)] + public void CanGetTableSchema() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + string catalogName = _testConfiguration.Metadata.Catalog; + string schemaName = _testConfiguration.Metadata.Schema; + string tableName = _testConfiguration.Metadata.Table; + + Schema schema = adbcConnection.GetTableSchema(catalogName, schemaName, tableName); + + int numberOfFields = schema.FieldsList.Count; + + Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, numberOfFields); + } + + /// + /// Validates if the driver can call GetTableTypes. + /// + [SkippableFact, Order(5)] + public void CanGetTableTypes() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream arrowArrayStream = adbcConnection.GetTableTypes(); + + RecordBatch recordBatch = arrowArrayStream.ReadNextRecordBatchAsync().Result; + + StringArray stringArray = (StringArray)recordBatch.Column("table_type"); + + List known_types = new List + { + "BASE TABLE", "VIEW" + }; + + int results = 0; + + for (int i = 0; i < stringArray.Length; i++) + { + string value = stringArray.GetString(i); + + if (known_types.Contains(value)) + { + results++; + } + } + + Assert.Equal(known_types.Count, results); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [SkippableFact, Order(6)] + public void CanExecuteQuery() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + AdbcStatement statement = adbcConnection.CreateStatement(); + statement.SqlQuery = _testConfiguration.Query; + + QueryResult queryResult = statement.ExecuteQuery(); + + Tests.DriverTests.CanExecuteQuery(queryResult, _testConfiguration.ExpectedResultsCount); + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json index 7f73404c20..fb76fa164c 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json +++ b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json @@ -3,5 +3,11 @@ "path": "", "token": "", "query": "", - "expectedResults": 0 + "expectedResults": 0, + "metadata": { + "catalog": "", + "schema": "", + "table": "", + "expectedColumnCount": 0 + } } diff --git a/csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs similarity index 80% rename from csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs rename to csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs index 746398b40f..c73134dd85 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkTypeTests.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs @@ -1,4 +1,4 @@ -/* +/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. @@ -15,15 +15,11 @@ * limitations under the License. */ -using System; -using System.Collections.Generic; -using System.Linq; -using Xunit; +using System.Text.Json.Serialization; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { - [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] - public class SparkTypeTests + internal class SparkTestConfiguration : ApacheTestConfiguration { } diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs new file mode 100644 index 0000000000..06d1812279 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs @@ -0,0 +1,109 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Spark; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + internal class SparkTestingUtils + { + internal const string SPARK_TEST_CONFIG_VARIABLE = "SPARK_TEST_CONFIG_FILE"; + + /// + /// Gets a the Spark ADBC driver with settings from the . + /// + /// + /// + /// + internal static AdbcConnection GetSparkAdbcConnection( + SparkTestConfiguration testConfiguration + ) + { + Dictionary parameters = GetSparkParameters(testConfiguration); + AdbcDatabase database = new SparkDriver().Open(parameters); + AdbcConnection connection = database.Connect(new Dictionary()); + + return connection; + } + + /// + /// Gets the parameters for connecting to Spark. + /// + /// + /// + internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) + { + Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase); + + // TODO: make these parameters that are passed in + + if (!string.IsNullOrEmpty(testConfiguration.HostName)) + { + parameters.Add("HostName", testConfiguration.HostName); + } + + if (!string.IsNullOrEmpty(testConfiguration.Path)) + { + parameters.Add("Path", testConfiguration.Path); + } + + if (!string.IsNullOrEmpty(testConfiguration.Token)) + { + parameters.Add("Token", testConfiguration.Token); + } + + return parameters; + } + + ///// + ///// Parses the queries from resources/SparkData.sql + ///// + ///// + //internal static string[] GetQueries(SparkTestConfiguration testConfiguration) + //{ + // // get past the license header + // StringBuilder content = new StringBuilder(); + + // string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; + + // string[] sql = File.ReadAllLines("resources/SparkData.sql"); + + // foreach (string line in sql) + // { + // if (!line.TrimStart().StartsWith("--")) + // { + // if (line.Contains(placeholder)) + // { + // string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); + + // content.AppendLine(modifiedLine); + // } + // else + // { + // content.AppendLine(line); + // } + // } + // } + + // string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); + + // return queries; + //} + } +} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTests.cs b/csharp/test/Drivers/Apache/Spark/SparkTests.cs deleted file mode 100644 index b6bc69806c..0000000000 --- a/csharp/test/Drivers/Apache/Spark/SparkTests.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using System.Collections.Generic; -using Apache.Arrow.Adbc.Drivers.Apache.Spark; -using Xunit; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] - public class SparkTests - { - /// - /// Validates if the driver can connect to a live server and - /// parse the results. - /// - [SkippableFact] - public void CanDriverConnect() - { - ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("sparkconfig.json"); - - Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase) - { - { "HostName", testConfiguration.HostName }, - { "Path", testConfiguration.Path }, - { "Token", testConfiguration.Token }, - }; - - AdbcDatabase database = new SparkDriver().Open(parameters); - AdbcConnection connection = database.Connect(new Dictionary()); - AdbcStatement statement = connection.CreateStatement(); - statement.SqlQuery = testConfiguration.Query; - - QueryResult queryResult = statement.ExecuteQuery(); - - //Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); - } - } -} From 66523304a7ecc051d3881b9836360a1b8e5502cb Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Thu, 14 Mar 2024 21:02:55 +0530 Subject: [PATCH 07/61] Added implementation for table schema --- .../Drivers/Apache/Spark/SparkConnection.cs | 32 ++++++++++++++++++- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 3e01e7427a..20d2164456 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -101,6 +101,36 @@ public override void Dispose() } } - public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) + { + TGetColumnsReq getColumnsReq = new TGetColumnsReq(this.sessionHandle); + getColumnsReq.CatalogName = catalog; + getColumnsReq.SchemaName = dbSchema; + getColumnsReq.TableName = tableName; + getColumnsReq.GetDirectResults = new TSparkGetDirectResults(); + + var columnsResponse = this.client.GetColumns(getColumnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + var result = columnsResponse.DirectResults; + var resultSchema = result.ResultSetMetadata.ArrowSchema; + var rows = result.ResultSet.Results.Rows; + + StringArray.Builder columnNameBuilder = new StringArray.Builder(); + StringArray.Builder TypeNameBuilder = new StringArray.Builder(); + + Field[] fields = new Field[rows.Count]; + for (int i = 0; i < rows.Count; i++) + { + fields[i] = new Field(rows[i].ColVals[4].StringVal.Value, + SchemaParser.GetArrowType((TTypeId) rows[i].ColVals[5].I32Val.Value), + nullable: true /* ??? */); + } + return new Schema(fields, null); + } + } } diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index 82fb1241f0..96da30de0b 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -43,7 +43,7 @@ static IArrowType GetArrowType(TTypeEntry thriftType) throw new InvalidOperationException(); } - static IArrowType GetArrowType(TTypeId thriftType) + public static IArrowType GetArrowType(TTypeId thriftType) { switch (thriftType) { From df4fdecb515c8d869717f9cd7e0a4b0f2f3109e1 Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Thu, 14 Mar 2024 22:28:18 +0530 Subject: [PATCH 08/61] use columns for data --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 20d2164456..4f29a636ac 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -117,16 +117,14 @@ public override Schema GetTableSchema(string catalog, string dbSchema, string ta var result = columnsResponse.DirectResults; var resultSchema = result.ResultSetMetadata.ArrowSchema; - var rows = result.ResultSet.Results.Rows; + var columns = result.ResultSet.Results.Columns; + var rowCount = columns[4].StringVal.Values.Length; - StringArray.Builder columnNameBuilder = new StringArray.Builder(); - StringArray.Builder TypeNameBuilder = new StringArray.Builder(); - - Field[] fields = new Field[rows.Count]; - for (int i = 0; i < rows.Count; i++) + Field[] fields = new Field[rowCount]; + for (int i = 0; i < rowCount; i++) { - fields[i] = new Field(rows[i].ColVals[4].StringVal.Value, - SchemaParser.GetArrowType((TTypeId) rows[i].ColVals[5].I32Val.Value), + fields[i] = new Field(columns[4].StringVal.Values.GetString(i), + SchemaParser.GetArrowType((TTypeId) columns[5].I32Val.Values.GetValue(i)), nullable: true /* ??? */); } return new Schema(fields, null); From 56ac604ce5af5a59884b643e31ff1d822bae8a33 Mon Sep 17 00:00:00 2001 From: Gopal Lal Date: Thu, 14 Mar 2024 22:44:31 +0530 Subject: [PATCH 09/61] Adding getObjects impl --- .../Apache/Hive2/HiveServer2Connection.cs | 3 +- .../Drivers/Apache/Spark/SparkConnection.cs | 511 ++++++++++++++++++ 2 files changed, 513 insertions(+), 1 deletion(-) diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs index 9901ba2d92..74cb728455 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -61,6 +61,7 @@ public void Open() public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) { + Dictionary>>> catalogMap = new Dictionary>>>(); if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) { TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); @@ -73,7 +74,7 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) { - TGetTablesReq getSchemasReq = new TGetTablesReq(this.sessionHandle); + TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); } if (depth == GetObjectsDepth.All) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 3e01e7427a..30546f7daa 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -19,9 +19,13 @@ using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; +using System.Text; +using System.Text.RegularExpressions; using System.Threading; +using System.Threading.Tasks; using Apache.Arrow.Adbc.Drivers.Apache.Hive2; using Apache.Arrow.Ipc; +using Apache.Arrow.Types; using Apache.Hive.Service.Rpc.Thrift; using Thrift; using Thrift.Protocol; @@ -32,6 +36,7 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark public class SparkConnection : HiveServer2Connection { const string userAgent = "AdbcExperimental/0.0"; + internal static TSparkGetDirectResults sparkGetDirectResults = new TSparkGetDirectResults(1000); internal static readonly Dictionary timestampConfig = new Dictionary { @@ -96,11 +101,517 @@ public override void Dispose() this.transport.Close(); this.client.Dispose(); + this.transport = null; this.client = null; } } + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + Dictionary>> catalogMap = new Dictionary>>(); + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) + { + TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + getCatalogsReq.GetDirectResults = sparkGetDirectResults; + + TGetCatalogsResp getCatalogsResp = this.client.GetCatalogs(getCatalogsReq).Result; + if (getCatalogsResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getCatalogsResp.Status.ErrorMessage); + } + + string catalogRegexp = PatternToRegEx(catalogPattern); + TRowSet resp = getCatalogsResp.DirectResults.ResultSet.Results; + IReadOnlyList list = resp.Columns[0].StringVal.Values; + for (int i = 0; i < list.Count; i++) + { + string col = list[i]; + string catalog = col; + + if (Regex.IsMatch(catalog, catalogRegexp, RegexOptions.IgnoreCase)) + { + catalogMap.Add(catalog, new Dictionary>()); + } + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) + { + TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + getSchemasReq.CatalogName = catalogPattern; + getSchemasReq.SchemaName = dbSchemaPattern; + getSchemasReq.GetDirectResults = sparkGetDirectResults; + + TGetSchemasResp getSchemasResp = this.client.GetSchemas(getSchemasReq).Result; + if (getSchemasResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getSchemasResp.Status.ErrorMessage); + } + TRowSet resp = getSchemasResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + catalogMap.GetValueOrDefault(catalog).Add(schemaDb, new Dictionary()); + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) + { + TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); + getTablesReq.CatalogName = catalogPattern; + getTablesReq.SchemaName = dbSchemaPattern; + getTablesReq.TableName = tableNamePattern; + getTablesReq.GetDirectResults = sparkGetDirectResults; + + TGetTablesResp getTablesResp = this.client.GetTables(getTablesReq).Result; + if (getTablesResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getTablesResp.Status.ErrorMessage); + } + TRowSet resp = getTablesResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList tableTypeList = resp.Columns[3].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string tableType = tableTypeList[i]; + TableInfoPair tableInfo = new TableInfoPair(); + tableInfo.Type = tableType; + tableInfo.Columns = new List(); + catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).Add(tableName, tableInfo); + } + } + + if (depth == GetObjectsDepth.All) + { + TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); + columnsReq.CatalogName = catalogPattern; + columnsReq.SchemaName = dbSchemaPattern; + columnsReq.TableName = tableNamePattern; + columnsReq.GetDirectResults = sparkGetDirectResults; + + if (!string.IsNullOrEmpty(columnNamePattern)) + columnsReq.ColumnName = columnNamePattern; + + var columnsResponse = this.client.GetColumns(columnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + TRowSet resp = columnsResponse.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList columnList = resp.Columns[3].StringVal.Values; + IReadOnlyList columnTypeList = (IReadOnlyList)resp.Columns[4].I32Val.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string column = columnList[i]; + int colType = columnTypeList[i]; + TableInfoPair tableInfo = catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).GetValueOrDefault(tableName); + tableInfo.Columns.Add(column); + tableInfo.ColType.Add(colType); + } + } + + StringArray.Builder catalogNameBuilder = new StringArray.Builder(); + List catalogDbSchemasValues = new List(); + + + foreach (KeyValuePair>> catalogEntry in catalogMap) + { + catalogNameBuilder.Append(catalogEntry.Key); + + if (depth == GetObjectsDepth.Catalogs) + { + catalogDbSchemasValues.Add(null); + } + else + { + catalogDbSchemasValues.Add(GetDbSchemas( + depth, catalogEntry.Value)); + } + + } + + List dataArrays = new List + { + catalogNameBuilder.Build(), + CreateNestedListArray(catalogDbSchemasValues, new StructType(StandardSchemas.DbSchemaSchema)), + }; + return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); + } + + private StructArray GetDbSchemas( + GetObjectsDepth depth, + Dictionary> schemaMap) + { + StringArray.Builder dbSchemaNameBuilder = new StringArray.Builder(); + List dbSchemaTablesValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair> schemaEntry in schemaMap) + { + + dbSchemaNameBuilder.Append(schemaEntry.Key); + length++; + nullBitmapBuffer.Append(true); + + if (depth == GetObjectsDepth.DbSchemas) + { + dbSchemaTablesValues.Add(null); + } + else + { + dbSchemaTablesValues.Add(GetTableSchemas( + depth, schemaEntry.Value)); + } + + } + + + List dataArrays = new List + { + dbSchemaNameBuilder.Build(), + CreateNestedListArray(dbSchemaTablesValues, new StructType(StandardSchemas.TableSchema)), + }; + + return new StructArray( + new StructType(StandardSchemas.DbSchemaSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetTableSchemas( + GetObjectsDepth depth, + Dictionary tableMap) + { + StringArray.Builder tableNameBuilder = new StringArray.Builder(); + StringArray.Builder tableTypeBuilder = new StringArray.Builder(); + List tableColumnsValues = new List(); + List tableConstraintsValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair tableEntry in tableMap) + { + tableNameBuilder.Append(tableEntry.Key); + tableTypeBuilder.Append(tableEntry.Value.Type); + nullBitmapBuffer.Append(true); + length++; + + + tableConstraintsValues.Add(null); + + + if (depth == GetObjectsDepth.Tables) + { + tableColumnsValues.Add(null); + } + else + { + tableColumnsValues.Add(GetColumnSchema(tableEntry.Value.Columns, tableEntry.Value.ColType)); + } + } + + + List dataArrays = new List + { + tableNameBuilder.Build(), + tableTypeBuilder.Build(), + CreateNestedListArray(tableColumnsValues, new StructType(StandardSchemas.ColumnSchema)), + CreateNestedListArray(tableConstraintsValues, new StructType(StandardSchemas.ConstraintSchema)) + }; + + return new StructArray( + new StructType(StandardSchemas.TableSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetColumnSchema( + List columns, List colTypes) + { + StringArray.Builder columnNameBuilder = new StringArray.Builder(); + Int32Array.Builder ordinalPositionBuilder = new Int32Array.Builder(); + StringArray.Builder remarksBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcDataTypeBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcTypeNameBuilder = new StringArray.Builder(); + Int32Array.Builder xdbcColumnSizeBuilder = new Int32Array.Builder(); + Int16Array.Builder xdbcDecimalDigitsBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNumPrecRadixBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNullableBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcColumnDefBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcSqlDataTypeBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcDatetimeSubBuilder = new Int16Array.Builder(); + Int32Array.Builder xdbcCharOctetLengthBuilder = new Int32Array.Builder(); + StringArray.Builder xdbcIsNullableBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeCatalogBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeSchemaBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeTableBuilder = new StringArray.Builder(); + BooleanArray.Builder xdbcIsAutoincrementBuilder = new BooleanArray.Builder(); + BooleanArray.Builder xdbcIsGeneratedcolumnBuilder = new BooleanArray.Builder(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + for (int i = 0; i < columns.Count; i++) + { + columnNameBuilder.Append(columns[i]); + ordinalPositionBuilder.Append((int)colTypes[i]); + remarksBuilder.Append(""); + + + + xdbcColumnSizeBuilder.AppendNull(); + xdbcDecimalDigitsBuilder.AppendNull(); + + + xdbcDataTypeBuilder.AppendNull(); + xdbcTypeNameBuilder.Append(dataType); + xdbcNumPrecRadixBuilder.AppendNull(); + xdbcNullableBuilder.AppendNull(); + xdbcColumnDefBuilder.AppendNull(); + xdbcSqlDataTypeBuilder.Append((short)colTypes[i]); + xdbcDatetimeSubBuilder.AppendNull(); + xdbcCharOctetLengthBuilder.AppendNull(); + xdbcIsNullableBuilder.Append("true"); + xdbcScopeCatalogBuilder.AppendNull(); + xdbcScopeSchemaBuilder.AppendNull(); + xdbcScopeTableBuilder.AppendNull(); + xdbcIsAutoincrementBuilder.AppendNull(); + xdbcIsGeneratedcolumnBuilder.Append(true); + nullBitmapBuffer.Append(true); + length++; + } + + List dataArrays = new List + { + columnNameBuilder.Build(), + ordinalPositionBuilder.Build(), + remarksBuilder.Build(), + xdbcDataTypeBuilder.Build(), + xdbcTypeNameBuilder.Build(), + xdbcColumnSizeBuilder.Build(), + xdbcDecimalDigitsBuilder.Build(), + xdbcNumPrecRadixBuilder.Build(), + xdbcNullableBuilder.Build(), + xdbcColumnDefBuilder.Build(), + xdbcSqlDataTypeBuilder.Build(), + xdbcDatetimeSubBuilder.Build(), + xdbcCharOctetLengthBuilder.Build(), + xdbcIsNullableBuilder.Build(), + xdbcScopeCatalogBuilder.Build(), + xdbcScopeSchemaBuilder.Build(), + xdbcScopeTableBuilder.Build(), + xdbcIsAutoincrementBuilder.Build(), + xdbcIsGeneratedcolumnBuilder.Build() + }; + + return new StructArray( + new StructType(StandardSchemas.ColumnSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private ListArray CreateNestedListArray(List arrayList, IArrowType dataType) + { + ArrowBuffer.Builder valueOffsetsBufferBuilder = new ArrowBuffer.Builder(); + ArrowBuffer.BitmapBuilder validityBufferBuilder = new ArrowBuffer.BitmapBuilder(); + List arrayDataList = new List(arrayList.Count); + int length = 0; + int nullCount = 0; + + foreach (IArrowArray? array in arrayList) + { + if (array == null) + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(false); + nullCount++; + } + else + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(true); + arrayDataList.Add(array.Data); + length += array.Length; + } + } + + ArrowBuffer validityBuffer = nullCount > 0 + ? validityBufferBuilder.Build() : ArrowBuffer.Empty; + + ArrayData? data = ArrayDataConcatenator.Concatenate(arrayDataList); + + if (data == null) + { + EmptyArrayCreationVisitor visitor = new EmptyArrayCreationVisitor(); + dataType.Accept(visitor); + data = visitor.Result; + } + + IArrowArray value = ArrowArrayFactory.BuildArray(data); + + valueOffsetsBufferBuilder.Append(length); + + return new ListArray(new ListType(dataType), arrayList.Count, + valueOffsetsBufferBuilder.Build(), value, + validityBuffer, nullCount, 0); + } + + private class EmptyArrayCreationVisitor : + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor + { + public ArrayData? Result { get; private set; } + + public void Visit(BooleanType type) + { + Result = new BooleanArray.Builder().Build().Data; + } + + public void Visit(FixedWidthType type) + { + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, ArrowBuffer.Empty }); + } + + public void Visit(BinaryType type) + { + Result = new BinaryArray.Builder().Build().Data; + } + + public void Visit(StringType type) + { + Result = new StringArray.Builder().Build().Data; + } + + public void Visit(ListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, MakeInt0Buffer() }, new[] { child }); + } + + public void Visit(FixedSizeListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, new[] { child }); + } + + public void Visit(StructType type) + { + ArrayData?[] children = new ArrayData[type.Fields.Count]; + for (int i = 0; i < type.Fields.Count; i++) + { + type.Fields[i].DataType.Accept(this); + children[i] = Result; + } + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, children); + } + + public void Visit(MapType type) + { + Result = new MapArray.Builder(type).Build().Data; + } + + public void Visit(IArrowType type) + { + throw new NotImplementedException($"EmptyArrayCreationVisitor for {type.Name} is not supported yet."); + } + + private static ArrowBuffer MakeInt0Buffer() + { + ArrowBuffer.Builder builder = new ArrowBuffer.Builder(); + builder.Append(0); + return builder.Build(); + } + } + + private string PatternToRegEx(string pattern) + { + if (pattern == null) + return ".*"; + + StringBuilder builder = new StringBuilder("(?i)^"); + string convertedPattern = pattern.Replace("_", ".").Replace("%", ".*"); + builder.Append(convertedPattern); + builder.Append("$"); + + return builder.ToString(); + } + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); + + } + + public struct TableInfoPair + { + public string Type { get; set; } + + public List Columns { get; set; } + + public List ColType { get; set; } + } + + internal class SparkInfoArrowStream : IArrowArrayStream + { + private Schema schema; + private RecordBatch? batch; + + public SparkInfoArrowStream(Schema schema, List data) + { + this.schema = schema; + this.batch = new RecordBatch(schema, data, data[0].Length); + } + + public Schema Schema { get { return this.schema; } } + + public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + RecordBatch? batch = this.batch; + this.batch = null; + return new ValueTask(batch); + } + + public void Dispose() + { + this.batch?.Dispose(); + this.batch = null; + } } } From d2fb852523dbf0c2353e21d07385e958b11a7c6f Mon Sep 17 00:00:00 2001 From: Gopal Lal Date: Thu, 14 Mar 2024 23:15:14 +0530 Subject: [PATCH 10/61] merge conflicts --- .../Drivers/Apache/Spark/SparkConnection.cs | 508 ++++++++++++++++++ 1 file changed, 508 insertions(+) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index b31d4a1c4a..f504891da3 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Net.Http; using System.Net.Http.Headers; using System.Text; @@ -108,5 +109,512 @@ public override void Dispose() } public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + Dictionary>> catalogMap = new Dictionary>>(); + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) + { + TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + getCatalogsReq.GetDirectResults = sparkGetDirectResults; + + TGetCatalogsResp getCatalogsResp = this.client.GetCatalogs(getCatalogsReq).Result; + if (getCatalogsResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getCatalogsResp.Status.ErrorMessage); + } + + string catalogRegexp = PatternToRegEx(catalogPattern); + TRowSet resp = getCatalogsResp.DirectResults.ResultSet.Results; + IReadOnlyList list = resp.Columns[0].StringVal.Values; + for (int i = 0; i < list.Count; i++) + { + string col = list[i]; + string catalog = col; + + if (Regex.IsMatch(catalog, catalogRegexp, RegexOptions.IgnoreCase)) + { + catalogMap.Add(catalog, new Dictionary>()); + } + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) + { + TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + getSchemasReq.CatalogName = catalogPattern; + getSchemasReq.SchemaName = dbSchemaPattern; + getSchemasReq.GetDirectResults = sparkGetDirectResults; + + TGetSchemasResp getSchemasResp = this.client.GetSchemas(getSchemasReq).Result; + if (getSchemasResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getSchemasResp.Status.ErrorMessage); + } + TRowSet resp = getSchemasResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + catalogMap.GetValueOrDefault(catalog).Add(schemaDb, new Dictionary()); + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) + { + TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); + getTablesReq.CatalogName = catalogPattern; + getTablesReq.SchemaName = dbSchemaPattern; + getTablesReq.TableName = tableNamePattern; + getTablesReq.GetDirectResults = sparkGetDirectResults; + + TGetTablesResp getTablesResp = this.client.GetTables(getTablesReq).Result; + if (getTablesResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getTablesResp.Status.ErrorMessage); + } + TRowSet resp = getTablesResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList tableTypeList = resp.Columns[3].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string tableType = tableTypeList[i]; + TableInfoPair tableInfo = new TableInfoPair(); + tableInfo.Type = tableType; + tableInfo.Columns = new List(); + catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).Add(tableName, tableInfo); + } + } + + if (depth == GetObjectsDepth.All) + { + TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); + columnsReq.CatalogName = catalogPattern; + columnsReq.SchemaName = dbSchemaPattern; + columnsReq.TableName = tableNamePattern; + columnsReq.GetDirectResults = sparkGetDirectResults; + + if (!string.IsNullOrEmpty(columnNamePattern)) + columnsReq.ColumnName = columnNamePattern; + + var columnsResponse = this.client.GetColumns(columnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + TRowSet resp = columnsResponse.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList columnList = resp.Columns[3].StringVal.Values; + IReadOnlyList columnTypeList = (IReadOnlyList)resp.Columns[4].I32Val.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string column = columnList[i]; + int colType = columnTypeList[i]; + TableInfoPair tableInfo = catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).GetValueOrDefault(tableName); + tableInfo.Columns.Add(column); + tableInfo.ColType.Add(colType); + } + } + + StringArray.Builder catalogNameBuilder = new StringArray.Builder(); + List catalogDbSchemasValues = new List(); + + + foreach (KeyValuePair>> catalogEntry in catalogMap) + { + catalogNameBuilder.Append(catalogEntry.Key); + + if (depth == GetObjectsDepth.Catalogs) + { + catalogDbSchemasValues.Add(null); + } + else + { + catalogDbSchemasValues.Add(GetDbSchemas( + depth, catalogEntry.Value)); + } + + } + + List dataArrays = new List + { + catalogNameBuilder.Build(), + CreateNestedListArray(catalogDbSchemasValues, new StructType(StandardSchemas.DbSchemaSchema)), + }; + return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); + } + + private StructArray GetDbSchemas( + GetObjectsDepth depth, + Dictionary> schemaMap) + { + StringArray.Builder dbSchemaNameBuilder = new StringArray.Builder(); + List dbSchemaTablesValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair> schemaEntry in schemaMap) + { + + dbSchemaNameBuilder.Append(schemaEntry.Key); + length++; + nullBitmapBuffer.Append(true); + + if (depth == GetObjectsDepth.DbSchemas) + { + dbSchemaTablesValues.Add(null); + } + else + { + dbSchemaTablesValues.Add(GetTableSchemas( + depth, schemaEntry.Value)); + } + + } + + + List dataArrays = new List + { + dbSchemaNameBuilder.Build(), + CreateNestedListArray(dbSchemaTablesValues, new StructType(StandardSchemas.TableSchema)), + }; + + return new StructArray( + new StructType(StandardSchemas.DbSchemaSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetTableSchemas( + GetObjectsDepth depth, + Dictionary tableMap) + { + StringArray.Builder tableNameBuilder = new StringArray.Builder(); + StringArray.Builder tableTypeBuilder = new StringArray.Builder(); + List tableColumnsValues = new List(); + List tableConstraintsValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair tableEntry in tableMap) + { + tableNameBuilder.Append(tableEntry.Key); + tableTypeBuilder.Append(tableEntry.Value.Type); + nullBitmapBuffer.Append(true); + length++; + + + tableConstraintsValues.Add(null); + + + if (depth == GetObjectsDepth.Tables) + { + tableColumnsValues.Add(null); + } + else + { + tableColumnsValues.Add(GetColumnSchema(tableEntry.Value.Columns, tableEntry.Value.ColType)); + } + } + + + List dataArrays = new List + { + tableNameBuilder.Build(), + tableTypeBuilder.Build(), + CreateNestedListArray(tableColumnsValues, new StructType(StandardSchemas.ColumnSchema)), + CreateNestedListArray(tableConstraintsValues, new StructType(StandardSchemas.ConstraintSchema)) + }; + + return new StructArray( + new StructType(StandardSchemas.TableSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetColumnSchema( + List columns, List colTypes) + { + StringArray.Builder columnNameBuilder = new StringArray.Builder(); + Int32Array.Builder ordinalPositionBuilder = new Int32Array.Builder(); + StringArray.Builder remarksBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcDataTypeBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcTypeNameBuilder = new StringArray.Builder(); + Int32Array.Builder xdbcColumnSizeBuilder = new Int32Array.Builder(); + Int16Array.Builder xdbcDecimalDigitsBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNumPrecRadixBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNullableBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcColumnDefBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcSqlDataTypeBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcDatetimeSubBuilder = new Int16Array.Builder(); + Int32Array.Builder xdbcCharOctetLengthBuilder = new Int32Array.Builder(); + StringArray.Builder xdbcIsNullableBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeCatalogBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeSchemaBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeTableBuilder = new StringArray.Builder(); + BooleanArray.Builder xdbcIsAutoincrementBuilder = new BooleanArray.Builder(); + BooleanArray.Builder xdbcIsGeneratedcolumnBuilder = new BooleanArray.Builder(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + for (int i = 0; i < columns.Count; i++) + { + columnNameBuilder.Append(columns[i]); + ordinalPositionBuilder.Append((int)colTypes[i]); + remarksBuilder.Append(""); + + + + xdbcColumnSizeBuilder.AppendNull(); + xdbcDecimalDigitsBuilder.AppendNull(); + + + xdbcDataTypeBuilder.AppendNull(); + xdbcTypeNameBuilder.Append(dataType); + xdbcNumPrecRadixBuilder.AppendNull(); + xdbcNullableBuilder.AppendNull(); + xdbcColumnDefBuilder.AppendNull(); + xdbcSqlDataTypeBuilder.Append((short)colTypes[i]); + xdbcDatetimeSubBuilder.AppendNull(); + xdbcCharOctetLengthBuilder.AppendNull(); + xdbcIsNullableBuilder.Append("true"); + xdbcScopeCatalogBuilder.AppendNull(); + xdbcScopeSchemaBuilder.AppendNull(); + xdbcScopeTableBuilder.AppendNull(); + xdbcIsAutoincrementBuilder.AppendNull(); + xdbcIsGeneratedcolumnBuilder.Append(true); + nullBitmapBuffer.Append(true); + length++; + } + + List dataArrays = new List + { + columnNameBuilder.Build(), + ordinalPositionBuilder.Build(), + remarksBuilder.Build(), + xdbcDataTypeBuilder.Build(), + xdbcTypeNameBuilder.Build(), + xdbcColumnSizeBuilder.Build(), + xdbcDecimalDigitsBuilder.Build(), + xdbcNumPrecRadixBuilder.Build(), + xdbcNullableBuilder.Build(), + xdbcColumnDefBuilder.Build(), + xdbcSqlDataTypeBuilder.Build(), + xdbcDatetimeSubBuilder.Build(), + xdbcCharOctetLengthBuilder.Build(), + xdbcIsNullableBuilder.Build(), + xdbcScopeCatalogBuilder.Build(), + xdbcScopeSchemaBuilder.Build(), + xdbcScopeTableBuilder.Build(), + xdbcIsAutoincrementBuilder.Build(), + xdbcIsGeneratedcolumnBuilder.Build() + }; + + return new StructArray( + new StructType(StandardSchemas.ColumnSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private ListArray CreateNestedListArray(List arrayList, IArrowType dataType) + { + ArrowBuffer.Builder valueOffsetsBufferBuilder = new ArrowBuffer.Builder(); + ArrowBuffer.BitmapBuilder validityBufferBuilder = new ArrowBuffer.BitmapBuilder(); + List arrayDataList = new List(arrayList.Count); + int length = 0; + int nullCount = 0; + + foreach (IArrowArray? array in arrayList) + { + if (array == null) + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(false); + nullCount++; + } + else + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(true); + arrayDataList.Add(array.Data); + length += array.Length; + } + } + + ArrowBuffer validityBuffer = nullCount > 0 + ? validityBufferBuilder.Build() : ArrowBuffer.Empty; + + ArrayData? data = ArrayDataConcatenator.Concatenate(arrayDataList); + + if (data == null) + { + EmptyArrayCreationVisitor visitor = new EmptyArrayCreationVisitor(); + dataType.Accept(visitor); + data = visitor.Result; + } + + IArrowArray value = ArrowArrayFactory.BuildArray(data); + + valueOffsetsBufferBuilder.Append(length); + + return new ListArray(new ListType(dataType), arrayList.Count, + valueOffsetsBufferBuilder.Build(), value, + validityBuffer, nullCount, 0); + } + + private class EmptyArrayCreationVisitor : + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor + { + public ArrayData? Result { get; private set; } + + public void Visit(BooleanType type) + { + Result = new BooleanArray.Builder().Build().Data; + } + + public void Visit(FixedWidthType type) + { + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, ArrowBuffer.Empty }); + } + + public void Visit(BinaryType type) + { + Result = new BinaryArray.Builder().Build().Data; + } + + public void Visit(StringType type) + { + Result = new StringArray.Builder().Build().Data; + } + + public void Visit(ListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, MakeInt0Buffer() }, new[] { child }); + } + + public void Visit(FixedSizeListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, new[] { child }); + } + + public void Visit(StructType type) + { + ArrayData?[] children = new ArrayData[type.Fields.Count]; + for (int i = 0; i < type.Fields.Count; i++) + { + type.Fields[i].DataType.Accept(this); + children[i] = Result; + } + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, children); + } + + public void Visit(MapType type) + { + Result = new MapArray.Builder(type).Build().Data; + } + + public void Visit(IArrowType type) + { + throw new NotImplementedException($"EmptyArrayCreationVisitor for {type.Name} is not supported yet."); + } + + private static ArrowBuffer MakeInt0Buffer() + { + ArrowBuffer.Builder builder = new ArrowBuffer.Builder(); + builder.Append(0); + return builder.Build(); + } + } + + private string PatternToRegEx(string pattern) + { + if (pattern == null) + return ".*"; + + StringBuilder builder = new StringBuilder("(?i)^"); + string convertedPattern = pattern.Replace("_", ".").Replace("%", ".*"); + builder.Append(convertedPattern); + builder.Append("$"); + + return builder.ToString(); + } + + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); + + } + + public struct TableInfoPair + { + public string Type { get; set; } + + public List Columns { get; set; } + + public List ColType { get; set; } + } + + internal class SparkInfoArrowStream : IArrowArrayStream + { + private Schema schema; + private RecordBatch? batch; + + public SparkInfoArrowStream(Schema schema, List data) + { + this.schema = schema; + this.batch = new RecordBatch(schema, data, data[0].Length); + } + + public Schema Schema { get { return this.schema; } } + + public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + RecordBatch? batch = this.batch; + this.batch = null; + return new ValueTask(batch); + } + + public void Dispose() + { + this.batch?.Dispose(); + this.batch = null; + } } } From b927c3179f16ad8dd70196458478701ae98de8c0 Mon Sep 17 00:00:00 2001 From: Gopal Lal Date: Thu, 14 Mar 2024 23:23:02 +0530 Subject: [PATCH 11/61] Adding back vikrant's changes --- .vs/VSWorkspaceState.json | 7 +++++ .vs/arrow-adbc/v17/.wsuo | Bin 0 -> 11264 bytes .vs/arrow-adbc/v17/DocumentLayout.json | 23 ++++++++++++++ .../Drivers/Apache/Spark/SparkConnection.cs | 29 +++++++++++++++++- 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/arrow-adbc/v17/.wsuo create mode 100644 .vs/arrow-adbc/v17/DocumentLayout.json diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000000..ff583ff94e --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\Apache.Arrow.Adbc.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/arrow-adbc/v17/.wsuo b/.vs/arrow-adbc/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..50e7e37621bd862aad90f1d49a78262638f154eb GIT binary patch literal 11264 zcmeHNTW=dh6h2N#q2>~c^Ua*g%$Z|9d~ojZ zPd{JyOFVQ%PRNs;Q*zR%PZ)VQEAkS`tb4Mvv%^=+BipAV#DUvV!KWd^a$U+uYjTgG zj7&o^xGVF)4!s_q{o}opTaOaYv)!|9<9Q%f2!3J;y;7>0X$LH{~FqAyXIW}H5Y*V%gwP^O+G!>EWd#CMLe(Iq0Lj?Oiv*_ zhllN1?$goXz|*wEg9#w5sT2qI0ow0*~&s&jqv2%pYn-9Mj3=;PI4{53-J2 zS!UJu3OtWh)Yg;_g<3$qd*FJev z{_}kQPOV2AI$@b}gJ zvRLmXPEvT(7N3H<>4U9vZj*8Fyg1!VP zD*gh{sSC7)s$mJRzXbV7pFS!+aW#Gp8t%Z-xVo<~b^$A^$*9tQ^IROo4pqU*3u-6W z0-qWjMzH>_<^MYR>HVi0e4bMc?ASb&%b4{V#+iwMPkCwi=dfPx{2Yy1Mugj_quq0j zpF`&42+zj)?kfYPxB!mrvjS{oT0z2Y>wjhhF+eooBzDKL=hf@ul=cq zz2MW1*uOPKbq2-A)a(2s1BEoycM-EmFLmZP2c1tCoR5R0&!ISd*@tq!i)U7*Wmy)n zC-bzbBfpB%tcsnxgwvdNyb|h6uXb6Tb5(WbEvqw-KESqE$QQ8RJ80jT=zDx2Uv_R7 z(4wWc0S!7-^WN+3<)$VtqLw4yOyZ(#eyrV6c+Tv@{DBeg4O#dYu4k9Sxk_)Op*&4} z0~7fOzee)Z{IG2vyvJ}47_rl-Onzk|V`Wly+DaEzl2-n*Jz+WaSU#B_pGc?1ClyoF zb(Q0+&#-*e$}LPM@%h$qiW5`m{G^q1#;2@wI-Roeb}D0yC7sE%?OZNqrdIBg%bba( zyALRV_%zaX1Fy?4Vi9Ee7&MpPVbrVsnDIF?e-QCMj^C%l#eshO=Xl3|vN#17vEz8- zz{5r)ENuUY6Mx}do%`s1k!ex;HD)*C9A$iO{3%BKPyG+*e~kaB_}4`UjBmBD*YQ6;eD@cyf{OQanh)c@+)K~n x;T(cdTW|PVO%Q%x{$0yo@%^aEUu#9&_+78@Kk6>y$JE?7@yCArP)jgg`X6u9-yr}1 literal 0 HcmV?d00001 diff --git a/.vs/arrow-adbc/v17/DocumentLayout.json b/.vs/arrow-adbc/v17/DocumentLayout.json new file mode 100644 index 0000000000..c88b2bf087 --- /dev/null +++ b/.vs/arrow-adbc/v17/DocumentLayout.json @@ -0,0 +1,23 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\gopal.lal\\source\\repos\\arrow-adbc\\", + "Documents": [], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": -1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index f504891da3..aed90c483d 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -108,7 +108,34 @@ public override void Dispose() } } - public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) + { + TGetColumnsReq getColumnsReq = new TGetColumnsReq(this.sessionHandle); + getColumnsReq.CatalogName = catalog; + getColumnsReq.SchemaName = dbSchema; + getColumnsReq.TableName = tableName; + getColumnsReq.GetDirectResults = new TSparkGetDirectResults(); + + var columnsResponse = this.client.GetColumns(getColumnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + var result = columnsResponse.DirectResults; + var resultSchema = result.ResultSetMetadata.ArrowSchema; + var columns = result.ResultSet.Results.Columns; + var rowCount = columns[4].StringVal.Values.Length; + + Field[] fields = new Field[rowCount]; + for (int i = 0; i < rowCount; i++) + { + fields[i] = new Field(columns[4].StringVal.Values.GetString(i), + SchemaParser.GetArrowType((TTypeId)columns[5].I32Val.Values.GetValue(i)), + nullable: true /* ??? */); + } + return new Schema(fields, null); + } public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) { From 8f0803f4367f3ffb4f72bdda7a5f539036376138 Mon Sep 17 00:00:00 2001 From: Gopal Lal Date: Thu, 14 Mar 2024 23:27:28 +0530 Subject: [PATCH 12/61] Fixing compile error --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index aed90c483d..c5c05fe468 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -421,7 +421,7 @@ private StructArray GetColumnSchema( xdbcDataTypeBuilder.AppendNull(); - xdbcTypeNameBuilder.Append(dataType); + xdbcTypeNameBuilder.Append(""); xdbcNumPrecRadixBuilder.AppendNull(); xdbcNullableBuilder.AppendNull(); xdbcColumnDefBuilder.AppendNull(); @@ -604,9 +604,6 @@ private string PatternToRegEx(string pattern) return builder.ToString(); } - - public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new NotImplementedException(); - } public struct TableInfoPair From 4313cc2a13cf631d1666e476d4102adc8e15e946 Mon Sep 17 00:00:00 2001 From: Jade Wang <111902719+jadewang-db@users.noreply.github.com> Date: Thu, 14 Mar 2024 20:28:50 +0000 Subject: [PATCH 13/61] make unit test working --- .../Drivers/Apache/Spark/SparkConnection.cs | 181 +++++++++++++++++- 1 file changed, 171 insertions(+), 10 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index c5c05fe468..49929e7b6f 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; @@ -36,7 +37,20 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkConnection : HiveServer2Connection { - const string userAgent = "AdbcExperimental/0.0"; + const string userAgent = "MicrosoftSparkODBCDriver/2.7.6.1014"; + + readonly IReadOnlyList infoSupportedCodes = new List { + AdbcInfoCode.DriverName, + AdbcInfoCode.DriverVersion, + AdbcInfoCode.DriverArrowVersion, + AdbcInfoCode.VendorName + }; + + const string infoDriverName = "ADBC Spark Driver"; + const string infoDriverVersion = "1.0.0"; + const string infoVendorName = "Spark"; + const string infoDriverArrowVersion = "1.0.0"; + internal static TSparkGetDirectResults sparkGetDirectResults = new TSparkGetDirectResults(1000); internal static readonly Dictionary timestampConfig = new Dictionary @@ -72,7 +86,7 @@ protected override TProtocol CreateProtocol() TConfiguration config = new TConfiguration(); - THttpTransport transport = new THttpTransport(httpClient, config); + ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); // can switch to the one below if want to use the experimental one with IPeekableTransport // ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); transport.OpenAsync(CancellationToken.None).Wait(); @@ -102,19 +116,150 @@ public override void Dispose() this.transport.Close(); this.client.Dispose(); - + this.transport = null; this.client = null; } } + public override IArrowArrayStream GetInfo(List codes) + { + const int strValTypeID = 0; + + UnionType infoUnionType = new UnionType( + new List() + { + new Field("string_value", StringType.Default, true), + new Field("bool_value", BooleanType.Default, true), + new Field("int64_value", Int64Type.Default, true), + new Field("int32_bitmask", Int32Type.Default, true), + new Field( + "string_list", + new ListType( + new Field("item", StringType.Default, true) + ), + false + ), + new Field( + "int32_to_int32_list_map", + new ListType( + new Field("entries", new StructType( + new List() + { + new Field("key", Int32Type.Default, false), + new Field("value", Int32Type.Default, true), + } + ), false) + ), + true + ) + }, + new int[] { 0, 1, 2, 3, 4, 5 }, + UnionMode.Dense); + + if (codes.Count == 0) + { + codes = new List(infoSupportedCodes); + } + + UInt32Array.Builder infoNameBuilder = new UInt32Array.Builder(); + ArrowBuffer.Builder typeBuilder = new ArrowBuffer.Builder(); + ArrowBuffer.Builder offsetBuilder = new ArrowBuffer.Builder(); + StringArray.Builder stringInfoBuilder = new StringArray.Builder(); + int nullCount = 0; + int arrayLength = codes.Count; + + foreach (AdbcInfoCode code in codes) + { + switch (code) + { + case AdbcInfoCode.DriverName: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverName); + break; + case AdbcInfoCode.DriverVersion: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverVersion); + break; + case AdbcInfoCode.DriverArrowVersion: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverArrowVersion); + break; + case AdbcInfoCode.VendorName: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoVendorName); + break; + default: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.AppendNull(); + nullCount++; + break; + } + } + + StructType entryType = new StructType( + new List(){ + new Field("key", Int32Type.Default, false), + new Field("value", Int32Type.Default, true)}); + + StructArray entriesDataArray = new StructArray(entryType, 0, + new[] { new Int32Array.Builder().Build(), new Int32Array.Builder().Build() }, + new ArrowBuffer.BitmapBuilder().Build()); + + List childrenArrays = new List() + { + stringInfoBuilder.Build(), + new BooleanArray.Builder().Build(), + new Int64Array.Builder().Build(), + new Int32Array.Builder().Build(), + new ListArray.Builder(StringType.Default).Build(), + CreateNestedListArray(new List(){ entriesDataArray }, entryType) + }; + + DenseUnionArray infoValue = new DenseUnionArray(infoUnionType, arrayLength, childrenArrays, typeBuilder.Build(), offsetBuilder.Build(), nullCount); + + List dataArrays = new List + { + infoNameBuilder.Build(), + infoValue + }; + + return new SparkInfoArrowStream(StandardSchemas.GetInfoSchema, dataArrays); + + } + + public override IArrowArrayStream GetInfo(List codes) => base.GetInfo(codes); + + public override IArrowArrayStream GetTableTypes() + { + StringArray.Builder tableTypesBuilder = new StringArray.Builder(); + tableTypesBuilder.AppendRange(new string[] { "BASE TABLE", "VIEW" }); + + List dataArrays = new List + { + tableTypesBuilder.Build() + }; + + return new SparkInfoArrowStream(StandardSchemas.TableTypesSchema, dataArrays); + } + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) { TGetColumnsReq getColumnsReq = new TGetColumnsReq(this.sessionHandle); getColumnsReq.CatalogName = catalog; getColumnsReq.SchemaName = dbSchema; getColumnsReq.TableName = tableName; - getColumnsReq.GetDirectResults = new TSparkGetDirectResults(); + getColumnsReq.GetDirectResults = sparkGetDirectResults; var columnsResponse = this.client.GetColumns(getColumnsReq).Result; if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) @@ -125,17 +270,32 @@ public override Schema GetTableSchema(string catalog, string dbSchema, string ta var result = columnsResponse.DirectResults; var resultSchema = result.ResultSetMetadata.ArrowSchema; var columns = result.ResultSet.Results.Columns; - var rowCount = columns[4].StringVal.Values.Length; + var rowCount = columns[3].StringVal.Values.Length; Field[] fields = new Field[rowCount]; for (int i = 0; i < rowCount; i++) { - fields[i] = new Field(columns[4].StringVal.Values.GetString(i), - SchemaParser.GetArrowType((TTypeId)columns[5].I32Val.Values.GetValue(i)), + fields[i] = new Field(columns[3].StringVal.Values.GetString(i), + SchemaParser.GetArrowType((TTypeId)columns[4].I32Val.Values.GetValue(i)), nullable: true /* ??? */); } return new Schema(fields, null); } + private static IReadOnlyList ConvertSpanToReadOnlyList(Int32Array span) + { + // Initialize a list with the capacity equal to the length of the span + // to avoid resizing during the addition of elements + List list = new List(span.Length); + + // Copy elements from the span to the list + foreach (int item in span) + { + list.Add(item); + } + + // Return the list as IReadOnlyList + return list; + } public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) { @@ -180,8 +340,8 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal } TRowSet resp = getSchemasResp.DirectResults.ResultSet.Results; - IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; - IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList catalogList = resp.Columns[1].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[0].StringVal.Values; for (int i = 0; i < catalogList.Count; i++) { @@ -220,6 +380,7 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal TableInfoPair tableInfo = new TableInfoPair(); tableInfo.Type = tableType; tableInfo.Columns = new List(); + tableInfo.ColType = new List(); catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).Add(tableName, tableInfo); } } @@ -247,7 +408,7 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; IReadOnlyList tableList = resp.Columns[2].StringVal.Values; IReadOnlyList columnList = resp.Columns[3].StringVal.Values; - IReadOnlyList columnTypeList = (IReadOnlyList)resp.Columns[4].I32Val.Values; + IReadOnlyList columnTypeList = ConvertSpanToReadOnlyList(resp.Columns[4].I32Val.Values); for (int i = 0; i < catalogList.Count; i++) { From 5701c04ee1f2e2891199dfc7001be5975424107e Mon Sep 17 00:00:00 2001 From: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:28:09 -0700 Subject: [PATCH 14/61] Add databricks.md for testing from Yunbo --- databricks.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 databricks.md diff --git a/databricks.md b/databricks.md new file mode 100644 index 0000000000..785b947fc4 --- /dev/null +++ b/databricks.md @@ -0,0 +1,3 @@ +# Databricks ADBC Driver Hackathon (2024) + +tl;dr: demoonstrate connecting Power BI to Databricks using ADBC driver in import mode and direct query mode (optional). \ No newline at end of file From f7ca69323383da2f359c3bc73047dc8a6492f66a Mon Sep 17 00:00:00 2001 From: Jade Wang <111902719+jadewang-db@users.noreply.github.com> Date: Fri, 15 Mar 2024 05:37:51 +0000 Subject: [PATCH 15/61] Revert "Merge branch 'dev/apache-drivers' of github.com:gopalldb/arrow-adbc into dev/apache-drivers" This reverts commit ea46162673b69d26f87264ef79acfee5f6600f8f, reversing changes made to 5701c04ee1f2e2891199dfc7001be5975424107e. --- .vs/VSWorkspaceState.json | 7 - .vs/arrow-adbc/v17/.wsuo | Bin 11264 -> 0 bytes .vs/arrow-adbc/v17/DocumentLayout.json | 23 - csharp/Apache.Arrow.Adbc.sln | 14 - .../Apache.Arrow.Adbc.Drivers.Apache.csproj | 15 - .../Apache/Hive2/HiveServer2Connection.cs | 209 - .../Apache/Hive2/HiveServer2Statement.cs | 83 - .../Drivers/Apache/Impala/ImpalaConnection.cs | 80 - .../Drivers/Apache/Impala/ImpalaDatabase.cs | 38 - .../src/Drivers/Apache/Impala/ImpalaDriver.cs | 29 - .../Drivers/Apache/Impala/ImpalaStatement.cs | 114 - .../Drivers/Apache/Spark/SparkConnection.cs | 805 -- .../src/Drivers/Apache/Spark/SparkDatabase.cs | 38 - .../src/Drivers/Apache/Spark/SparkDriver.cs | 29 - .../Drivers/Apache/Spark/SparkStatement.cs | 129 - .../src/Drivers/Apache/Thrift/ChunkStream.cs | 109 - .../Apache/Thrift/IPeekableTransport.cs | 27 - .../src/Drivers/Apache/Thrift/SchemaParser.cs | 82 - .../Service/Rpc/Thrift/TArrayTypeEntry.cs | 155 - .../Service/Rpc/Thrift/TBinaryColumn.cs | 234 - .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 198 - .../Thrift/Service/Rpc/Thrift/TBoolValue.cs | 178 - .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 196 - .../Thrift/Service/Rpc/Thrift/TByteValue.cs | 178 - .../Thrift/Service/Rpc/Thrift/TCLIService.cs | 9212 ----------------- .../Rpc/Thrift/TCLIService2.Constants.cs | 89 - .../Rpc/Thrift/TCLIService2.Extensions.cs | 654 -- .../Service/Rpc/Thrift/TCacheLookupResult.cs | 24 - .../Rpc/Thrift/TCancelDelegationTokenReq.cs | 210 - .../Rpc/Thrift/TCancelDelegationTokenResp.cs | 168 - .../Service/Rpc/Thrift/TCancelOperationReq.cs | 168 - .../Rpc/Thrift/TCancelOperationResp.cs | 168 - .../Service/Rpc/Thrift/TCloseOperationReq.cs | 168 - .../Service/Rpc/Thrift/TCloseOperationResp.cs | 168 - .../Service/Rpc/Thrift/TCloseSessionReq.cs | 168 - .../Service/Rpc/Thrift/TCloseSessionResp.cs | 168 - .../Rpc/Thrift/TCloudFetchDisabledReason.cs | 28 - .../Thrift/Service/Rpc/Thrift/TColumn.cs | 536 - .../Thrift/Service/Rpc/Thrift/TColumnDesc.cs | 295 - .../Thrift/Service/Rpc/Thrift/TColumnValue.cs | 485 - .../Rpc/Thrift/TDBSqlCloudResultFile.cs | 287 - .../Service/Rpc/Thrift/TDBSqlConfValue.cs | 178 - .../Rpc/Thrift/TDBSqlSessionCapabilities.cs | 178 - .../Service/Rpc/Thrift/TDBSqlSessionConf.cs | 548 - .../Service/Rpc/Thrift/TDBSqlTempView.cs | 346 - .../Service/Rpc/Thrift/TDoubleColumn.cs | 199 - .../Thrift/Service/Rpc/Thrift/TDoubleValue.cs | 178 - .../Service/Rpc/Thrift/TDownloadDataReq.cs | 388 - .../Service/Rpc/Thrift/TDownloadDataResp.cs | 211 - .../Rpc/Thrift/TExecuteStatementReq.cs | 1124 -- .../Rpc/Thrift/TExecuteStatementResp.cs | 569 - .../Service/Rpc/Thrift/TExpressionInfo.cs | 728 -- .../Service/Rpc/Thrift/TFetchOrientation.cs | 26 - .../Service/Rpc/Thrift/TFetchResultsReq.cs | 437 - .../Service/Rpc/Thrift/TFetchResultsResp.cs | 372 - .../Service/Rpc/Thrift/TGetCatalogsReq.cs | 373 - .../Service/Rpc/Thrift/TGetCatalogsResp.cs | 274 - .../Service/Rpc/Thrift/TGetColumnsReq.cs | 569 - .../Service/Rpc/Thrift/TGetColumnsResp.cs | 274 - .../Rpc/Thrift/TGetCrossReferenceReq.cs | 667 -- .../Rpc/Thrift/TGetCrossReferenceResp.cs | 274 - .../Rpc/Thrift/TGetDelegationTokenReq.cs | 252 - .../Rpc/Thrift/TGetDelegationTokenResp.cs | 223 - .../Service/Rpc/Thrift/TGetFunctionsReq.cs | 513 - .../Service/Rpc/Thrift/TGetFunctionsResp.cs | 274 - .../Thrift/Service/Rpc/Thrift/TGetInfoReq.cs | 202 - .../Thrift/Service/Rpc/Thrift/TGetInfoResp.cs | 211 - .../Thrift/Service/Rpc/Thrift/TGetInfoType.cs | 68 - .../Service/Rpc/Thrift/TGetInfoValue.cs | 428 - .../Rpc/Thrift/TGetOperationStatusReq.cs | 223 - .../Rpc/Thrift/TGetOperationStatusResp.cs | 963 -- .../Service/Rpc/Thrift/TGetPrimaryKeysReq.cs | 520 - .../Service/Rpc/Thrift/TGetPrimaryKeysResp.cs | 274 - .../Service/Rpc/Thrift/TGetQueryIdReq.cs | 168 - .../Service/Rpc/Thrift/TGetQueryIdResp.cs | 167 - .../Rpc/Thrift/TGetResultSetMetadataReq.cs | 223 - .../Rpc/Thrift/TGetResultSetMetadataResp.cs | 779 -- .../Service/Rpc/Thrift/TGetSchemasReq.cs | 471 - .../Service/Rpc/Thrift/TGetSchemasResp.cs | 274 - .../Service/Rpc/Thrift/TGetTableTypesReq.cs | 373 - .../Service/Rpc/Thrift/TGetTableTypesResp.cs | 274 - .../Service/Rpc/Thrift/TGetTablesReq.cs | 584 -- .../Service/Rpc/Thrift/TGetTablesResp.cs | 274 - .../Service/Rpc/Thrift/TGetTypeInfoReq.cs | 373 - .../Service/Rpc/Thrift/TGetTypeInfoResp.cs | 274 - .../Service/Rpc/Thrift/THandleIdentifier.cs | 209 - .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 200 - .../Thrift/Service/Rpc/Thrift/TI16Value.cs | 178 - .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 199 - .../Thrift/Service/Rpc/Thrift/TI32Value.cs | 178 - .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 200 - .../Thrift/Service/Rpc/Thrift/TI64Value.cs | 178 - .../Service/Rpc/Thrift/TJobExecutionStatus.cs | 23 - .../Service/Rpc/Thrift/TMapTypeEntry.cs | 185 - .../Thrift/Service/Rpc/Thrift/TNamespace.cs | 228 - .../Service/Rpc/Thrift/TOpenSessionReq.cs | 660 -- .../Service/Rpc/Thrift/TOpenSessionResp.cs | 489 - .../Service/Rpc/Thrift/TOperationHandle.cs | 287 - .../Rpc/Thrift/TOperationIdempotencyType.cs | 23 - .../Service/Rpc/Thrift/TOperationState.cs | 29 - .../Rpc/Thrift/TOperationTimeoutLevel.cs | 22 - .../Service/Rpc/Thrift/TOperationType.cs | 30 - .../Service/Rpc/Thrift/TPrimitiveTypeEntry.cs | 215 - .../Service/Rpc/Thrift/TProgressUpdateResp.cs | 390 - .../Service/Rpc/Thrift/TProtocolVersion.cs | 38 - .../Rpc/Thrift/TRenewDelegationTokenReq.cs | 210 - .../Rpc/Thrift/TRenewDelegationTokenResp.cs | 168 - .../Rpc/Thrift/TResultPersistenceMode.cs | 23 - .../Apache/Thrift/Service/Rpc/Thrift/TRow.cs | 183 - .../Thrift/Service/Rpc/Thrift/TRowSet.cs | 512 - .../Service/Rpc/Thrift/TSessionHandle.cs | 168 - .../Service/Rpc/Thrift/TSetClientInfoReq.cs | 241 - .../Service/Rpc/Thrift/TSetClientInfoResp.cs | 168 - .../Service/Rpc/Thrift/TSparkArrowBatch.cs | 197 - .../Rpc/Thrift/TSparkArrowResultLink.cs | 287 - .../Service/Rpc/Thrift/TSparkArrowTypes.cs | 328 - .../Service/Rpc/Thrift/TSparkDirectResults.cs | 332 - .../Rpc/Thrift/TSparkGetDirectResults.cs | 210 - .../Service/Rpc/Thrift/TSparkRowSetType.cs | 24 - .../Thrift/Service/Rpc/Thrift/TStatus.cs | 376 - .../Thrift/Service/Rpc/Thrift/TStatusCode.cs | 25 - .../Service/Rpc/Thrift/TStringColumn.cs | 233 - .../Thrift/Service/Rpc/Thrift/TStringValue.cs | 178 - .../Service/Rpc/Thrift/TStructTypeEntry.cs | 185 - .../Thrift/Service/Rpc/Thrift/TTableSchema.cs | 183 - .../Thrift/Service/Rpc/Thrift/TTypeDesc.cs | 183 - .../Thrift/Service/Rpc/Thrift/TTypeEntry.cs | 434 - .../Thrift/Service/Rpc/Thrift/TTypeId.cs | 43 - .../Service/Rpc/Thrift/TTypeQualifierValue.cs | 228 - .../Service/Rpc/Thrift/TTypeQualifiers.cs | 186 - .../Service/Rpc/Thrift/TUnionTypeEntry.cs | 185 - .../Service/Rpc/Thrift/TUploadDataReq.cs | 314 - .../Service/Rpc/Thrift/TUploadDataResp.cs | 211 - .../Rpc/Thrift/TUserDefinedTypeEntry.cs | 167 - .../Apache/Thrift/ThriftSocketTransport.cs | 68 - ...kup.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 - ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 - .../Drivers/Apache/ApacheTestConfiguration.cs | 37 - .../test/Drivers/Apache/Impala/ImpalaTests.cs | 50 - .../Apache/Impala/Resources/impalaconfig.json | 6 - .../test/Drivers/Apache/Spark/DriverTests.cs | 206 - .../Apache/Spark/Resources/sparkconfig.json | 13 - .../Apache/Spark/SparkTestConfiguration.cs | 26 - .../Drivers/Apache/Spark/SparkTestingUtils.cs | 109 - 144 files changed, 43006 deletions(-) delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/arrow-adbc/v17/.wsuo delete mode 100644 .vs/arrow-adbc/v17/DocumentLayout.json delete mode 100644 csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj delete mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs delete mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs delete mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs delete mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs delete mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs delete mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs delete mode 100644 csharp/src/Drivers/Apache/Spark/SparkConnection.cs delete mode 100644 csharp/src/Drivers/Apache/Spark/SparkDatabase.cs delete mode 100644 csharp/src/Drivers/Apache/Spark/SparkDriver.cs delete mode 100644 csharp/src/Drivers/Apache/Spark/SparkStatement.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/ChunkStream.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/SchemaParser.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs delete mode 100644 csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs delete mode 100644 csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj delete mode 100644 csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj delete mode 100644 csharp/test/Drivers/Apache/ApacheTestConfiguration.cs delete mode 100644 csharp/test/Drivers/Apache/Impala/ImpalaTests.cs delete mode 100644 csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json delete mode 100644 csharp/test/Drivers/Apache/Spark/DriverTests.cs delete mode 100644 csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json delete mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs delete mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index ff583ff94e..0000000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\Apache.Arrow.Adbc.sln", - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/.vs/arrow-adbc/v17/.wsuo b/.vs/arrow-adbc/v17/.wsuo deleted file mode 100644 index 50e7e37621bd862aad90f1d49a78262638f154eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11264 zcmeHNTW=dh6h2N#q2>~c^Ua*g%$Z|9d~ojZ zPd{JyOFVQ%PRNs;Q*zR%PZ)VQEAkS`tb4Mvv%^=+BipAV#DUvV!KWd^a$U+uYjTgG zj7&o^xGVF)4!s_q{o}opTaOaYv)!|9<9Q%f2!3J;y;7>0X$LH{~FqAyXIW}H5Y*V%gwP^O+G!>EWd#CMLe(Iq0Lj?Oiv*_ zhllN1?$goXz|*wEg9#w5sT2qI0ow0*~&s&jqv2%pYn-9Mj3=;PI4{53-J2 zS!UJu3OtWh)Yg;_g<3$qd*FJev z{_}kQPOV2AI$@b}gJ zvRLmXPEvT(7N3H<>4U9vZj*8Fyg1!VP zD*gh{sSC7)s$mJRzXbV7pFS!+aW#Gp8t%Z-xVo<~b^$A^$*9tQ^IROo4pqU*3u-6W z0-qWjMzH>_<^MYR>HVi0e4bMc?ASb&%b4{V#+iwMPkCwi=dfPx{2Yy1Mugj_quq0j zpF`&42+zj)?kfYPxB!mrvjS{oT0z2Y>wjhhF+eooBzDKL=hf@ul=cq zz2MW1*uOPKbq2-A)a(2s1BEoycM-EmFLmZP2c1tCoR5R0&!ISd*@tq!i)U7*Wmy)n zC-bzbBfpB%tcsnxgwvdNyb|h6uXb6Tb5(WbEvqw-KESqE$QQ8RJ80jT=zDx2Uv_R7 z(4wWc0S!7-^WN+3<)$VtqLw4yOyZ(#eyrV6c+Tv@{DBeg4O#dYu4k9Sxk_)Op*&4} z0~7fOzee)Z{IG2vyvJ}47_rl-Onzk|V`Wly+DaEzl2-n*Jz+WaSU#B_pGc?1ClyoF zb(Q0+&#-*e$}LPM@%h$qiW5`m{G^q1#;2@wI-Roeb}D0yC7sE%?OZNqrdIBg%bba( zyALRV_%zaX1Fy?4Vi9Ee7&MpPVbrVsnDIF?e-QCMj^C%l#eshO=Xl3|vN#17vEz8- zz{5r)ENuUY6Mx}do%`s1k!ex;HD)*C9A$iO{3%BKPyG+*e~kaB_}4`UjBmBD*YQ6;eD@cyf{OQanh)c@+)K~n x;T(cdTW|PVO%Q%x{$0yo@%^aEUu#9&_+78@Kk6>y$JE?7@yCArP)jgg`X6u9-yr}1 diff --git a/.vs/arrow-adbc/v17/DocumentLayout.json b/.vs/arrow-adbc/v17/DocumentLayout.json deleted file mode 100644 index c88b2bf087..0000000000 --- a/.vs/arrow-adbc/v17/DocumentLayout.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Version": 1, - "WorkspaceRootPath": "C:\\Users\\gopal.lal\\source\\repos\\arrow-adbc\\", - "Documents": [], - "DocumentGroupContainers": [ - { - "Orientation": 0, - "VerticalTabListWidth": 256, - "DocumentGroups": [ - { - "DockedWidth": 200, - "SelectedChildIndex": -1, - "Children": [ - { - "$type": "Bookmark", - "Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/csharp/Apache.Arrow.Adbc.sln b/csharp/Apache.Arrow.Adbc.sln index 0f0652cde7..82b55b6395 100644 --- a/csharp/Apache.Arrow.Adbc.sln +++ b/csharp/Apache.Arrow.Adbc.sln @@ -28,10 +28,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.I EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake", "test\Drivers\Interop\Snowflake\Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake.csproj", "{8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.Apache", "src\Drivers\Apache\Apache.Arrow.Adbc.Drivers.Apache.csproj", "{6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Apache", "test\Drivers\Apache\Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj", "{714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -74,14 +70,6 @@ Global {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.Build.0 = Release|Any CPU - {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.Build.0 = Release|Any CPU - {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -96,8 +84,6 @@ Global {EA43BB7C-BC00-4701-BDF4-367880C2495C} = {C7290227-E925-47E7-8B6B-A8B171645D58} {30024B6F-7BC1-4574-BE5A-924FBD6EAF83} = {FEB257A0-4FD3-495E-9A47-9E1649755445} {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7} = {C7290227-E925-47E7-8B6B-A8B171645D58} - {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903} = {FEB257A0-4FD3-495E-9A47-9E1649755445} - {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3} = {C7290227-E925-47E7-8B6B-A8B171645D58} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4795CF16-0FDB-4BE0-9768-5CF31564DC03} diff --git a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj deleted file mode 100644 index ebd30f6134..0000000000 --- a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - net7.0 - - - - - - - - - - - diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs deleted file mode 100644 index 74cb728455..0000000000 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs +++ /dev/null @@ -1,209 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Ipc; -using Apache.Hive.Service.Rpc.Thrift; -using Thrift.Protocol; -using Thrift.Transport; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 -{ - public abstract class HiveServer2Connection : AdbcConnection - { - const string userAgent = "AdbcExperimental/0.0"; - - protected TOperationHandle operationHandle; - protected IReadOnlyDictionary properties; - internal TTransport transport; - internal TCLIService.Client client; - internal TSessionHandle sessionHandle; - - internal HiveServer2Connection() : this(null) - { - - } - - internal HiveServer2Connection(IReadOnlyDictionary properties) - { - this.properties = properties; - } - - public void Open() - { - TProtocol protocol = CreateProtocol(); - this.transport = protocol.Transport; - this.client = new TCLIService.Client(protocol); - - var s0 = this.client.OpenSession(CreateSessionRequest()).Result; - this.sessionHandle = s0.SessionHandle; - } - - protected abstract TProtocol CreateProtocol(); - protected abstract TOpenSessionReq CreateSessionRequest(); - - public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) - { - Dictionary>>> catalogMap = new Dictionary>>>(); - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) - { - TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) - { - TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) - { - TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); - } - - if (depth == GetObjectsDepth.All) - { - TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); - columnsReq.CatalogName = catalogPattern; - columnsReq.SchemaName = dbSchemaPattern; - columnsReq.TableName = tableNamePattern; - - if (!string.IsNullOrEmpty(columnNamePattern)) - columnsReq.ColumnName = columnNamePattern; - - var columnsResponse = this.client.GetColumns(columnsReq).Result; - if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(columnsResponse.Status.ErrorMessage); - } - - this.operationHandle = columnsResponse.OperationHandle; - } - - PollForResponse(); - - Schema schema = GetSchema(); - - return new GetObjectsReader(this,schema); - } - - public override IArrowArrayStream GetInfo(List codes) - { - throw new NotImplementedException(); - } - - public override IArrowArrayStream GetTableTypes() - { - throw new NotImplementedException(); - } - - protected void PollForResponse() - { - TGetOperationStatusResp statusResponse = null; - do - { - if (statusResponse != null) { Thread.Sleep(500); } - TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); - statusResponse = this.client.GetOperationStatus(request).Result; - } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); - } - - - public override void Dispose() - { - if (this.client != null) - { - TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); - this.client.CloseSession(r6).Wait(); - - this.transport.Close(); - this.client.Dispose(); - this.transport = null; - this.client = null; - } - } - - protected Schema GetSchema() - { - TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); - TGetResultSetMetadataResp response = this.client.GetResultSetMetadata(request).Result; - return SchemaParser.GetArrowSchema(response.Schema); - } - - sealed class GetObjectsReader : IArrowArrayStream - { - HiveServer2Connection connection; - Schema schema; - List batches; - int index; - IArrowReader reader; - - public GetObjectsReader(HiveServer2Connection connection, Schema schema) - { - this.connection = connection; - this.schema = schema; - } - - public Schema Schema { get { return schema; } } - - public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - while (true) - { - if (this.reader != null) - { - RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); - if (next != null) - { - return next; - } - this.reader = null; - } - - if (this.batches != null && this.index < this.batches.Count) - { - this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); - continue; - } - - this.batches = null; - this.index = 0; - - if (this.connection == null) - { - return null; - } - - TFetchResultsReq request = new TFetchResultsReq(this.connection.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); - TFetchResultsResp response = await this.connection.client.FetchResults(request, cancellationToken); - this.batches = response.Results.ArrowBatches; - - if (!response.HasMoreRows) - { - this.connection = null; - } - } - } - - public void Dispose() - { - } - } - } -} diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs deleted file mode 100644 index 0076c090fa..0000000000 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Threading; -using Apache.Hive.Service.Rpc.Thrift; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 -{ - public abstract class HiveServer2Statement : AdbcStatement - { - protected HiveServer2Connection connection; - protected TOperationHandle operationHandle; - - protected HiveServer2Statement(HiveServer2Connection connection) - { - this.connection = connection; - } - - protected virtual void SetStatementProperties(TExecuteStatementReq statement) - { - } - - protected void ExecuteStatement() - { - TExecuteStatementReq executeRequest = new TExecuteStatementReq(this.connection.sessionHandle, this.SqlQuery); - SetStatementProperties(executeRequest); - var executeResponse = this.connection.client.ExecuteStatement(executeRequest).Result; - if (executeResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(executeResponse.Status.ErrorMessage); - } - - this.operationHandle = executeResponse.OperationHandle; - } - - protected void PollForResponse() - { - TGetOperationStatusResp statusResponse = null; - do - { - if (statusResponse != null) { Thread.Sleep(500); } - TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); - statusResponse = this.connection.client.GetOperationStatus(request).Result; - } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); - } - - protected Schema GetSchema() - { - TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); - TGetResultSetMetadataResp response = this.connection.client.GetResultSetMetadata(request).Result; - return SchemaParser.GetArrowSchema(response.Schema); - } - - public override void Dispose() - { - if (this.operationHandle != null) - { - TCloseOperationReq request = new TCloseOperationReq(this.operationHandle); - this.connection.client.CloseOperation(request).Wait(); - this.operationHandle = null; - } - - base.Dispose(); - } - - - } -} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs deleted file mode 100644 index ec6210c2f3..0000000000 --- a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs +++ /dev/null @@ -1,80 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; -using Apache.Arrow.Adbc.Drivers.Apache.Hive2; -using Apache.Arrow.Ipc; -using Apache.Hive.Service.Rpc.Thrift; -using Thrift; -using Thrift.Protocol; -using Thrift.Transport; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Impala -{ - public class ImpalaConnection : HiveServer2Connection - { - internal ImpalaConnection(IReadOnlyDictionary properties) - : base(properties) - { - } - - protected override TProtocol CreateProtocol() - { - string hostName = properties["HostName"]; - string tmp; - int port = 21050; // default? - if (properties.TryGetValue("Port", out tmp)) - { - port = int.Parse(tmp); - } - - TConfiguration config = new TConfiguration(); - TTransport transport = new ThriftSocketTransport(hostName, port, config); - return new TBinaryProtocol(transport); - } - - protected override TOpenSessionReq CreateSessionRequest() - { - return new TOpenSessionReq(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V7) - { - CanUseMultipleCatalogs = true, - }; - } - - public override AdbcStatement CreateStatement() - { - return new ImpalaStatement(this); - } - - public override IArrowArrayStream GetInfo(List codes) - { - throw new System.NotImplementedException(); - } - - public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) - { - throw new System.NotImplementedException(); - } - - public override IArrowArrayStream GetTableTypes() - { - throw new System.NotImplementedException(); - } - - public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new System.NotImplementedException(); - } -} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs deleted file mode 100644 index e63fead5bb..0000000000 --- a/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Impala -{ - public class ImpalaDatabase : AdbcDatabase - { - readonly IReadOnlyDictionary properties; - - internal ImpalaDatabase(IReadOnlyDictionary properties) - { - this.properties = properties; - } - - public override AdbcConnection Connect(IReadOnlyDictionary properties) - { - ImpalaConnection connection = new ImpalaConnection(this.properties); - connection.Open(); - return connection; - } - } -} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs deleted file mode 100644 index 69674f0f2d..0000000000 --- a/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Impala -{ - public class ImpalaDriver : AdbcDriver - { - public override AdbcDatabase Open(IReadOnlyDictionary parameters) - { - return new ImpalaDatabase(parameters); - } - } -} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs deleted file mode 100644 index 0fd8140bb3..0000000000 --- a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs +++ /dev/null @@ -1,114 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Adbc.Drivers.Apache.Hive2; -using Apache.Arrow.Ipc; -using Apache.Hive.Service.Rpc.Thrift; -using Thrift; -using Thrift.Protocol; -using Thrift.Transport.Client; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Impala -{ - public class ImpalaStatement : HiveServer2Statement - { - internal ImpalaStatement(ImpalaConnection connection) - : base(connection) - { - } - - public override QueryResult ExecuteQuery() - { - ExecuteStatement(); - PollForResponse(); - - Schema schema = GetSchema(); - - return new QueryResult(-1, new HiveServer2Reader(this, schema)); - } - - public override UpdateResult ExecuteUpdate() - { - throw new NotImplementedException(); - } - - public override object GetValue(IArrowArray arrowArray, int index) - { - throw new NotSupportedException(); - } - - class HiveServer2Reader : IArrowArrayStream - { - ImpalaStatement statement; - Schema schema; - int counter; - - public HiveServer2Reader(ImpalaStatement statement, Schema schema) - { - this.statement = statement; - this.schema = schema; - } - - public Schema Schema { get { return schema; } } - - public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - if (this.statement == null) - { - return new ValueTask((RecordBatch)null); - } - - TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); - TFetchResultsResp response = this.statement.connection.client.FetchResults(request).Result; - - var buffer = new System.IO.MemoryStream(); - response.WriteAsync(new TBinaryProtocol(new TStreamTransport(null, buffer, new TConfiguration())), cancellationToken).Wait(); - System.IO.File.WriteAllBytes(string.Format("d:/src/buffer{0}.bin", this.counter++), buffer.ToArray()); - - RecordBatch result = new RecordBatch(this.schema, response.Results.Columns.Select(GetArray), GetArray(response.Results.Columns[0]).Length); - - if (!response.HasMoreRows) - { - this.statement = null; - } - - return new ValueTask(result); - } - - public void Dispose() - { - } - - static IArrowArray GetArray(TColumn column) - { - return - (IArrowArray)column.BoolVal?.Values ?? - (IArrowArray)column.ByteVal?.Values ?? - (IArrowArray)column.I16Val?.Values ?? - (IArrowArray)column.I32Val?.Values ?? - (IArrowArray)column.I64Val?.Values ?? - (IArrowArray)column.DoubleVal?.Values ?? - (IArrowArray)column.StringVal?.Values ?? - (IArrowArray)column.BinaryVal?.Values; - } - } - } -} diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs deleted file mode 100644 index 49929e7b6f..0000000000 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ /dev/null @@ -1,805 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Adbc.Drivers.Apache.Hive2; -using Apache.Arrow.Ipc; -using Apache.Arrow.Types; -using Apache.Hive.Service.Rpc.Thrift; -using Thrift; -using Thrift.Protocol; -using Thrift.Transport.Client; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Spark -{ - public class SparkConnection : HiveServer2Connection - { - const string userAgent = "MicrosoftSparkODBCDriver/2.7.6.1014"; - - readonly IReadOnlyList infoSupportedCodes = new List { - AdbcInfoCode.DriverName, - AdbcInfoCode.DriverVersion, - AdbcInfoCode.DriverArrowVersion, - AdbcInfoCode.VendorName - }; - - const string infoDriverName = "ADBC Spark Driver"; - const string infoDriverVersion = "1.0.0"; - const string infoVendorName = "Spark"; - const string infoDriverArrowVersion = "1.0.0"; - - internal static TSparkGetDirectResults sparkGetDirectResults = new TSparkGetDirectResults(1000); - - internal static readonly Dictionary timestampConfig = new Dictionary - { - { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } - }; - - public SparkConnection() : this(null) - { - - } - - internal SparkConnection(IReadOnlyDictionary properties) - : base(properties) - { - } - - protected override TProtocol CreateProtocol() - { - string hostName = properties["HostName"]; - string path = properties["Path"]; - string token = properties["Token"]; - - string uri = "https://" + hostName + "/" + path; - - HttpClient httpClient = new HttpClient(); - httpClient.BaseAddress = new Uri(uri); - httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); - httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent); - httpClient.DefaultRequestHeaders.AcceptEncoding.Clear(); - httpClient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("identity")); - httpClient.DefaultRequestHeaders.ExpectContinue = false; - - TConfiguration config = new TConfiguration(); - - ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); - // can switch to the one below if want to use the experimental one with IPeekableTransport - // ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); - transport.OpenAsync(CancellationToken.None).Wait(); - return new TBinaryProtocol(transport); - } - - protected override TOpenSessionReq CreateSessionRequest() - { - return new TOpenSessionReq(TProtocolVersion.SPARK_CLI_SERVICE_PROTOCOL_V7) - { - CanUseMultipleCatalogs = true, - Configuration = timestampConfig, - }; - } - - public override AdbcStatement CreateStatement() - { - return new SparkStatement(this); - } - - public override void Dispose() - { - if (this.client != null) - { - TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); - this.client.CloseSession(r6).Wait(); - - this.transport.Close(); - this.client.Dispose(); - - this.transport = null; - this.client = null; - } - } - - public override IArrowArrayStream GetInfo(List codes) - { - const int strValTypeID = 0; - - UnionType infoUnionType = new UnionType( - new List() - { - new Field("string_value", StringType.Default, true), - new Field("bool_value", BooleanType.Default, true), - new Field("int64_value", Int64Type.Default, true), - new Field("int32_bitmask", Int32Type.Default, true), - new Field( - "string_list", - new ListType( - new Field("item", StringType.Default, true) - ), - false - ), - new Field( - "int32_to_int32_list_map", - new ListType( - new Field("entries", new StructType( - new List() - { - new Field("key", Int32Type.Default, false), - new Field("value", Int32Type.Default, true), - } - ), false) - ), - true - ) - }, - new int[] { 0, 1, 2, 3, 4, 5 }, - UnionMode.Dense); - - if (codes.Count == 0) - { - codes = new List(infoSupportedCodes); - } - - UInt32Array.Builder infoNameBuilder = new UInt32Array.Builder(); - ArrowBuffer.Builder typeBuilder = new ArrowBuffer.Builder(); - ArrowBuffer.Builder offsetBuilder = new ArrowBuffer.Builder(); - StringArray.Builder stringInfoBuilder = new StringArray.Builder(); - int nullCount = 0; - int arrayLength = codes.Count; - - foreach (AdbcInfoCode code in codes) - { - switch (code) - { - case AdbcInfoCode.DriverName: - infoNameBuilder.Append((UInt32)code); - typeBuilder.Append(strValTypeID); - offsetBuilder.Append(stringInfoBuilder.Length); - stringInfoBuilder.Append(infoDriverName); - break; - case AdbcInfoCode.DriverVersion: - infoNameBuilder.Append((UInt32)code); - typeBuilder.Append(strValTypeID); - offsetBuilder.Append(stringInfoBuilder.Length); - stringInfoBuilder.Append(infoDriverVersion); - break; - case AdbcInfoCode.DriverArrowVersion: - infoNameBuilder.Append((UInt32)code); - typeBuilder.Append(strValTypeID); - offsetBuilder.Append(stringInfoBuilder.Length); - stringInfoBuilder.Append(infoDriverArrowVersion); - break; - case AdbcInfoCode.VendorName: - infoNameBuilder.Append((UInt32)code); - typeBuilder.Append(strValTypeID); - offsetBuilder.Append(stringInfoBuilder.Length); - stringInfoBuilder.Append(infoVendorName); - break; - default: - infoNameBuilder.Append((UInt32)code); - typeBuilder.Append(strValTypeID); - offsetBuilder.Append(stringInfoBuilder.Length); - stringInfoBuilder.AppendNull(); - nullCount++; - break; - } - } - - StructType entryType = new StructType( - new List(){ - new Field("key", Int32Type.Default, false), - new Field("value", Int32Type.Default, true)}); - - StructArray entriesDataArray = new StructArray(entryType, 0, - new[] { new Int32Array.Builder().Build(), new Int32Array.Builder().Build() }, - new ArrowBuffer.BitmapBuilder().Build()); - - List childrenArrays = new List() - { - stringInfoBuilder.Build(), - new BooleanArray.Builder().Build(), - new Int64Array.Builder().Build(), - new Int32Array.Builder().Build(), - new ListArray.Builder(StringType.Default).Build(), - CreateNestedListArray(new List(){ entriesDataArray }, entryType) - }; - - DenseUnionArray infoValue = new DenseUnionArray(infoUnionType, arrayLength, childrenArrays, typeBuilder.Build(), offsetBuilder.Build(), nullCount); - - List dataArrays = new List - { - infoNameBuilder.Build(), - infoValue - }; - - return new SparkInfoArrowStream(StandardSchemas.GetInfoSchema, dataArrays); - - } - - public override IArrowArrayStream GetInfo(List codes) => base.GetInfo(codes); - - public override IArrowArrayStream GetTableTypes() - { - StringArray.Builder tableTypesBuilder = new StringArray.Builder(); - tableTypesBuilder.AppendRange(new string[] { "BASE TABLE", "VIEW" }); - - List dataArrays = new List - { - tableTypesBuilder.Build() - }; - - return new SparkInfoArrowStream(StandardSchemas.TableTypesSchema, dataArrays); - } - - public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) - { - TGetColumnsReq getColumnsReq = new TGetColumnsReq(this.sessionHandle); - getColumnsReq.CatalogName = catalog; - getColumnsReq.SchemaName = dbSchema; - getColumnsReq.TableName = tableName; - getColumnsReq.GetDirectResults = sparkGetDirectResults; - - var columnsResponse = this.client.GetColumns(getColumnsReq).Result; - if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(columnsResponse.Status.ErrorMessage); - } - - var result = columnsResponse.DirectResults; - var resultSchema = result.ResultSetMetadata.ArrowSchema; - var columns = result.ResultSet.Results.Columns; - var rowCount = columns[3].StringVal.Values.Length; - - Field[] fields = new Field[rowCount]; - for (int i = 0; i < rowCount; i++) - { - fields[i] = new Field(columns[3].StringVal.Values.GetString(i), - SchemaParser.GetArrowType((TTypeId)columns[4].I32Val.Values.GetValue(i)), - nullable: true /* ??? */); - } - return new Schema(fields, null); - } - private static IReadOnlyList ConvertSpanToReadOnlyList(Int32Array span) - { - // Initialize a list with the capacity equal to the length of the span - // to avoid resizing during the addition of elements - List list = new List(span.Length); - - // Copy elements from the span to the list - foreach (int item in span) - { - list.Add(item); - } - - // Return the list as IReadOnlyList - return list; - } - - public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) - { - Dictionary>> catalogMap = new Dictionary>>(); - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) - { - TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); - getCatalogsReq.GetDirectResults = sparkGetDirectResults; - - TGetCatalogsResp getCatalogsResp = this.client.GetCatalogs(getCatalogsReq).Result; - if (getCatalogsResp.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(getCatalogsResp.Status.ErrorMessage); - } - - string catalogRegexp = PatternToRegEx(catalogPattern); - TRowSet resp = getCatalogsResp.DirectResults.ResultSet.Results; - IReadOnlyList list = resp.Columns[0].StringVal.Values; - for (int i = 0; i < list.Count; i++) - { - string col = list[i]; - string catalog = col; - - if (Regex.IsMatch(catalog, catalogRegexp, RegexOptions.IgnoreCase)) - { - catalogMap.Add(catalog, new Dictionary>()); - } - } - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) - { - TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); - getSchemasReq.CatalogName = catalogPattern; - getSchemasReq.SchemaName = dbSchemaPattern; - getSchemasReq.GetDirectResults = sparkGetDirectResults; - - TGetSchemasResp getSchemasResp = this.client.GetSchemas(getSchemasReq).Result; - if (getSchemasResp.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(getSchemasResp.Status.ErrorMessage); - } - TRowSet resp = getSchemasResp.DirectResults.ResultSet.Results; - - IReadOnlyList catalogList = resp.Columns[1].StringVal.Values; - IReadOnlyList schemaList = resp.Columns[0].StringVal.Values; - - for (int i = 0; i < catalogList.Count; i++) - { - string catalog = catalogList[i]; - string schemaDb = schemaList[i]; - catalogMap.GetValueOrDefault(catalog).Add(schemaDb, new Dictionary()); - } - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) - { - TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); - getTablesReq.CatalogName = catalogPattern; - getTablesReq.SchemaName = dbSchemaPattern; - getTablesReq.TableName = tableNamePattern; - getTablesReq.GetDirectResults = sparkGetDirectResults; - - TGetTablesResp getTablesResp = this.client.GetTables(getTablesReq).Result; - if (getTablesResp.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(getTablesResp.Status.ErrorMessage); - } - TRowSet resp = getTablesResp.DirectResults.ResultSet.Results; - - IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; - IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; - IReadOnlyList tableList = resp.Columns[2].StringVal.Values; - IReadOnlyList tableTypeList = resp.Columns[3].StringVal.Values; - - for (int i = 0; i < catalogList.Count; i++) - { - string catalog = catalogList[i]; - string schemaDb = schemaList[i]; - string tableName = tableList[i]; - string tableType = tableTypeList[i]; - TableInfoPair tableInfo = new TableInfoPair(); - tableInfo.Type = tableType; - tableInfo.Columns = new List(); - tableInfo.ColType = new List(); - catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).Add(tableName, tableInfo); - } - } - - if (depth == GetObjectsDepth.All) - { - TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); - columnsReq.CatalogName = catalogPattern; - columnsReq.SchemaName = dbSchemaPattern; - columnsReq.TableName = tableNamePattern; - columnsReq.GetDirectResults = sparkGetDirectResults; - - if (!string.IsNullOrEmpty(columnNamePattern)) - columnsReq.ColumnName = columnNamePattern; - - var columnsResponse = this.client.GetColumns(columnsReq).Result; - if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new Exception(columnsResponse.Status.ErrorMessage); - } - - TRowSet resp = columnsResponse.DirectResults.ResultSet.Results; - - IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; - IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; - IReadOnlyList tableList = resp.Columns[2].StringVal.Values; - IReadOnlyList columnList = resp.Columns[3].StringVal.Values; - IReadOnlyList columnTypeList = ConvertSpanToReadOnlyList(resp.Columns[4].I32Val.Values); - - for (int i = 0; i < catalogList.Count; i++) - { - string catalog = catalogList[i]; - string schemaDb = schemaList[i]; - string tableName = tableList[i]; - string column = columnList[i]; - int colType = columnTypeList[i]; - TableInfoPair tableInfo = catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).GetValueOrDefault(tableName); - tableInfo.Columns.Add(column); - tableInfo.ColType.Add(colType); - } - } - - StringArray.Builder catalogNameBuilder = new StringArray.Builder(); - List catalogDbSchemasValues = new List(); - - - foreach (KeyValuePair>> catalogEntry in catalogMap) - { - catalogNameBuilder.Append(catalogEntry.Key); - - if (depth == GetObjectsDepth.Catalogs) - { - catalogDbSchemasValues.Add(null); - } - else - { - catalogDbSchemasValues.Add(GetDbSchemas( - depth, catalogEntry.Value)); - } - - } - - List dataArrays = new List - { - catalogNameBuilder.Build(), - CreateNestedListArray(catalogDbSchemasValues, new StructType(StandardSchemas.DbSchemaSchema)), - }; - return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); - } - - private StructArray GetDbSchemas( - GetObjectsDepth depth, - Dictionary> schemaMap) - { - StringArray.Builder dbSchemaNameBuilder = new StringArray.Builder(); - List dbSchemaTablesValues = new List(); - ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); - int length = 0; - - - foreach (KeyValuePair> schemaEntry in schemaMap) - { - - dbSchemaNameBuilder.Append(schemaEntry.Key); - length++; - nullBitmapBuffer.Append(true); - - if (depth == GetObjectsDepth.DbSchemas) - { - dbSchemaTablesValues.Add(null); - } - else - { - dbSchemaTablesValues.Add(GetTableSchemas( - depth, schemaEntry.Value)); - } - - } - - - List dataArrays = new List - { - dbSchemaNameBuilder.Build(), - CreateNestedListArray(dbSchemaTablesValues, new StructType(StandardSchemas.TableSchema)), - }; - - return new StructArray( - new StructType(StandardSchemas.DbSchemaSchema), - length, - dataArrays, - nullBitmapBuffer.Build()); - } - - private StructArray GetTableSchemas( - GetObjectsDepth depth, - Dictionary tableMap) - { - StringArray.Builder tableNameBuilder = new StringArray.Builder(); - StringArray.Builder tableTypeBuilder = new StringArray.Builder(); - List tableColumnsValues = new List(); - List tableConstraintsValues = new List(); - ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); - int length = 0; - - - foreach (KeyValuePair tableEntry in tableMap) - { - tableNameBuilder.Append(tableEntry.Key); - tableTypeBuilder.Append(tableEntry.Value.Type); - nullBitmapBuffer.Append(true); - length++; - - - tableConstraintsValues.Add(null); - - - if (depth == GetObjectsDepth.Tables) - { - tableColumnsValues.Add(null); - } - else - { - tableColumnsValues.Add(GetColumnSchema(tableEntry.Value.Columns, tableEntry.Value.ColType)); - } - } - - - List dataArrays = new List - { - tableNameBuilder.Build(), - tableTypeBuilder.Build(), - CreateNestedListArray(tableColumnsValues, new StructType(StandardSchemas.ColumnSchema)), - CreateNestedListArray(tableConstraintsValues, new StructType(StandardSchemas.ConstraintSchema)) - }; - - return new StructArray( - new StructType(StandardSchemas.TableSchema), - length, - dataArrays, - nullBitmapBuffer.Build()); - } - - private StructArray GetColumnSchema( - List columns, List colTypes) - { - StringArray.Builder columnNameBuilder = new StringArray.Builder(); - Int32Array.Builder ordinalPositionBuilder = new Int32Array.Builder(); - StringArray.Builder remarksBuilder = new StringArray.Builder(); - Int16Array.Builder xdbcDataTypeBuilder = new Int16Array.Builder(); - StringArray.Builder xdbcTypeNameBuilder = new StringArray.Builder(); - Int32Array.Builder xdbcColumnSizeBuilder = new Int32Array.Builder(); - Int16Array.Builder xdbcDecimalDigitsBuilder = new Int16Array.Builder(); - Int16Array.Builder xdbcNumPrecRadixBuilder = new Int16Array.Builder(); - Int16Array.Builder xdbcNullableBuilder = new Int16Array.Builder(); - StringArray.Builder xdbcColumnDefBuilder = new StringArray.Builder(); - Int16Array.Builder xdbcSqlDataTypeBuilder = new Int16Array.Builder(); - Int16Array.Builder xdbcDatetimeSubBuilder = new Int16Array.Builder(); - Int32Array.Builder xdbcCharOctetLengthBuilder = new Int32Array.Builder(); - StringArray.Builder xdbcIsNullableBuilder = new StringArray.Builder(); - StringArray.Builder xdbcScopeCatalogBuilder = new StringArray.Builder(); - StringArray.Builder xdbcScopeSchemaBuilder = new StringArray.Builder(); - StringArray.Builder xdbcScopeTableBuilder = new StringArray.Builder(); - BooleanArray.Builder xdbcIsAutoincrementBuilder = new BooleanArray.Builder(); - BooleanArray.Builder xdbcIsGeneratedcolumnBuilder = new BooleanArray.Builder(); - ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); - int length = 0; - - - for (int i = 0; i < columns.Count; i++) - { - columnNameBuilder.Append(columns[i]); - ordinalPositionBuilder.Append((int)colTypes[i]); - remarksBuilder.Append(""); - - - - xdbcColumnSizeBuilder.AppendNull(); - xdbcDecimalDigitsBuilder.AppendNull(); - - - xdbcDataTypeBuilder.AppendNull(); - xdbcTypeNameBuilder.Append(""); - xdbcNumPrecRadixBuilder.AppendNull(); - xdbcNullableBuilder.AppendNull(); - xdbcColumnDefBuilder.AppendNull(); - xdbcSqlDataTypeBuilder.Append((short)colTypes[i]); - xdbcDatetimeSubBuilder.AppendNull(); - xdbcCharOctetLengthBuilder.AppendNull(); - xdbcIsNullableBuilder.Append("true"); - xdbcScopeCatalogBuilder.AppendNull(); - xdbcScopeSchemaBuilder.AppendNull(); - xdbcScopeTableBuilder.AppendNull(); - xdbcIsAutoincrementBuilder.AppendNull(); - xdbcIsGeneratedcolumnBuilder.Append(true); - nullBitmapBuffer.Append(true); - length++; - } - - List dataArrays = new List - { - columnNameBuilder.Build(), - ordinalPositionBuilder.Build(), - remarksBuilder.Build(), - xdbcDataTypeBuilder.Build(), - xdbcTypeNameBuilder.Build(), - xdbcColumnSizeBuilder.Build(), - xdbcDecimalDigitsBuilder.Build(), - xdbcNumPrecRadixBuilder.Build(), - xdbcNullableBuilder.Build(), - xdbcColumnDefBuilder.Build(), - xdbcSqlDataTypeBuilder.Build(), - xdbcDatetimeSubBuilder.Build(), - xdbcCharOctetLengthBuilder.Build(), - xdbcIsNullableBuilder.Build(), - xdbcScopeCatalogBuilder.Build(), - xdbcScopeSchemaBuilder.Build(), - xdbcScopeTableBuilder.Build(), - xdbcIsAutoincrementBuilder.Build(), - xdbcIsGeneratedcolumnBuilder.Build() - }; - - return new StructArray( - new StructType(StandardSchemas.ColumnSchema), - length, - dataArrays, - nullBitmapBuffer.Build()); - } - - private ListArray CreateNestedListArray(List arrayList, IArrowType dataType) - { - ArrowBuffer.Builder valueOffsetsBufferBuilder = new ArrowBuffer.Builder(); - ArrowBuffer.BitmapBuilder validityBufferBuilder = new ArrowBuffer.BitmapBuilder(); - List arrayDataList = new List(arrayList.Count); - int length = 0; - int nullCount = 0; - - foreach (IArrowArray? array in arrayList) - { - if (array == null) - { - valueOffsetsBufferBuilder.Append(length); - validityBufferBuilder.Append(false); - nullCount++; - } - else - { - valueOffsetsBufferBuilder.Append(length); - validityBufferBuilder.Append(true); - arrayDataList.Add(array.Data); - length += array.Length; - } - } - - ArrowBuffer validityBuffer = nullCount > 0 - ? validityBufferBuilder.Build() : ArrowBuffer.Empty; - - ArrayData? data = ArrayDataConcatenator.Concatenate(arrayDataList); - - if (data == null) - { - EmptyArrayCreationVisitor visitor = new EmptyArrayCreationVisitor(); - dataType.Accept(visitor); - data = visitor.Result; - } - - IArrowArray value = ArrowArrayFactory.BuildArray(data); - - valueOffsetsBufferBuilder.Append(length); - - return new ListArray(new ListType(dataType), arrayList.Count, - valueOffsetsBufferBuilder.Build(), value, - validityBuffer, nullCount, 0); - } - - private class EmptyArrayCreationVisitor : - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor, - IArrowTypeVisitor - { - public ArrayData? Result { get; private set; } - - public void Visit(BooleanType type) - { - Result = new BooleanArray.Builder().Build().Data; - } - - public void Visit(FixedWidthType type) - { - Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, ArrowBuffer.Empty }); - } - - public void Visit(BinaryType type) - { - Result = new BinaryArray.Builder().Build().Data; - } - - public void Visit(StringType type) - { - Result = new StringArray.Builder().Build().Data; - } - - public void Visit(ListType type) - { - type.ValueDataType.Accept(this); - ArrayData? child = Result; - - Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, MakeInt0Buffer() }, new[] { child }); - } - - public void Visit(FixedSizeListType type) - { - type.ValueDataType.Accept(this); - ArrayData? child = Result; - - Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, new[] { child }); - } - - public void Visit(StructType type) - { - ArrayData?[] children = new ArrayData[type.Fields.Count]; - for (int i = 0; i < type.Fields.Count; i++) - { - type.Fields[i].DataType.Accept(this); - children[i] = Result; - } - - Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, children); - } - - public void Visit(MapType type) - { - Result = new MapArray.Builder(type).Build().Data; - } - - public void Visit(IArrowType type) - { - throw new NotImplementedException($"EmptyArrayCreationVisitor for {type.Name} is not supported yet."); - } - - private static ArrowBuffer MakeInt0Buffer() - { - ArrowBuffer.Builder builder = new ArrowBuffer.Builder(); - builder.Append(0); - return builder.Build(); - } - } - - private string PatternToRegEx(string pattern) - { - if (pattern == null) - return ".*"; - - StringBuilder builder = new StringBuilder("(?i)^"); - string convertedPattern = pattern.Replace("_", ".").Replace("%", ".*"); - builder.Append(convertedPattern); - builder.Append("$"); - - return builder.ToString(); - } - } - - public struct TableInfoPair - { - public string Type { get; set; } - - public List Columns { get; set; } - - public List ColType { get; set; } - } - - internal class SparkInfoArrowStream : IArrowArrayStream - { - private Schema schema; - private RecordBatch? batch; - - public SparkInfoArrowStream(Schema schema, List data) - { - this.schema = schema; - this.batch = new RecordBatch(schema, data, data[0].Length); - } - - public Schema Schema { get { return this.schema; } } - - public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - RecordBatch? batch = this.batch; - this.batch = null; - return new ValueTask(batch); - } - - public void Dispose() - { - this.batch?.Dispose(); - this.batch = null; - } - } -} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs b/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs deleted file mode 100644 index 0b7c99dbcf..0000000000 --- a/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Spark -{ - public class SparkDatabase : AdbcDatabase - { - readonly IReadOnlyDictionary properties; - - public SparkDatabase(IReadOnlyDictionary properties) - { - this.properties = properties; - } - - public override AdbcConnection Connect(IReadOnlyDictionary properties) - { - SparkConnection connection = new SparkConnection(this.properties); - connection.Open(); - return connection; - } - } -} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDriver.cs b/csharp/src/Drivers/Apache/Spark/SparkDriver.cs deleted file mode 100644 index 359f654349..0000000000 --- a/csharp/src/Drivers/Apache/Spark/SparkDriver.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Collections.Generic; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Spark -{ - public class SparkDriver : AdbcDriver - { - public override AdbcDatabase Open(IReadOnlyDictionary parameters) - { - return new SparkDatabase(parameters); - } - } -} diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs deleted file mode 100644 index 4df66f2778..0000000000 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ /dev/null @@ -1,129 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Adbc.Drivers.Apache.Hive2; -using Apache.Arrow.Ipc; -using Apache.Hive.Service.Rpc.Thrift; - -namespace Apache.Arrow.Adbc.Drivers.Apache.Spark -{ - public class SparkStatement : HiveServer2Statement - { - internal SparkStatement(SparkConnection connection) - : base(connection) - { - } - - protected override void SetStatementProperties(TExecuteStatementReq statement) - { - statement.CanReadArrowResult = true; - statement.CanDownloadResult = true; - statement.ConfOverlay = SparkConnection.timestampConfig; - statement.UseArrowNativeTypes = new TSparkArrowTypes - { - TimestampAsArrow = true, - DecimalAsArrow = true, - ComplexTypesAsArrow = true, - IntervalTypesAsArrow = false, - }; - } - - public override QueryResult ExecuteQuery() - { - ExecuteStatement(); - PollForResponse(); - - Schema schema = GetSchema(); - - return new QueryResult(-1, new SparkReader(this, schema)); - } - - public override UpdateResult ExecuteUpdate() - { - throw new NotImplementedException(); - } - - public override object GetValue(IArrowArray arrowArray, int index) - { - throw new NotSupportedException(); - } - - sealed class SparkReader : IArrowArrayStream - { - SparkStatement statement; - Schema schema; - List batches; - int index; - IArrowReader reader; - - public SparkReader(SparkStatement statement, Schema schema) - { - this.statement = statement; - this.schema = schema; - } - - public Schema Schema { get { return schema; } } - - public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - while (true) - { - if (this.reader != null) - { - RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); - if (next != null) - { - return next; - } - this.reader = null; - } - - if (this.batches != null && this.index < this.batches.Count) - { - this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); - continue; - } - - this.batches = null; - this.index = 0; - - if (this.statement == null) - { - return null; - } - - TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); - TFetchResultsResp response = await this.statement.connection.client.FetchResults(request, cancellationToken); - this.batches = response.Results.ArrowBatches; - - if (!response.HasMoreRows) - { - this.statement = null; - } - } - } - - public void Dispose() - { - } - } - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs deleted file mode 100644 index 4db0e80764..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using Apache.Arrow.Ipc; - -namespace Apache.Arrow.Adbc.Drivers.Apache -{ - internal class ChunkStream : Stream - { - ReadOnlyMemory currentBuffer; - byte[] data; - bool first; - int position; - - public ChunkStream(Schema schema, byte[] data) - { - MemoryStream buffer = new MemoryStream(); - ArrowStreamWriter writer = new ArrowStreamWriter(buffer, schema, leaveOpen: true); - writer.WriteStart(); - writer.WriteEnd(); - writer.Dispose(); - - this.currentBuffer = new ReadOnlyMemory(buffer.GetBuffer(), 0, (int)buffer.Length - 8); - this.data = data; - this.first = true; - } - - public override bool CanRead => true; - - public override bool CanSeek => false; - - public override bool CanWrite => false; - - public override long Length => throw new NotSupportedException(); - - public override long Position { get => throw new NotSupportedException(); set => throw new NotSupportedException(); } - - public override void Flush() - { - } - - public override int Read(byte[] buffer, int offset, int count) - { - int remaining = this.currentBuffer.Length - this.position; - if (remaining == 0) - { - if (this.first) - { - this.first = false; - } - else - { - return 0; - } - this.currentBuffer = new ReadOnlyMemory(this.data); - this.position = 0; - remaining = this.currentBuffer.Length - this.position; - } - - int bytes = Math.Min(remaining, count); - this.currentBuffer.Slice(this.position, bytes).CopyTo(new Memory(buffer, offset, bytes)); - this.position += bytes; - return bytes; - } - - public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - return base.ReadAsync(buffer, offset, count, cancellationToken); - } - - public override int ReadByte() - { - return base.ReadByte(); - } - - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException(); - } - - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - public override void Write(byte[] buffer, int offset, int count) - { - throw new NotSupportedException(); - } - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs deleted file mode 100644 index cf1f5ebeb1..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.IO; - -namespace Apache.Arrow.Adbc.Drivers.Apache -{ - public interface IPeekableTransport - { - Stream Input { get; } - Stream Output { get; } - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs deleted file mode 100644 index 96da30de0b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ /dev/null @@ -1,82 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using Apache.Arrow.Types; -using Apache.Hive.Service.Rpc.Thrift; - -namespace Apache.Arrow.Adbc.Drivers.Apache -{ - internal class SchemaParser - { - internal static Schema GetArrowSchema(TTableSchema thriftSchema) - { - Field[] fields = new Field[thriftSchema.Columns.Count]; - for (int i = 0; i < thriftSchema.Columns.Count; i++) - { - TColumnDesc column = thriftSchema.Columns[i]; - fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); - } - return new Schema(fields, null); - } - - static IArrowType GetArrowType(TTypeEntry thriftType) - { - if (thriftType.PrimitiveEntry != null) - { - return GetArrowType(thriftType.PrimitiveEntry.Type); - } - throw new InvalidOperationException(); - } - - public static IArrowType GetArrowType(TTypeId thriftType) - { - switch (thriftType) - { - case TTypeId.BIGINT_TYPE: return Int64Type.Default; - case TTypeId.BINARY_TYPE: return BinaryType.Default; - case TTypeId.BOOLEAN_TYPE: return BooleanType.Default; - case TTypeId.CHAR_TYPE: return StringType.Default; - case TTypeId.DATE_TYPE: return Date32Type.Default; - case TTypeId.DOUBLE_TYPE: return DoubleType.Default; - case TTypeId.FLOAT_TYPE: return FloatType.Default; - case TTypeId.INT_TYPE: return Int32Type.Default; - case TTypeId.NULL_TYPE: return NullType.Default; - case TTypeId.SMALLINT_TYPE: return Int16Type.Default; - case TTypeId.STRING_TYPE: return StringType.Default; - case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); - case TTypeId.TINYINT_TYPE: return Int8Type.Default; - case TTypeId.VARCHAR_TYPE: return StringType.Default; - - // ??? - case TTypeId.DECIMAL_TYPE: - case TTypeId.INTERVAL_DAY_TIME_TYPE: - case TTypeId.INTERVAL_YEAR_MONTH_TYPE: - return StringType.Default; - - case TTypeId.ARRAY_TYPE: - case TTypeId.MAP_TYPE: - case TTypeId.STRUCT_TYPE: - case TTypeId.UNION_TYPE: - case TTypeId.USER_DEFINED_TYPE: - return StringType.Default; - default: - throw new NotImplementedException(); - } - } - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs deleted file mode 100644 index ce59bb03fe..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs +++ /dev/null @@ -1,155 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TArrayTypeEntry : TBase - { - - public int ObjectTypePtr { get; set; } - - public TArrayTypeEntry() - { - } - - public TArrayTypeEntry(int objectTypePtr) : this() - { - this.ObjectTypePtr = objectTypePtr; - } - - public TArrayTypeEntry DeepCopy() - { - var tmp20 = new TArrayTypeEntry(); - tmp20.ObjectTypePtr = this.ObjectTypePtr; - return tmp20; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_objectTypePtr = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - ObjectTypePtr = await iprot.ReadI32Async(cancellationToken); - isset_objectTypePtr = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_objectTypePtr) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp21 = new TStruct("TArrayTypeEntry"); - await oprot.WriteStructBeginAsync(tmp21, cancellationToken); - var tmp22 = new TField(); - tmp22.Name = "objectTypePtr"; - tmp22.Type = TType.I32; - tmp22.ID = 1; - await oprot.WriteFieldBeginAsync(tmp22, cancellationToken); - await oprot.WriteI32Async(ObjectTypePtr, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TArrayTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(ObjectTypePtr, other.ObjectTypePtr); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + ObjectTypePtr.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp23 = new StringBuilder("TArrayTypeEntry("); - tmp23.Append(", ObjectTypePtr: "); - ObjectTypePtr.ToString(tmp23); - tmp23.Append(')'); - return tmp23.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs deleted file mode 100644 index 5aee28cf97..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs +++ /dev/null @@ -1,234 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Apache.Arrow.Types; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TBinaryColumn : TBase - { - - public BinaryArray Values { get; set; } - - public TBinaryColumn() - { - } - - public TBinaryColumn(BinaryArray values) : this() - { - this.Values = values; - } - - public TBinaryColumn DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - ArrowBuffer.Builder values = null; - byte[] nulls = null; - byte[] offsetBuffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - byte[] preAllocatedBuffer = new byte[65536]; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list196 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list196.Count; - - values = new ArrowBuffer.Builder(); - int offset = 0; - offsetBuffer = new byte[(length + 1) * 4]; - var memory = offsetBuffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); - - for(int _i197 = 0; _i197 < length; ++_i197) - { - typedMemory.Span[_i197] = offset; - var size = await iprot.ReadI32Async(cancellationToken); - offset += size; - - iprot.Transport.CheckReadBytesAvailable(size); - - byte[] tmp; - if (size <= preAllocatedBuffer.Length) - { - tmp = preAllocatedBuffer; - } - else - { - tmp = new byte[size]; - } - - await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); - values.Append(tmp.AsMemory(0, size).Span); - } - typedMemory.Span[length] = offset; - - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new BinaryArray(BinaryType.Default, length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp199 = new TStruct("TBinaryColumn"); - await oprot.WriteStructBeginAsync(tmp199, cancellationToken); - var tmp200 = new TField(); - if((Values != null)) - { - tmp200.Name = "values"; - tmp200.Type = TType.List; - tmp200.ID = 1; - await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans - byte[] value = new byte[Values.GetValueLength(i)]; - Values.GetBytes(i).CopyTo(value); - await oprot.WriteBinaryAsync(value, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp200.Name = "nulls"; - tmp200.Type = TType.String; - tmp200.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TBinaryColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Values, other.Values); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Values != null)) - { - for (int i = 0; i < Values.Length; i++) - { - hashcode = (hashcode * 397) + Values.GetBytes(i).GetHashCode(); - } - } - } - return hashcode; - } - - public override string ToString() - { - var tmp202 = new StringBuilder("TBinaryColumn("); - if((Values != null)) - { - tmp202.Append(", Values: "); - Values.ToString(tmp202); - } - tmp202.Append(')'); - return tmp202.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs deleted file mode 100644 index 6d284c0f31..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.IO; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TBoolColumn : TBase - { - - public BooleanArray Values { get; set; } - - public TBoolColumn() - { - } - - public TBoolColumn(BooleanArray values) : this() - { - this.Values = values; - } - - public TBoolColumn DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - ArrowBuffer.BitmapBuilder values = null; - byte[] nulls = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list133 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list133.Count; - - byte[] buffer = new byte[length]; - var memory = buffer.AsMemory(); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - - values = new ArrowBuffer.BitmapBuilder(length); - for (int _i134 = 0; _i134 < length; ++_i134) - { - values.Append(buffer[_i134] == 1); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new BooleanArray(values.Build(), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp136 = new TStruct("TBoolColumn"); - await oprot.WriteStructBeginAsync(tmp136, cancellationToken); - var tmp137 = new TField(); - if((Values != null)) - { - tmp137.Name = "values"; - tmp137.Type = TType.List; - tmp137.ID = 1; - await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Bool, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - bool _iter138 = Values.GetValue(i) ?? false; - await oprot.WriteBoolAsync(_iter138, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp137.Name = "nulls"; - tmp137.Type = TType.String; - tmp137.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TBoolColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp139 = new StringBuilder("TBoolColumn("); - if((Values != null)) - { - tmp139.Append(", Values: "); - Values.ToString(tmp139); - } - tmp139.Append(')'); - return tmp139.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs deleted file mode 100644 index ed39088e5c..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TBoolValue : TBase - { - private bool _value; - - public bool Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TBoolValue() - { - } - - public TBoolValue DeepCopy() - { - var tmp83 = new TBoolValue(); - if(__isset.@value) - { - tmp83.Value = this.Value; - } - tmp83.__isset.@value = this.__isset.@value; - return tmp83; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Bool) - { - Value = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp84 = new TStruct("TBoolValue"); - await oprot.WriteStructBeginAsync(tmp84, cancellationToken); - var tmp85 = new TField(); - if(__isset.@value) - { - tmp85.Name = "value"; - tmp85.Type = TType.Bool; - tmp85.ID = 1; - await oprot.WriteFieldBeginAsync(tmp85, cancellationToken); - await oprot.WriteBoolAsync(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TBoolValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp86 = new StringBuilder("TBoolValue("); - int tmp87 = 0; - if(__isset.@value) - { - if(0 < tmp87++) { tmp86.Append(", "); } - tmp86.Append("Value: "); - Value.ToString(tmp86); - } - tmp86.Append(')'); - return tmp86.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs deleted file mode 100644 index ce579c37a7..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs +++ /dev/null @@ -1,196 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.Buffers.Binary; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TByteColumn : TBase - { - - public Int8Array Values { get; set; } - - public TByteColumn() - { - } - - public TByteColumn(Int8Array values) : this() - { - this.Values = values; - } - - public TByteColumn DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - byte[] nulls = null; - byte[] buffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list142 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list142.Count; - - buffer = new byte[length]; - var memory = buffer.AsMemory(); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new Int8Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp145 = new TStruct("TByteColumn"); - await oprot.WriteStructBeginAsync(tmp145, cancellationToken); - var tmp146 = new TField(); - if((Values != null)) - { - tmp146.Name = "values"; - tmp146.Type = TType.List; - tmp146.ID = 1; - await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Byte, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - sbyte _iter147 = Values.GetValue(i) ?? 0; - await oprot.WriteByteAsync(_iter147, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp146.Name = "nulls"; - tmp146.Type = TType.String; - tmp146.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TByteColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp148 = new StringBuilder("TByteColumn("); - if((Values != null)) - { - tmp148.Append(", Values: "); - Values.ToString(tmp148); - } - tmp148.Append(')'); - return tmp148.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs deleted file mode 100644 index d9b15e8ee1..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TByteValue : TBase - { - private sbyte _value; - - public sbyte Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TByteValue() - { - } - - public TByteValue DeepCopy() - { - var tmp88 = new TByteValue(); - if(__isset.@value) - { - tmp88.Value = this.Value; - } - tmp88.__isset.@value = this.__isset.@value; - return tmp88; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Byte) - { - Value = await iprot.ReadByteAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp89 = new TStruct("TByteValue"); - await oprot.WriteStructBeginAsync(tmp89, cancellationToken); - var tmp90 = new TField(); - if(__isset.@value) - { - tmp90.Name = "value"; - tmp90.Type = TType.Byte; - tmp90.ID = 1; - await oprot.WriteFieldBeginAsync(tmp90, cancellationToken); - await oprot.WriteByteAsync(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TByteValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp91 = new StringBuilder("TByteValue("); - int tmp92 = 0; - if(__isset.@value) - { - if(0 < tmp92++) { tmp91.Append(", "); } - tmp91.Append("Value: "); - Value.ToString(tmp91); - } - tmp91.Append(')'); - return tmp91.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs deleted file mode 100644 index a62f77f790..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs +++ /dev/null @@ -1,9212 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public partial class TCLIService - { - public interface IAsync - { - global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default); - - global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default); - - } - - - public class Client : TBaseClient, IDisposable, IAsync - { - public Client(TProtocol protocol) : this(protocol, protocol) - { - } - - public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputProtocol, outputProtocol) - { - } - - public async global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) - { - await send_OpenSession(req, cancellationToken); - return await recv_OpenSession(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Call, SeqId), cancellationToken); - - var tmp655 = new InternalStructs.OpenSession_args() { - Req = req, - }; - - await tmp655.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_OpenSession(CancellationToken cancellationToken = default) - { - - var tmp656 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp656.Type == TMessageType.Exception) - { - var tmp657 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp657; - } - - var tmp658 = new InternalStructs.OpenSession_result(); - await tmp658.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp658.__isset.success) - { - return tmp658.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "OpenSession failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) - { - await send_CloseSession(req, cancellationToken); - return await recv_CloseSession(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Call, SeqId), cancellationToken); - - var tmp659 = new InternalStructs.CloseSession_args() { - Req = req, - }; - - await tmp659.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_CloseSession(CancellationToken cancellationToken = default) - { - - var tmp660 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp660.Type == TMessageType.Exception) - { - var tmp661 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp661; - } - - var tmp662 = new InternalStructs.CloseSession_result(); - await tmp662.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp662.__isset.success) - { - return tmp662.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseSession failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) - { - await send_GetInfo(req, cancellationToken); - return await recv_GetInfo(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Call, SeqId), cancellationToken); - - var tmp663 = new InternalStructs.GetInfo_args() { - Req = req, - }; - - await tmp663.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetInfo(CancellationToken cancellationToken = default) - { - - var tmp664 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp664.Type == TMessageType.Exception) - { - var tmp665 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp665; - } - - var tmp666 = new InternalStructs.GetInfo_result(); - await tmp666.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp666.__isset.success) - { - return tmp666.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetInfo failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) - { - await send_ExecuteStatement(req, cancellationToken); - return await recv_ExecuteStatement(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Call, SeqId), cancellationToken); - - var tmp667 = new InternalStructs.ExecuteStatement_args() { - Req = req, - }; - - await tmp667.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_ExecuteStatement(CancellationToken cancellationToken = default) - { - - var tmp668 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp668.Type == TMessageType.Exception) - { - var tmp669 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp669; - } - - var tmp670 = new InternalStructs.ExecuteStatement_result(); - await tmp670.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp670.__isset.success) - { - return tmp670.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "ExecuteStatement failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) - { - await send_GetTypeInfo(req, cancellationToken); - return await recv_GetTypeInfo(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Call, SeqId), cancellationToken); - - var tmp671 = new InternalStructs.GetTypeInfo_args() { - Req = req, - }; - - await tmp671.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetTypeInfo(CancellationToken cancellationToken = default) - { - - var tmp672 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp672.Type == TMessageType.Exception) - { - var tmp673 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp673; - } - - var tmp674 = new InternalStructs.GetTypeInfo_result(); - await tmp674.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp674.__isset.success) - { - return tmp674.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTypeInfo failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) - { - await send_GetCatalogs(req, cancellationToken); - return await recv_GetCatalogs(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Call, SeqId), cancellationToken); - - var tmp675 = new InternalStructs.GetCatalogs_args() { - Req = req, - }; - - await tmp675.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetCatalogs(CancellationToken cancellationToken = default) - { - - var tmp676 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp676.Type == TMessageType.Exception) - { - var tmp677 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp677; - } - - var tmp678 = new InternalStructs.GetCatalogs_result(); - await tmp678.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp678.__isset.success) - { - return tmp678.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCatalogs failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) - { - await send_GetSchemas(req, cancellationToken); - return await recv_GetSchemas(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Call, SeqId), cancellationToken); - - var tmp679 = new InternalStructs.GetSchemas_args() { - Req = req, - }; - - await tmp679.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetSchemas(CancellationToken cancellationToken = default) - { - - var tmp680 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp680.Type == TMessageType.Exception) - { - var tmp681 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp681; - } - - var tmp682 = new InternalStructs.GetSchemas_result(); - await tmp682.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp682.__isset.success) - { - return tmp682.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetSchemas failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) - { - await send_GetTables(req, cancellationToken); - return await recv_GetTables(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Call, SeqId), cancellationToken); - - var tmp683 = new InternalStructs.GetTables_args() { - Req = req, - }; - - await tmp683.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetTables(CancellationToken cancellationToken = default) - { - - var tmp684 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp684.Type == TMessageType.Exception) - { - var tmp685 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp685; - } - - var tmp686 = new InternalStructs.GetTables_result(); - await tmp686.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp686.__isset.success) - { - return tmp686.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTables failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) - { - await send_GetTableTypes(req, cancellationToken); - return await recv_GetTableTypes(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Call, SeqId), cancellationToken); - - var tmp687 = new InternalStructs.GetTableTypes_args() { - Req = req, - }; - - await tmp687.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetTableTypes(CancellationToken cancellationToken = default) - { - - var tmp688 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp688.Type == TMessageType.Exception) - { - var tmp689 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp689; - } - - var tmp690 = new InternalStructs.GetTableTypes_result(); - await tmp690.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp690.__isset.success) - { - return tmp690.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTableTypes failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) - { - await send_GetColumns(req, cancellationToken); - return await recv_GetColumns(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Call, SeqId), cancellationToken); - - var tmp691 = new InternalStructs.GetColumns_args() { - Req = req, - }; - - await tmp691.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetColumns(CancellationToken cancellationToken = default) - { - - var tmp692 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp692.Type == TMessageType.Exception) - { - var tmp693 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp693; - } - - var tmp694 = new InternalStructs.GetColumns_result(); - await tmp694.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp694.__isset.success) - { - return tmp694.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetColumns failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) - { - await send_GetFunctions(req, cancellationToken); - return await recv_GetFunctions(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Call, SeqId), cancellationToken); - - var tmp695 = new InternalStructs.GetFunctions_args() { - Req = req, - }; - - await tmp695.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetFunctions(CancellationToken cancellationToken = default) - { - - var tmp696 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp696.Type == TMessageType.Exception) - { - var tmp697 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp697; - } - - var tmp698 = new InternalStructs.GetFunctions_result(); - await tmp698.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp698.__isset.success) - { - return tmp698.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetFunctions failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) - { - await send_GetPrimaryKeys(req, cancellationToken); - return await recv_GetPrimaryKeys(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Call, SeqId), cancellationToken); - - var tmp699 = new InternalStructs.GetPrimaryKeys_args() { - Req = req, - }; - - await tmp699.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetPrimaryKeys(CancellationToken cancellationToken = default) - { - - var tmp700 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp700.Type == TMessageType.Exception) - { - var tmp701 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp701; - } - - var tmp702 = new InternalStructs.GetPrimaryKeys_result(); - await tmp702.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp702.__isset.success) - { - return tmp702.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetPrimaryKeys failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) - { - await send_GetCrossReference(req, cancellationToken); - return await recv_GetCrossReference(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Call, SeqId), cancellationToken); - - var tmp703 = new InternalStructs.GetCrossReference_args() { - Req = req, - }; - - await tmp703.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetCrossReference(CancellationToken cancellationToken = default) - { - - var tmp704 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp704.Type == TMessageType.Exception) - { - var tmp705 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp705; - } - - var tmp706 = new InternalStructs.GetCrossReference_result(); - await tmp706.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp706.__isset.success) - { - return tmp706.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCrossReference failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) - { - await send_GetOperationStatus(req, cancellationToken); - return await recv_GetOperationStatus(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Call, SeqId), cancellationToken); - - var tmp707 = new InternalStructs.GetOperationStatus_args() { - Req = req, - }; - - await tmp707.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetOperationStatus(CancellationToken cancellationToken = default) - { - - var tmp708 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp708.Type == TMessageType.Exception) - { - var tmp709 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp709; - } - - var tmp710 = new InternalStructs.GetOperationStatus_result(); - await tmp710.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp710.__isset.success) - { - return tmp710.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetOperationStatus failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) - { - await send_CancelOperation(req, cancellationToken); - return await recv_CancelOperation(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Call, SeqId), cancellationToken); - - var tmp711 = new InternalStructs.CancelOperation_args() { - Req = req, - }; - - await tmp711.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_CancelOperation(CancellationToken cancellationToken = default) - { - - var tmp712 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp712.Type == TMessageType.Exception) - { - var tmp713 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp713; - } - - var tmp714 = new InternalStructs.CancelOperation_result(); - await tmp714.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp714.__isset.success) - { - return tmp714.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelOperation failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) - { - await send_CloseOperation(req, cancellationToken); - return await recv_CloseOperation(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Call, SeqId), cancellationToken); - - var tmp715 = new InternalStructs.CloseOperation_args() { - Req = req, - }; - - await tmp715.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_CloseOperation(CancellationToken cancellationToken = default) - { - - var tmp716 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp716.Type == TMessageType.Exception) - { - var tmp717 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp717; - } - - var tmp718 = new InternalStructs.CloseOperation_result(); - await tmp718.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp718.__isset.success) - { - return tmp718.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseOperation failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) - { - await send_GetResultSetMetadata(req, cancellationToken); - return await recv_GetResultSetMetadata(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Call, SeqId), cancellationToken); - - var tmp719 = new InternalStructs.GetResultSetMetadata_args() { - Req = req, - }; - - await tmp719.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetResultSetMetadata(CancellationToken cancellationToken = default) - { - - var tmp720 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp720.Type == TMessageType.Exception) - { - var tmp721 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp721; - } - - var tmp722 = new InternalStructs.GetResultSetMetadata_result(); - await tmp722.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp722.__isset.success) - { - return tmp722.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetResultSetMetadata failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) - { - await send_FetchResults(req, cancellationToken); - return await recv_FetchResults(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Call, SeqId), cancellationToken); - - var tmp723 = new InternalStructs.FetchResults_args() { - Req = req, - }; - - await tmp723.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_FetchResults(CancellationToken cancellationToken = default) - { - - var tmp724 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp724.Type == TMessageType.Exception) - { - var tmp725 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp725; - } - - var tmp726 = new InternalStructs.FetchResults_result(); - await tmp726.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp726.__isset.success) - { - return tmp726.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "FetchResults failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await send_GetDelegationToken(req, cancellationToken); - return await recv_GetDelegationToken(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Call, SeqId), cancellationToken); - - var tmp727 = new InternalStructs.GetDelegationToken_args() { - Req = req, - }; - - await tmp727.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetDelegationToken(CancellationToken cancellationToken = default) - { - - var tmp728 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp728.Type == TMessageType.Exception) - { - var tmp729 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp729; - } - - var tmp730 = new InternalStructs.GetDelegationToken_result(); - await tmp730.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp730.__isset.success) - { - return tmp730.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetDelegationToken failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await send_CancelDelegationToken(req, cancellationToken); - return await recv_CancelDelegationToken(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Call, SeqId), cancellationToken); - - var tmp731 = new InternalStructs.CancelDelegationToken_args() { - Req = req, - }; - - await tmp731.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_CancelDelegationToken(CancellationToken cancellationToken = default) - { - - var tmp732 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp732.Type == TMessageType.Exception) - { - var tmp733 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp733; - } - - var tmp734 = new InternalStructs.CancelDelegationToken_result(); - await tmp734.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp734.__isset.success) - { - return tmp734.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelDelegationToken failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await send_RenewDelegationToken(req, cancellationToken); - return await recv_RenewDelegationToken(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Call, SeqId), cancellationToken); - - var tmp735 = new InternalStructs.RenewDelegationToken_args() { - Req = req, - }; - - await tmp735.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_RenewDelegationToken(CancellationToken cancellationToken = default) - { - - var tmp736 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp736.Type == TMessageType.Exception) - { - var tmp737 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp737; - } - - var tmp738 = new InternalStructs.RenewDelegationToken_result(); - await tmp738.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp738.__isset.success) - { - return tmp738.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "RenewDelegationToken failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) - { - await send_GetQueryId(req, cancellationToken); - return await recv_GetQueryId(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Call, SeqId), cancellationToken); - - var tmp739 = new InternalStructs.GetQueryId_args() { - Req = req, - }; - - await tmp739.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_GetQueryId(CancellationToken cancellationToken = default) - { - - var tmp740 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp740.Type == TMessageType.Exception) - { - var tmp741 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp741; - } - - var tmp742 = new InternalStructs.GetQueryId_result(); - await tmp742.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp742.__isset.success) - { - return tmp742.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetQueryId failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) - { - await send_SetClientInfo(req, cancellationToken); - return await recv_SetClientInfo(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Call, SeqId), cancellationToken); - - var tmp743 = new InternalStructs.SetClientInfo_args() { - Req = req, - }; - - await tmp743.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_SetClientInfo(CancellationToken cancellationToken = default) - { - - var tmp744 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp744.Type == TMessageType.Exception) - { - var tmp745 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp745; - } - - var tmp746 = new InternalStructs.SetClientInfo_result(); - await tmp746.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp746.__isset.success) - { - return tmp746.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "SetClientInfo failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) - { - await send_UploadData(req, cancellationToken); - return await recv_UploadData(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Call, SeqId), cancellationToken); - - var tmp747 = new InternalStructs.UploadData_args() { - Req = req, - }; - - await tmp747.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_UploadData(CancellationToken cancellationToken = default) - { - - var tmp748 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp748.Type == TMessageType.Exception) - { - var tmp749 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp749; - } - - var tmp750 = new InternalStructs.UploadData_result(); - await tmp750.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp750.__isset.success) - { - return tmp750.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "UploadData failed: unknown result"); - } - - public async global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) - { - await send_DownloadData(req, cancellationToken); - return await recv_DownloadData(cancellationToken); - } - - public async global::System.Threading.Tasks.Task send_DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) - { - await OutputProtocol.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Call, SeqId), cancellationToken); - - var tmp751 = new InternalStructs.DownloadData_args() { - Req = req, - }; - - await tmp751.WriteAsync(OutputProtocol, cancellationToken); - await OutputProtocol.WriteMessageEndAsync(cancellationToken); - await OutputProtocol.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task recv_DownloadData(CancellationToken cancellationToken = default) - { - - var tmp752 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); - if (tmp752.Type == TMessageType.Exception) - { - var tmp753 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - throw tmp753; - } - - var tmp754 = new InternalStructs.DownloadData_result(); - await tmp754.ReadAsync(InputProtocol, cancellationToken); - await InputProtocol.ReadMessageEndAsync(cancellationToken); - if (tmp754.__isset.success) - { - return tmp754.Success; - } - throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "DownloadData failed: unknown result"); - } - - } - - public class AsyncProcessor : ITAsyncProcessor - { - private readonly IAsync _iAsync; - private readonly ILogger _logger; - - public AsyncProcessor(IAsync iAsync, ILogger logger = default) - { - _iAsync = iAsync ?? throw new ArgumentNullException(nameof(iAsync)); - _logger = logger; - processMap_["OpenSession"] = OpenSession_ProcessAsync; - processMap_["CloseSession"] = CloseSession_ProcessAsync; - processMap_["GetInfo"] = GetInfo_ProcessAsync; - processMap_["ExecuteStatement"] = ExecuteStatement_ProcessAsync; - processMap_["GetTypeInfo"] = GetTypeInfo_ProcessAsync; - processMap_["GetCatalogs"] = GetCatalogs_ProcessAsync; - processMap_["GetSchemas"] = GetSchemas_ProcessAsync; - processMap_["GetTables"] = GetTables_ProcessAsync; - processMap_["GetTableTypes"] = GetTableTypes_ProcessAsync; - processMap_["GetColumns"] = GetColumns_ProcessAsync; - processMap_["GetFunctions"] = GetFunctions_ProcessAsync; - processMap_["GetPrimaryKeys"] = GetPrimaryKeys_ProcessAsync; - processMap_["GetCrossReference"] = GetCrossReference_ProcessAsync; - processMap_["GetOperationStatus"] = GetOperationStatus_ProcessAsync; - processMap_["CancelOperation"] = CancelOperation_ProcessAsync; - processMap_["CloseOperation"] = CloseOperation_ProcessAsync; - processMap_["GetResultSetMetadata"] = GetResultSetMetadata_ProcessAsync; - processMap_["FetchResults"] = FetchResults_ProcessAsync; - processMap_["GetDelegationToken"] = GetDelegationToken_ProcessAsync; - processMap_["CancelDelegationToken"] = CancelDelegationToken_ProcessAsync; - processMap_["RenewDelegationToken"] = RenewDelegationToken_ProcessAsync; - processMap_["GetQueryId"] = GetQueryId_ProcessAsync; - processMap_["SetClientInfo"] = SetClientInfo_ProcessAsync; - processMap_["UploadData"] = UploadData_ProcessAsync; - processMap_["DownloadData"] = DownloadData_ProcessAsync; - } - - protected delegate global::System.Threading.Tasks.Task ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken); - protected Dictionary processMap_ = new Dictionary(); - - public async Task ProcessAsync(TProtocol iprot, TProtocol oprot) - { - return await ProcessAsync(iprot, oprot, CancellationToken.None); - } - - public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - try - { - var msg = await iprot.ReadMessageBeginAsync(cancellationToken); - - processMap_.TryGetValue(msg.Name, out var fn); - - if (fn == null) - { - await TProtocolUtil.SkipAsync(iprot, TType.Struct, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var x = new TApplicationException (TApplicationException.ExceptionType.UnknownMethod, "Invalid method name: '" + msg.Name + "'"); - await oprot.WriteMessageBeginAsync(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID), cancellationToken); - await x.WriteAsync(oprot, cancellationToken); - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - return true; - } - - await fn(msg.SeqID, iprot, oprot, cancellationToken); - - } - catch (IOException) - { - return false; - } - - return true; - } - - public async global::System.Threading.Tasks.Task OpenSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp755 = new InternalStructs.OpenSession_args(); - await tmp755.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp756 = new InternalStructs.OpenSession_result(); - try - { - tmp756.Success = await _iAsync.OpenSession(tmp755.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Reply, seqid), cancellationToken); - await tmp756.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp757) - { - var tmp758 = $"Error occurred in {GetType().FullName}: {tmp757.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp757, tmp758); - else - Console.Error.WriteLine(tmp758); - var tmp759 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Exception, seqid), cancellationToken); - await tmp759.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task CloseSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp760 = new InternalStructs.CloseSession_args(); - await tmp760.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp761 = new InternalStructs.CloseSession_result(); - try - { - tmp761.Success = await _iAsync.CloseSession(tmp760.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Reply, seqid), cancellationToken); - await tmp761.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp762) - { - var tmp763 = $"Error occurred in {GetType().FullName}: {tmp762.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp762, tmp763); - else - Console.Error.WriteLine(tmp763); - var tmp764 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Exception, seqid), cancellationToken); - await tmp764.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp765 = new InternalStructs.GetInfo_args(); - await tmp765.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp766 = new InternalStructs.GetInfo_result(); - try - { - tmp766.Success = await _iAsync.GetInfo(tmp765.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Reply, seqid), cancellationToken); - await tmp766.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp767) - { - var tmp768 = $"Error occurred in {GetType().FullName}: {tmp767.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp767, tmp768); - else - Console.Error.WriteLine(tmp768); - var tmp769 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Exception, seqid), cancellationToken); - await tmp769.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task ExecuteStatement_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp770 = new InternalStructs.ExecuteStatement_args(); - await tmp770.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp771 = new InternalStructs.ExecuteStatement_result(); - try - { - tmp771.Success = await _iAsync.ExecuteStatement(tmp770.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Reply, seqid), cancellationToken); - await tmp771.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp772) - { - var tmp773 = $"Error occurred in {GetType().FullName}: {tmp772.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp772, tmp773); - else - Console.Error.WriteLine(tmp773); - var tmp774 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Exception, seqid), cancellationToken); - await tmp774.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetTypeInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp775 = new InternalStructs.GetTypeInfo_args(); - await tmp775.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp776 = new InternalStructs.GetTypeInfo_result(); - try - { - tmp776.Success = await _iAsync.GetTypeInfo(tmp775.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Reply, seqid), cancellationToken); - await tmp776.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp777) - { - var tmp778 = $"Error occurred in {GetType().FullName}: {tmp777.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp777, tmp778); - else - Console.Error.WriteLine(tmp778); - var tmp779 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Exception, seqid), cancellationToken); - await tmp779.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetCatalogs_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp780 = new InternalStructs.GetCatalogs_args(); - await tmp780.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp781 = new InternalStructs.GetCatalogs_result(); - try - { - tmp781.Success = await _iAsync.GetCatalogs(tmp780.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Reply, seqid), cancellationToken); - await tmp781.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp782) - { - var tmp783 = $"Error occurred in {GetType().FullName}: {tmp782.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp782, tmp783); - else - Console.Error.WriteLine(tmp783); - var tmp784 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Exception, seqid), cancellationToken); - await tmp784.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetSchemas_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp785 = new InternalStructs.GetSchemas_args(); - await tmp785.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp786 = new InternalStructs.GetSchemas_result(); - try - { - tmp786.Success = await _iAsync.GetSchemas(tmp785.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Reply, seqid), cancellationToken); - await tmp786.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp787) - { - var tmp788 = $"Error occurred in {GetType().FullName}: {tmp787.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp787, tmp788); - else - Console.Error.WriteLine(tmp788); - var tmp789 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Exception, seqid), cancellationToken); - await tmp789.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetTables_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp790 = new InternalStructs.GetTables_args(); - await tmp790.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp791 = new InternalStructs.GetTables_result(); - try - { - tmp791.Success = await _iAsync.GetTables(tmp790.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Reply, seqid), cancellationToken); - await tmp791.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp792) - { - var tmp793 = $"Error occurred in {GetType().FullName}: {tmp792.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp792, tmp793); - else - Console.Error.WriteLine(tmp793); - var tmp794 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Exception, seqid), cancellationToken); - await tmp794.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetTableTypes_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp795 = new InternalStructs.GetTableTypes_args(); - await tmp795.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp796 = new InternalStructs.GetTableTypes_result(); - try - { - tmp796.Success = await _iAsync.GetTableTypes(tmp795.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Reply, seqid), cancellationToken); - await tmp796.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp797) - { - var tmp798 = $"Error occurred in {GetType().FullName}: {tmp797.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp797, tmp798); - else - Console.Error.WriteLine(tmp798); - var tmp799 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Exception, seqid), cancellationToken); - await tmp799.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetColumns_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp800 = new InternalStructs.GetColumns_args(); - await tmp800.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp801 = new InternalStructs.GetColumns_result(); - try - { - tmp801.Success = await _iAsync.GetColumns(tmp800.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Reply, seqid), cancellationToken); - await tmp801.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp802) - { - var tmp803 = $"Error occurred in {GetType().FullName}: {tmp802.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp802, tmp803); - else - Console.Error.WriteLine(tmp803); - var tmp804 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Exception, seqid), cancellationToken); - await tmp804.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetFunctions_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp805 = new InternalStructs.GetFunctions_args(); - await tmp805.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp806 = new InternalStructs.GetFunctions_result(); - try - { - tmp806.Success = await _iAsync.GetFunctions(tmp805.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Reply, seqid), cancellationToken); - await tmp806.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp807) - { - var tmp808 = $"Error occurred in {GetType().FullName}: {tmp807.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp807, tmp808); - else - Console.Error.WriteLine(tmp808); - var tmp809 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Exception, seqid), cancellationToken); - await tmp809.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetPrimaryKeys_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp810 = new InternalStructs.GetPrimaryKeys_args(); - await tmp810.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp811 = new InternalStructs.GetPrimaryKeys_result(); - try - { - tmp811.Success = await _iAsync.GetPrimaryKeys(tmp810.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Reply, seqid), cancellationToken); - await tmp811.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp812) - { - var tmp813 = $"Error occurred in {GetType().FullName}: {tmp812.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp812, tmp813); - else - Console.Error.WriteLine(tmp813); - var tmp814 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Exception, seqid), cancellationToken); - await tmp814.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetCrossReference_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp815 = new InternalStructs.GetCrossReference_args(); - await tmp815.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp816 = new InternalStructs.GetCrossReference_result(); - try - { - tmp816.Success = await _iAsync.GetCrossReference(tmp815.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Reply, seqid), cancellationToken); - await tmp816.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp817) - { - var tmp818 = $"Error occurred in {GetType().FullName}: {tmp817.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp817, tmp818); - else - Console.Error.WriteLine(tmp818); - var tmp819 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Exception, seqid), cancellationToken); - await tmp819.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetOperationStatus_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp820 = new InternalStructs.GetOperationStatus_args(); - await tmp820.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp821 = new InternalStructs.GetOperationStatus_result(); - try - { - tmp821.Success = await _iAsync.GetOperationStatus(tmp820.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Reply, seqid), cancellationToken); - await tmp821.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp822) - { - var tmp823 = $"Error occurred in {GetType().FullName}: {tmp822.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp822, tmp823); - else - Console.Error.WriteLine(tmp823); - var tmp824 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Exception, seqid), cancellationToken); - await tmp824.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task CancelOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp825 = new InternalStructs.CancelOperation_args(); - await tmp825.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp826 = new InternalStructs.CancelOperation_result(); - try - { - tmp826.Success = await _iAsync.CancelOperation(tmp825.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Reply, seqid), cancellationToken); - await tmp826.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp827) - { - var tmp828 = $"Error occurred in {GetType().FullName}: {tmp827.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp827, tmp828); - else - Console.Error.WriteLine(tmp828); - var tmp829 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Exception, seqid), cancellationToken); - await tmp829.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task CloseOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp830 = new InternalStructs.CloseOperation_args(); - await tmp830.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp831 = new InternalStructs.CloseOperation_result(); - try - { - tmp831.Success = await _iAsync.CloseOperation(tmp830.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Reply, seqid), cancellationToken); - await tmp831.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp832) - { - var tmp833 = $"Error occurred in {GetType().FullName}: {tmp832.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp832, tmp833); - else - Console.Error.WriteLine(tmp833); - var tmp834 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Exception, seqid), cancellationToken); - await tmp834.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetResultSetMetadata_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp835 = new InternalStructs.GetResultSetMetadata_args(); - await tmp835.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp836 = new InternalStructs.GetResultSetMetadata_result(); - try - { - tmp836.Success = await _iAsync.GetResultSetMetadata(tmp835.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Reply, seqid), cancellationToken); - await tmp836.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp837) - { - var tmp838 = $"Error occurred in {GetType().FullName}: {tmp837.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp837, tmp838); - else - Console.Error.WriteLine(tmp838); - var tmp839 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Exception, seqid), cancellationToken); - await tmp839.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task FetchResults_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp840 = new InternalStructs.FetchResults_args(); - await tmp840.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp841 = new InternalStructs.FetchResults_result(); - try - { - tmp841.Success = await _iAsync.FetchResults(tmp840.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Reply, seqid), cancellationToken); - await tmp841.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp842) - { - var tmp843 = $"Error occurred in {GetType().FullName}: {tmp842.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp842, tmp843); - else - Console.Error.WriteLine(tmp843); - var tmp844 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Exception, seqid), cancellationToken); - await tmp844.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp845 = new InternalStructs.GetDelegationToken_args(); - await tmp845.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp846 = new InternalStructs.GetDelegationToken_result(); - try - { - tmp846.Success = await _iAsync.GetDelegationToken(tmp845.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Reply, seqid), cancellationToken); - await tmp846.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp847) - { - var tmp848 = $"Error occurred in {GetType().FullName}: {tmp847.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp847, tmp848); - else - Console.Error.WriteLine(tmp848); - var tmp849 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Exception, seqid), cancellationToken); - await tmp849.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task CancelDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp850 = new InternalStructs.CancelDelegationToken_args(); - await tmp850.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp851 = new InternalStructs.CancelDelegationToken_result(); - try - { - tmp851.Success = await _iAsync.CancelDelegationToken(tmp850.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Reply, seqid), cancellationToken); - await tmp851.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp852) - { - var tmp853 = $"Error occurred in {GetType().FullName}: {tmp852.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp852, tmp853); - else - Console.Error.WriteLine(tmp853); - var tmp854 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Exception, seqid), cancellationToken); - await tmp854.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task RenewDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp855 = new InternalStructs.RenewDelegationToken_args(); - await tmp855.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp856 = new InternalStructs.RenewDelegationToken_result(); - try - { - tmp856.Success = await _iAsync.RenewDelegationToken(tmp855.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Reply, seqid), cancellationToken); - await tmp856.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp857) - { - var tmp858 = $"Error occurred in {GetType().FullName}: {tmp857.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp857, tmp858); - else - Console.Error.WriteLine(tmp858); - var tmp859 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Exception, seqid), cancellationToken); - await tmp859.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task GetQueryId_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp860 = new InternalStructs.GetQueryId_args(); - await tmp860.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp861 = new InternalStructs.GetQueryId_result(); - try - { - tmp861.Success = await _iAsync.GetQueryId(tmp860.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Reply, seqid), cancellationToken); - await tmp861.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp862) - { - var tmp863 = $"Error occurred in {GetType().FullName}: {tmp862.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp862, tmp863); - else - Console.Error.WriteLine(tmp863); - var tmp864 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Exception, seqid), cancellationToken); - await tmp864.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task SetClientInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp865 = new InternalStructs.SetClientInfo_args(); - await tmp865.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp866 = new InternalStructs.SetClientInfo_result(); - try - { - tmp866.Success = await _iAsync.SetClientInfo(tmp865.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Reply, seqid), cancellationToken); - await tmp866.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp867) - { - var tmp868 = $"Error occurred in {GetType().FullName}: {tmp867.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp867, tmp868); - else - Console.Error.WriteLine(tmp868); - var tmp869 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Exception, seqid), cancellationToken); - await tmp869.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task UploadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp870 = new InternalStructs.UploadData_args(); - await tmp870.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp871 = new InternalStructs.UploadData_result(); - try - { - tmp871.Success = await _iAsync.UploadData(tmp870.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Reply, seqid), cancellationToken); - await tmp871.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp872) - { - var tmp873 = $"Error occurred in {GetType().FullName}: {tmp872.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp872, tmp873); - else - Console.Error.WriteLine(tmp873); - var tmp874 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Exception, seqid), cancellationToken); - await tmp874.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - public async global::System.Threading.Tasks.Task DownloadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) - { - var tmp875 = new InternalStructs.DownloadData_args(); - await tmp875.ReadAsync(iprot, cancellationToken); - await iprot.ReadMessageEndAsync(cancellationToken); - var tmp876 = new InternalStructs.DownloadData_result(); - try - { - tmp876.Success = await _iAsync.DownloadData(tmp875.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Reply, seqid), cancellationToken); - await tmp876.WriteAsync(oprot, cancellationToken); - } - catch (TTransportException) - { - throw; - } - catch (Exception tmp877) - { - var tmp878 = $"Error occurred in {GetType().FullName}: {tmp877.Message}"; - if(_logger != null) - _logger.LogError("{Exception}, {Message}", tmp877, tmp878); - else - Console.Error.WriteLine(tmp878); - var tmp879 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); - await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Exception, seqid), cancellationToken); - await tmp879.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMessageEndAsync(cancellationToken); - await oprot.Transport.FlushAsync(cancellationToken); - } - - } - - public class InternalStructs - { - - public partial class OpenSession_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public OpenSession_args() - { - } - - public OpenSession_args DeepCopy() - { - var tmp880 = new OpenSession_args(); - if((Req != null) && __isset.req) - { - tmp880.Req = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq)this.Req.DeepCopy(); - } - tmp880.__isset.req = this.__isset.req; - return tmp880; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp881 = new TStruct("OpenSession_args"); - await oprot.WriteStructBeginAsync(tmp881, cancellationToken); - var tmp882 = new TField(); - if((Req != null) && __isset.req) - { - tmp882.Name = "req"; - tmp882.Type = TType.Struct; - tmp882.ID = 1; - await oprot.WriteFieldBeginAsync(tmp882, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is OpenSession_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp883 = new StringBuilder("OpenSession_args("); - int tmp884 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp884++) { tmp883.Append(", "); } - tmp883.Append("Req: "); - Req.ToString(tmp883); - } - tmp883.Append(')'); - return tmp883.ToString(); - } - } - - - public partial class OpenSession_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public OpenSession_result() - { - } - - public OpenSession_result DeepCopy() - { - var tmp885 = new OpenSession_result(); - if((Success != null) && __isset.success) - { - tmp885.Success = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp)this.Success.DeepCopy(); - } - tmp885.__isset.success = this.__isset.success; - return tmp885; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp886 = new TStruct("OpenSession_result"); - await oprot.WriteStructBeginAsync(tmp886, cancellationToken); - var tmp887 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp887.Name = "Success"; - tmp887.Type = TType.Struct; - tmp887.ID = 0; - await oprot.WriteFieldBeginAsync(tmp887, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is OpenSession_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp888 = new StringBuilder("OpenSession_result("); - int tmp889 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp889++) { tmp888.Append(", "); } - tmp888.Append("Success: "); - Success.ToString(tmp888); - } - tmp888.Append(')'); - return tmp888.ToString(); - } - } - - - public partial class CloseSession_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public CloseSession_args() - { - } - - public CloseSession_args DeepCopy() - { - var tmp890 = new CloseSession_args(); - if((Req != null) && __isset.req) - { - tmp890.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq)this.Req.DeepCopy(); - } - tmp890.__isset.req = this.__isset.req; - return tmp890; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp891 = new TStruct("CloseSession_args"); - await oprot.WriteStructBeginAsync(tmp891, cancellationToken); - var tmp892 = new TField(); - if((Req != null) && __isset.req) - { - tmp892.Name = "req"; - tmp892.Type = TType.Struct; - tmp892.ID = 1; - await oprot.WriteFieldBeginAsync(tmp892, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CloseSession_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp893 = new StringBuilder("CloseSession_args("); - int tmp894 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp894++) { tmp893.Append(", "); } - tmp893.Append("Req: "); - Req.ToString(tmp893); - } - tmp893.Append(')'); - return tmp893.ToString(); - } - } - - - public partial class CloseSession_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public CloseSession_result() - { - } - - public CloseSession_result DeepCopy() - { - var tmp895 = new CloseSession_result(); - if((Success != null) && __isset.success) - { - tmp895.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp)this.Success.DeepCopy(); - } - tmp895.__isset.success = this.__isset.success; - return tmp895; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp896 = new TStruct("CloseSession_result"); - await oprot.WriteStructBeginAsync(tmp896, cancellationToken); - var tmp897 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp897.Name = "Success"; - tmp897.Type = TType.Struct; - tmp897.ID = 0; - await oprot.WriteFieldBeginAsync(tmp897, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CloseSession_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp898 = new StringBuilder("CloseSession_result("); - int tmp899 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp899++) { tmp898.Append(", "); } - tmp898.Append("Success: "); - Success.ToString(tmp898); - } - tmp898.Append(')'); - return tmp898.ToString(); - } - } - - - public partial class GetInfo_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetInfo_args() - { - } - - public GetInfo_args DeepCopy() - { - var tmp900 = new GetInfo_args(); - if((Req != null) && __isset.req) - { - tmp900.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq)this.Req.DeepCopy(); - } - tmp900.__isset.req = this.__isset.req; - return tmp900; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp901 = new TStruct("GetInfo_args"); - await oprot.WriteStructBeginAsync(tmp901, cancellationToken); - var tmp902 = new TField(); - if((Req != null) && __isset.req) - { - tmp902.Name = "req"; - tmp902.Type = TType.Struct; - tmp902.ID = 1; - await oprot.WriteFieldBeginAsync(tmp902, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetInfo_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp903 = new StringBuilder("GetInfo_args("); - int tmp904 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp904++) { tmp903.Append(", "); } - tmp903.Append("Req: "); - Req.ToString(tmp903); - } - tmp903.Append(')'); - return tmp903.ToString(); - } - } - - - public partial class GetInfo_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetInfo_result() - { - } - - public GetInfo_result DeepCopy() - { - var tmp905 = new GetInfo_result(); - if((Success != null) && __isset.success) - { - tmp905.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp)this.Success.DeepCopy(); - } - tmp905.__isset.success = this.__isset.success; - return tmp905; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp906 = new TStruct("GetInfo_result"); - await oprot.WriteStructBeginAsync(tmp906, cancellationToken); - var tmp907 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp907.Name = "Success"; - tmp907.Type = TType.Struct; - tmp907.ID = 0; - await oprot.WriteFieldBeginAsync(tmp907, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetInfo_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp908 = new StringBuilder("GetInfo_result("); - int tmp909 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp909++) { tmp908.Append(", "); } - tmp908.Append("Success: "); - Success.ToString(tmp908); - } - tmp908.Append(')'); - return tmp908.ToString(); - } - } - - - public partial class ExecuteStatement_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public ExecuteStatement_args() - { - } - - public ExecuteStatement_args DeepCopy() - { - var tmp910 = new ExecuteStatement_args(); - if((Req != null) && __isset.req) - { - tmp910.Req = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq)this.Req.DeepCopy(); - } - tmp910.__isset.req = this.__isset.req; - return tmp910; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp911 = new TStruct("ExecuteStatement_args"); - await oprot.WriteStructBeginAsync(tmp911, cancellationToken); - var tmp912 = new TField(); - if((Req != null) && __isset.req) - { - tmp912.Name = "req"; - tmp912.Type = TType.Struct; - tmp912.ID = 1; - await oprot.WriteFieldBeginAsync(tmp912, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is ExecuteStatement_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp913 = new StringBuilder("ExecuteStatement_args("); - int tmp914 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp914++) { tmp913.Append(", "); } - tmp913.Append("Req: "); - Req.ToString(tmp913); - } - tmp913.Append(')'); - return tmp913.ToString(); - } - } - - - public partial class ExecuteStatement_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public ExecuteStatement_result() - { - } - - public ExecuteStatement_result DeepCopy() - { - var tmp915 = new ExecuteStatement_result(); - if((Success != null) && __isset.success) - { - tmp915.Success = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp)this.Success.DeepCopy(); - } - tmp915.__isset.success = this.__isset.success; - return tmp915; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp916 = new TStruct("ExecuteStatement_result"); - await oprot.WriteStructBeginAsync(tmp916, cancellationToken); - var tmp917 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp917.Name = "Success"; - tmp917.Type = TType.Struct; - tmp917.ID = 0; - await oprot.WriteFieldBeginAsync(tmp917, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is ExecuteStatement_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp918 = new StringBuilder("ExecuteStatement_result("); - int tmp919 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp919++) { tmp918.Append(", "); } - tmp918.Append("Success: "); - Success.ToString(tmp918); - } - tmp918.Append(')'); - return tmp918.ToString(); - } - } - - - public partial class GetTypeInfo_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetTypeInfo_args() - { - } - - public GetTypeInfo_args DeepCopy() - { - var tmp920 = new GetTypeInfo_args(); - if((Req != null) && __isset.req) - { - tmp920.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq)this.Req.DeepCopy(); - } - tmp920.__isset.req = this.__isset.req; - return tmp920; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp921 = new TStruct("GetTypeInfo_args"); - await oprot.WriteStructBeginAsync(tmp921, cancellationToken); - var tmp922 = new TField(); - if((Req != null) && __isset.req) - { - tmp922.Name = "req"; - tmp922.Type = TType.Struct; - tmp922.ID = 1; - await oprot.WriteFieldBeginAsync(tmp922, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTypeInfo_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp923 = new StringBuilder("GetTypeInfo_args("); - int tmp924 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp924++) { tmp923.Append(", "); } - tmp923.Append("Req: "); - Req.ToString(tmp923); - } - tmp923.Append(')'); - return tmp923.ToString(); - } - } - - - public partial class GetTypeInfo_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetTypeInfo_result() - { - } - - public GetTypeInfo_result DeepCopy() - { - var tmp925 = new GetTypeInfo_result(); - if((Success != null) && __isset.success) - { - tmp925.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp)this.Success.DeepCopy(); - } - tmp925.__isset.success = this.__isset.success; - return tmp925; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp926 = new TStruct("GetTypeInfo_result"); - await oprot.WriteStructBeginAsync(tmp926, cancellationToken); - var tmp927 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp927.Name = "Success"; - tmp927.Type = TType.Struct; - tmp927.ID = 0; - await oprot.WriteFieldBeginAsync(tmp927, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTypeInfo_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp928 = new StringBuilder("GetTypeInfo_result("); - int tmp929 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp929++) { tmp928.Append(", "); } - tmp928.Append("Success: "); - Success.ToString(tmp928); - } - tmp928.Append(')'); - return tmp928.ToString(); - } - } - - - public partial class GetCatalogs_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetCatalogs_args() - { - } - - public GetCatalogs_args DeepCopy() - { - var tmp930 = new GetCatalogs_args(); - if((Req != null) && __isset.req) - { - tmp930.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq)this.Req.DeepCopy(); - } - tmp930.__isset.req = this.__isset.req; - return tmp930; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp931 = new TStruct("GetCatalogs_args"); - await oprot.WriteStructBeginAsync(tmp931, cancellationToken); - var tmp932 = new TField(); - if((Req != null) && __isset.req) - { - tmp932.Name = "req"; - tmp932.Type = TType.Struct; - tmp932.ID = 1; - await oprot.WriteFieldBeginAsync(tmp932, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetCatalogs_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp933 = new StringBuilder("GetCatalogs_args("); - int tmp934 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp934++) { tmp933.Append(", "); } - tmp933.Append("Req: "); - Req.ToString(tmp933); - } - tmp933.Append(')'); - return tmp933.ToString(); - } - } - - - public partial class GetCatalogs_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetCatalogs_result() - { - } - - public GetCatalogs_result DeepCopy() - { - var tmp935 = new GetCatalogs_result(); - if((Success != null) && __isset.success) - { - tmp935.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp)this.Success.DeepCopy(); - } - tmp935.__isset.success = this.__isset.success; - return tmp935; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp936 = new TStruct("GetCatalogs_result"); - await oprot.WriteStructBeginAsync(tmp936, cancellationToken); - var tmp937 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp937.Name = "Success"; - tmp937.Type = TType.Struct; - tmp937.ID = 0; - await oprot.WriteFieldBeginAsync(tmp937, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetCatalogs_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp938 = new StringBuilder("GetCatalogs_result("); - int tmp939 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp939++) { tmp938.Append(", "); } - tmp938.Append("Success: "); - Success.ToString(tmp938); - } - tmp938.Append(')'); - return tmp938.ToString(); - } - } - - - public partial class GetSchemas_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetSchemas_args() - { - } - - public GetSchemas_args DeepCopy() - { - var tmp940 = new GetSchemas_args(); - if((Req != null) && __isset.req) - { - tmp940.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq)this.Req.DeepCopy(); - } - tmp940.__isset.req = this.__isset.req; - return tmp940; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp941 = new TStruct("GetSchemas_args"); - await oprot.WriteStructBeginAsync(tmp941, cancellationToken); - var tmp942 = new TField(); - if((Req != null) && __isset.req) - { - tmp942.Name = "req"; - tmp942.Type = TType.Struct; - tmp942.ID = 1; - await oprot.WriteFieldBeginAsync(tmp942, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetSchemas_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp943 = new StringBuilder("GetSchemas_args("); - int tmp944 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp944++) { tmp943.Append(", "); } - tmp943.Append("Req: "); - Req.ToString(tmp943); - } - tmp943.Append(')'); - return tmp943.ToString(); - } - } - - - public partial class GetSchemas_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetSchemas_result() - { - } - - public GetSchemas_result DeepCopy() - { - var tmp945 = new GetSchemas_result(); - if((Success != null) && __isset.success) - { - tmp945.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp)this.Success.DeepCopy(); - } - tmp945.__isset.success = this.__isset.success; - return tmp945; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp946 = new TStruct("GetSchemas_result"); - await oprot.WriteStructBeginAsync(tmp946, cancellationToken); - var tmp947 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp947.Name = "Success"; - tmp947.Type = TType.Struct; - tmp947.ID = 0; - await oprot.WriteFieldBeginAsync(tmp947, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetSchemas_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp948 = new StringBuilder("GetSchemas_result("); - int tmp949 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp949++) { tmp948.Append(", "); } - tmp948.Append("Success: "); - Success.ToString(tmp948); - } - tmp948.Append(')'); - return tmp948.ToString(); - } - } - - - public partial class GetTables_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetTables_args() - { - } - - public GetTables_args DeepCopy() - { - var tmp950 = new GetTables_args(); - if((Req != null) && __isset.req) - { - tmp950.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq)this.Req.DeepCopy(); - } - tmp950.__isset.req = this.__isset.req; - return tmp950; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp951 = new TStruct("GetTables_args"); - await oprot.WriteStructBeginAsync(tmp951, cancellationToken); - var tmp952 = new TField(); - if((Req != null) && __isset.req) - { - tmp952.Name = "req"; - tmp952.Type = TType.Struct; - tmp952.ID = 1; - await oprot.WriteFieldBeginAsync(tmp952, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTables_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp953 = new StringBuilder("GetTables_args("); - int tmp954 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp954++) { tmp953.Append(", "); } - tmp953.Append("Req: "); - Req.ToString(tmp953); - } - tmp953.Append(')'); - return tmp953.ToString(); - } - } - - - public partial class GetTables_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetTables_result() - { - } - - public GetTables_result DeepCopy() - { - var tmp955 = new GetTables_result(); - if((Success != null) && __isset.success) - { - tmp955.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp)this.Success.DeepCopy(); - } - tmp955.__isset.success = this.__isset.success; - return tmp955; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp956 = new TStruct("GetTables_result"); - await oprot.WriteStructBeginAsync(tmp956, cancellationToken); - var tmp957 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp957.Name = "Success"; - tmp957.Type = TType.Struct; - tmp957.ID = 0; - await oprot.WriteFieldBeginAsync(tmp957, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTables_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp958 = new StringBuilder("GetTables_result("); - int tmp959 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp959++) { tmp958.Append(", "); } - tmp958.Append("Success: "); - Success.ToString(tmp958); - } - tmp958.Append(')'); - return tmp958.ToString(); - } - } - - - public partial class GetTableTypes_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetTableTypes_args() - { - } - - public GetTableTypes_args DeepCopy() - { - var tmp960 = new GetTableTypes_args(); - if((Req != null) && __isset.req) - { - tmp960.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq)this.Req.DeepCopy(); - } - tmp960.__isset.req = this.__isset.req; - return tmp960; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp961 = new TStruct("GetTableTypes_args"); - await oprot.WriteStructBeginAsync(tmp961, cancellationToken); - var tmp962 = new TField(); - if((Req != null) && __isset.req) - { - tmp962.Name = "req"; - tmp962.Type = TType.Struct; - tmp962.ID = 1; - await oprot.WriteFieldBeginAsync(tmp962, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTableTypes_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp963 = new StringBuilder("GetTableTypes_args("); - int tmp964 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp964++) { tmp963.Append(", "); } - tmp963.Append("Req: "); - Req.ToString(tmp963); - } - tmp963.Append(')'); - return tmp963.ToString(); - } - } - - - public partial class GetTableTypes_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetTableTypes_result() - { - } - - public GetTableTypes_result DeepCopy() - { - var tmp965 = new GetTableTypes_result(); - if((Success != null) && __isset.success) - { - tmp965.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp)this.Success.DeepCopy(); - } - tmp965.__isset.success = this.__isset.success; - return tmp965; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp966 = new TStruct("GetTableTypes_result"); - await oprot.WriteStructBeginAsync(tmp966, cancellationToken); - var tmp967 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp967.Name = "Success"; - tmp967.Type = TType.Struct; - tmp967.ID = 0; - await oprot.WriteFieldBeginAsync(tmp967, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetTableTypes_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp968 = new StringBuilder("GetTableTypes_result("); - int tmp969 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp969++) { tmp968.Append(", "); } - tmp968.Append("Success: "); - Success.ToString(tmp968); - } - tmp968.Append(')'); - return tmp968.ToString(); - } - } - - - public partial class GetColumns_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetColumns_args() - { - } - - public GetColumns_args DeepCopy() - { - var tmp970 = new GetColumns_args(); - if((Req != null) && __isset.req) - { - tmp970.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq)this.Req.DeepCopy(); - } - tmp970.__isset.req = this.__isset.req; - return tmp970; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp971 = new TStruct("GetColumns_args"); - await oprot.WriteStructBeginAsync(tmp971, cancellationToken); - var tmp972 = new TField(); - if((Req != null) && __isset.req) - { - tmp972.Name = "req"; - tmp972.Type = TType.Struct; - tmp972.ID = 1; - await oprot.WriteFieldBeginAsync(tmp972, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetColumns_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp973 = new StringBuilder("GetColumns_args("); - int tmp974 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp974++) { tmp973.Append(", "); } - tmp973.Append("Req: "); - Req.ToString(tmp973); - } - tmp973.Append(')'); - return tmp973.ToString(); - } - } - - - public partial class GetColumns_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetColumns_result() - { - } - - public GetColumns_result DeepCopy() - { - var tmp975 = new GetColumns_result(); - if((Success != null) && __isset.success) - { - tmp975.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp)this.Success.DeepCopy(); - } - tmp975.__isset.success = this.__isset.success; - return tmp975; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp976 = new TStruct("GetColumns_result"); - await oprot.WriteStructBeginAsync(tmp976, cancellationToken); - var tmp977 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp977.Name = "Success"; - tmp977.Type = TType.Struct; - tmp977.ID = 0; - await oprot.WriteFieldBeginAsync(tmp977, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetColumns_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp978 = new StringBuilder("GetColumns_result("); - int tmp979 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp979++) { tmp978.Append(", "); } - tmp978.Append("Success: "); - Success.ToString(tmp978); - } - tmp978.Append(')'); - return tmp978.ToString(); - } - } - - - public partial class GetFunctions_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetFunctions_args() - { - } - - public GetFunctions_args DeepCopy() - { - var tmp980 = new GetFunctions_args(); - if((Req != null) && __isset.req) - { - tmp980.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq)this.Req.DeepCopy(); - } - tmp980.__isset.req = this.__isset.req; - return tmp980; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp981 = new TStruct("GetFunctions_args"); - await oprot.WriteStructBeginAsync(tmp981, cancellationToken); - var tmp982 = new TField(); - if((Req != null) && __isset.req) - { - tmp982.Name = "req"; - tmp982.Type = TType.Struct; - tmp982.ID = 1; - await oprot.WriteFieldBeginAsync(tmp982, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetFunctions_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp983 = new StringBuilder("GetFunctions_args("); - int tmp984 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp984++) { tmp983.Append(", "); } - tmp983.Append("Req: "); - Req.ToString(tmp983); - } - tmp983.Append(')'); - return tmp983.ToString(); - } - } - - - public partial class GetFunctions_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetFunctions_result() - { - } - - public GetFunctions_result DeepCopy() - { - var tmp985 = new GetFunctions_result(); - if((Success != null) && __isset.success) - { - tmp985.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp)this.Success.DeepCopy(); - } - tmp985.__isset.success = this.__isset.success; - return tmp985; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp986 = new TStruct("GetFunctions_result"); - await oprot.WriteStructBeginAsync(tmp986, cancellationToken); - var tmp987 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp987.Name = "Success"; - tmp987.Type = TType.Struct; - tmp987.ID = 0; - await oprot.WriteFieldBeginAsync(tmp987, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetFunctions_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp988 = new StringBuilder("GetFunctions_result("); - int tmp989 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp989++) { tmp988.Append(", "); } - tmp988.Append("Success: "); - Success.ToString(tmp988); - } - tmp988.Append(')'); - return tmp988.ToString(); - } - } - - - public partial class GetPrimaryKeys_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetPrimaryKeys_args() - { - } - - public GetPrimaryKeys_args DeepCopy() - { - var tmp990 = new GetPrimaryKeys_args(); - if((Req != null) && __isset.req) - { - tmp990.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq)this.Req.DeepCopy(); - } - tmp990.__isset.req = this.__isset.req; - return tmp990; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp991 = new TStruct("GetPrimaryKeys_args"); - await oprot.WriteStructBeginAsync(tmp991, cancellationToken); - var tmp992 = new TField(); - if((Req != null) && __isset.req) - { - tmp992.Name = "req"; - tmp992.Type = TType.Struct; - tmp992.ID = 1; - await oprot.WriteFieldBeginAsync(tmp992, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetPrimaryKeys_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp993 = new StringBuilder("GetPrimaryKeys_args("); - int tmp994 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp994++) { tmp993.Append(", "); } - tmp993.Append("Req: "); - Req.ToString(tmp993); - } - tmp993.Append(')'); - return tmp993.ToString(); - } - } - - - public partial class GetPrimaryKeys_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetPrimaryKeys_result() - { - } - - public GetPrimaryKeys_result DeepCopy() - { - var tmp995 = new GetPrimaryKeys_result(); - if((Success != null) && __isset.success) - { - tmp995.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp)this.Success.DeepCopy(); - } - tmp995.__isset.success = this.__isset.success; - return tmp995; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp996 = new TStruct("GetPrimaryKeys_result"); - await oprot.WriteStructBeginAsync(tmp996, cancellationToken); - var tmp997 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp997.Name = "Success"; - tmp997.Type = TType.Struct; - tmp997.ID = 0; - await oprot.WriteFieldBeginAsync(tmp997, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetPrimaryKeys_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp998 = new StringBuilder("GetPrimaryKeys_result("); - int tmp999 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp999++) { tmp998.Append(", "); } - tmp998.Append("Success: "); - Success.ToString(tmp998); - } - tmp998.Append(')'); - return tmp998.ToString(); - } - } - - - public partial class GetCrossReference_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetCrossReference_args() - { - } - - public GetCrossReference_args DeepCopy() - { - var tmp1000 = new GetCrossReference_args(); - if((Req != null) && __isset.req) - { - tmp1000.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq)this.Req.DeepCopy(); - } - tmp1000.__isset.req = this.__isset.req; - return tmp1000; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1001 = new TStruct("GetCrossReference_args"); - await oprot.WriteStructBeginAsync(tmp1001, cancellationToken); - var tmp1002 = new TField(); - if((Req != null) && __isset.req) - { - tmp1002.Name = "req"; - tmp1002.Type = TType.Struct; - tmp1002.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1002, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetCrossReference_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1003 = new StringBuilder("GetCrossReference_args("); - int tmp1004 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1004++) { tmp1003.Append(", "); } - tmp1003.Append("Req: "); - Req.ToString(tmp1003); - } - tmp1003.Append(')'); - return tmp1003.ToString(); - } - } - - - public partial class GetCrossReference_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetCrossReference_result() - { - } - - public GetCrossReference_result DeepCopy() - { - var tmp1005 = new GetCrossReference_result(); - if((Success != null) && __isset.success) - { - tmp1005.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp)this.Success.DeepCopy(); - } - tmp1005.__isset.success = this.__isset.success; - return tmp1005; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1006 = new TStruct("GetCrossReference_result"); - await oprot.WriteStructBeginAsync(tmp1006, cancellationToken); - var tmp1007 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1007.Name = "Success"; - tmp1007.Type = TType.Struct; - tmp1007.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1007, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetCrossReference_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1008 = new StringBuilder("GetCrossReference_result("); - int tmp1009 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1009++) { tmp1008.Append(", "); } - tmp1008.Append("Success: "); - Success.ToString(tmp1008); - } - tmp1008.Append(')'); - return tmp1008.ToString(); - } - } - - - public partial class GetOperationStatus_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetOperationStatus_args() - { - } - - public GetOperationStatus_args DeepCopy() - { - var tmp1010 = new GetOperationStatus_args(); - if((Req != null) && __isset.req) - { - tmp1010.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq)this.Req.DeepCopy(); - } - tmp1010.__isset.req = this.__isset.req; - return tmp1010; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1011 = new TStruct("GetOperationStatus_args"); - await oprot.WriteStructBeginAsync(tmp1011, cancellationToken); - var tmp1012 = new TField(); - if((Req != null) && __isset.req) - { - tmp1012.Name = "req"; - tmp1012.Type = TType.Struct; - tmp1012.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1012, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetOperationStatus_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1013 = new StringBuilder("GetOperationStatus_args("); - int tmp1014 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1014++) { tmp1013.Append(", "); } - tmp1013.Append("Req: "); - Req.ToString(tmp1013); - } - tmp1013.Append(')'); - return tmp1013.ToString(); - } - } - - - public partial class GetOperationStatus_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetOperationStatus_result() - { - } - - public GetOperationStatus_result DeepCopy() - { - var tmp1015 = new GetOperationStatus_result(); - if((Success != null) && __isset.success) - { - tmp1015.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.Success.DeepCopy(); - } - tmp1015.__isset.success = this.__isset.success; - return tmp1015; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1016 = new TStruct("GetOperationStatus_result"); - await oprot.WriteStructBeginAsync(tmp1016, cancellationToken); - var tmp1017 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1017.Name = "Success"; - tmp1017.Type = TType.Struct; - tmp1017.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1017, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetOperationStatus_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1018 = new StringBuilder("GetOperationStatus_result("); - int tmp1019 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1019++) { tmp1018.Append(", "); } - tmp1018.Append("Success: "); - Success.ToString(tmp1018); - } - tmp1018.Append(')'); - return tmp1018.ToString(); - } - } - - - public partial class CancelOperation_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public CancelOperation_args() - { - } - - public CancelOperation_args DeepCopy() - { - var tmp1020 = new CancelOperation_args(); - if((Req != null) && __isset.req) - { - tmp1020.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq)this.Req.DeepCopy(); - } - tmp1020.__isset.req = this.__isset.req; - return tmp1020; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1021 = new TStruct("CancelOperation_args"); - await oprot.WriteStructBeginAsync(tmp1021, cancellationToken); - var tmp1022 = new TField(); - if((Req != null) && __isset.req) - { - tmp1022.Name = "req"; - tmp1022.Type = TType.Struct; - tmp1022.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1022, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CancelOperation_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1023 = new StringBuilder("CancelOperation_args("); - int tmp1024 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1024++) { tmp1023.Append(", "); } - tmp1023.Append("Req: "); - Req.ToString(tmp1023); - } - tmp1023.Append(')'); - return tmp1023.ToString(); - } - } - - - public partial class CancelOperation_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public CancelOperation_result() - { - } - - public CancelOperation_result DeepCopy() - { - var tmp1025 = new CancelOperation_result(); - if((Success != null) && __isset.success) - { - tmp1025.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp)this.Success.DeepCopy(); - } - tmp1025.__isset.success = this.__isset.success; - return tmp1025; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1026 = new TStruct("CancelOperation_result"); - await oprot.WriteStructBeginAsync(tmp1026, cancellationToken); - var tmp1027 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1027.Name = "Success"; - tmp1027.Type = TType.Struct; - tmp1027.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1027, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CancelOperation_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1028 = new StringBuilder("CancelOperation_result("); - int tmp1029 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1029++) { tmp1028.Append(", "); } - tmp1028.Append("Success: "); - Success.ToString(tmp1028); - } - tmp1028.Append(')'); - return tmp1028.ToString(); - } - } - - - public partial class CloseOperation_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public CloseOperation_args() - { - } - - public CloseOperation_args DeepCopy() - { - var tmp1030 = new CloseOperation_args(); - if((Req != null) && __isset.req) - { - tmp1030.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq)this.Req.DeepCopy(); - } - tmp1030.__isset.req = this.__isset.req; - return tmp1030; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1031 = new TStruct("CloseOperation_args"); - await oprot.WriteStructBeginAsync(tmp1031, cancellationToken); - var tmp1032 = new TField(); - if((Req != null) && __isset.req) - { - tmp1032.Name = "req"; - tmp1032.Type = TType.Struct; - tmp1032.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1032, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CloseOperation_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1033 = new StringBuilder("CloseOperation_args("); - int tmp1034 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1034++) { tmp1033.Append(", "); } - tmp1033.Append("Req: "); - Req.ToString(tmp1033); - } - tmp1033.Append(')'); - return tmp1033.ToString(); - } - } - - - public partial class CloseOperation_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public CloseOperation_result() - { - } - - public CloseOperation_result DeepCopy() - { - var tmp1035 = new CloseOperation_result(); - if((Success != null) && __isset.success) - { - tmp1035.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.Success.DeepCopy(); - } - tmp1035.__isset.success = this.__isset.success; - return tmp1035; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1036 = new TStruct("CloseOperation_result"); - await oprot.WriteStructBeginAsync(tmp1036, cancellationToken); - var tmp1037 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1037.Name = "Success"; - tmp1037.Type = TType.Struct; - tmp1037.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1037, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CloseOperation_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1038 = new StringBuilder("CloseOperation_result("); - int tmp1039 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1039++) { tmp1038.Append(", "); } - tmp1038.Append("Success: "); - Success.ToString(tmp1038); - } - tmp1038.Append(')'); - return tmp1038.ToString(); - } - } - - - public partial class GetResultSetMetadata_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetResultSetMetadata_args() - { - } - - public GetResultSetMetadata_args DeepCopy() - { - var tmp1040 = new GetResultSetMetadata_args(); - if((Req != null) && __isset.req) - { - tmp1040.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq)this.Req.DeepCopy(); - } - tmp1040.__isset.req = this.__isset.req; - return tmp1040; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1041 = new TStruct("GetResultSetMetadata_args"); - await oprot.WriteStructBeginAsync(tmp1041, cancellationToken); - var tmp1042 = new TField(); - if((Req != null) && __isset.req) - { - tmp1042.Name = "req"; - tmp1042.Type = TType.Struct; - tmp1042.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1042, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetResultSetMetadata_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1043 = new StringBuilder("GetResultSetMetadata_args("); - int tmp1044 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1044++) { tmp1043.Append(", "); } - tmp1043.Append("Req: "); - Req.ToString(tmp1043); - } - tmp1043.Append(')'); - return tmp1043.ToString(); - } - } - - - public partial class GetResultSetMetadata_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetResultSetMetadata_result() - { - } - - public GetResultSetMetadata_result DeepCopy() - { - var tmp1045 = new GetResultSetMetadata_result(); - if((Success != null) && __isset.success) - { - tmp1045.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.Success.DeepCopy(); - } - tmp1045.__isset.success = this.__isset.success; - return tmp1045; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1046 = new TStruct("GetResultSetMetadata_result"); - await oprot.WriteStructBeginAsync(tmp1046, cancellationToken); - var tmp1047 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1047.Name = "Success"; - tmp1047.Type = TType.Struct; - tmp1047.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1047, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetResultSetMetadata_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1048 = new StringBuilder("GetResultSetMetadata_result("); - int tmp1049 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1049++) { tmp1048.Append(", "); } - tmp1048.Append("Success: "); - Success.ToString(tmp1048); - } - tmp1048.Append(')'); - return tmp1048.ToString(); - } - } - - - public partial class FetchResults_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public FetchResults_args() - { - } - - public FetchResults_args DeepCopy() - { - var tmp1050 = new FetchResults_args(); - if((Req != null) && __isset.req) - { - tmp1050.Req = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq)this.Req.DeepCopy(); - } - tmp1050.__isset.req = this.__isset.req; - return tmp1050; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1051 = new TStruct("FetchResults_args"); - await oprot.WriteStructBeginAsync(tmp1051, cancellationToken); - var tmp1052 = new TField(); - if((Req != null) && __isset.req) - { - tmp1052.Name = "req"; - tmp1052.Type = TType.Struct; - tmp1052.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1052, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is FetchResults_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1053 = new StringBuilder("FetchResults_args("); - int tmp1054 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1054++) { tmp1053.Append(", "); } - tmp1053.Append("Req: "); - Req.ToString(tmp1053); - } - tmp1053.Append(')'); - return tmp1053.ToString(); - } - } - - - public partial class FetchResults_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public FetchResults_result() - { - } - - public FetchResults_result DeepCopy() - { - var tmp1055 = new FetchResults_result(); - if((Success != null) && __isset.success) - { - tmp1055.Success = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.Success.DeepCopy(); - } - tmp1055.__isset.success = this.__isset.success; - return tmp1055; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1056 = new TStruct("FetchResults_result"); - await oprot.WriteStructBeginAsync(tmp1056, cancellationToken); - var tmp1057 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1057.Name = "Success"; - tmp1057.Type = TType.Struct; - tmp1057.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1057, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is FetchResults_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1058 = new StringBuilder("FetchResults_result("); - int tmp1059 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1059++) { tmp1058.Append(", "); } - tmp1058.Append("Success: "); - Success.ToString(tmp1058); - } - tmp1058.Append(')'); - return tmp1058.ToString(); - } - } - - - public partial class GetDelegationToken_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetDelegationToken_args() - { - } - - public GetDelegationToken_args DeepCopy() - { - var tmp1060 = new GetDelegationToken_args(); - if((Req != null) && __isset.req) - { - tmp1060.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq)this.Req.DeepCopy(); - } - tmp1060.__isset.req = this.__isset.req; - return tmp1060; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1061 = new TStruct("GetDelegationToken_args"); - await oprot.WriteStructBeginAsync(tmp1061, cancellationToken); - var tmp1062 = new TField(); - if((Req != null) && __isset.req) - { - tmp1062.Name = "req"; - tmp1062.Type = TType.Struct; - tmp1062.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1062, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetDelegationToken_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1063 = new StringBuilder("GetDelegationToken_args("); - int tmp1064 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1064++) { tmp1063.Append(", "); } - tmp1063.Append("Req: "); - Req.ToString(tmp1063); - } - tmp1063.Append(')'); - return tmp1063.ToString(); - } - } - - - public partial class GetDelegationToken_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetDelegationToken_result() - { - } - - public GetDelegationToken_result DeepCopy() - { - var tmp1065 = new GetDelegationToken_result(); - if((Success != null) && __isset.success) - { - tmp1065.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp)this.Success.DeepCopy(); - } - tmp1065.__isset.success = this.__isset.success; - return tmp1065; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1066 = new TStruct("GetDelegationToken_result"); - await oprot.WriteStructBeginAsync(tmp1066, cancellationToken); - var tmp1067 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1067.Name = "Success"; - tmp1067.Type = TType.Struct; - tmp1067.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1067, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetDelegationToken_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1068 = new StringBuilder("GetDelegationToken_result("); - int tmp1069 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1069++) { tmp1068.Append(", "); } - tmp1068.Append("Success: "); - Success.ToString(tmp1068); - } - tmp1068.Append(')'); - return tmp1068.ToString(); - } - } - - - public partial class CancelDelegationToken_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public CancelDelegationToken_args() - { - } - - public CancelDelegationToken_args DeepCopy() - { - var tmp1070 = new CancelDelegationToken_args(); - if((Req != null) && __isset.req) - { - tmp1070.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq)this.Req.DeepCopy(); - } - tmp1070.__isset.req = this.__isset.req; - return tmp1070; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1071 = new TStruct("CancelDelegationToken_args"); - await oprot.WriteStructBeginAsync(tmp1071, cancellationToken); - var tmp1072 = new TField(); - if((Req != null) && __isset.req) - { - tmp1072.Name = "req"; - tmp1072.Type = TType.Struct; - tmp1072.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1072, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CancelDelegationToken_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1073 = new StringBuilder("CancelDelegationToken_args("); - int tmp1074 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1074++) { tmp1073.Append(", "); } - tmp1073.Append("Req: "); - Req.ToString(tmp1073); - } - tmp1073.Append(')'); - return tmp1073.ToString(); - } - } - - - public partial class CancelDelegationToken_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public CancelDelegationToken_result() - { - } - - public CancelDelegationToken_result DeepCopy() - { - var tmp1075 = new CancelDelegationToken_result(); - if((Success != null) && __isset.success) - { - tmp1075.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp)this.Success.DeepCopy(); - } - tmp1075.__isset.success = this.__isset.success; - return tmp1075; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1076 = new TStruct("CancelDelegationToken_result"); - await oprot.WriteStructBeginAsync(tmp1076, cancellationToken); - var tmp1077 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1077.Name = "Success"; - tmp1077.Type = TType.Struct; - tmp1077.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1077, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is CancelDelegationToken_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1078 = new StringBuilder("CancelDelegationToken_result("); - int tmp1079 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1079++) { tmp1078.Append(", "); } - tmp1078.Append("Success: "); - Success.ToString(tmp1078); - } - tmp1078.Append(')'); - return tmp1078.ToString(); - } - } - - - public partial class RenewDelegationToken_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public RenewDelegationToken_args() - { - } - - public RenewDelegationToken_args DeepCopy() - { - var tmp1080 = new RenewDelegationToken_args(); - if((Req != null) && __isset.req) - { - tmp1080.Req = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq)this.Req.DeepCopy(); - } - tmp1080.__isset.req = this.__isset.req; - return tmp1080; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1081 = new TStruct("RenewDelegationToken_args"); - await oprot.WriteStructBeginAsync(tmp1081, cancellationToken); - var tmp1082 = new TField(); - if((Req != null) && __isset.req) - { - tmp1082.Name = "req"; - tmp1082.Type = TType.Struct; - tmp1082.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1082, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is RenewDelegationToken_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1083 = new StringBuilder("RenewDelegationToken_args("); - int tmp1084 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1084++) { tmp1083.Append(", "); } - tmp1083.Append("Req: "); - Req.ToString(tmp1083); - } - tmp1083.Append(')'); - return tmp1083.ToString(); - } - } - - - public partial class RenewDelegationToken_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public RenewDelegationToken_result() - { - } - - public RenewDelegationToken_result DeepCopy() - { - var tmp1085 = new RenewDelegationToken_result(); - if((Success != null) && __isset.success) - { - tmp1085.Success = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp)this.Success.DeepCopy(); - } - tmp1085.__isset.success = this.__isset.success; - return tmp1085; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1086 = new TStruct("RenewDelegationToken_result"); - await oprot.WriteStructBeginAsync(tmp1086, cancellationToken); - var tmp1087 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1087.Name = "Success"; - tmp1087.Type = TType.Struct; - tmp1087.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1087, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is RenewDelegationToken_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1088 = new StringBuilder("RenewDelegationToken_result("); - int tmp1089 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1089++) { tmp1088.Append(", "); } - tmp1088.Append("Success: "); - Success.ToString(tmp1088); - } - tmp1088.Append(')'); - return tmp1088.ToString(); - } - } - - - public partial class GetQueryId_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public GetQueryId_args() - { - } - - public GetQueryId_args DeepCopy() - { - var tmp1090 = new GetQueryId_args(); - if((Req != null) && __isset.req) - { - tmp1090.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq)this.Req.DeepCopy(); - } - tmp1090.__isset.req = this.__isset.req; - return tmp1090; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1091 = new TStruct("GetQueryId_args"); - await oprot.WriteStructBeginAsync(tmp1091, cancellationToken); - var tmp1092 = new TField(); - if((Req != null) && __isset.req) - { - tmp1092.Name = "req"; - tmp1092.Type = TType.Struct; - tmp1092.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1092, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetQueryId_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1093 = new StringBuilder("GetQueryId_args("); - int tmp1094 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1094++) { tmp1093.Append(", "); } - tmp1093.Append("Req: "); - Req.ToString(tmp1093); - } - tmp1093.Append(')'); - return tmp1093.ToString(); - } - } - - - public partial class GetQueryId_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public GetQueryId_result() - { - } - - public GetQueryId_result DeepCopy() - { - var tmp1095 = new GetQueryId_result(); - if((Success != null) && __isset.success) - { - tmp1095.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp)this.Success.DeepCopy(); - } - tmp1095.__isset.success = this.__isset.success; - return tmp1095; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1096 = new TStruct("GetQueryId_result"); - await oprot.WriteStructBeginAsync(tmp1096, cancellationToken); - var tmp1097 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1097.Name = "Success"; - tmp1097.Type = TType.Struct; - tmp1097.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1097, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is GetQueryId_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1098 = new StringBuilder("GetQueryId_result("); - int tmp1099 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1099++) { tmp1098.Append(", "); } - tmp1098.Append("Success: "); - Success.ToString(tmp1098); - } - tmp1098.Append(')'); - return tmp1098.ToString(); - } - } - - - public partial class SetClientInfo_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public SetClientInfo_args() - { - } - - public SetClientInfo_args DeepCopy() - { - var tmp1100 = new SetClientInfo_args(); - if((Req != null) && __isset.req) - { - tmp1100.Req = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq)this.Req.DeepCopy(); - } - tmp1100.__isset.req = this.__isset.req; - return tmp1100; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1101 = new TStruct("SetClientInfo_args"); - await oprot.WriteStructBeginAsync(tmp1101, cancellationToken); - var tmp1102 = new TField(); - if((Req != null) && __isset.req) - { - tmp1102.Name = "req"; - tmp1102.Type = TType.Struct; - tmp1102.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1102, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is SetClientInfo_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1103 = new StringBuilder("SetClientInfo_args("); - int tmp1104 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1104++) { tmp1103.Append(", "); } - tmp1103.Append("Req: "); - Req.ToString(tmp1103); - } - tmp1103.Append(')'); - return tmp1103.ToString(); - } - } - - - public partial class SetClientInfo_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public SetClientInfo_result() - { - } - - public SetClientInfo_result DeepCopy() - { - var tmp1105 = new SetClientInfo_result(); - if((Success != null) && __isset.success) - { - tmp1105.Success = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp)this.Success.DeepCopy(); - } - tmp1105.__isset.success = this.__isset.success; - return tmp1105; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1106 = new TStruct("SetClientInfo_result"); - await oprot.WriteStructBeginAsync(tmp1106, cancellationToken); - var tmp1107 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1107.Name = "Success"; - tmp1107.Type = TType.Struct; - tmp1107.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1107, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is SetClientInfo_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1108 = new StringBuilder("SetClientInfo_result("); - int tmp1109 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1109++) { tmp1108.Append(", "); } - tmp1108.Append("Success: "); - Success.ToString(tmp1108); - } - tmp1108.Append(')'); - return tmp1108.ToString(); - } - } - - - public partial class UploadData_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public UploadData_args() - { - } - - public UploadData_args DeepCopy() - { - var tmp1110 = new UploadData_args(); - if((Req != null) && __isset.req) - { - tmp1110.Req = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq)this.Req.DeepCopy(); - } - tmp1110.__isset.req = this.__isset.req; - return tmp1110; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1111 = new TStruct("UploadData_args"); - await oprot.WriteStructBeginAsync(tmp1111, cancellationToken); - var tmp1112 = new TField(); - if((Req != null) && __isset.req) - { - tmp1112.Name = "req"; - tmp1112.Type = TType.Struct; - tmp1112.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1112, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is UploadData_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1113 = new StringBuilder("UploadData_args("); - int tmp1114 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1114++) { tmp1113.Append(", "); } - tmp1113.Append("Req: "); - Req.ToString(tmp1113); - } - tmp1113.Append(')'); - return tmp1113.ToString(); - } - } - - - public partial class UploadData_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public UploadData_result() - { - } - - public UploadData_result DeepCopy() - { - var tmp1115 = new UploadData_result(); - if((Success != null) && __isset.success) - { - tmp1115.Success = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp)this.Success.DeepCopy(); - } - tmp1115.__isset.success = this.__isset.success; - return tmp1115; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1116 = new TStruct("UploadData_result"); - await oprot.WriteStructBeginAsync(tmp1116, cancellationToken); - var tmp1117 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1117.Name = "Success"; - tmp1117.Type = TType.Struct; - tmp1117.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1117, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is UploadData_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1118 = new StringBuilder("UploadData_result("); - int tmp1119 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1119++) { tmp1118.Append(", "); } - tmp1118.Append("Success: "); - Success.ToString(tmp1118); - } - tmp1118.Append(')'); - return tmp1118.ToString(); - } - } - - - public partial class DownloadData_args : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq _req; - - public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq Req - { - get - { - return _req; - } - set - { - __isset.req = true; - this._req = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool req; - } - - public DownloadData_args() - { - } - - public DownloadData_args DeepCopy() - { - var tmp1120 = new DownloadData_args(); - if((Req != null) && __isset.req) - { - tmp1120.Req = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq)this.Req.DeepCopy(); - } - tmp1120.__isset.req = this.__isset.req; - return tmp1120; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Req = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq(); - await Req.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1121 = new TStruct("DownloadData_args"); - await oprot.WriteStructBeginAsync(tmp1121, cancellationToken); - var tmp1122 = new TField(); - if((Req != null) && __isset.req) - { - tmp1122.Name = "req"; - tmp1122.Type = TType.Struct; - tmp1122.ID = 1; - await oprot.WriteFieldBeginAsync(tmp1122, cancellationToken); - await Req.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is DownloadData_args other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Req != null) && __isset.req) - { - hashcode = (hashcode * 397) + Req.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1123 = new StringBuilder("DownloadData_args("); - int tmp1124 = 0; - if((Req != null) && __isset.req) - { - if(0 < tmp1124++) { tmp1123.Append(", "); } - tmp1123.Append("Req: "); - Req.ToString(tmp1123); - } - tmp1123.Append(')'); - return tmp1123.ToString(); - } - } - - - public partial class DownloadData_result : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp _success; - - public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp Success - { - get - { - return _success; - } - set - { - __isset.success = true; - this._success = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool success; - } - - public DownloadData_result() - { - } - - public DownloadData_result DeepCopy() - { - var tmp1125 = new DownloadData_result(); - if((Success != null) && __isset.success) - { - tmp1125.Success = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp)this.Success.DeepCopy(); - } - tmp1125.__isset.success = this.__isset.success; - return tmp1125; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 0: - if (field.Type == TType.Struct) - { - Success = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp(); - await Success.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1126 = new TStruct("DownloadData_result"); - await oprot.WriteStructBeginAsync(tmp1126, cancellationToken); - var tmp1127 = new TField(); - - if(this.__isset.success) - { - if (Success != null) - { - tmp1127.Name = "Success"; - tmp1127.Type = TType.Struct; - tmp1127.ID = 0; - await oprot.WriteFieldBeginAsync(tmp1127, cancellationToken); - await Success.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is DownloadData_result other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Success != null) && __isset.success) - { - hashcode = (hashcode * 397) + Success.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp1128 = new StringBuilder("DownloadData_result("); - int tmp1129 = 0; - if((Success != null) && __isset.success) - { - if(0 < tmp1129++) { tmp1128.Append(", "); } - tmp1128.Append("Success: "); - Success.ToString(tmp1128); - } - tmp1128.Append(')'); - return tmp1128.ToString(); - } - } - - } - - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs deleted file mode 100644 index b6c46ba763..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs +++ /dev/null @@ -1,89 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public static class TCLIService2Constants - { - public static HashSet PRIMITIVE_TYPES = new HashSet(); - public static HashSet COMPLEX_TYPES = new HashSet(); - public static HashSet COLLECTION_TYPES = new HashSet(); - public static Dictionary TYPE_NAMES = new Dictionary(); - public const string CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength"; - public const string PRECISION = "precision"; - public const string SCALE = "scale"; - static TCLIService2Constants() - { - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE); - PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE); - COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); - COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); - COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE); - COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE); - COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.USER_DEFINED_TYPE); - COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); - COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE] = "ARRAY"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE] = "BIGINT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE] = "BINARY"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE] = "BOOLEAN"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE] = "CHAR"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE] = "DATE"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE] = "DECIMAL"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE] = "DOUBLE"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE] = "FLOAT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE] = "INTERVAL_DAY_TIME"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE] = "INTERVAL_YEAR_MONTH"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE] = "INT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE] = "MAP"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE] = "NULL"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE] = "SMALLINT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE] = "STRING"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE] = "STRUCT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE] = "TIMESTAMP WITH LOCAL TIME ZONE"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE] = "TIMESTAMP"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE] = "TINYINT"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE] = "UNIONTYPE"; - TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE] = "VARCHAR"; - } - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs deleted file mode 100644 index 25c611993a..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs +++ /dev/null @@ -1,654 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public static class TCLIService2Extensions - { - public static bool Equals(this Dictionary instance, object that) - { - if (!(that is Dictionary other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this Dictionary instance) - { - return TCollections.GetHashCode(instance); - } - - - public static Dictionary DeepCopy(this Dictionary source) - { - if (source == null) - return null; - - var tmp1130 = new Dictionary(source.Count); - foreach (var pair in source) - tmp1130.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); - return tmp1130; - } - - - public static bool Equals(this Dictionary instance, object that) - { - if (!(that is Dictionary other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this Dictionary instance) - { - return TCollections.GetHashCode(instance); - } - - - public static Dictionary DeepCopy(this Dictionary source) - { - if (source == null) - return null; - - var tmp1131 = new Dictionary(source.Count); - foreach (var pair in source) - tmp1131.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); - return tmp1131; - } - - - public static bool Equals(this Dictionary instance, object that) - { - if (!(that is Dictionary other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this Dictionary instance) - { - return TCollections.GetHashCode(instance); - } - - - public static Dictionary DeepCopy(this Dictionary source) - { - if (source == null) - return null; - - var tmp1132 = new Dictionary(source.Count); - foreach (var pair in source) - tmp1132.Add((pair.Key != null) ? pair.Key : null, pair.Value); - return tmp1132; - } - - - public static bool Equals(this Dictionary instance, object that) - { - if (!(that is Dictionary other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this Dictionary instance) - { - return TCollections.GetHashCode(instance); - } - - - public static Dictionary DeepCopy(this Dictionary source) - { - if (source == null) - return null; - - var tmp1133 = new Dictionary(source.Count); - foreach (var pair in source) - tmp1133.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value : null); - return tmp1133; - } - - - public static bool Equals(this List> instance, object that) - { - if (!(that is List> other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List> instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List> DeepCopy(this List> source) - { - if (source == null) - return null; - - var tmp1134 = new List>(source.Count); - foreach (var elem in source) - tmp1134.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1134; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1135 = new List(source.Count); - foreach (var elem in source) - tmp1135.Add(elem); - return tmp1135; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1136 = new List(source.Count); - foreach (var elem in source) - tmp1136.Add((elem != null) ? elem.ToArray() : null); - return tmp1136; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1137 = new List(source.Count); - foreach (var elem in source) - tmp1137.Add(elem); - return tmp1137; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1138 = new List(source.Count); - foreach (var elem in source) - tmp1138.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1138; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1139 = new List(source.Count); - foreach (var elem in source) - tmp1139.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1139; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1140 = new List(source.Count); - foreach (var elem in source) - tmp1140.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1140; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1141 = new List(source.Count); - foreach (var elem in source) - tmp1141.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1141; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1142 = new List(source.Count); - foreach (var elem in source) - tmp1142.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1142; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1143 = new List(source.Count); - foreach (var elem in source) - tmp1143.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1143; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1144 = new List(source.Count); - foreach (var elem in source) - tmp1144.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1144; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1145 = new List(source.Count); - foreach (var elem in source) - tmp1145.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1145; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1146 = new List(source.Count); - foreach (var elem in source) - tmp1146.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1146; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1147 = new List(source.Count); - foreach (var elem in source) - tmp1147.Add((elem != null) ? elem.DeepCopy() : null); - return tmp1147; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1148 = new List(source.Count); - foreach (var elem in source) - tmp1148.Add(elem); - return tmp1148; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1149 = new List(source.Count); - foreach (var elem in source) - tmp1149.Add(elem); - return tmp1149; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1150 = new List(source.Count); - foreach (var elem in source) - tmp1150.Add(elem); - return tmp1150; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1151 = new List(source.Count); - foreach (var elem in source) - tmp1151.Add(elem); - return tmp1151; - } - - - public static bool Equals(this List instance, object that) - { - if (!(that is List other)) return false; - if (ReferenceEquals(instance, other)) return true; - - return TCollections.Equals(instance, other); - } - - - public static int GetHashCode(this List instance) - { - return TCollections.GetHashCode(instance); - } - - - public static List DeepCopy(this List source) - { - if (source == null) - return null; - - var tmp1152 = new List(source.Count); - foreach (var elem in source) - tmp1152.Add((elem != null) ? elem : null); - return tmp1152; - } - - - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs deleted file mode 100644 index 2debd21b4d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs +++ /dev/null @@ -1,24 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TCacheLookupResult - { - CACHE_INELIGIBLE = 0, - LOCAL_CACHE_HIT = 1, - REMOTE_CACHE_HIT = 2, - CACHE_MISS = 3, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs deleted file mode 100644 index a5fb396318..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs +++ /dev/null @@ -1,210 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCancelDelegationTokenReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string DelegationToken { get; set; } - - public TCancelDelegationTokenReq() - { - } - - public TCancelDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() - { - this.SessionHandle = sessionHandle; - this.DelegationToken = delegationToken; - } - - public TCancelDelegationTokenReq DeepCopy() - { - var tmp608 = new TCancelDelegationTokenReq(); - if((SessionHandle != null)) - { - tmp608.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((DelegationToken != null)) - { - tmp608.DelegationToken = this.DelegationToken; - } - return tmp608; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_delegationToken = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - DelegationToken = await iprot.ReadStringAsync(cancellationToken); - isset_delegationToken = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_delegationToken) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp609 = new TStruct("TCancelDelegationTokenReq"); - await oprot.WriteStructBeginAsync(tmp609, cancellationToken); - var tmp610 = new TField(); - if((SessionHandle != null)) - { - tmp610.Name = "sessionHandle"; - tmp610.Type = TType.Struct; - tmp610.ID = 1; - await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DelegationToken != null)) - { - tmp610.Name = "delegationToken"; - tmp610.Type = TType.String; - tmp610.ID = 2; - await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); - await oprot.WriteStringAsync(DelegationToken, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCancelDelegationTokenReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && global::System.Object.Equals(DelegationToken, other.DelegationToken); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((DelegationToken != null)) - { - hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp611 = new StringBuilder("TCancelDelegationTokenReq("); - if((SessionHandle != null)) - { - tmp611.Append(", SessionHandle: "); - SessionHandle.ToString(tmp611); - } - if((DelegationToken != null)) - { - tmp611.Append(", DelegationToken: "); - DelegationToken.ToString(tmp611); - } - tmp611.Append(')'); - return tmp611.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs deleted file mode 100644 index 441914745c..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCancelDelegationTokenResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TCancelDelegationTokenResp() - { - } - - public TCancelDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TCancelDelegationTokenResp DeepCopy() - { - var tmp613 = new TCancelDelegationTokenResp(); - if((Status != null)) - { - tmp613.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp613; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp614 = new TStruct("TCancelDelegationTokenResp"); - await oprot.WriteStructBeginAsync(tmp614, cancellationToken); - var tmp615 = new TField(); - if((Status != null)) - { - tmp615.Name = "status"; - tmp615.Type = TType.Struct; - tmp615.ID = 1; - await oprot.WriteFieldBeginAsync(tmp615, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCancelDelegationTokenResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp616 = new StringBuilder("TCancelDelegationTokenResp("); - if((Status != null)) - { - tmp616.Append(", Status: "); - Status.ToString(tmp616); - } - tmp616.Append(')'); - return tmp616.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs deleted file mode 100644 index 578ea6b882..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCancelOperationReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public TCancelOperationReq() - { - } - - public TCancelOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.OperationHandle = operationHandle; - } - - public TCancelOperationReq DeepCopy() - { - var tmp549 = new TCancelOperationReq(); - if((OperationHandle != null)) - { - tmp549.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - return tmp549; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp550 = new TStruct("TCancelOperationReq"); - await oprot.WriteStructBeginAsync(tmp550, cancellationToken); - var tmp551 = new TField(); - if((OperationHandle != null)) - { - tmp551.Name = "operationHandle"; - tmp551.Type = TType.Struct; - tmp551.ID = 1; - await oprot.WriteFieldBeginAsync(tmp551, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCancelOperationReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp552 = new StringBuilder("TCancelOperationReq("); - if((OperationHandle != null)) - { - tmp552.Append(", OperationHandle: "); - OperationHandle.ToString(tmp552); - } - tmp552.Append(')'); - return tmp552.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs deleted file mode 100644 index 4a76a9a56a..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCancelOperationResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TCancelOperationResp() - { - } - - public TCancelOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TCancelOperationResp DeepCopy() - { - var tmp554 = new TCancelOperationResp(); - if((Status != null)) - { - tmp554.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp554; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp555 = new TStruct("TCancelOperationResp"); - await oprot.WriteStructBeginAsync(tmp555, cancellationToken); - var tmp556 = new TField(); - if((Status != null)) - { - tmp556.Name = "status"; - tmp556.Type = TType.Struct; - tmp556.ID = 1; - await oprot.WriteFieldBeginAsync(tmp556, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCancelOperationResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp557 = new StringBuilder("TCancelOperationResp("); - if((Status != null)) - { - tmp557.Append(", Status: "); - Status.ToString(tmp557); - } - tmp557.Append(')'); - return tmp557.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs deleted file mode 100644 index dfa4947412..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCloseOperationReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public TCloseOperationReq() - { - } - - public TCloseOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.OperationHandle = operationHandle; - } - - public TCloseOperationReq DeepCopy() - { - var tmp559 = new TCloseOperationReq(); - if((OperationHandle != null)) - { - tmp559.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - return tmp559; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp560 = new TStruct("TCloseOperationReq"); - await oprot.WriteStructBeginAsync(tmp560, cancellationToken); - var tmp561 = new TField(); - if((OperationHandle != null)) - { - tmp561.Name = "operationHandle"; - tmp561.Type = TType.Struct; - tmp561.ID = 1; - await oprot.WriteFieldBeginAsync(tmp561, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCloseOperationReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp562 = new StringBuilder("TCloseOperationReq("); - if((OperationHandle != null)) - { - tmp562.Append(", OperationHandle: "); - OperationHandle.ToString(tmp562); - } - tmp562.Append(')'); - return tmp562.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs deleted file mode 100644 index 56d2a25f52..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCloseOperationResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TCloseOperationResp() - { - } - - public TCloseOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TCloseOperationResp DeepCopy() - { - var tmp564 = new TCloseOperationResp(); - if((Status != null)) - { - tmp564.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp564; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp565 = new TStruct("TCloseOperationResp"); - await oprot.WriteStructBeginAsync(tmp565, cancellationToken); - var tmp566 = new TField(); - if((Status != null)) - { - tmp566.Name = "status"; - tmp566.Type = TType.Struct; - tmp566.ID = 1; - await oprot.WriteFieldBeginAsync(tmp566, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCloseOperationResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp567 = new StringBuilder("TCloseOperationResp("); - if((Status != null)) - { - tmp567.Append(", Status: "); - Status.ToString(tmp567); - } - tmp567.Append(')'); - return tmp567.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs deleted file mode 100644 index 2b0d50c4df..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCloseSessionReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public TCloseSessionReq() - { - } - - public TCloseSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TCloseSessionReq DeepCopy() - { - var tmp332 = new TCloseSessionReq(); - if((SessionHandle != null)) - { - tmp332.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - return tmp332; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp333 = new TStruct("TCloseSessionReq"); - await oprot.WriteStructBeginAsync(tmp333, cancellationToken); - var tmp334 = new TField(); - if((SessionHandle != null)) - { - tmp334.Name = "sessionHandle"; - tmp334.Type = TType.Struct; - tmp334.ID = 1; - await oprot.WriteFieldBeginAsync(tmp334, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCloseSessionReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp335 = new StringBuilder("TCloseSessionReq("); - if((SessionHandle != null)) - { - tmp335.Append(", SessionHandle: "); - SessionHandle.ToString(tmp335); - } - tmp335.Append(')'); - return tmp335.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs deleted file mode 100644 index 27667a4bbd..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TCloseSessionResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TCloseSessionResp() - { - } - - public TCloseSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TCloseSessionResp DeepCopy() - { - var tmp337 = new TCloseSessionResp(); - if((Status != null)) - { - tmp337.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp337; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp338 = new TStruct("TCloseSessionResp"); - await oprot.WriteStructBeginAsync(tmp338, cancellationToken); - var tmp339 = new TField(); - if((Status != null)) - { - tmp339.Name = "status"; - tmp339.Type = TType.Struct; - tmp339.ID = 1; - await oprot.WriteFieldBeginAsync(tmp339, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TCloseSessionResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp340 = new StringBuilder("TCloseSessionResp("); - if((Status != null)) - { - tmp340.Append(", Status: "); - Status.ToString(tmp340); - } - tmp340.Append(')'); - return tmp340.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs deleted file mode 100644 index 4dea57487b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs +++ /dev/null @@ -1,28 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TCloudFetchDisabledReason - { - ARROW_SUPPORT = 0, - CLOUD_FETCH_SUPPORT = 1, - PROTOCOL_VERSION = 2, - REGION_SUPPORT = 3, - BLOCKLISTED_OPERATION = 4, - SMALL_RESULT_SIZE = 5, - CUSTOMER_STORAGE_SUPPORT = 6, - UNKNOWN = 7, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs deleted file mode 100644 index 59126847b5..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs +++ /dev/null @@ -1,536 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TColumn : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn _boolVal; - private global::Apache.Hive.Service.Rpc.Thrift.TByteColumn _byteVal; - private global::Apache.Hive.Service.Rpc.Thrift.TI16Column _i16Val; - private global::Apache.Hive.Service.Rpc.Thrift.TI32Column _i32Val; - private global::Apache.Hive.Service.Rpc.Thrift.TI64Column _i64Val; - private global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn _doubleVal; - private global::Apache.Hive.Service.Rpc.Thrift.TStringColumn _stringVal; - private global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn _binaryVal; - - public global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn BoolVal - { - get - { - return _boolVal; - } - set - { - __isset.boolVal = true; - this._boolVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TByteColumn ByteVal - { - get - { - return _byteVal; - } - set - { - __isset.byteVal = true; - this._byteVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI16Column I16Val - { - get - { - return _i16Val; - } - set - { - __isset.i16Val = true; - this._i16Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI32Column I32Val - { - get - { - return _i32Val; - } - set - { - __isset.i32Val = true; - this._i32Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI64Column I64Val - { - get - { - return _i64Val; - } - set - { - __isset.i64Val = true; - this._i64Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn DoubleVal - { - get - { - return _doubleVal; - } - set - { - __isset.doubleVal = true; - this._doubleVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TStringColumn StringVal - { - get - { - return _stringVal; - } - set - { - __isset.stringVal = true; - this._stringVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn BinaryVal - { - get - { - return _binaryVal; - } - set - { - __isset.binaryVal = true; - this._binaryVal = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool boolVal; - public bool byteVal; - public bool i16Val; - public bool i32Val; - public bool i64Val; - public bool doubleVal; - public bool stringVal; - public bool binaryVal; - } - - public TColumn() - { - } - - public TColumn DeepCopy() - { - var tmp204 = new TColumn(); - if((BoolVal != null) && __isset.boolVal) - { - tmp204.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn)this.BoolVal.DeepCopy(); - } - tmp204.__isset.boolVal = this.__isset.boolVal; - if((ByteVal != null) && __isset.byteVal) - { - tmp204.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteColumn)this.ByteVal.DeepCopy(); - } - tmp204.__isset.byteVal = this.__isset.byteVal; - if((I16Val != null) && __isset.i16Val) - { - tmp204.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Column)this.I16Val.DeepCopy(); - } - tmp204.__isset.i16Val = this.__isset.i16Val; - if((I32Val != null) && __isset.i32Val) - { - tmp204.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Column)this.I32Val.DeepCopy(); - } - tmp204.__isset.i32Val = this.__isset.i32Val; - if((I64Val != null) && __isset.i64Val) - { - tmp204.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Column)this.I64Val.DeepCopy(); - } - tmp204.__isset.i64Val = this.__isset.i64Val; - if((DoubleVal != null) && __isset.doubleVal) - { - tmp204.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn)this.DoubleVal.DeepCopy(); - } - tmp204.__isset.doubleVal = this.__isset.doubleVal; - if((StringVal != null) && __isset.stringVal) - { - tmp204.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringColumn)this.StringVal.DeepCopy(); - } - tmp204.__isset.stringVal = this.__isset.stringVal; - if((BinaryVal != null) && __isset.binaryVal) - { - tmp204.BinaryVal = (global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn)this.BinaryVal.DeepCopy(); - } - tmp204.__isset.binaryVal = this.__isset.binaryVal; - return tmp204; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn(); - await BoolVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteColumn(); - await ByteVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Column(); - await I16Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Struct) - { - I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Column(); - await I32Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.Struct) - { - I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Column(); - await I64Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.Struct) - { - DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn(); - await DoubleVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.Struct) - { - StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringColumn(); - await StringVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 8: - if (field.Type == TType.Struct) - { - BinaryVal = new global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn(); - await BinaryVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp205 = new TStruct("TColumn"); - await oprot.WriteStructBeginAsync(tmp205, cancellationToken); - var tmp206 = new TField(); - if((BoolVal != null) && __isset.boolVal) - { - tmp206.Name = "boolVal"; - tmp206.Type = TType.Struct; - tmp206.ID = 1; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await BoolVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ByteVal != null) && __isset.byteVal) - { - tmp206.Name = "byteVal"; - tmp206.Type = TType.Struct; - tmp206.ID = 2; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await ByteVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I16Val != null) && __isset.i16Val) - { - tmp206.Name = "i16Val"; - tmp206.Type = TType.Struct; - tmp206.ID = 3; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await I16Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I32Val != null) && __isset.i32Val) - { - tmp206.Name = "i32Val"; - tmp206.Type = TType.Struct; - tmp206.ID = 4; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await I32Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I64Val != null) && __isset.i64Val) - { - tmp206.Name = "i64Val"; - tmp206.Type = TType.Struct; - tmp206.ID = 5; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await I64Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DoubleVal != null) && __isset.doubleVal) - { - tmp206.Name = "doubleVal"; - tmp206.Type = TType.Struct; - tmp206.ID = 6; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await DoubleVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((StringVal != null) && __isset.stringVal) - { - tmp206.Name = "stringVal"; - tmp206.Type = TType.Struct; - tmp206.ID = 7; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await StringVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((BinaryVal != null) && __isset.binaryVal) - { - tmp206.Name = "binaryVal"; - tmp206.Type = TType.Struct; - tmp206.ID = 8; - await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); - await BinaryVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) - && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) - && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) - && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) - && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) - && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) - && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))) - && ((__isset.binaryVal == other.__isset.binaryVal) && ((!__isset.binaryVal) || (global::System.Object.Equals(BinaryVal, other.BinaryVal)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((BoolVal != null) && __isset.boolVal) - { - hashcode = (hashcode * 397) + BoolVal.GetHashCode(); - } - if((ByteVal != null) && __isset.byteVal) - { - hashcode = (hashcode * 397) + ByteVal.GetHashCode(); - } - if((I16Val != null) && __isset.i16Val) - { - hashcode = (hashcode * 397) + I16Val.GetHashCode(); - } - if((I32Val != null) && __isset.i32Val) - { - hashcode = (hashcode * 397) + I32Val.GetHashCode(); - } - if((I64Val != null) && __isset.i64Val) - { - hashcode = (hashcode * 397) + I64Val.GetHashCode(); - } - if((DoubleVal != null) && __isset.doubleVal) - { - hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); - } - if((StringVal != null) && __isset.stringVal) - { - hashcode = (hashcode * 397) + StringVal.GetHashCode(); - } - if((BinaryVal != null) && __isset.binaryVal) - { - hashcode = (hashcode * 397) + BinaryVal.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp207 = new StringBuilder("TColumn("); - int tmp208 = 0; - if((BoolVal != null) && __isset.boolVal) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("BoolVal: "); - BoolVal.ToString(tmp207); - } - if((ByteVal != null) && __isset.byteVal) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("ByteVal: "); - ByteVal.ToString(tmp207); - } - if((I16Val != null) && __isset.i16Val) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("I16Val: "); - I16Val.ToString(tmp207); - } - if((I32Val != null) && __isset.i32Val) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("I32Val: "); - I32Val.ToString(tmp207); - } - if((I64Val != null) && __isset.i64Val) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("I64Val: "); - I64Val.ToString(tmp207); - } - if((DoubleVal != null) && __isset.doubleVal) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("DoubleVal: "); - DoubleVal.ToString(tmp207); - } - if((StringVal != null) && __isset.stringVal) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("StringVal: "); - StringVal.ToString(tmp207); - } - if((BinaryVal != null) && __isset.binaryVal) - { - if(0 < tmp208++) { tmp207.Append(", "); } - tmp207.Append("BinaryVal: "); - BinaryVal.ToString(tmp207); - } - tmp207.Append(')'); - return tmp207.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs deleted file mode 100644 index 9c27cbeb1d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs +++ /dev/null @@ -1,295 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TColumnDesc : TBase - { - private string _comment; - - public string ColumnName { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc TypeDesc { get; set; } - - public int Position { get; set; } - - public string Comment - { - get - { - return _comment; - } - set - { - __isset.comment = true; - this._comment = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool comment; - } - - public TColumnDesc() - { - } - - public TColumnDesc(string columnName, global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc typeDesc, int position) : this() - { - this.ColumnName = columnName; - this.TypeDesc = typeDesc; - this.Position = position; - } - - public TColumnDesc DeepCopy() - { - var tmp69 = new TColumnDesc(); - if((ColumnName != null)) - { - tmp69.ColumnName = this.ColumnName; - } - if((TypeDesc != null)) - { - tmp69.TypeDesc = (global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc)this.TypeDesc.DeepCopy(); - } - tmp69.Position = this.Position; - if((Comment != null) && __isset.comment) - { - tmp69.Comment = this.Comment; - } - tmp69.__isset.comment = this.__isset.comment; - return tmp69; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_columnName = false; - bool isset_typeDesc = false; - bool isset_position = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - ColumnName = await iprot.ReadStringAsync(cancellationToken); - isset_columnName = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - TypeDesc = new global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc(); - await TypeDesc.ReadAsync(iprot, cancellationToken); - isset_typeDesc = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.I32) - { - Position = await iprot.ReadI32Async(cancellationToken); - isset_position = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - Comment = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_columnName) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_typeDesc) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_position) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp70 = new TStruct("TColumnDesc"); - await oprot.WriteStructBeginAsync(tmp70, cancellationToken); - var tmp71 = new TField(); - if((ColumnName != null)) - { - tmp71.Name = "columnName"; - tmp71.Type = TType.String; - tmp71.ID = 1; - await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); - await oprot.WriteStringAsync(ColumnName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TypeDesc != null)) - { - tmp71.Name = "typeDesc"; - tmp71.Type = TType.Struct; - tmp71.ID = 2; - await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); - await TypeDesc.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp71.Name = "position"; - tmp71.Type = TType.I32; - tmp71.ID = 3; - await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); - await oprot.WriteI32Async(Position, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((Comment != null) && __isset.comment) - { - tmp71.Name = "comment"; - tmp71.Type = TType.String; - tmp71.ID = 4; - await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); - await oprot.WriteStringAsync(Comment, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TColumnDesc other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(ColumnName, other.ColumnName) - && global::System.Object.Equals(TypeDesc, other.TypeDesc) - && global::System.Object.Equals(Position, other.Position) - && ((__isset.comment == other.__isset.comment) && ((!__isset.comment) || (global::System.Object.Equals(Comment, other.Comment)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((ColumnName != null)) - { - hashcode = (hashcode * 397) + ColumnName.GetHashCode(); - } - if((TypeDesc != null)) - { - hashcode = (hashcode * 397) + TypeDesc.GetHashCode(); - } - hashcode = (hashcode * 397) + Position.GetHashCode(); - if((Comment != null) && __isset.comment) - { - hashcode = (hashcode * 397) + Comment.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp72 = new StringBuilder("TColumnDesc("); - if((ColumnName != null)) - { - tmp72.Append(", ColumnName: "); - ColumnName.ToString(tmp72); - } - if((TypeDesc != null)) - { - tmp72.Append(", TypeDesc: "); - TypeDesc.ToString(tmp72); - } - tmp72.Append(", Position: "); - Position.ToString(tmp72); - if((Comment != null) && __isset.comment) - { - tmp72.Append(", Comment: "); - Comment.ToString(tmp72); - } - tmp72.Append(')'); - return tmp72.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs deleted file mode 100644 index 012db5de92..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs +++ /dev/null @@ -1,485 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TColumnValue : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TBoolValue _boolVal; - private global::Apache.Hive.Service.Rpc.Thrift.TByteValue _byteVal; - private global::Apache.Hive.Service.Rpc.Thrift.TI16Value _i16Val; - private global::Apache.Hive.Service.Rpc.Thrift.TI32Value _i32Val; - private global::Apache.Hive.Service.Rpc.Thrift.TI64Value _i64Val; - private global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue _doubleVal; - private global::Apache.Hive.Service.Rpc.Thrift.TStringValue _stringVal; - - public global::Apache.Hive.Service.Rpc.Thrift.TBoolValue BoolVal - { - get - { - return _boolVal; - } - set - { - __isset.boolVal = true; - this._boolVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TByteValue ByteVal - { - get - { - return _byteVal; - } - set - { - __isset.byteVal = true; - this._byteVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI16Value I16Val - { - get - { - return _i16Val; - } - set - { - __isset.i16Val = true; - this._i16Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI32Value I32Val - { - get - { - return _i32Val; - } - set - { - __isset.i32Val = true; - this._i32Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TI64Value I64Val - { - get - { - return _i64Val; - } - set - { - __isset.i64Val = true; - this._i64Val = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue DoubleVal - { - get - { - return _doubleVal; - } - set - { - __isset.doubleVal = true; - this._doubleVal = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TStringValue StringVal - { - get - { - return _stringVal; - } - set - { - __isset.stringVal = true; - this._stringVal = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool boolVal; - public bool byteVal; - public bool i16Val; - public bool i32Val; - public bool i64Val; - public bool doubleVal; - public bool stringVal; - } - - public TColumnValue() - { - } - - public TColumnValue DeepCopy() - { - var tmp118 = new TColumnValue(); - if((BoolVal != null) && __isset.boolVal) - { - tmp118.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolValue)this.BoolVal.DeepCopy(); - } - tmp118.__isset.boolVal = this.__isset.boolVal; - if((ByteVal != null) && __isset.byteVal) - { - tmp118.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteValue)this.ByteVal.DeepCopy(); - } - tmp118.__isset.byteVal = this.__isset.byteVal; - if((I16Val != null) && __isset.i16Val) - { - tmp118.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Value)this.I16Val.DeepCopy(); - } - tmp118.__isset.i16Val = this.__isset.i16Val; - if((I32Val != null) && __isset.i32Val) - { - tmp118.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Value)this.I32Val.DeepCopy(); - } - tmp118.__isset.i32Val = this.__isset.i32Val; - if((I64Val != null) && __isset.i64Val) - { - tmp118.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Value)this.I64Val.DeepCopy(); - } - tmp118.__isset.i64Val = this.__isset.i64Val; - if((DoubleVal != null) && __isset.doubleVal) - { - tmp118.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue)this.DoubleVal.DeepCopy(); - } - tmp118.__isset.doubleVal = this.__isset.doubleVal; - if((StringVal != null) && __isset.stringVal) - { - tmp118.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringValue)this.StringVal.DeepCopy(); - } - tmp118.__isset.stringVal = this.__isset.stringVal; - return tmp118; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolValue(); - await BoolVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteValue(); - await ByteVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Value(); - await I16Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Struct) - { - I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Value(); - await I32Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.Struct) - { - I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Value(); - await I64Val.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.Struct) - { - DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue(); - await DoubleVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.Struct) - { - StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringValue(); - await StringVal.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp119 = new TStruct("TColumnValue"); - await oprot.WriteStructBeginAsync(tmp119, cancellationToken); - var tmp120 = new TField(); - if((BoolVal != null) && __isset.boolVal) - { - tmp120.Name = "boolVal"; - tmp120.Type = TType.Struct; - tmp120.ID = 1; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await BoolVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ByteVal != null) && __isset.byteVal) - { - tmp120.Name = "byteVal"; - tmp120.Type = TType.Struct; - tmp120.ID = 2; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await ByteVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I16Val != null) && __isset.i16Val) - { - tmp120.Name = "i16Val"; - tmp120.Type = TType.Struct; - tmp120.ID = 3; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await I16Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I32Val != null) && __isset.i32Val) - { - tmp120.Name = "i32Val"; - tmp120.Type = TType.Struct; - tmp120.ID = 4; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await I32Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((I64Val != null) && __isset.i64Val) - { - tmp120.Name = "i64Val"; - tmp120.Type = TType.Struct; - tmp120.ID = 5; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await I64Val.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DoubleVal != null) && __isset.doubleVal) - { - tmp120.Name = "doubleVal"; - tmp120.Type = TType.Struct; - tmp120.ID = 6; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await DoubleVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((StringVal != null) && __isset.stringVal) - { - tmp120.Name = "stringVal"; - tmp120.Type = TType.Struct; - tmp120.ID = 7; - await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); - await StringVal.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TColumnValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) - && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) - && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) - && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) - && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) - && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) - && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((BoolVal != null) && __isset.boolVal) - { - hashcode = (hashcode * 397) + BoolVal.GetHashCode(); - } - if((ByteVal != null) && __isset.byteVal) - { - hashcode = (hashcode * 397) + ByteVal.GetHashCode(); - } - if((I16Val != null) && __isset.i16Val) - { - hashcode = (hashcode * 397) + I16Val.GetHashCode(); - } - if((I32Val != null) && __isset.i32Val) - { - hashcode = (hashcode * 397) + I32Val.GetHashCode(); - } - if((I64Val != null) && __isset.i64Val) - { - hashcode = (hashcode * 397) + I64Val.GetHashCode(); - } - if((DoubleVal != null) && __isset.doubleVal) - { - hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); - } - if((StringVal != null) && __isset.stringVal) - { - hashcode = (hashcode * 397) + StringVal.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp121 = new StringBuilder("TColumnValue("); - int tmp122 = 0; - if((BoolVal != null) && __isset.boolVal) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("BoolVal: "); - BoolVal.ToString(tmp121); - } - if((ByteVal != null) && __isset.byteVal) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("ByteVal: "); - ByteVal.ToString(tmp121); - } - if((I16Val != null) && __isset.i16Val) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("I16Val: "); - I16Val.ToString(tmp121); - } - if((I32Val != null) && __isset.i32Val) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("I32Val: "); - I32Val.ToString(tmp121); - } - if((I64Val != null) && __isset.i64Val) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("I64Val: "); - I64Val.ToString(tmp121); - } - if((DoubleVal != null) && __isset.doubleVal) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("DoubleVal: "); - DoubleVal.ToString(tmp121); - } - if((StringVal != null) && __isset.stringVal) - { - if(0 < tmp122++) { tmp121.Append(", "); } - tmp121.Append("StringVal: "); - StringVal.ToString(tmp121); - } - tmp121.Append(')'); - return tmp121.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs deleted file mode 100644 index eae1a362ec..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs +++ /dev/null @@ -1,287 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDBSqlCloudResultFile : TBase - { - - public string FilePath { get; set; } - - public long StartRowOffset { get; set; } - - public long RowCount { get; set; } - - public long UncompressedBytes { get; set; } - - public long CompressedBytes { get; set; } - - public TDBSqlCloudResultFile() - { - } - - public TDBSqlCloudResultFile(string filePath, long startRowOffset, long rowCount, long uncompressedBytes, long compressedBytes) : this() - { - this.FilePath = filePath; - this.StartRowOffset = startRowOffset; - this.RowCount = rowCount; - this.UncompressedBytes = uncompressedBytes; - this.CompressedBytes = compressedBytes; - } - - public TDBSqlCloudResultFile DeepCopy() - { - var tmp583 = new TDBSqlCloudResultFile(); - if((FilePath != null)) - { - tmp583.FilePath = this.FilePath; - } - tmp583.StartRowOffset = this.StartRowOffset; - tmp583.RowCount = this.RowCount; - tmp583.UncompressedBytes = this.UncompressedBytes; - tmp583.CompressedBytes = this.CompressedBytes; - return tmp583; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_filePath = false; - bool isset_startRowOffset = false; - bool isset_rowCount = false; - bool isset_uncompressedBytes = false; - bool isset_compressedBytes = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - FilePath = await iprot.ReadStringAsync(cancellationToken); - isset_filePath = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I64) - { - StartRowOffset = await iprot.ReadI64Async(cancellationToken); - isset_startRowOffset = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.I64) - { - RowCount = await iprot.ReadI64Async(cancellationToken); - isset_rowCount = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I64) - { - UncompressedBytes = await iprot.ReadI64Async(cancellationToken); - isset_uncompressedBytes = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.I64) - { - CompressedBytes = await iprot.ReadI64Async(cancellationToken); - isset_compressedBytes = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_filePath) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_startRowOffset) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_rowCount) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_uncompressedBytes) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_compressedBytes) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp584 = new TStruct("TDBSqlCloudResultFile"); - await oprot.WriteStructBeginAsync(tmp584, cancellationToken); - var tmp585 = new TField(); - if((FilePath != null)) - { - tmp585.Name = "filePath"; - tmp585.Type = TType.String; - tmp585.ID = 1; - await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); - await oprot.WriteStringAsync(FilePath, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp585.Name = "startRowOffset"; - tmp585.Type = TType.I64; - tmp585.ID = 2; - await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); - await oprot.WriteI64Async(StartRowOffset, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp585.Name = "rowCount"; - tmp585.Type = TType.I64; - tmp585.ID = 3; - await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); - await oprot.WriteI64Async(RowCount, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp585.Name = "uncompressedBytes"; - tmp585.Type = TType.I64; - tmp585.ID = 4; - await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); - await oprot.WriteI64Async(UncompressedBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp585.Name = "compressedBytes"; - tmp585.Type = TType.I64; - tmp585.ID = 5; - await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); - await oprot.WriteI64Async(CompressedBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDBSqlCloudResultFile other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(FilePath, other.FilePath) - && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) - && global::System.Object.Equals(RowCount, other.RowCount) - && global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes) - && global::System.Object.Equals(CompressedBytes, other.CompressedBytes); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((FilePath != null)) - { - hashcode = (hashcode * 397) + FilePath.GetHashCode(); - } - hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); - hashcode = (hashcode * 397) + RowCount.GetHashCode(); - hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); - hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp586 = new StringBuilder("TDBSqlCloudResultFile("); - if((FilePath != null)) - { - tmp586.Append(", FilePath: "); - FilePath.ToString(tmp586); - } - tmp586.Append(", StartRowOffset: "); - StartRowOffset.ToString(tmp586); - tmp586.Append(", RowCount: "); - RowCount.ToString(tmp586); - tmp586.Append(", UncompressedBytes: "); - UncompressedBytes.ToString(tmp586); - tmp586.Append(", CompressedBytes: "); - CompressedBytes.ToString(tmp586); - tmp586.Append(')'); - return tmp586.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs deleted file mode 100644 index 9249cec0c9..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDBSqlConfValue : TBase - { - private string _value; - - public string Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TDBSqlConfValue() - { - } - - public TDBSqlConfValue DeepCopy() - { - var tmp405 = new TDBSqlConfValue(); - if((Value != null) && __isset.@value) - { - tmp405.Value = this.Value; - } - tmp405.__isset.@value = this.__isset.@value; - return tmp405; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - Value = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp406 = new TStruct("TDBSqlConfValue"); - await oprot.WriteStructBeginAsync(tmp406, cancellationToken); - var tmp407 = new TField(); - if((Value != null) && __isset.@value) - { - tmp407.Name = "value"; - tmp407.Type = TType.String; - tmp407.ID = 1; - await oprot.WriteFieldBeginAsync(tmp407, cancellationToken); - await oprot.WriteStringAsync(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDBSqlConfValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Value != null) && __isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp408 = new StringBuilder("TDBSqlConfValue("); - int tmp409 = 0; - if((Value != null) && __isset.@value) - { - if(0 < tmp409++) { tmp408.Append(", "); } - tmp408.Append("Value: "); - Value.ToString(tmp408); - } - tmp408.Append(')'); - return tmp408.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs deleted file mode 100644 index 50d2d295e0..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDBSqlSessionCapabilities : TBase - { - private bool _supportsMultipleCatalogs; - - public bool SupportsMultipleCatalogs - { - get - { - return _supportsMultipleCatalogs; - } - set - { - __isset.supportsMultipleCatalogs = true; - this._supportsMultipleCatalogs = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool supportsMultipleCatalogs; - } - - public TDBSqlSessionCapabilities() - { - } - - public TDBSqlSessionCapabilities DeepCopy() - { - var tmp400 = new TDBSqlSessionCapabilities(); - if(__isset.supportsMultipleCatalogs) - { - tmp400.SupportsMultipleCatalogs = this.SupportsMultipleCatalogs; - } - tmp400.__isset.supportsMultipleCatalogs = this.__isset.supportsMultipleCatalogs; - return tmp400; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Bool) - { - SupportsMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp401 = new TStruct("TDBSqlSessionCapabilities"); - await oprot.WriteStructBeginAsync(tmp401, cancellationToken); - var tmp402 = new TField(); - if(__isset.supportsMultipleCatalogs) - { - tmp402.Name = "supportsMultipleCatalogs"; - tmp402.Type = TType.Bool; - tmp402.ID = 1; - await oprot.WriteFieldBeginAsync(tmp402, cancellationToken); - await oprot.WriteBoolAsync(SupportsMultipleCatalogs, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDBSqlSessionCapabilities other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.supportsMultipleCatalogs == other.__isset.supportsMultipleCatalogs) && ((!__isset.supportsMultipleCatalogs) || (global::System.Object.Equals(SupportsMultipleCatalogs, other.SupportsMultipleCatalogs)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.supportsMultipleCatalogs) - { - hashcode = (hashcode * 397) + SupportsMultipleCatalogs.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp403 = new StringBuilder("TDBSqlSessionCapabilities("); - int tmp404 = 0; - if(__isset.supportsMultipleCatalogs) - { - if(0 < tmp404++) { tmp403.Append(", "); } - tmp403.Append("SupportsMultipleCatalogs: "); - SupportsMultipleCatalogs.ToString(tmp403); - } - tmp403.Append(')'); - return tmp403.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs deleted file mode 100644 index 35ee4d908e..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs +++ /dev/null @@ -1,548 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDBSqlSessionConf : TBase - { - private Dictionary _confs; - private List _tempViews; - private string _currentDatabase; - private string _currentCatalog; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities _sessionCapabilities; - private List _expressionsInfos; - private Dictionary _internalConfs; - - public Dictionary Confs - { - get - { - return _confs; - } - set - { - __isset.confs = true; - this._confs = value; - } - } - - public List TempViews - { - get - { - return _tempViews; - } - set - { - __isset.tempViews = true; - this._tempViews = value; - } - } - - public string CurrentDatabase - { - get - { - return _currentDatabase; - } - set - { - __isset.currentDatabase = true; - this._currentDatabase = value; - } - } - - public string CurrentCatalog - { - get - { - return _currentCatalog; - } - set - { - __isset.currentCatalog = true; - this._currentCatalog = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities SessionCapabilities - { - get - { - return _sessionCapabilities; - } - set - { - __isset.sessionCapabilities = true; - this._sessionCapabilities = value; - } - } - - public List ExpressionsInfos - { - get - { - return _expressionsInfos; - } - set - { - __isset.expressionsInfos = true; - this._expressionsInfos = value; - } - } - - public Dictionary InternalConfs - { - get - { - return _internalConfs; - } - set - { - __isset.internalConfs = true; - this._internalConfs = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool confs; - public bool tempViews; - public bool currentDatabase; - public bool currentCatalog; - public bool sessionCapabilities; - public bool expressionsInfos; - public bool internalConfs; - } - - public TDBSqlSessionConf() - { - } - - public TDBSqlSessionConf DeepCopy() - { - var tmp367 = new TDBSqlSessionConf(); - if((Confs != null) && __isset.confs) - { - tmp367.Confs = this.Confs.DeepCopy(); - } - tmp367.__isset.confs = this.__isset.confs; - if((TempViews != null) && __isset.tempViews) - { - tmp367.TempViews = this.TempViews.DeepCopy(); - } - tmp367.__isset.tempViews = this.__isset.tempViews; - if((CurrentDatabase != null) && __isset.currentDatabase) - { - tmp367.CurrentDatabase = this.CurrentDatabase; - } - tmp367.__isset.currentDatabase = this.__isset.currentDatabase; - if((CurrentCatalog != null) && __isset.currentCatalog) - { - tmp367.CurrentCatalog = this.CurrentCatalog; - } - tmp367.__isset.currentCatalog = this.__isset.currentCatalog; - if((SessionCapabilities != null) && __isset.sessionCapabilities) - { - tmp367.SessionCapabilities = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities)this.SessionCapabilities.DeepCopy(); - } - tmp367.__isset.sessionCapabilities = this.__isset.sessionCapabilities; - if((ExpressionsInfos != null) && __isset.expressionsInfos) - { - tmp367.ExpressionsInfos = this.ExpressionsInfos.DeepCopy(); - } - tmp367.__isset.expressionsInfos = this.__isset.expressionsInfos; - if((InternalConfs != null) && __isset.internalConfs) - { - tmp367.InternalConfs = this.InternalConfs.DeepCopy(); - } - tmp367.__isset.internalConfs = this.__isset.internalConfs; - return tmp367; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Map) - { - { - var _map368 = await iprot.ReadMapBeginAsync(cancellationToken); - Confs = new Dictionary(_map368.Count); - for(int _i369 = 0; _i369 < _map368.Count; ++_i369) - { - string _key370; - string _val371; - _key370 = await iprot.ReadStringAsync(cancellationToken); - _val371 = await iprot.ReadStringAsync(cancellationToken); - Confs[_key370] = _val371; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.List) - { - { - var _list372 = await iprot.ReadListBeginAsync(cancellationToken); - TempViews = new List(_list372.Count); - for(int _i373 = 0; _i373 < _list372.Count; ++_i373) - { - global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _elem374; - _elem374 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView(); - await _elem374.ReadAsync(iprot, cancellationToken); - TempViews.Add(_elem374); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - CurrentDatabase = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - CurrentCatalog = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.Struct) - { - SessionCapabilities = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities(); - await SessionCapabilities.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.List) - { - { - var _list375 = await iprot.ReadListBeginAsync(cancellationToken); - ExpressionsInfos = new List(_list375.Count); - for(int _i376 = 0; _i376 < _list375.Count; ++_i376) - { - global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _elem377; - _elem377 = new global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo(); - await _elem377.ReadAsync(iprot, cancellationToken); - ExpressionsInfos.Add(_elem377); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.Map) - { - { - var _map378 = await iprot.ReadMapBeginAsync(cancellationToken); - InternalConfs = new Dictionary(_map378.Count); - for(int _i379 = 0; _i379 < _map378.Count; ++_i379) - { - string _key380; - global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue _val381; - _key380 = await iprot.ReadStringAsync(cancellationToken); - _val381 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue(); - await _val381.ReadAsync(iprot, cancellationToken); - InternalConfs[_key380] = _val381; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp382 = new TStruct("TDBSqlSessionConf"); - await oprot.WriteStructBeginAsync(tmp382, cancellationToken); - var tmp383 = new TField(); - if((Confs != null) && __isset.confs) - { - tmp383.Name = "confs"; - tmp383.Type = TType.Map; - tmp383.ID = 1; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Confs.Count), cancellationToken); - foreach (string _iter384 in Confs.Keys) - { - await oprot.WriteStringAsync(_iter384, cancellationToken); - await oprot.WriteStringAsync(Confs[_iter384], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TempViews != null) && __isset.tempViews) - { - tmp383.Name = "tempViews"; - tmp383.Type = TType.List; - tmp383.ID = 2; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, TempViews.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _iter385 in TempViews) - { - await _iter385.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CurrentDatabase != null) && __isset.currentDatabase) - { - tmp383.Name = "currentDatabase"; - tmp383.Type = TType.String; - tmp383.ID = 3; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteStringAsync(CurrentDatabase, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CurrentCatalog != null) && __isset.currentCatalog) - { - tmp383.Name = "currentCatalog"; - tmp383.Type = TType.String; - tmp383.ID = 4; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteStringAsync(CurrentCatalog, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionCapabilities != null) && __isset.sessionCapabilities) - { - tmp383.Name = "sessionCapabilities"; - tmp383.Type = TType.Struct; - tmp383.ID = 5; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await SessionCapabilities.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ExpressionsInfos != null) && __isset.expressionsInfos) - { - tmp383.Name = "expressionsInfos"; - tmp383.Type = TType.List; - tmp383.ID = 6; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, ExpressionsInfos.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _iter386 in ExpressionsInfos) - { - await _iter386.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((InternalConfs != null) && __isset.internalConfs) - { - tmp383.Name = "internalConfs"; - tmp383.Type = TType.Map; - tmp383.ID = 7; - await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, InternalConfs.Count), cancellationToken); - foreach (string _iter387 in InternalConfs.Keys) - { - await oprot.WriteStringAsync(_iter387, cancellationToken); - await InternalConfs[_iter387].WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDBSqlSessionConf other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.confs == other.__isset.confs) && ((!__isset.confs) || (TCollections.Equals(Confs, other.Confs)))) - && ((__isset.tempViews == other.__isset.tempViews) && ((!__isset.tempViews) || (TCollections.Equals(TempViews, other.TempViews)))) - && ((__isset.currentDatabase == other.__isset.currentDatabase) && ((!__isset.currentDatabase) || (global::System.Object.Equals(CurrentDatabase, other.CurrentDatabase)))) - && ((__isset.currentCatalog == other.__isset.currentCatalog) && ((!__isset.currentCatalog) || (global::System.Object.Equals(CurrentCatalog, other.CurrentCatalog)))) - && ((__isset.sessionCapabilities == other.__isset.sessionCapabilities) && ((!__isset.sessionCapabilities) || (global::System.Object.Equals(SessionCapabilities, other.SessionCapabilities)))) - && ((__isset.expressionsInfos == other.__isset.expressionsInfos) && ((!__isset.expressionsInfos) || (TCollections.Equals(ExpressionsInfos, other.ExpressionsInfos)))) - && ((__isset.internalConfs == other.__isset.internalConfs) && ((!__isset.internalConfs) || (TCollections.Equals(InternalConfs, other.InternalConfs)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Confs != null) && __isset.confs) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Confs); - } - if((TempViews != null) && __isset.tempViews) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(TempViews); - } - if((CurrentDatabase != null) && __isset.currentDatabase) - { - hashcode = (hashcode * 397) + CurrentDatabase.GetHashCode(); - } - if((CurrentCatalog != null) && __isset.currentCatalog) - { - hashcode = (hashcode * 397) + CurrentCatalog.GetHashCode(); - } - if((SessionCapabilities != null) && __isset.sessionCapabilities) - { - hashcode = (hashcode * 397) + SessionCapabilities.GetHashCode(); - } - if((ExpressionsInfos != null) && __isset.expressionsInfos) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ExpressionsInfos); - } - if((InternalConfs != null) && __isset.internalConfs) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(InternalConfs); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp388 = new StringBuilder("TDBSqlSessionConf("); - int tmp389 = 0; - if((Confs != null) && __isset.confs) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("Confs: "); - Confs.ToString(tmp388); - } - if((TempViews != null) && __isset.tempViews) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("TempViews: "); - TempViews.ToString(tmp388); - } - if((CurrentDatabase != null) && __isset.currentDatabase) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("CurrentDatabase: "); - CurrentDatabase.ToString(tmp388); - } - if((CurrentCatalog != null) && __isset.currentCatalog) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("CurrentCatalog: "); - CurrentCatalog.ToString(tmp388); - } - if((SessionCapabilities != null) && __isset.sessionCapabilities) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("SessionCapabilities: "); - SessionCapabilities.ToString(tmp388); - } - if((ExpressionsInfos != null) && __isset.expressionsInfos) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("ExpressionsInfos: "); - ExpressionsInfos.ToString(tmp388); - } - if((InternalConfs != null) && __isset.internalConfs) - { - if(0 < tmp389++) { tmp388.Append(", "); } - tmp388.Append("InternalConfs: "); - InternalConfs.ToString(tmp388); - } - tmp388.Append(')'); - return tmp388.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs deleted file mode 100644 index f542caf0b5..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs +++ /dev/null @@ -1,346 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDBSqlTempView : TBase - { - private string _name; - private string _sqlStatement; - private Dictionary _properties; - private string _viewSchema; - - public string Name - { - get - { - return _name; - } - set - { - __isset.name = true; - this._name = value; - } - } - - public string SqlStatement - { - get - { - return _sqlStatement; - } - set - { - __isset.sqlStatement = true; - this._sqlStatement = value; - } - } - - public Dictionary Properties - { - get - { - return _properties; - } - set - { - __isset.properties = true; - this._properties = value; - } - } - - public string ViewSchema - { - get - { - return _viewSchema; - } - set - { - __isset.viewSchema = true; - this._viewSchema = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool name; - public bool sqlStatement; - public bool properties; - public bool viewSchema; - } - - public TDBSqlTempView() - { - } - - public TDBSqlTempView DeepCopy() - { - var tmp390 = new TDBSqlTempView(); - if((Name != null) && __isset.name) - { - tmp390.Name = this.Name; - } - tmp390.__isset.name = this.__isset.name; - if((SqlStatement != null) && __isset.sqlStatement) - { - tmp390.SqlStatement = this.SqlStatement; - } - tmp390.__isset.sqlStatement = this.__isset.sqlStatement; - if((Properties != null) && __isset.properties) - { - tmp390.Properties = this.Properties.DeepCopy(); - } - tmp390.__isset.properties = this.__isset.properties; - if((ViewSchema != null) && __isset.viewSchema) - { - tmp390.ViewSchema = this.ViewSchema; - } - tmp390.__isset.viewSchema = this.__isset.viewSchema; - return tmp390; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - Name = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - SqlStatement = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Map) - { - { - var _map391 = await iprot.ReadMapBeginAsync(cancellationToken); - Properties = new Dictionary(_map391.Count); - for(int _i392 = 0; _i392 < _map391.Count; ++_i392) - { - string _key393; - string _val394; - _key393 = await iprot.ReadStringAsync(cancellationToken); - _val394 = await iprot.ReadStringAsync(cancellationToken); - Properties[_key393] = _val394; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - ViewSchema = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp395 = new TStruct("TDBSqlTempView"); - await oprot.WriteStructBeginAsync(tmp395, cancellationToken); - var tmp396 = new TField(); - if((Name != null) && __isset.name) - { - tmp396.Name = "name"; - tmp396.Type = TType.String; - tmp396.ID = 1; - await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); - await oprot.WriteStringAsync(Name, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SqlStatement != null) && __isset.sqlStatement) - { - tmp396.Name = "sqlStatement"; - tmp396.Type = TType.String; - tmp396.ID = 2; - await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); - await oprot.WriteStringAsync(SqlStatement, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Properties != null) && __isset.properties) - { - tmp396.Name = "properties"; - tmp396.Type = TType.Map; - tmp396.ID = 3; - await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Properties.Count), cancellationToken); - foreach (string _iter397 in Properties.Keys) - { - await oprot.WriteStringAsync(_iter397, cancellationToken); - await oprot.WriteStringAsync(Properties[_iter397], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ViewSchema != null) && __isset.viewSchema) - { - tmp396.Name = "viewSchema"; - tmp396.Type = TType.String; - tmp396.ID = 4; - await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); - await oprot.WriteStringAsync(ViewSchema, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDBSqlTempView other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) - && ((__isset.sqlStatement == other.__isset.sqlStatement) && ((!__isset.sqlStatement) || (global::System.Object.Equals(SqlStatement, other.SqlStatement)))) - && ((__isset.properties == other.__isset.properties) && ((!__isset.properties) || (TCollections.Equals(Properties, other.Properties)))) - && ((__isset.viewSchema == other.__isset.viewSchema) && ((!__isset.viewSchema) || (global::System.Object.Equals(ViewSchema, other.ViewSchema)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Name != null) && __isset.name) - { - hashcode = (hashcode * 397) + Name.GetHashCode(); - } - if((SqlStatement != null) && __isset.sqlStatement) - { - hashcode = (hashcode * 397) + SqlStatement.GetHashCode(); - } - if((Properties != null) && __isset.properties) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Properties); - } - if((ViewSchema != null) && __isset.viewSchema) - { - hashcode = (hashcode * 397) + ViewSchema.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp398 = new StringBuilder("TDBSqlTempView("); - int tmp399 = 0; - if((Name != null) && __isset.name) - { - if(0 < tmp399++) { tmp398.Append(", "); } - tmp398.Append("Name: "); - Name.ToString(tmp398); - } - if((SqlStatement != null) && __isset.sqlStatement) - { - if(0 < tmp399++) { tmp398.Append(", "); } - tmp398.Append("SqlStatement: "); - SqlStatement.ToString(tmp398); - } - if((Properties != null) && __isset.properties) - { - if(0 < tmp399++) { tmp398.Append(", "); } - tmp398.Append("Properties: "); - Properties.ToString(tmp398); - } - if((ViewSchema != null) && __isset.viewSchema) - { - if(0 < tmp399++) { tmp398.Append(", "); } - tmp398.Append("ViewSchema: "); - ViewSchema.ToString(tmp398); - } - tmp398.Append(')'); - return tmp398.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs deleted file mode 100644 index c2bd55a682..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs +++ /dev/null @@ -1,199 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.Buffers.Binary; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDoubleColumn : TBase - { - - public DoubleArray Values { get; set; } - - public TDoubleColumn() - { - } - - public TDoubleColumn(DoubleArray values) : this() - { - this.Values = values; - } - - public TDoubleColumn DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - byte[] nulls = null; - byte[] buffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list178 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list178.Count; - - buffer = new byte[length * 8]; - var memory = buffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - for (int _i179 = 0; _i179 < length; ++_i179) - { - typedMemory.Span[_i179] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i179]); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new DoubleArray(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp181 = new TStruct("TDoubleColumn"); - await oprot.WriteStructBeginAsync(tmp181, cancellationToken); - var tmp182 = new TField(); - if((Values != null)) - { - tmp182.Name = "values"; - tmp182.Type = TType.List; - tmp182.ID = 1; - await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Double, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - double _iter183 = Values.GetValue(i) ?? 0.0; - await oprot.WriteDoubleAsync(_iter183, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp182.Name = "nulls"; - tmp182.Type = TType.String; - tmp182.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDoubleColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp184 = new StringBuilder("TDoubleColumn("); - if((Values != null)) - { - tmp184.Append(", Values: "); - Values.ToString(tmp184); - } - tmp184.Append(')'); - return tmp184.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs deleted file mode 100644 index 5a313862f5..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDoubleValue : TBase - { - private double _value; - - public double Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TDoubleValue() - { - } - - public TDoubleValue DeepCopy() - { - var tmp108 = new TDoubleValue(); - if(__isset.@value) - { - tmp108.Value = this.Value; - } - tmp108.__isset.@value = this.__isset.@value; - return tmp108; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Double) - { - Value = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp109 = new TStruct("TDoubleValue"); - await oprot.WriteStructBeginAsync(tmp109, cancellationToken); - var tmp110 = new TField(); - if(__isset.@value) - { - tmp110.Name = "value"; - tmp110.Type = TType.Double; - tmp110.ID = 1; - await oprot.WriteFieldBeginAsync(tmp110, cancellationToken); - await oprot.WriteDoubleAsync(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDoubleValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp111 = new StringBuilder("TDoubleValue("); - int tmp112 = 0; - if(__isset.@value) - { - if(0 < tmp112++) { tmp111.Append(", "); } - tmp111.Append("Value: "); - Value.ToString(tmp111); - } - tmp111.Append(')'); - return tmp111.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs deleted file mode 100644 index 030fb5ec39..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs +++ /dev/null @@ -1,388 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDownloadDataReq : TBase - { - private string _tableName; - private string _query; - private string _format; - private Dictionary _downloadOptions; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string TableName - { - get - { - return _tableName; - } - set - { - __isset.tableName = true; - this._tableName = value; - } - } - - public string Query - { - get - { - return _query; - } - set - { - __isset.query = true; - this._query = value; - } - } - - public string Format - { - get - { - return _format; - } - set - { - __isset.format = true; - this._format = value; - } - } - - public Dictionary DownloadOptions - { - get - { - return _downloadOptions; - } - set - { - __isset.downloadOptions = true; - this._downloadOptions = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool tableName; - public bool query; - public bool format; - public bool downloadOptions; - } - - public TDownloadDataReq() - { - } - - public TDownloadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TDownloadDataReq DeepCopy() - { - var tmp440 = new TDownloadDataReq(); - if((SessionHandle != null)) - { - tmp440.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((TableName != null) && __isset.tableName) - { - tmp440.TableName = this.TableName; - } - tmp440.__isset.tableName = this.__isset.tableName; - if((Query != null) && __isset.query) - { - tmp440.Query = this.Query; - } - tmp440.__isset.query = this.__isset.query; - if((Format != null) && __isset.format) - { - tmp440.Format = this.Format; - } - tmp440.__isset.format = this.__isset.format; - if((DownloadOptions != null) && __isset.downloadOptions) - { - tmp440.DownloadOptions = this.DownloadOptions.DeepCopy(); - } - tmp440.__isset.downloadOptions = this.__isset.downloadOptions; - return tmp440; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - TableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - Query = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - Format = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.Map) - { - { - var _map441 = await iprot.ReadMapBeginAsync(cancellationToken); - DownloadOptions = new Dictionary(_map441.Count); - for(int _i442 = 0; _i442 < _map441.Count; ++_i442) - { - string _key443; - string _val444; - _key443 = await iprot.ReadStringAsync(cancellationToken); - _val444 = await iprot.ReadStringAsync(cancellationToken); - DownloadOptions[_key443] = _val444; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp445 = new TStruct("TDownloadDataReq"); - await oprot.WriteStructBeginAsync(tmp445, cancellationToken); - var tmp446 = new TField(); - if((SessionHandle != null)) - { - tmp446.Name = "sessionHandle"; - tmp446.Type = TType.Struct; - tmp446.ID = 1; - await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableName != null) && __isset.tableName) - { - tmp446.Name = "tableName"; - tmp446.Type = TType.String; - tmp446.ID = 2; - await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); - await oprot.WriteStringAsync(TableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Query != null) && __isset.query) - { - tmp446.Name = "query"; - tmp446.Type = TType.String; - tmp446.ID = 3; - await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); - await oprot.WriteStringAsync(Query, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Format != null) && __isset.format) - { - tmp446.Name = "format"; - tmp446.Type = TType.String; - tmp446.ID = 4; - await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); - await oprot.WriteStringAsync(Format, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DownloadOptions != null) && __isset.downloadOptions) - { - tmp446.Name = "downloadOptions"; - tmp446.Type = TType.Map; - tmp446.ID = 5; - await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, DownloadOptions.Count), cancellationToken); - foreach (string _iter447 in DownloadOptions.Keys) - { - await oprot.WriteStringAsync(_iter447, cancellationToken); - await oprot.WriteStringAsync(DownloadOptions[_iter447], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDownloadDataReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) - && ((__isset.query == other.__isset.query) && ((!__isset.query) || (global::System.Object.Equals(Query, other.Query)))) - && ((__isset.format == other.__isset.format) && ((!__isset.format) || (global::System.Object.Equals(Format, other.Format)))) - && ((__isset.downloadOptions == other.__isset.downloadOptions) && ((!__isset.downloadOptions) || (TCollections.Equals(DownloadOptions, other.DownloadOptions)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((TableName != null) && __isset.tableName) - { - hashcode = (hashcode * 397) + TableName.GetHashCode(); - } - if((Query != null) && __isset.query) - { - hashcode = (hashcode * 397) + Query.GetHashCode(); - } - if((Format != null) && __isset.format) - { - hashcode = (hashcode * 397) + Format.GetHashCode(); - } - if((DownloadOptions != null) && __isset.downloadOptions) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(DownloadOptions); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp448 = new StringBuilder("TDownloadDataReq("); - if((SessionHandle != null)) - { - tmp448.Append(", SessionHandle: "); - SessionHandle.ToString(tmp448); - } - if((TableName != null) && __isset.tableName) - { - tmp448.Append(", TableName: "); - TableName.ToString(tmp448); - } - if((Query != null) && __isset.query) - { - tmp448.Append(", Query: "); - Query.ToString(tmp448); - } - if((Format != null) && __isset.format) - { - tmp448.Append(", Format: "); - Format.ToString(tmp448); - } - if((DownloadOptions != null) && __isset.downloadOptions) - { - tmp448.Append(", DownloadOptions: "); - DownloadOptions.ToString(tmp448); - } - tmp448.Append(')'); - return tmp448.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs deleted file mode 100644 index 75cbf209df..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs +++ /dev/null @@ -1,211 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TDownloadDataResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public TDownloadDataResp() - { - } - - public TDownloadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.Status = status; - this.OperationHandle = operationHandle; - } - - public TDownloadDataResp DeepCopy() - { - var tmp450 = new TDownloadDataResp(); - if((Status != null)) - { - tmp450.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null)) - { - tmp450.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - return tmp450; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp451 = new TStruct("TDownloadDataResp"); - await oprot.WriteStructBeginAsync(tmp451, cancellationToken); - var tmp452 = new TField(); - if((Status != null)) - { - tmp452.Name = "status"; - tmp452.Type = TType.Struct; - tmp452.ID = 1; - await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null)) - { - tmp452.Name = "operationHandle"; - tmp452.Type = TType.Struct; - tmp452.ID = 2; - await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TDownloadDataResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && global::System.Object.Equals(OperationHandle, other.OperationHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp453 = new StringBuilder("TDownloadDataResp("); - if((Status != null)) - { - tmp453.Append(", Status: "); - Status.ToString(tmp453); - } - if((OperationHandle != null)) - { - tmp453.Append(", OperationHandle: "); - OperationHandle.ToString(tmp453); - } - tmp453.Append(')'); - return tmp453.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs deleted file mode 100644 index b6e5795e83..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs +++ /dev/null @@ -1,1124 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TExecuteStatementReq : TBase - { - private Dictionary _confOverlay; - private bool _runAsync; - private long _queryTimeout; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _canReadArrowResult; - private bool _canDownloadResult; - private bool _canDecompressLZ4Result; - private long _maxBytesPerFile; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes _useArrowNativeTypes; - private long _resultRowLimit; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - private bool _rejectHighCostQueries; - private double _estimatedCost; - private short _executionVersion; - private string _requestValidation; - private int _resultPersistenceMode; - private bool _trimArrowBatchesToLimit; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string Statement { get; set; } - - public Dictionary ConfOverlay - { - get - { - return _confOverlay; - } - set - { - __isset.confOverlay = true; - this._confOverlay = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public long QueryTimeout - { - get - { - return _queryTimeout; - } - set - { - __isset.queryTimeout = true; - this._queryTimeout = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool CanReadArrowResult - { - get - { - return _canReadArrowResult; - } - set - { - __isset.canReadArrowResult = true; - this._canReadArrowResult = value; - } - } - - public bool CanDownloadResult - { - get - { - return _canDownloadResult; - } - set - { - __isset.canDownloadResult = true; - this._canDownloadResult = value; - } - } - - public bool CanDecompressLZ4Result - { - get - { - return _canDecompressLZ4Result; - } - set - { - __isset.canDecompressLZ4Result = true; - this._canDecompressLZ4Result = value; - } - } - - public long MaxBytesPerFile - { - get - { - return _maxBytesPerFile; - } - set - { - __isset.maxBytesPerFile = true; - this._maxBytesPerFile = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes UseArrowNativeTypes - { - get - { - return _useArrowNativeTypes; - } - set - { - __isset.useArrowNativeTypes = true; - this._useArrowNativeTypes = value; - } - } - - public long ResultRowLimit - { - get - { - return _resultRowLimit; - } - set - { - __isset.resultRowLimit = true; - this._resultRowLimit = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - public bool RejectHighCostQueries - { - get - { - return _rejectHighCostQueries; - } - set - { - __isset.rejectHighCostQueries = true; - this._rejectHighCostQueries = value; - } - } - - public double EstimatedCost - { - get - { - return _estimatedCost; - } - set - { - __isset.estimatedCost = true; - this._estimatedCost = value; - } - } - - public short ExecutionVersion - { - get - { - return _executionVersion; - } - set - { - __isset.executionVersion = true; - this._executionVersion = value; - } - } - - public string RequestValidation - { - get - { - return _requestValidation; - } - set - { - __isset.requestValidation = true; - this._requestValidation = value; - } - } - - public int ResultPersistenceMode - { - get - { - return _resultPersistenceMode; - } - set - { - __isset.resultPersistenceMode = true; - this._resultPersistenceMode = value; - } - } - - public bool TrimArrowBatchesToLimit - { - get - { - return _trimArrowBatchesToLimit; - } - set - { - __isset.trimArrowBatchesToLimit = true; - this._trimArrowBatchesToLimit = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool confOverlay; - public bool runAsync; - public bool queryTimeout; - public bool getDirectResults; - public bool canReadArrowResult; - public bool canDownloadResult; - public bool canDecompressLZ4Result; - public bool maxBytesPerFile; - public bool useArrowNativeTypes; - public bool resultRowLimit; - public bool operationId; - public bool sessionConf; - public bool rejectHighCostQueries; - public bool estimatedCost; - public bool executionVersion; - public bool requestValidation; - public bool resultPersistenceMode; - public bool trimArrowBatchesToLimit; - } - - public TExecuteStatementReq() - { - this._runAsync = false; - this.__isset.runAsync = true; - this._queryTimeout = 0; - this.__isset.queryTimeout = true; - } - - public TExecuteStatementReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string statement) : this() - { - this.SessionHandle = sessionHandle; - this.Statement = statement; - } - - public TExecuteStatementReq DeepCopy() - { - var tmp357 = new TExecuteStatementReq(); - if((SessionHandle != null)) - { - tmp357.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((Statement != null)) - { - tmp357.Statement = this.Statement; - } - if((ConfOverlay != null) && __isset.confOverlay) - { - tmp357.ConfOverlay = this.ConfOverlay.DeepCopy(); - } - tmp357.__isset.confOverlay = this.__isset.confOverlay; - if(__isset.runAsync) - { - tmp357.RunAsync = this.RunAsync; - } - tmp357.__isset.runAsync = this.__isset.runAsync; - if(__isset.queryTimeout) - { - tmp357.QueryTimeout = this.QueryTimeout; - } - tmp357.__isset.queryTimeout = this.__isset.queryTimeout; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp357.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp357.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.canReadArrowResult) - { - tmp357.CanReadArrowResult = this.CanReadArrowResult; - } - tmp357.__isset.canReadArrowResult = this.__isset.canReadArrowResult; - if(__isset.canDownloadResult) - { - tmp357.CanDownloadResult = this.CanDownloadResult; - } - tmp357.__isset.canDownloadResult = this.__isset.canDownloadResult; - if(__isset.canDecompressLZ4Result) - { - tmp357.CanDecompressLZ4Result = this.CanDecompressLZ4Result; - } - tmp357.__isset.canDecompressLZ4Result = this.__isset.canDecompressLZ4Result; - if(__isset.maxBytesPerFile) - { - tmp357.MaxBytesPerFile = this.MaxBytesPerFile; - } - tmp357.__isset.maxBytesPerFile = this.__isset.maxBytesPerFile; - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) - { - tmp357.UseArrowNativeTypes = (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes)this.UseArrowNativeTypes.DeepCopy(); - } - tmp357.__isset.useArrowNativeTypes = this.__isset.useArrowNativeTypes; - if(__isset.resultRowLimit) - { - tmp357.ResultRowLimit = this.ResultRowLimit; - } - tmp357.__isset.resultRowLimit = this.__isset.resultRowLimit; - if((OperationId != null) && __isset.operationId) - { - tmp357.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp357.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp357.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp357.__isset.sessionConf = this.__isset.sessionConf; - if(__isset.rejectHighCostQueries) - { - tmp357.RejectHighCostQueries = this.RejectHighCostQueries; - } - tmp357.__isset.rejectHighCostQueries = this.__isset.rejectHighCostQueries; - if(__isset.estimatedCost) - { - tmp357.EstimatedCost = this.EstimatedCost; - } - tmp357.__isset.estimatedCost = this.__isset.estimatedCost; - if(__isset.executionVersion) - { - tmp357.ExecutionVersion = this.ExecutionVersion; - } - tmp357.__isset.executionVersion = this.__isset.executionVersion; - if((RequestValidation != null) && __isset.requestValidation) - { - tmp357.RequestValidation = this.RequestValidation; - } - tmp357.__isset.requestValidation = this.__isset.requestValidation; - if(__isset.resultPersistenceMode) - { - tmp357.ResultPersistenceMode = this.ResultPersistenceMode; - } - tmp357.__isset.resultPersistenceMode = this.__isset.resultPersistenceMode; - if(__isset.trimArrowBatchesToLimit) - { - tmp357.TrimArrowBatchesToLimit = this.TrimArrowBatchesToLimit; - } - tmp357.__isset.trimArrowBatchesToLimit = this.__isset.trimArrowBatchesToLimit; - return tmp357; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_statement = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - Statement = await iprot.ReadStringAsync(cancellationToken); - isset_statement = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Map) - { - { - var _map358 = await iprot.ReadMapBeginAsync(cancellationToken); - ConfOverlay = new Dictionary(_map358.Count); - for(int _i359 = 0; _i359 < _map358.Count; ++_i359) - { - string _key360; - string _val361; - _key360 = await iprot.ReadStringAsync(cancellationToken); - _val361 = await iprot.ReadStringAsync(cancellationToken); - ConfOverlay[_key360] = _val361; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.I64) - { - QueryTimeout = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - CanReadArrowResult = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1283: - if (field.Type == TType.Bool) - { - CanDownloadResult = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1284: - if (field.Type == TType.Bool) - { - CanDecompressLZ4Result = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1285: - if (field.Type == TType.I64) - { - MaxBytesPerFile = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1286: - if (field.Type == TType.Struct) - { - UseArrowNativeTypes = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes(); - await UseArrowNativeTypes.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1287: - if (field.Type == TType.I64) - { - ResultRowLimit = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3331: - if (field.Type == TType.Bool) - { - RejectHighCostQueries = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3332: - if (field.Type == TType.Double) - { - EstimatedCost = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3333: - if (field.Type == TType.I16) - { - ExecutionVersion = await iprot.ReadI16Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3334: - if (field.Type == TType.String) - { - RequestValidation = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3335: - if (field.Type == TType.I32) - { - ResultPersistenceMode = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3336: - if (field.Type == TType.Bool) - { - TrimArrowBatchesToLimit = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_statement) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp362 = new TStruct("TExecuteStatementReq"); - await oprot.WriteStructBeginAsync(tmp362, cancellationToken); - var tmp363 = new TField(); - if((SessionHandle != null)) - { - tmp363.Name = "sessionHandle"; - tmp363.Type = TType.Struct; - tmp363.ID = 1; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Statement != null)) - { - tmp363.Name = "statement"; - tmp363.Type = TType.String; - tmp363.ID = 2; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteStringAsync(Statement, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ConfOverlay != null) && __isset.confOverlay) - { - tmp363.Name = "confOverlay"; - tmp363.Type = TType.Map; - tmp363.ID = 3; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConfOverlay.Count), cancellationToken); - foreach (string _iter364 in ConfOverlay.Keys) - { - await oprot.WriteStringAsync(_iter364, cancellationToken); - await oprot.WriteStringAsync(ConfOverlay[_iter364], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp363.Name = "runAsync"; - tmp363.Type = TType.Bool; - tmp363.ID = 4; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.queryTimeout) - { - tmp363.Name = "queryTimeout"; - tmp363.Type = TType.I64; - tmp363.ID = 5; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteI64Async(QueryTimeout, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp363.Name = "getDirectResults"; - tmp363.Type = TType.Struct; - tmp363.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.canReadArrowResult) - { - tmp363.Name = "canReadArrowResult"; - tmp363.Type = TType.Bool; - tmp363.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(CanReadArrowResult, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.canDownloadResult) - { - tmp363.Name = "canDownloadResult"; - tmp363.Type = TType.Bool; - tmp363.ID = 1283; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(CanDownloadResult, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.canDecompressLZ4Result) - { - tmp363.Name = "canDecompressLZ4Result"; - tmp363.Type = TType.Bool; - tmp363.ID = 1284; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(CanDecompressLZ4Result, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.maxBytesPerFile) - { - tmp363.Name = "maxBytesPerFile"; - tmp363.Type = TType.I64; - tmp363.ID = 1285; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteI64Async(MaxBytesPerFile, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) - { - tmp363.Name = "useArrowNativeTypes"; - tmp363.Type = TType.Struct; - tmp363.ID = 1286; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await UseArrowNativeTypes.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.resultRowLimit) - { - tmp363.Name = "resultRowLimit"; - tmp363.Type = TType.I64; - tmp363.ID = 1287; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteI64Async(ResultRowLimit, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp363.Name = "operationId"; - tmp363.Type = TType.Struct; - tmp363.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp363.Name = "sessionConf"; - tmp363.Type = TType.Struct; - tmp363.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.rejectHighCostQueries) - { - tmp363.Name = "rejectHighCostQueries"; - tmp363.Type = TType.Bool; - tmp363.ID = 3331; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(RejectHighCostQueries, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.estimatedCost) - { - tmp363.Name = "estimatedCost"; - tmp363.Type = TType.Double; - tmp363.ID = 3332; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteDoubleAsync(EstimatedCost, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.executionVersion) - { - tmp363.Name = "executionVersion"; - tmp363.Type = TType.I16; - tmp363.ID = 3333; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteI16Async(ExecutionVersion, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((RequestValidation != null) && __isset.requestValidation) - { - tmp363.Name = "requestValidation"; - tmp363.Type = TType.String; - tmp363.ID = 3334; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteStringAsync(RequestValidation, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.resultPersistenceMode) - { - tmp363.Name = "resultPersistenceMode"; - tmp363.Type = TType.I32; - tmp363.ID = 3335; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteI32Async(ResultPersistenceMode, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.trimArrowBatchesToLimit) - { - tmp363.Name = "trimArrowBatchesToLimit"; - tmp363.Type = TType.Bool; - tmp363.ID = 3336; - await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); - await oprot.WriteBoolAsync(TrimArrowBatchesToLimit, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TExecuteStatementReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && global::System.Object.Equals(Statement, other.Statement) - && ((__isset.confOverlay == other.__isset.confOverlay) && ((!__isset.confOverlay) || (TCollections.Equals(ConfOverlay, other.ConfOverlay)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.queryTimeout == other.__isset.queryTimeout) && ((!__isset.queryTimeout) || (global::System.Object.Equals(QueryTimeout, other.QueryTimeout)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.canReadArrowResult == other.__isset.canReadArrowResult) && ((!__isset.canReadArrowResult) || (global::System.Object.Equals(CanReadArrowResult, other.CanReadArrowResult)))) - && ((__isset.canDownloadResult == other.__isset.canDownloadResult) && ((!__isset.canDownloadResult) || (global::System.Object.Equals(CanDownloadResult, other.CanDownloadResult)))) - && ((__isset.canDecompressLZ4Result == other.__isset.canDecompressLZ4Result) && ((!__isset.canDecompressLZ4Result) || (global::System.Object.Equals(CanDecompressLZ4Result, other.CanDecompressLZ4Result)))) - && ((__isset.maxBytesPerFile == other.__isset.maxBytesPerFile) && ((!__isset.maxBytesPerFile) || (global::System.Object.Equals(MaxBytesPerFile, other.MaxBytesPerFile)))) - && ((__isset.useArrowNativeTypes == other.__isset.useArrowNativeTypes) && ((!__isset.useArrowNativeTypes) || (global::System.Object.Equals(UseArrowNativeTypes, other.UseArrowNativeTypes)))) - && ((__isset.resultRowLimit == other.__isset.resultRowLimit) && ((!__isset.resultRowLimit) || (global::System.Object.Equals(ResultRowLimit, other.ResultRowLimit)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) - && ((__isset.rejectHighCostQueries == other.__isset.rejectHighCostQueries) && ((!__isset.rejectHighCostQueries) || (global::System.Object.Equals(RejectHighCostQueries, other.RejectHighCostQueries)))) - && ((__isset.estimatedCost == other.__isset.estimatedCost) && ((!__isset.estimatedCost) || (global::System.Object.Equals(EstimatedCost, other.EstimatedCost)))) - && ((__isset.executionVersion == other.__isset.executionVersion) && ((!__isset.executionVersion) || (global::System.Object.Equals(ExecutionVersion, other.ExecutionVersion)))) - && ((__isset.requestValidation == other.__isset.requestValidation) && ((!__isset.requestValidation) || (global::System.Object.Equals(RequestValidation, other.RequestValidation)))) - && ((__isset.resultPersistenceMode == other.__isset.resultPersistenceMode) && ((!__isset.resultPersistenceMode) || (global::System.Object.Equals(ResultPersistenceMode, other.ResultPersistenceMode)))) - && ((__isset.trimArrowBatchesToLimit == other.__isset.trimArrowBatchesToLimit) && ((!__isset.trimArrowBatchesToLimit) || (global::System.Object.Equals(TrimArrowBatchesToLimit, other.TrimArrowBatchesToLimit)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((Statement != null)) - { - hashcode = (hashcode * 397) + Statement.GetHashCode(); - } - if((ConfOverlay != null) && __isset.confOverlay) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ConfOverlay); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if(__isset.queryTimeout) - { - hashcode = (hashcode * 397) + QueryTimeout.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.canReadArrowResult) - { - hashcode = (hashcode * 397) + CanReadArrowResult.GetHashCode(); - } - if(__isset.canDownloadResult) - { - hashcode = (hashcode * 397) + CanDownloadResult.GetHashCode(); - } - if(__isset.canDecompressLZ4Result) - { - hashcode = (hashcode * 397) + CanDecompressLZ4Result.GetHashCode(); - } - if(__isset.maxBytesPerFile) - { - hashcode = (hashcode * 397) + MaxBytesPerFile.GetHashCode(); - } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) - { - hashcode = (hashcode * 397) + UseArrowNativeTypes.GetHashCode(); - } - if(__isset.resultRowLimit) - { - hashcode = (hashcode * 397) + ResultRowLimit.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - if(__isset.rejectHighCostQueries) - { - hashcode = (hashcode * 397) + RejectHighCostQueries.GetHashCode(); - } - if(__isset.estimatedCost) - { - hashcode = (hashcode * 397) + EstimatedCost.GetHashCode(); - } - if(__isset.executionVersion) - { - hashcode = (hashcode * 397) + ExecutionVersion.GetHashCode(); - } - if((RequestValidation != null) && __isset.requestValidation) - { - hashcode = (hashcode * 397) + RequestValidation.GetHashCode(); - } - if(__isset.resultPersistenceMode) - { - hashcode = (hashcode * 397) + ResultPersistenceMode.GetHashCode(); - } - if(__isset.trimArrowBatchesToLimit) - { - hashcode = (hashcode * 397) + TrimArrowBatchesToLimit.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp365 = new StringBuilder("TExecuteStatementReq("); - if((SessionHandle != null)) - { - tmp365.Append(", SessionHandle: "); - SessionHandle.ToString(tmp365); - } - if((Statement != null)) - { - tmp365.Append(", Statement: "); - Statement.ToString(tmp365); - } - if((ConfOverlay != null) && __isset.confOverlay) - { - tmp365.Append(", ConfOverlay: "); - ConfOverlay.ToString(tmp365); - } - if(__isset.runAsync) - { - tmp365.Append(", RunAsync: "); - RunAsync.ToString(tmp365); - } - if(__isset.queryTimeout) - { - tmp365.Append(", QueryTimeout: "); - QueryTimeout.ToString(tmp365); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp365.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp365); - } - if(__isset.canReadArrowResult) - { - tmp365.Append(", CanReadArrowResult: "); - CanReadArrowResult.ToString(tmp365); - } - if(__isset.canDownloadResult) - { - tmp365.Append(", CanDownloadResult: "); - CanDownloadResult.ToString(tmp365); - } - if(__isset.canDecompressLZ4Result) - { - tmp365.Append(", CanDecompressLZ4Result: "); - CanDecompressLZ4Result.ToString(tmp365); - } - if(__isset.maxBytesPerFile) - { - tmp365.Append(", MaxBytesPerFile: "); - MaxBytesPerFile.ToString(tmp365); - } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) - { - tmp365.Append(", UseArrowNativeTypes: "); - UseArrowNativeTypes.ToString(tmp365); - } - if(__isset.resultRowLimit) - { - tmp365.Append(", ResultRowLimit: "); - ResultRowLimit.ToString(tmp365); - } - if((OperationId != null) && __isset.operationId) - { - tmp365.Append(", OperationId: "); - OperationId.ToString(tmp365); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp365.Append(", SessionConf: "); - SessionConf.ToString(tmp365); - } - if(__isset.rejectHighCostQueries) - { - tmp365.Append(", RejectHighCostQueries: "); - RejectHighCostQueries.ToString(tmp365); - } - if(__isset.estimatedCost) - { - tmp365.Append(", EstimatedCost: "); - EstimatedCost.ToString(tmp365); - } - if(__isset.executionVersion) - { - tmp365.Append(", ExecutionVersion: "); - ExecutionVersion.ToString(tmp365); - } - if((RequestValidation != null) && __isset.requestValidation) - { - tmp365.Append(", RequestValidation: "); - RequestValidation.ToString(tmp365); - } - if(__isset.resultPersistenceMode) - { - tmp365.Append(", ResultPersistenceMode: "); - ResultPersistenceMode.ToString(tmp365); - } - if(__isset.trimArrowBatchesToLimit) - { - tmp365.Append(", TrimArrowBatchesToLimit: "); - TrimArrowBatchesToLimit.ToString(tmp365); - } - tmp365.Append(')'); - return tmp365.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs deleted file mode 100644 index 013e725bb5..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs +++ /dev/null @@ -1,569 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TExecuteStatementResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - private bool _executionRejected; - private double _maxClusterCapacity; - private double _queryCost; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - private double _currentClusterLoad; - private int _idempotencyType; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - public bool ExecutionRejected - { - get - { - return _executionRejected; - } - set - { - __isset.executionRejected = true; - this._executionRejected = value; - } - } - - public double MaxClusterCapacity - { - get - { - return _maxClusterCapacity; - } - set - { - __isset.maxClusterCapacity = true; - this._maxClusterCapacity = value; - } - } - - public double QueryCost - { - get - { - return _queryCost; - } - set - { - __isset.queryCost = true; - this._queryCost = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - public double CurrentClusterLoad - { - get - { - return _currentClusterLoad; - } - set - { - __isset.currentClusterLoad = true; - this._currentClusterLoad = value; - } - } - - public int IdempotencyType - { - get - { - return _idempotencyType; - } - set - { - __isset.idempotencyType = true; - this._idempotencyType = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - public bool executionRejected; - public bool maxClusterCapacity; - public bool queryCost; - public bool sessionConf; - public bool currentClusterLoad; - public bool idempotencyType; - } - - public TExecuteStatementResp() - { - } - - public TExecuteStatementResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TExecuteStatementResp DeepCopy() - { - var tmp415 = new TExecuteStatementResp(); - if((Status != null)) - { - tmp415.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp415.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp415.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp415.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp415.__isset.directResults = this.__isset.directResults; - if(__isset.executionRejected) - { - tmp415.ExecutionRejected = this.ExecutionRejected; - } - tmp415.__isset.executionRejected = this.__isset.executionRejected; - if(__isset.maxClusterCapacity) - { - tmp415.MaxClusterCapacity = this.MaxClusterCapacity; - } - tmp415.__isset.maxClusterCapacity = this.__isset.maxClusterCapacity; - if(__isset.queryCost) - { - tmp415.QueryCost = this.QueryCost; - } - tmp415.__isset.queryCost = this.__isset.queryCost; - if((SessionConf != null) && __isset.sessionConf) - { - tmp415.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp415.__isset.sessionConf = this.__isset.sessionConf; - if(__isset.currentClusterLoad) - { - tmp415.CurrentClusterLoad = this.CurrentClusterLoad; - } - tmp415.__isset.currentClusterLoad = this.__isset.currentClusterLoad; - if(__isset.idempotencyType) - { - tmp415.IdempotencyType = this.IdempotencyType; - } - tmp415.__isset.idempotencyType = this.__isset.idempotencyType; - return tmp415; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Bool) - { - ExecutionRejected = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Double) - { - MaxClusterCapacity = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3331: - if (field.Type == TType.Double) - { - QueryCost = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3332: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3333: - if (field.Type == TType.Double) - { - CurrentClusterLoad = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3334: - if (field.Type == TType.I32) - { - IdempotencyType = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp416 = new TStruct("TExecuteStatementResp"); - await oprot.WriteStructBeginAsync(tmp416, cancellationToken); - var tmp417 = new TField(); - if((Status != null)) - { - tmp417.Name = "status"; - tmp417.Type = TType.Struct; - tmp417.ID = 1; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp417.Name = "operationHandle"; - tmp417.Type = TType.Struct; - tmp417.ID = 2; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp417.Name = "directResults"; - tmp417.Type = TType.Struct; - tmp417.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.executionRejected) - { - tmp417.Name = "executionRejected"; - tmp417.Type = TType.Bool; - tmp417.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await oprot.WriteBoolAsync(ExecutionRejected, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.maxClusterCapacity) - { - tmp417.Name = "maxClusterCapacity"; - tmp417.Type = TType.Double; - tmp417.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await oprot.WriteDoubleAsync(MaxClusterCapacity, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.queryCost) - { - tmp417.Name = "queryCost"; - tmp417.Type = TType.Double; - tmp417.ID = 3331; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await oprot.WriteDoubleAsync(QueryCost, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp417.Name = "sessionConf"; - tmp417.Type = TType.Struct; - tmp417.ID = 3332; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.currentClusterLoad) - { - tmp417.Name = "currentClusterLoad"; - tmp417.Type = TType.Double; - tmp417.ID = 3333; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await oprot.WriteDoubleAsync(CurrentClusterLoad, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.idempotencyType) - { - tmp417.Name = "idempotencyType"; - tmp417.Type = TType.I32; - tmp417.ID = 3334; - await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); - await oprot.WriteI32Async(IdempotencyType, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TExecuteStatementResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))) - && ((__isset.executionRejected == other.__isset.executionRejected) && ((!__isset.executionRejected) || (global::System.Object.Equals(ExecutionRejected, other.ExecutionRejected)))) - && ((__isset.maxClusterCapacity == other.__isset.maxClusterCapacity) && ((!__isset.maxClusterCapacity) || (global::System.Object.Equals(MaxClusterCapacity, other.MaxClusterCapacity)))) - && ((__isset.queryCost == other.__isset.queryCost) && ((!__isset.queryCost) || (global::System.Object.Equals(QueryCost, other.QueryCost)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) - && ((__isset.currentClusterLoad == other.__isset.currentClusterLoad) && ((!__isset.currentClusterLoad) || (global::System.Object.Equals(CurrentClusterLoad, other.CurrentClusterLoad)))) - && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - if(__isset.executionRejected) - { - hashcode = (hashcode * 397) + ExecutionRejected.GetHashCode(); - } - if(__isset.maxClusterCapacity) - { - hashcode = (hashcode * 397) + MaxClusterCapacity.GetHashCode(); - } - if(__isset.queryCost) - { - hashcode = (hashcode * 397) + QueryCost.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - if(__isset.currentClusterLoad) - { - hashcode = (hashcode * 397) + CurrentClusterLoad.GetHashCode(); - } - if(__isset.idempotencyType) - { - hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp418 = new StringBuilder("TExecuteStatementResp("); - if((Status != null)) - { - tmp418.Append(", Status: "); - Status.ToString(tmp418); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp418.Append(", OperationHandle: "); - OperationHandle.ToString(tmp418); - } - if((DirectResults != null) && __isset.directResults) - { - tmp418.Append(", DirectResults: "); - DirectResults.ToString(tmp418); - } - if(__isset.executionRejected) - { - tmp418.Append(", ExecutionRejected: "); - ExecutionRejected.ToString(tmp418); - } - if(__isset.maxClusterCapacity) - { - tmp418.Append(", MaxClusterCapacity: "); - MaxClusterCapacity.ToString(tmp418); - } - if(__isset.queryCost) - { - tmp418.Append(", QueryCost: "); - QueryCost.ToString(tmp418); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp418.Append(", SessionConf: "); - SessionConf.ToString(tmp418); - } - if(__isset.currentClusterLoad) - { - tmp418.Append(", CurrentClusterLoad: "); - CurrentClusterLoad.ToString(tmp418); - } - if(__isset.idempotencyType) - { - tmp418.Append(", IdempotencyType: "); - IdempotencyType.ToString(tmp418); - } - tmp418.Append(')'); - return tmp418.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs deleted file mode 100644 index a497b63a84..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs +++ /dev/null @@ -1,728 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TExpressionInfo : TBase - { - private string _className; - private string _usage; - private string _name; - private string _extended; - private string _db; - private string _arguments; - private string _examples; - private string _note; - private string _group; - private string _since; - private string _deprecated; - private string _source; - - public string ClassName - { - get - { - return _className; - } - set - { - __isset.className = true; - this._className = value; - } - } - - public string Usage - { - get - { - return _usage; - } - set - { - __isset.usage = true; - this._usage = value; - } - } - - public string Name - { - get - { - return _name; - } - set - { - __isset.name = true; - this._name = value; - } - } - - public string Extended - { - get - { - return _extended; - } - set - { - __isset.extended = true; - this._extended = value; - } - } - - public string Db - { - get - { - return _db; - } - set - { - __isset.db = true; - this._db = value; - } - } - - public string Arguments - { - get - { - return _arguments; - } - set - { - __isset.arguments = true; - this._arguments = value; - } - } - - public string Examples - { - get - { - return _examples; - } - set - { - __isset.examples = true; - this._examples = value; - } - } - - public string Note - { - get - { - return _note; - } - set - { - __isset.note = true; - this._note = value; - } - } - - public string Group - { - get - { - return _group; - } - set - { - __isset.@group = true; - this._group = value; - } - } - - public string Since - { - get - { - return _since; - } - set - { - __isset.since = true; - this._since = value; - } - } - - public string Deprecated - { - get - { - return _deprecated; - } - set - { - __isset.deprecated = true; - this._deprecated = value; - } - } - - public string Source - { - get - { - return _source; - } - set - { - __isset.source = true; - this._source = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool className; - public bool usage; - public bool name; - public bool extended; - public bool db; - public bool arguments; - public bool examples; - public bool note; - public bool @group; - public bool since; - public bool deprecated; - public bool source; - } - - public TExpressionInfo() - { - } - - public TExpressionInfo DeepCopy() - { - var tmp410 = new TExpressionInfo(); - if((ClassName != null) && __isset.className) - { - tmp410.ClassName = this.ClassName; - } - tmp410.__isset.className = this.__isset.className; - if((Usage != null) && __isset.usage) - { - tmp410.Usage = this.Usage; - } - tmp410.__isset.usage = this.__isset.usage; - if((Name != null) && __isset.name) - { - tmp410.Name = this.Name; - } - tmp410.__isset.name = this.__isset.name; - if((Extended != null) && __isset.extended) - { - tmp410.Extended = this.Extended; - } - tmp410.__isset.extended = this.__isset.extended; - if((Db != null) && __isset.db) - { - tmp410.Db = this.Db; - } - tmp410.__isset.db = this.__isset.db; - if((Arguments != null) && __isset.arguments) - { - tmp410.Arguments = this.Arguments; - } - tmp410.__isset.arguments = this.__isset.arguments; - if((Examples != null) && __isset.examples) - { - tmp410.Examples = this.Examples; - } - tmp410.__isset.examples = this.__isset.examples; - if((Note != null) && __isset.note) - { - tmp410.Note = this.Note; - } - tmp410.__isset.note = this.__isset.note; - if((Group != null) && __isset.@group) - { - tmp410.Group = this.Group; - } - tmp410.__isset.@group = this.__isset.@group; - if((Since != null) && __isset.since) - { - tmp410.Since = this.Since; - } - tmp410.__isset.since = this.__isset.since; - if((Deprecated != null) && __isset.deprecated) - { - tmp410.Deprecated = this.Deprecated; - } - tmp410.__isset.deprecated = this.__isset.deprecated; - if((Source != null) && __isset.source) - { - tmp410.Source = this.Source; - } - tmp410.__isset.source = this.__isset.source; - return tmp410; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - ClassName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - Usage = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - Name = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - Extended = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - Db = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.String) - { - Arguments = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.String) - { - Examples = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 8: - if (field.Type == TType.String) - { - Note = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 9: - if (field.Type == TType.String) - { - Group = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 10: - if (field.Type == TType.String) - { - Since = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 11: - if (field.Type == TType.String) - { - Deprecated = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 12: - if (field.Type == TType.String) - { - Source = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp411 = new TStruct("TExpressionInfo"); - await oprot.WriteStructBeginAsync(tmp411, cancellationToken); - var tmp412 = new TField(); - if((ClassName != null) && __isset.className) - { - tmp412.Name = "className"; - tmp412.Type = TType.String; - tmp412.ID = 1; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(ClassName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Usage != null) && __isset.usage) - { - tmp412.Name = "usage"; - tmp412.Type = TType.String; - tmp412.ID = 2; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Usage, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Name != null) && __isset.name) - { - tmp412.Name = "name"; - tmp412.Type = TType.String; - tmp412.ID = 3; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Name, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Extended != null) && __isset.extended) - { - tmp412.Name = "extended"; - tmp412.Type = TType.String; - tmp412.ID = 4; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Extended, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Db != null) && __isset.db) - { - tmp412.Name = "db"; - tmp412.Type = TType.String; - tmp412.ID = 5; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Db, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Arguments != null) && __isset.arguments) - { - tmp412.Name = "arguments"; - tmp412.Type = TType.String; - tmp412.ID = 6; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Arguments, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Examples != null) && __isset.examples) - { - tmp412.Name = "examples"; - tmp412.Type = TType.String; - tmp412.ID = 7; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Examples, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Note != null) && __isset.note) - { - tmp412.Name = "note"; - tmp412.Type = TType.String; - tmp412.ID = 8; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Note, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Group != null) && __isset.@group) - { - tmp412.Name = "group"; - tmp412.Type = TType.String; - tmp412.ID = 9; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Group, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Since != null) && __isset.since) - { - tmp412.Name = "since"; - tmp412.Type = TType.String; - tmp412.ID = 10; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Since, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Deprecated != null) && __isset.deprecated) - { - tmp412.Name = "deprecated"; - tmp412.Type = TType.String; - tmp412.ID = 11; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Deprecated, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Source != null) && __isset.source) - { - tmp412.Name = "source"; - tmp412.Type = TType.String; - tmp412.ID = 12; - await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); - await oprot.WriteStringAsync(Source, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TExpressionInfo other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.className == other.__isset.className) && ((!__isset.className) || (global::System.Object.Equals(ClassName, other.ClassName)))) - && ((__isset.usage == other.__isset.usage) && ((!__isset.usage) || (global::System.Object.Equals(Usage, other.Usage)))) - && ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) - && ((__isset.extended == other.__isset.extended) && ((!__isset.extended) || (global::System.Object.Equals(Extended, other.Extended)))) - && ((__isset.db == other.__isset.db) && ((!__isset.db) || (global::System.Object.Equals(Db, other.Db)))) - && ((__isset.arguments == other.__isset.arguments) && ((!__isset.arguments) || (global::System.Object.Equals(Arguments, other.Arguments)))) - && ((__isset.examples == other.__isset.examples) && ((!__isset.examples) || (global::System.Object.Equals(Examples, other.Examples)))) - && ((__isset.note == other.__isset.note) && ((!__isset.note) || (global::System.Object.Equals(Note, other.Note)))) - && ((__isset.@group == other.__isset.@group) && ((!__isset.@group) || (global::System.Object.Equals(Group, other.Group)))) - && ((__isset.since == other.__isset.since) && ((!__isset.since) || (global::System.Object.Equals(Since, other.Since)))) - && ((__isset.deprecated == other.__isset.deprecated) && ((!__isset.deprecated) || (global::System.Object.Equals(Deprecated, other.Deprecated)))) - && ((__isset.source == other.__isset.source) && ((!__isset.source) || (global::System.Object.Equals(Source, other.Source)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((ClassName != null) && __isset.className) - { - hashcode = (hashcode * 397) + ClassName.GetHashCode(); - } - if((Usage != null) && __isset.usage) - { - hashcode = (hashcode * 397) + Usage.GetHashCode(); - } - if((Name != null) && __isset.name) - { - hashcode = (hashcode * 397) + Name.GetHashCode(); - } - if((Extended != null) && __isset.extended) - { - hashcode = (hashcode * 397) + Extended.GetHashCode(); - } - if((Db != null) && __isset.db) - { - hashcode = (hashcode * 397) + Db.GetHashCode(); - } - if((Arguments != null) && __isset.arguments) - { - hashcode = (hashcode * 397) + Arguments.GetHashCode(); - } - if((Examples != null) && __isset.examples) - { - hashcode = (hashcode * 397) + Examples.GetHashCode(); - } - if((Note != null) && __isset.note) - { - hashcode = (hashcode * 397) + Note.GetHashCode(); - } - if((Group != null) && __isset.@group) - { - hashcode = (hashcode * 397) + Group.GetHashCode(); - } - if((Since != null) && __isset.since) - { - hashcode = (hashcode * 397) + Since.GetHashCode(); - } - if((Deprecated != null) && __isset.deprecated) - { - hashcode = (hashcode * 397) + Deprecated.GetHashCode(); - } - if((Source != null) && __isset.source) - { - hashcode = (hashcode * 397) + Source.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp413 = new StringBuilder("TExpressionInfo("); - int tmp414 = 0; - if((ClassName != null) && __isset.className) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("ClassName: "); - ClassName.ToString(tmp413); - } - if((Usage != null) && __isset.usage) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Usage: "); - Usage.ToString(tmp413); - } - if((Name != null) && __isset.name) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Name: "); - Name.ToString(tmp413); - } - if((Extended != null) && __isset.extended) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Extended: "); - Extended.ToString(tmp413); - } - if((Db != null) && __isset.db) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Db: "); - Db.ToString(tmp413); - } - if((Arguments != null) && __isset.arguments) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Arguments: "); - Arguments.ToString(tmp413); - } - if((Examples != null) && __isset.examples) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Examples: "); - Examples.ToString(tmp413); - } - if((Note != null) && __isset.note) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Note: "); - Note.ToString(tmp413); - } - if((Group != null) && __isset.@group) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Group: "); - Group.ToString(tmp413); - } - if((Since != null) && __isset.since) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Since: "); - Since.ToString(tmp413); - } - if((Deprecated != null) && __isset.deprecated) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Deprecated: "); - Deprecated.ToString(tmp413); - } - if((Source != null) && __isset.source) - { - if(0 < tmp414++) { tmp413.Append(", "); } - tmp413.Append("Source: "); - Source.ToString(tmp413); - } - tmp413.Append(')'); - return tmp413.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs deleted file mode 100644 index 76764ffc7d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs +++ /dev/null @@ -1,26 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TFetchOrientation - { - FETCH_NEXT = 0, - FETCH_PRIOR = 1, - FETCH_RELATIVE = 2, - FETCH_ABSOLUTE = 3, - FETCH_FIRST = 4, - FETCH_LAST = 5, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs deleted file mode 100644 index e5de4d6e54..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs +++ /dev/null @@ -1,437 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TFetchResultsReq : TBase - { - private short _fetchType; - private long _maxBytes; - private long _startRowOffset; - private bool _includeResultSetMetadata; - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation Orientation { get; set; } - - public long MaxRows { get; set; } - - public short FetchType - { - get - { - return _fetchType; - } - set - { - __isset.fetchType = true; - this._fetchType = value; - } - } - - public long MaxBytes - { - get - { - return _maxBytes; - } - set - { - __isset.maxBytes = true; - this._maxBytes = value; - } - } - - public long StartRowOffset - { - get - { - return _startRowOffset; - } - set - { - __isset.startRowOffset = true; - this._startRowOffset = value; - } - } - - public bool IncludeResultSetMetadata - { - get - { - return _includeResultSetMetadata; - } - set - { - __isset.includeResultSetMetadata = true; - this._includeResultSetMetadata = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool fetchType; - public bool maxBytes; - public bool startRowOffset; - public bool includeResultSetMetadata; - } - - public TFetchResultsReq() - { - this.Orientation = global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation.FETCH_NEXT; - this._fetchType = 0; - this.__isset.fetchType = true; - } - - public TFetchResultsReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle, global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation orientation, long maxRows) : this() - { - this.OperationHandle = operationHandle; - this.Orientation = orientation; - this.MaxRows = maxRows; - } - - public TFetchResultsReq DeepCopy() - { - var tmp588 = new TFetchResultsReq(); - if((OperationHandle != null)) - { - tmp588.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp588.Orientation = this.Orientation; - tmp588.MaxRows = this.MaxRows; - if(__isset.fetchType) - { - tmp588.FetchType = this.FetchType; - } - tmp588.__isset.fetchType = this.__isset.fetchType; - if(__isset.maxBytes) - { - tmp588.MaxBytes = this.MaxBytes; - } - tmp588.__isset.maxBytes = this.__isset.maxBytes; - if(__isset.startRowOffset) - { - tmp588.StartRowOffset = this.StartRowOffset; - } - tmp588.__isset.startRowOffset = this.__isset.startRowOffset; - if(__isset.includeResultSetMetadata) - { - tmp588.IncludeResultSetMetadata = this.IncludeResultSetMetadata; - } - tmp588.__isset.includeResultSetMetadata = this.__isset.includeResultSetMetadata; - return tmp588; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - bool isset_orientation = false; - bool isset_maxRows = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - Orientation = (global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation)await iprot.ReadI32Async(cancellationToken); - isset_orientation = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.I64) - { - MaxRows = await iprot.ReadI64Async(cancellationToken); - isset_maxRows = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I16) - { - FetchType = await iprot.ReadI16Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.I64) - { - MaxBytes = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.I64) - { - StartRowOffset = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1283: - if (field.Type == TType.Bool) - { - IncludeResultSetMetadata = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_orientation) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_maxRows) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp589 = new TStruct("TFetchResultsReq"); - await oprot.WriteStructBeginAsync(tmp589, cancellationToken); - var tmp590 = new TField(); - if((OperationHandle != null)) - { - tmp590.Name = "operationHandle"; - tmp590.Type = TType.Struct; - tmp590.ID = 1; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp590.Name = "orientation"; - tmp590.Type = TType.I32; - tmp590.ID = 2; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteI32Async((int)Orientation, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp590.Name = "maxRows"; - tmp590.Type = TType.I64; - tmp590.ID = 3; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteI64Async(MaxRows, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.fetchType) - { - tmp590.Name = "fetchType"; - tmp590.Type = TType.I16; - tmp590.ID = 4; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteI16Async(FetchType, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.maxBytes) - { - tmp590.Name = "maxBytes"; - tmp590.Type = TType.I64; - tmp590.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteI64Async(MaxBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.startRowOffset) - { - tmp590.Name = "startRowOffset"; - tmp590.Type = TType.I64; - tmp590.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteI64Async(StartRowOffset, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.includeResultSetMetadata) - { - tmp590.Name = "includeResultSetMetadata"; - tmp590.Type = TType.Bool; - tmp590.ID = 1283; - await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); - await oprot.WriteBoolAsync(IncludeResultSetMetadata, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TFetchResultsReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle) - && global::System.Object.Equals(Orientation, other.Orientation) - && global::System.Object.Equals(MaxRows, other.MaxRows) - && ((__isset.fetchType == other.__isset.fetchType) && ((!__isset.fetchType) || (global::System.Object.Equals(FetchType, other.FetchType)))) - && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))) - && ((__isset.startRowOffset == other.__isset.startRowOffset) && ((!__isset.startRowOffset) || (global::System.Object.Equals(StartRowOffset, other.StartRowOffset)))) - && ((__isset.includeResultSetMetadata == other.__isset.includeResultSetMetadata) && ((!__isset.includeResultSetMetadata) || (global::System.Object.Equals(IncludeResultSetMetadata, other.IncludeResultSetMetadata)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - hashcode = (hashcode * 397) + Orientation.GetHashCode(); - hashcode = (hashcode * 397) + MaxRows.GetHashCode(); - if(__isset.fetchType) - { - hashcode = (hashcode * 397) + FetchType.GetHashCode(); - } - if(__isset.maxBytes) - { - hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); - } - if(__isset.startRowOffset) - { - hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); - } - if(__isset.includeResultSetMetadata) - { - hashcode = (hashcode * 397) + IncludeResultSetMetadata.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp591 = new StringBuilder("TFetchResultsReq("); - if((OperationHandle != null)) - { - tmp591.Append(", OperationHandle: "); - OperationHandle.ToString(tmp591); - } - tmp591.Append(", Orientation: "); - Orientation.ToString(tmp591); - tmp591.Append(", MaxRows: "); - MaxRows.ToString(tmp591); - if(__isset.fetchType) - { - tmp591.Append(", FetchType: "); - FetchType.ToString(tmp591); - } - if(__isset.maxBytes) - { - tmp591.Append(", MaxBytes: "); - MaxBytes.ToString(tmp591); - } - if(__isset.startRowOffset) - { - tmp591.Append(", StartRowOffset: "); - StartRowOffset.ToString(tmp591); - } - if(__isset.includeResultSetMetadata) - { - tmp591.Append(", IncludeResultSetMetadata: "); - IncludeResultSetMetadata.ToString(tmp591); - } - tmp591.Append(')'); - return tmp591.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs deleted file mode 100644 index c83622ec12..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs +++ /dev/null @@ -1,372 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TFetchResultsResp : TBase - { - private bool _hasMoreRows; - private global::Apache.Hive.Service.Rpc.Thrift.TRowSet _results; - private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; - private string _responseValidation; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public bool HasMoreRows - { - get - { - return _hasMoreRows; - } - set - { - __isset.hasMoreRows = true; - this._hasMoreRows = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TRowSet Results - { - get - { - return _results; - } - set - { - __isset.results = true; - this._results = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata - { - get - { - return _resultSetMetadata; - } - set - { - __isset.resultSetMetadata = true; - this._resultSetMetadata = value; - } - } - - public string ResponseValidation - { - get - { - return _responseValidation; - } - set - { - __isset.responseValidation = true; - this._responseValidation = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool hasMoreRows; - public bool results; - public bool resultSetMetadata; - public bool responseValidation; - } - - public TFetchResultsResp() - { - } - - public TFetchResultsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TFetchResultsResp DeepCopy() - { - var tmp593 = new TFetchResultsResp(); - if((Status != null)) - { - tmp593.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if(__isset.hasMoreRows) - { - tmp593.HasMoreRows = this.HasMoreRows; - } - tmp593.__isset.hasMoreRows = this.__isset.hasMoreRows; - if((Results != null) && __isset.results) - { - tmp593.Results = (global::Apache.Hive.Service.Rpc.Thrift.TRowSet)this.Results.DeepCopy(); - } - tmp593.__isset.results = this.__isset.results; - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - tmp593.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); - } - tmp593.__isset.resultSetMetadata = this.__isset.resultSetMetadata; - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp593.ResponseValidation = this.ResponseValidation; - } - tmp593.__isset.responseValidation = this.__isset.responseValidation; - return tmp593; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Bool) - { - HasMoreRows = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - Results = new global::Apache.Hive.Service.Rpc.Thrift.TRowSet(); - await Results.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); - await ResultSetMetadata.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.String) - { - ResponseValidation = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp594 = new TStruct("TFetchResultsResp"); - await oprot.WriteStructBeginAsync(tmp594, cancellationToken); - var tmp595 = new TField(); - if((Status != null)) - { - tmp595.Name = "status"; - tmp595.Type = TType.Struct; - tmp595.ID = 1; - await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.hasMoreRows) - { - tmp595.Name = "hasMoreRows"; - tmp595.Type = TType.Bool; - tmp595.ID = 2; - await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); - await oprot.WriteBoolAsync(HasMoreRows, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Results != null) && __isset.results) - { - tmp595.Name = "results"; - tmp595.Type = TType.Struct; - tmp595.ID = 3; - await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); - await Results.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - tmp595.Name = "resultSetMetadata"; - tmp595.Type = TType.Struct; - tmp595.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); - await ResultSetMetadata.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp595.Name = "responseValidation"; - tmp595.Type = TType.String; - tmp595.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); - await oprot.WriteStringAsync(ResponseValidation, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TFetchResultsResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.hasMoreRows == other.__isset.hasMoreRows) && ((!__isset.hasMoreRows) || (global::System.Object.Equals(HasMoreRows, other.HasMoreRows)))) - && ((__isset.results == other.__isset.results) && ((!__isset.results) || (global::System.Object.Equals(Results, other.Results)))) - && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) - && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if(__isset.hasMoreRows) - { - hashcode = (hashcode * 397) + HasMoreRows.GetHashCode(); - } - if((Results != null) && __isset.results) - { - hashcode = (hashcode * 397) + Results.GetHashCode(); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp596 = new StringBuilder("TFetchResultsResp("); - if((Status != null)) - { - tmp596.Append(", Status: "); - Status.ToString(tmp596); - } - if(__isset.hasMoreRows) - { - tmp596.Append(", HasMoreRows: "); - HasMoreRows.ToString(tmp596); - } - if((Results != null) && __isset.results) - { - tmp596.Append(", Results: "); - Results.ToString(tmp596); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - tmp596.Append(", ResultSetMetadata: "); - ResultSetMetadata.ToString(tmp596); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp596.Append(", ResponseValidation: "); - ResponseValidation.ToString(tmp596); - } - tmp596.Append(')'); - return tmp596.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs deleted file mode 100644 index d18838d501..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs +++ /dev/null @@ -1,373 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetCatalogsReq : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetCatalogsReq() - { - } - - public TGetCatalogsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetCatalogsReq DeepCopy() - { - var tmp455 = new TGetCatalogsReq(); - if((SessionHandle != null)) - { - tmp455.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp455.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp455.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp455.RunAsync = this.RunAsync; - } - tmp455.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp455.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp455.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp455.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp455.__isset.sessionConf = this.__isset.sessionConf; - return tmp455; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp456 = new TStruct("TGetCatalogsReq"); - await oprot.WriteStructBeginAsync(tmp456, cancellationToken); - var tmp457 = new TField(); - if((SessionHandle != null)) - { - tmp457.Name = "sessionHandle"; - tmp457.Type = TType.Struct; - tmp457.ID = 1; - await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp457.Name = "getDirectResults"; - tmp457.Type = TType.Struct; - tmp457.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp457.Name = "runAsync"; - tmp457.Type = TType.Bool; - tmp457.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp457.Name = "operationId"; - tmp457.Type = TType.Struct; - tmp457.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp457.Name = "sessionConf"; - tmp457.Type = TType.Struct; - tmp457.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetCatalogsReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp458 = new StringBuilder("TGetCatalogsReq("); - if((SessionHandle != null)) - { - tmp458.Append(", SessionHandle: "); - SessionHandle.ToString(tmp458); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp458.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp458); - } - if(__isset.runAsync) - { - tmp458.Append(", RunAsync: "); - RunAsync.ToString(tmp458); - } - if((OperationId != null) && __isset.operationId) - { - tmp458.Append(", OperationId: "); - OperationId.ToString(tmp458); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp458.Append(", SessionConf: "); - SessionConf.ToString(tmp458); - } - tmp458.Append(')'); - return tmp458.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs deleted file mode 100644 index 052d126d41..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetCatalogsResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetCatalogsResp() - { - } - - public TGetCatalogsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetCatalogsResp DeepCopy() - { - var tmp460 = new TGetCatalogsResp(); - if((Status != null)) - { - tmp460.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp460.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp460.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp460.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp460.__isset.directResults = this.__isset.directResults; - return tmp460; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp461 = new TStruct("TGetCatalogsResp"); - await oprot.WriteStructBeginAsync(tmp461, cancellationToken); - var tmp462 = new TField(); - if((Status != null)) - { - tmp462.Name = "status"; - tmp462.Type = TType.Struct; - tmp462.ID = 1; - await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp462.Name = "operationHandle"; - tmp462.Type = TType.Struct; - tmp462.ID = 2; - await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp462.Name = "directResults"; - tmp462.Type = TType.Struct; - tmp462.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetCatalogsResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp463 = new StringBuilder("TGetCatalogsResp("); - if((Status != null)) - { - tmp463.Append(", Status: "); - Status.ToString(tmp463); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp463.Append(", OperationHandle: "); - OperationHandle.ToString(tmp463); - } - if((DirectResults != null) && __isset.directResults) - { - tmp463.Append(", DirectResults: "); - DirectResults.ToString(tmp463); - } - tmp463.Append(')'); - return tmp463.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs deleted file mode 100644 index 6146aa1353..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs +++ /dev/null @@ -1,569 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetColumnsReq : TBase - { - private string _catalogName; - private string _schemaName; - private string _tableName; - private string _columnName; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - public string TableName - { - get - { - return _tableName; - } - set - { - __isset.tableName = true; - this._tableName = value; - } - } - - public string ColumnName - { - get - { - return _columnName; - } - set - { - __isset.columnName = true; - this._columnName = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - public bool tableName; - public bool columnName; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetColumnsReq() - { - } - - public TGetColumnsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetColumnsReq DeepCopy() - { - var tmp499 = new TGetColumnsReq(); - if((SessionHandle != null)) - { - tmp499.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp499.CatalogName = this.CatalogName; - } - tmp499.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp499.SchemaName = this.SchemaName; - } - tmp499.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) - { - tmp499.TableName = this.TableName; - } - tmp499.__isset.tableName = this.__isset.tableName; - if((ColumnName != null) && __isset.columnName) - { - tmp499.ColumnName = this.ColumnName; - } - tmp499.__isset.columnName = this.__isset.columnName; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp499.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp499.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp499.RunAsync = this.RunAsync; - } - tmp499.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp499.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp499.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp499.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp499.__isset.sessionConf = this.__isset.sessionConf; - return tmp499; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - TableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - ColumnName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp500 = new TStruct("TGetColumnsReq"); - await oprot.WriteStructBeginAsync(tmp500, cancellationToken); - var tmp501 = new TField(); - if((SessionHandle != null)) - { - tmp501.Name = "sessionHandle"; - tmp501.Type = TType.Struct; - tmp501.ID = 1; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp501.Name = "catalogName"; - tmp501.Type = TType.String; - tmp501.ID = 2; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp501.Name = "schemaName"; - tmp501.Type = TType.String; - tmp501.ID = 3; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableName != null) && __isset.tableName) - { - tmp501.Name = "tableName"; - tmp501.Type = TType.String; - tmp501.ID = 4; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await oprot.WriteStringAsync(TableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ColumnName != null) && __isset.columnName) - { - tmp501.Name = "columnName"; - tmp501.Type = TType.String; - tmp501.ID = 5; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await oprot.WriteStringAsync(ColumnName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp501.Name = "getDirectResults"; - tmp501.Type = TType.Struct; - tmp501.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp501.Name = "runAsync"; - tmp501.Type = TType.Bool; - tmp501.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp501.Name = "operationId"; - tmp501.Type = TType.Struct; - tmp501.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp501.Name = "sessionConf"; - tmp501.Type = TType.Struct; - tmp501.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetColumnsReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) - && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) - && ((__isset.columnName == other.__isset.columnName) && ((!__isset.columnName) || (global::System.Object.Equals(ColumnName, other.ColumnName)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - if((TableName != null) && __isset.tableName) - { - hashcode = (hashcode * 397) + TableName.GetHashCode(); - } - if((ColumnName != null) && __isset.columnName) - { - hashcode = (hashcode * 397) + ColumnName.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp502 = new StringBuilder("TGetColumnsReq("); - if((SessionHandle != null)) - { - tmp502.Append(", SessionHandle: "); - SessionHandle.ToString(tmp502); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp502.Append(", CatalogName: "); - CatalogName.ToString(tmp502); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp502.Append(", SchemaName: "); - SchemaName.ToString(tmp502); - } - if((TableName != null) && __isset.tableName) - { - tmp502.Append(", TableName: "); - TableName.ToString(tmp502); - } - if((ColumnName != null) && __isset.columnName) - { - tmp502.Append(", ColumnName: "); - ColumnName.ToString(tmp502); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp502.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp502); - } - if(__isset.runAsync) - { - tmp502.Append(", RunAsync: "); - RunAsync.ToString(tmp502); - } - if((OperationId != null) && __isset.operationId) - { - tmp502.Append(", OperationId: "); - OperationId.ToString(tmp502); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp502.Append(", SessionConf: "); - SessionConf.ToString(tmp502); - } - tmp502.Append(')'); - return tmp502.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs deleted file mode 100644 index 13495fcbc2..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetColumnsResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetColumnsResp() - { - } - - public TGetColumnsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetColumnsResp DeepCopy() - { - var tmp504 = new TGetColumnsResp(); - if((Status != null)) - { - tmp504.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp504.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp504.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp504.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp504.__isset.directResults = this.__isset.directResults; - return tmp504; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp505 = new TStruct("TGetColumnsResp"); - await oprot.WriteStructBeginAsync(tmp505, cancellationToken); - var tmp506 = new TField(); - if((Status != null)) - { - tmp506.Name = "status"; - tmp506.Type = TType.Struct; - tmp506.ID = 1; - await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp506.Name = "operationHandle"; - tmp506.Type = TType.Struct; - tmp506.ID = 2; - await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp506.Name = "directResults"; - tmp506.Type = TType.Struct; - tmp506.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetColumnsResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp507 = new StringBuilder("TGetColumnsResp("); - if((Status != null)) - { - tmp507.Append(", Status: "); - Status.ToString(tmp507); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp507.Append(", OperationHandle: "); - OperationHandle.ToString(tmp507); - } - if((DirectResults != null) && __isset.directResults) - { - tmp507.Append(", DirectResults: "); - DirectResults.ToString(tmp507); - } - tmp507.Append(')'); - return tmp507.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs deleted file mode 100644 index bb5b5f268b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs +++ /dev/null @@ -1,667 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetCrossReferenceReq : TBase - { - private string _parentCatalogName; - private string _parentSchemaName; - private string _parentTableName; - private string _foreignCatalogName; - private string _foreignSchemaName; - private string _foreignTableName; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string ParentCatalogName - { - get - { - return _parentCatalogName; - } - set - { - __isset.parentCatalogName = true; - this._parentCatalogName = value; - } - } - - public string ParentSchemaName - { - get - { - return _parentSchemaName; - } - set - { - __isset.parentSchemaName = true; - this._parentSchemaName = value; - } - } - - public string ParentTableName - { - get - { - return _parentTableName; - } - set - { - __isset.parentTableName = true; - this._parentTableName = value; - } - } - - public string ForeignCatalogName - { - get - { - return _foreignCatalogName; - } - set - { - __isset.foreignCatalogName = true; - this._foreignCatalogName = value; - } - } - - public string ForeignSchemaName - { - get - { - return _foreignSchemaName; - } - set - { - __isset.foreignSchemaName = true; - this._foreignSchemaName = value; - } - } - - public string ForeignTableName - { - get - { - return _foreignTableName; - } - set - { - __isset.foreignTableName = true; - this._foreignTableName = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool parentCatalogName; - public bool parentSchemaName; - public bool parentTableName; - public bool foreignCatalogName; - public bool foreignSchemaName; - public bool foreignTableName; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetCrossReferenceReq() - { - } - - public TGetCrossReferenceReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetCrossReferenceReq DeepCopy() - { - var tmp529 = new TGetCrossReferenceReq(); - if((SessionHandle != null)) - { - tmp529.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((ParentCatalogName != null) && __isset.parentCatalogName) - { - tmp529.ParentCatalogName = this.ParentCatalogName; - } - tmp529.__isset.parentCatalogName = this.__isset.parentCatalogName; - if((ParentSchemaName != null) && __isset.parentSchemaName) - { - tmp529.ParentSchemaName = this.ParentSchemaName; - } - tmp529.__isset.parentSchemaName = this.__isset.parentSchemaName; - if((ParentTableName != null) && __isset.parentTableName) - { - tmp529.ParentTableName = this.ParentTableName; - } - tmp529.__isset.parentTableName = this.__isset.parentTableName; - if((ForeignCatalogName != null) && __isset.foreignCatalogName) - { - tmp529.ForeignCatalogName = this.ForeignCatalogName; - } - tmp529.__isset.foreignCatalogName = this.__isset.foreignCatalogName; - if((ForeignSchemaName != null) && __isset.foreignSchemaName) - { - tmp529.ForeignSchemaName = this.ForeignSchemaName; - } - tmp529.__isset.foreignSchemaName = this.__isset.foreignSchemaName; - if((ForeignTableName != null) && __isset.foreignTableName) - { - tmp529.ForeignTableName = this.ForeignTableName; - } - tmp529.__isset.foreignTableName = this.__isset.foreignTableName; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp529.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp529.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp529.RunAsync = this.RunAsync; - } - tmp529.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp529.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp529.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp529.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp529.__isset.sessionConf = this.__isset.sessionConf; - return tmp529; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - ParentCatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - ParentSchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - ParentTableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - ForeignCatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.String) - { - ForeignSchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.String) - { - ForeignTableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp530 = new TStruct("TGetCrossReferenceReq"); - await oprot.WriteStructBeginAsync(tmp530, cancellationToken); - var tmp531 = new TField(); - if((SessionHandle != null)) - { - tmp531.Name = "sessionHandle"; - tmp531.Type = TType.Struct; - tmp531.ID = 1; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ParentCatalogName != null) && __isset.parentCatalogName) - { - tmp531.Name = "parentCatalogName"; - tmp531.Type = TType.String; - tmp531.ID = 2; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ParentCatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ParentSchemaName != null) && __isset.parentSchemaName) - { - tmp531.Name = "parentSchemaName"; - tmp531.Type = TType.String; - tmp531.ID = 3; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ParentSchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ParentTableName != null) && __isset.parentTableName) - { - tmp531.Name = "parentTableName"; - tmp531.Type = TType.String; - tmp531.ID = 4; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ParentTableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) - { - tmp531.Name = "foreignCatalogName"; - tmp531.Type = TType.String; - tmp531.ID = 5; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ForeignCatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) - { - tmp531.Name = "foreignSchemaName"; - tmp531.Type = TType.String; - tmp531.ID = 6; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ForeignSchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ForeignTableName != null) && __isset.foreignTableName) - { - tmp531.Name = "foreignTableName"; - tmp531.Type = TType.String; - tmp531.ID = 7; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteStringAsync(ForeignTableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp531.Name = "getDirectResults"; - tmp531.Type = TType.Struct; - tmp531.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp531.Name = "runAsync"; - tmp531.Type = TType.Bool; - tmp531.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp531.Name = "operationId"; - tmp531.Type = TType.Struct; - tmp531.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp531.Name = "sessionConf"; - tmp531.Type = TType.Struct; - tmp531.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetCrossReferenceReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.parentCatalogName == other.__isset.parentCatalogName) && ((!__isset.parentCatalogName) || (global::System.Object.Equals(ParentCatalogName, other.ParentCatalogName)))) - && ((__isset.parentSchemaName == other.__isset.parentSchemaName) && ((!__isset.parentSchemaName) || (global::System.Object.Equals(ParentSchemaName, other.ParentSchemaName)))) - && ((__isset.parentTableName == other.__isset.parentTableName) && ((!__isset.parentTableName) || (global::System.Object.Equals(ParentTableName, other.ParentTableName)))) - && ((__isset.foreignCatalogName == other.__isset.foreignCatalogName) && ((!__isset.foreignCatalogName) || (global::System.Object.Equals(ForeignCatalogName, other.ForeignCatalogName)))) - && ((__isset.foreignSchemaName == other.__isset.foreignSchemaName) && ((!__isset.foreignSchemaName) || (global::System.Object.Equals(ForeignSchemaName, other.ForeignSchemaName)))) - && ((__isset.foreignTableName == other.__isset.foreignTableName) && ((!__isset.foreignTableName) || (global::System.Object.Equals(ForeignTableName, other.ForeignTableName)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((ParentCatalogName != null) && __isset.parentCatalogName) - { - hashcode = (hashcode * 397) + ParentCatalogName.GetHashCode(); - } - if((ParentSchemaName != null) && __isset.parentSchemaName) - { - hashcode = (hashcode * 397) + ParentSchemaName.GetHashCode(); - } - if((ParentTableName != null) && __isset.parentTableName) - { - hashcode = (hashcode * 397) + ParentTableName.GetHashCode(); - } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) - { - hashcode = (hashcode * 397) + ForeignCatalogName.GetHashCode(); - } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) - { - hashcode = (hashcode * 397) + ForeignSchemaName.GetHashCode(); - } - if((ForeignTableName != null) && __isset.foreignTableName) - { - hashcode = (hashcode * 397) + ForeignTableName.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp532 = new StringBuilder("TGetCrossReferenceReq("); - if((SessionHandle != null)) - { - tmp532.Append(", SessionHandle: "); - SessionHandle.ToString(tmp532); - } - if((ParentCatalogName != null) && __isset.parentCatalogName) - { - tmp532.Append(", ParentCatalogName: "); - ParentCatalogName.ToString(tmp532); - } - if((ParentSchemaName != null) && __isset.parentSchemaName) - { - tmp532.Append(", ParentSchemaName: "); - ParentSchemaName.ToString(tmp532); - } - if((ParentTableName != null) && __isset.parentTableName) - { - tmp532.Append(", ParentTableName: "); - ParentTableName.ToString(tmp532); - } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) - { - tmp532.Append(", ForeignCatalogName: "); - ForeignCatalogName.ToString(tmp532); - } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) - { - tmp532.Append(", ForeignSchemaName: "); - ForeignSchemaName.ToString(tmp532); - } - if((ForeignTableName != null) && __isset.foreignTableName) - { - tmp532.Append(", ForeignTableName: "); - ForeignTableName.ToString(tmp532); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp532.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp532); - } - if(__isset.runAsync) - { - tmp532.Append(", RunAsync: "); - RunAsync.ToString(tmp532); - } - if((OperationId != null) && __isset.operationId) - { - tmp532.Append(", OperationId: "); - OperationId.ToString(tmp532); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp532.Append(", SessionConf: "); - SessionConf.ToString(tmp532); - } - tmp532.Append(')'); - return tmp532.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs deleted file mode 100644 index 18950f75e6..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetCrossReferenceResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetCrossReferenceResp() - { - } - - public TGetCrossReferenceResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetCrossReferenceResp DeepCopy() - { - var tmp534 = new TGetCrossReferenceResp(); - if((Status != null)) - { - tmp534.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp534.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp534.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp534.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp534.__isset.directResults = this.__isset.directResults; - return tmp534; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp535 = new TStruct("TGetCrossReferenceResp"); - await oprot.WriteStructBeginAsync(tmp535, cancellationToken); - var tmp536 = new TField(); - if((Status != null)) - { - tmp536.Name = "status"; - tmp536.Type = TType.Struct; - tmp536.ID = 1; - await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp536.Name = "operationHandle"; - tmp536.Type = TType.Struct; - tmp536.ID = 2; - await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp536.Name = "directResults"; - tmp536.Type = TType.Struct; - tmp536.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetCrossReferenceResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp537 = new StringBuilder("TGetCrossReferenceResp("); - if((Status != null)) - { - tmp537.Append(", Status: "); - Status.ToString(tmp537); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp537.Append(", OperationHandle: "); - OperationHandle.ToString(tmp537); - } - if((DirectResults != null) && __isset.directResults) - { - tmp537.Append(", DirectResults: "); - DirectResults.ToString(tmp537); - } - tmp537.Append(')'); - return tmp537.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs deleted file mode 100644 index e064af21f0..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs +++ /dev/null @@ -1,252 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetDelegationTokenReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string Owner { get; set; } - - public string Renewer { get; set; } - - public TGetDelegationTokenReq() - { - } - - public TGetDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string owner, string renewer) : this() - { - this.SessionHandle = sessionHandle; - this.Owner = owner; - this.Renewer = renewer; - } - - public TGetDelegationTokenReq DeepCopy() - { - var tmp598 = new TGetDelegationTokenReq(); - if((SessionHandle != null)) - { - tmp598.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((Owner != null)) - { - tmp598.Owner = this.Owner; - } - if((Renewer != null)) - { - tmp598.Renewer = this.Renewer; - } - return tmp598; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_owner = false; - bool isset_renewer = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - Owner = await iprot.ReadStringAsync(cancellationToken); - isset_owner = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - Renewer = await iprot.ReadStringAsync(cancellationToken); - isset_renewer = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_owner) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_renewer) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp599 = new TStruct("TGetDelegationTokenReq"); - await oprot.WriteStructBeginAsync(tmp599, cancellationToken); - var tmp600 = new TField(); - if((SessionHandle != null)) - { - tmp600.Name = "sessionHandle"; - tmp600.Type = TType.Struct; - tmp600.ID = 1; - await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Owner != null)) - { - tmp600.Name = "owner"; - tmp600.Type = TType.String; - tmp600.ID = 2; - await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); - await oprot.WriteStringAsync(Owner, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Renewer != null)) - { - tmp600.Name = "renewer"; - tmp600.Type = TType.String; - tmp600.ID = 3; - await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); - await oprot.WriteStringAsync(Renewer, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetDelegationTokenReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && global::System.Object.Equals(Owner, other.Owner) - && global::System.Object.Equals(Renewer, other.Renewer); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((Owner != null)) - { - hashcode = (hashcode * 397) + Owner.GetHashCode(); - } - if((Renewer != null)) - { - hashcode = (hashcode * 397) + Renewer.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp601 = new StringBuilder("TGetDelegationTokenReq("); - if((SessionHandle != null)) - { - tmp601.Append(", SessionHandle: "); - SessionHandle.ToString(tmp601); - } - if((Owner != null)) - { - tmp601.Append(", Owner: "); - Owner.ToString(tmp601); - } - if((Renewer != null)) - { - tmp601.Append(", Renewer: "); - Renewer.ToString(tmp601); - } - tmp601.Append(')'); - return tmp601.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs deleted file mode 100644 index bc4e4cbd61..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs +++ /dev/null @@ -1,223 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetDelegationTokenResp : TBase - { - private string _delegationToken; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public string DelegationToken - { - get - { - return _delegationToken; - } - set - { - __isset.delegationToken = true; - this._delegationToken = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool delegationToken; - } - - public TGetDelegationTokenResp() - { - } - - public TGetDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetDelegationTokenResp DeepCopy() - { - var tmp603 = new TGetDelegationTokenResp(); - if((Status != null)) - { - tmp603.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((DelegationToken != null) && __isset.delegationToken) - { - tmp603.DelegationToken = this.DelegationToken; - } - tmp603.__isset.delegationToken = this.__isset.delegationToken; - return tmp603; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - DelegationToken = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp604 = new TStruct("TGetDelegationTokenResp"); - await oprot.WriteStructBeginAsync(tmp604, cancellationToken); - var tmp605 = new TField(); - if((Status != null)) - { - tmp605.Name = "status"; - tmp605.Type = TType.Struct; - tmp605.ID = 1; - await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DelegationToken != null) && __isset.delegationToken) - { - tmp605.Name = "delegationToken"; - tmp605.Type = TType.String; - tmp605.ID = 2; - await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); - await oprot.WriteStringAsync(DelegationToken, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetDelegationTokenResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.delegationToken == other.__isset.delegationToken) && ((!__isset.delegationToken) || (global::System.Object.Equals(DelegationToken, other.DelegationToken)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((DelegationToken != null) && __isset.delegationToken) - { - hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp606 = new StringBuilder("TGetDelegationTokenResp("); - if((Status != null)) - { - tmp606.Append(", Status: "); - Status.ToString(tmp606); - } - if((DelegationToken != null) && __isset.delegationToken) - { - tmp606.Append(", DelegationToken: "); - DelegationToken.ToString(tmp606); - } - tmp606.Append(')'); - return tmp606.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs deleted file mode 100644 index 192bdae204..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs +++ /dev/null @@ -1,513 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetFunctionsReq : TBase - { - private string _catalogName; - private string _schemaName; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - public string FunctionName { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetFunctionsReq() - { - } - - public TGetFunctionsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string functionName) : this() - { - this.SessionHandle = sessionHandle; - this.FunctionName = functionName; - } - - public TGetFunctionsReq DeepCopy() - { - var tmp509 = new TGetFunctionsReq(); - if((SessionHandle != null)) - { - tmp509.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp509.CatalogName = this.CatalogName; - } - tmp509.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp509.SchemaName = this.SchemaName; - } - tmp509.__isset.schemaName = this.__isset.schemaName; - if((FunctionName != null)) - { - tmp509.FunctionName = this.FunctionName; - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp509.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp509.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp509.RunAsync = this.RunAsync; - } - tmp509.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp509.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp509.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp509.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp509.__isset.sessionConf = this.__isset.sessionConf; - return tmp509; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_functionName = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - FunctionName = await iprot.ReadStringAsync(cancellationToken); - isset_functionName = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_functionName) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp510 = new TStruct("TGetFunctionsReq"); - await oprot.WriteStructBeginAsync(tmp510, cancellationToken); - var tmp511 = new TField(); - if((SessionHandle != null)) - { - tmp511.Name = "sessionHandle"; - tmp511.Type = TType.Struct; - tmp511.ID = 1; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp511.Name = "catalogName"; - tmp511.Type = TType.String; - tmp511.ID = 2; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp511.Name = "schemaName"; - tmp511.Type = TType.String; - tmp511.ID = 3; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((FunctionName != null)) - { - tmp511.Name = "functionName"; - tmp511.Type = TType.String; - tmp511.ID = 4; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await oprot.WriteStringAsync(FunctionName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp511.Name = "getDirectResults"; - tmp511.Type = TType.Struct; - tmp511.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp511.Name = "runAsync"; - tmp511.Type = TType.Bool; - tmp511.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp511.Name = "operationId"; - tmp511.Type = TType.Struct; - tmp511.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp511.Name = "sessionConf"; - tmp511.Type = TType.Struct; - tmp511.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetFunctionsReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) - && global::System.Object.Equals(FunctionName, other.FunctionName) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - if((FunctionName != null)) - { - hashcode = (hashcode * 397) + FunctionName.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp512 = new StringBuilder("TGetFunctionsReq("); - if((SessionHandle != null)) - { - tmp512.Append(", SessionHandle: "); - SessionHandle.ToString(tmp512); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp512.Append(", CatalogName: "); - CatalogName.ToString(tmp512); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp512.Append(", SchemaName: "); - SchemaName.ToString(tmp512); - } - if((FunctionName != null)) - { - tmp512.Append(", FunctionName: "); - FunctionName.ToString(tmp512); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp512.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp512); - } - if(__isset.runAsync) - { - tmp512.Append(", RunAsync: "); - RunAsync.ToString(tmp512); - } - if((OperationId != null) && __isset.operationId) - { - tmp512.Append(", OperationId: "); - OperationId.ToString(tmp512); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp512.Append(", SessionConf: "); - SessionConf.ToString(tmp512); - } - tmp512.Append(')'); - return tmp512.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs deleted file mode 100644 index 21fdead24f..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetFunctionsResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetFunctionsResp() - { - } - - public TGetFunctionsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetFunctionsResp DeepCopy() - { - var tmp514 = new TGetFunctionsResp(); - if((Status != null)) - { - tmp514.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp514.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp514.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp514.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp514.__isset.directResults = this.__isset.directResults; - return tmp514; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp515 = new TStruct("TGetFunctionsResp"); - await oprot.WriteStructBeginAsync(tmp515, cancellationToken); - var tmp516 = new TField(); - if((Status != null)) - { - tmp516.Name = "status"; - tmp516.Type = TType.Struct; - tmp516.ID = 1; - await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp516.Name = "operationHandle"; - tmp516.Type = TType.Struct; - tmp516.ID = 2; - await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp516.Name = "directResults"; - tmp516.Type = TType.Struct; - tmp516.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetFunctionsResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp517 = new StringBuilder("TGetFunctionsResp("); - if((Status != null)) - { - tmp517.Append(", Status: "); - Status.ToString(tmp517); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp517.Append(", OperationHandle: "); - OperationHandle.ToString(tmp517); - } - if((DirectResults != null) && __isset.directResults) - { - tmp517.Append(", DirectResults: "); - DirectResults.ToString(tmp517); - } - tmp517.Append(')'); - return tmp517.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs deleted file mode 100644 index 8efeb5f5ff..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs +++ /dev/null @@ -1,202 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetInfoReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType InfoType { get; set; } - - public TGetInfoReq() - { - } - - public TGetInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType infoType) : this() - { - this.SessionHandle = sessionHandle; - this.InfoType = infoType; - } - - public TGetInfoReq DeepCopy() - { - var tmp347 = new TGetInfoReq(); - if((SessionHandle != null)) - { - tmp347.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - tmp347.InfoType = this.InfoType; - return tmp347; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_infoType = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - InfoType = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType)await iprot.ReadI32Async(cancellationToken); - isset_infoType = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_infoType) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp348 = new TStruct("TGetInfoReq"); - await oprot.WriteStructBeginAsync(tmp348, cancellationToken); - var tmp349 = new TField(); - if((SessionHandle != null)) - { - tmp349.Name = "sessionHandle"; - tmp349.Type = TType.Struct; - tmp349.ID = 1; - await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp349.Name = "infoType"; - tmp349.Type = TType.I32; - tmp349.ID = 2; - await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); - await oprot.WriteI32Async((int)InfoType, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetInfoReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && global::System.Object.Equals(InfoType, other.InfoType); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - hashcode = (hashcode * 397) + InfoType.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp350 = new StringBuilder("TGetInfoReq("); - if((SessionHandle != null)) - { - tmp350.Append(", SessionHandle: "); - SessionHandle.ToString(tmp350); - } - tmp350.Append(", InfoType: "); - InfoType.ToString(tmp350); - tmp350.Append(')'); - return tmp350.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs deleted file mode 100644 index dc3d5e8cb3..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs +++ /dev/null @@ -1,211 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetInfoResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue InfoValue { get; set; } - - public TGetInfoResp() - { - } - - public TGetInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue infoValue) : this() - { - this.Status = status; - this.InfoValue = infoValue; - } - - public TGetInfoResp DeepCopy() - { - var tmp352 = new TGetInfoResp(); - if((Status != null)) - { - tmp352.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((InfoValue != null)) - { - tmp352.InfoValue = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue)this.InfoValue.DeepCopy(); - } - return tmp352; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - bool isset_infoValue = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - InfoValue = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue(); - await InfoValue.ReadAsync(iprot, cancellationToken); - isset_infoValue = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_infoValue) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp353 = new TStruct("TGetInfoResp"); - await oprot.WriteStructBeginAsync(tmp353, cancellationToken); - var tmp354 = new TField(); - if((Status != null)) - { - tmp354.Name = "status"; - tmp354.Type = TType.Struct; - tmp354.ID = 1; - await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((InfoValue != null)) - { - tmp354.Name = "infoValue"; - tmp354.Type = TType.Struct; - tmp354.ID = 2; - await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); - await InfoValue.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetInfoResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && global::System.Object.Equals(InfoValue, other.InfoValue); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((InfoValue != null)) - { - hashcode = (hashcode * 397) + InfoValue.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp355 = new StringBuilder("TGetInfoResp("); - if((Status != null)) - { - tmp355.Append(", Status: "); - Status.ToString(tmp355); - } - if((InfoValue != null)) - { - tmp355.Append(", InfoValue: "); - InfoValue.ToString(tmp355); - } - tmp355.Append(')'); - return tmp355.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs deleted file mode 100644 index 59b5ae27fa..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs +++ /dev/null @@ -1,68 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TGetInfoType - { - CLI_MAX_DRIVER_CONNECTIONS = 0, - CLI_MAX_CONCURRENT_ACTIVITIES = 1, - CLI_DATA_SOURCE_NAME = 2, - CLI_FETCH_DIRECTION = 8, - CLI_SERVER_NAME = 13, - CLI_SEARCH_PATTERN_ESCAPE = 14, - CLI_DBMS_NAME = 17, - CLI_DBMS_VER = 18, - CLI_ACCESSIBLE_TABLES = 19, - CLI_ACCESSIBLE_PROCEDURES = 20, - CLI_CURSOR_COMMIT_BEHAVIOR = 23, - CLI_DATA_SOURCE_READ_ONLY = 25, - CLI_DEFAULT_TXN_ISOLATION = 26, - CLI_IDENTIFIER_CASE = 28, - CLI_IDENTIFIER_QUOTE_CHAR = 29, - CLI_MAX_COLUMN_NAME_LEN = 30, - CLI_MAX_CURSOR_NAME_LEN = 31, - CLI_MAX_SCHEMA_NAME_LEN = 32, - CLI_MAX_CATALOG_NAME_LEN = 34, - CLI_MAX_TABLE_NAME_LEN = 35, - CLI_SCROLL_CONCURRENCY = 43, - CLI_TXN_CAPABLE = 46, - CLI_USER_NAME = 47, - CLI_TXN_ISOLATION_OPTION = 72, - CLI_INTEGRITY = 73, - CLI_GETDATA_EXTENSIONS = 81, - CLI_NULL_COLLATION = 85, - CLI_ALTER_TABLE = 86, - CLI_ORDER_BY_COLUMNS_IN_SELECT = 90, - CLI_SPECIAL_CHARACTERS = 94, - CLI_MAX_COLUMNS_IN_GROUP_BY = 97, - CLI_MAX_COLUMNS_IN_INDEX = 98, - CLI_MAX_COLUMNS_IN_ORDER_BY = 99, - CLI_MAX_COLUMNS_IN_SELECT = 100, - CLI_MAX_COLUMNS_IN_TABLE = 101, - CLI_MAX_INDEX_SIZE = 102, - CLI_MAX_ROW_SIZE = 104, - CLI_MAX_STATEMENT_LEN = 105, - CLI_MAX_TABLES_IN_SELECT = 106, - CLI_MAX_USER_NAME_LEN = 107, - CLI_OJ_CAPABILITIES = 115, - CLI_XOPEN_CLI_YEAR = 10000, - CLI_CURSOR_SENSITIVITY = 10001, - CLI_DESCRIBE_PARAMETER = 10002, - CLI_CATALOG_NAME = 10003, - CLI_COLLATION_SEQ = 10004, - CLI_MAX_IDENTIFIER_LEN = 10005, - CLI_ODBC_KEYWORDS = 10006, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs deleted file mode 100644 index 16d80393da..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs +++ /dev/null @@ -1,428 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetInfoValue : TBase - { - private string _stringValue; - private short _smallIntValue; - private int _integerBitmask; - private int _integerFlag; - private int _binaryValue; - private long _lenValue; - - public string StringValue - { - get - { - return _stringValue; - } - set - { - __isset.stringValue = true; - this._stringValue = value; - } - } - - public short SmallIntValue - { - get - { - return _smallIntValue; - } - set - { - __isset.smallIntValue = true; - this._smallIntValue = value; - } - } - - public int IntegerBitmask - { - get - { - return _integerBitmask; - } - set - { - __isset.integerBitmask = true; - this._integerBitmask = value; - } - } - - public int IntegerFlag - { - get - { - return _integerFlag; - } - set - { - __isset.integerFlag = true; - this._integerFlag = value; - } - } - - public int BinaryValue - { - get - { - return _binaryValue; - } - set - { - __isset.binaryValue = true; - this._binaryValue = value; - } - } - - public long LenValue - { - get - { - return _lenValue; - } - set - { - __isset.lenValue = true; - this._lenValue = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool stringValue; - public bool smallIntValue; - public bool integerBitmask; - public bool integerFlag; - public bool binaryValue; - public bool lenValue; - } - - public TGetInfoValue() - { - } - - public TGetInfoValue DeepCopy() - { - var tmp342 = new TGetInfoValue(); - if((StringValue != null) && __isset.stringValue) - { - tmp342.StringValue = this.StringValue; - } - tmp342.__isset.stringValue = this.__isset.stringValue; - if(__isset.smallIntValue) - { - tmp342.SmallIntValue = this.SmallIntValue; - } - tmp342.__isset.smallIntValue = this.__isset.smallIntValue; - if(__isset.integerBitmask) - { - tmp342.IntegerBitmask = this.IntegerBitmask; - } - tmp342.__isset.integerBitmask = this.__isset.integerBitmask; - if(__isset.integerFlag) - { - tmp342.IntegerFlag = this.IntegerFlag; - } - tmp342.__isset.integerFlag = this.__isset.integerFlag; - if(__isset.binaryValue) - { - tmp342.BinaryValue = this.BinaryValue; - } - tmp342.__isset.binaryValue = this.__isset.binaryValue; - if(__isset.lenValue) - { - tmp342.LenValue = this.LenValue; - } - tmp342.__isset.lenValue = this.__isset.lenValue; - return tmp342; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - StringValue = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I16) - { - SmallIntValue = await iprot.ReadI16Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.I32) - { - IntegerBitmask = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I32) - { - IntegerFlag = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.I32) - { - BinaryValue = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.I64) - { - LenValue = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp343 = new TStruct("TGetInfoValue"); - await oprot.WriteStructBeginAsync(tmp343, cancellationToken); - var tmp344 = new TField(); - if((StringValue != null) && __isset.stringValue) - { - tmp344.Name = "stringValue"; - tmp344.Type = TType.String; - tmp344.ID = 1; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteStringAsync(StringValue, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.smallIntValue) - { - tmp344.Name = "smallIntValue"; - tmp344.Type = TType.I16; - tmp344.ID = 2; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteI16Async(SmallIntValue, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.integerBitmask) - { - tmp344.Name = "integerBitmask"; - tmp344.Type = TType.I32; - tmp344.ID = 3; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteI32Async(IntegerBitmask, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.integerFlag) - { - tmp344.Name = "integerFlag"; - tmp344.Type = TType.I32; - tmp344.ID = 4; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteI32Async(IntegerFlag, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.binaryValue) - { - tmp344.Name = "binaryValue"; - tmp344.Type = TType.I32; - tmp344.ID = 5; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteI32Async(BinaryValue, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.lenValue) - { - tmp344.Name = "lenValue"; - tmp344.Type = TType.I64; - tmp344.ID = 6; - await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); - await oprot.WriteI64Async(LenValue, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetInfoValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))) - && ((__isset.smallIntValue == other.__isset.smallIntValue) && ((!__isset.smallIntValue) || (global::System.Object.Equals(SmallIntValue, other.SmallIntValue)))) - && ((__isset.integerBitmask == other.__isset.integerBitmask) && ((!__isset.integerBitmask) || (global::System.Object.Equals(IntegerBitmask, other.IntegerBitmask)))) - && ((__isset.integerFlag == other.__isset.integerFlag) && ((!__isset.integerFlag) || (global::System.Object.Equals(IntegerFlag, other.IntegerFlag)))) - && ((__isset.binaryValue == other.__isset.binaryValue) && ((!__isset.binaryValue) || (global::System.Object.Equals(BinaryValue, other.BinaryValue)))) - && ((__isset.lenValue == other.__isset.lenValue) && ((!__isset.lenValue) || (global::System.Object.Equals(LenValue, other.LenValue)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((StringValue != null) && __isset.stringValue) - { - hashcode = (hashcode * 397) + StringValue.GetHashCode(); - } - if(__isset.smallIntValue) - { - hashcode = (hashcode * 397) + SmallIntValue.GetHashCode(); - } - if(__isset.integerBitmask) - { - hashcode = (hashcode * 397) + IntegerBitmask.GetHashCode(); - } - if(__isset.integerFlag) - { - hashcode = (hashcode * 397) + IntegerFlag.GetHashCode(); - } - if(__isset.binaryValue) - { - hashcode = (hashcode * 397) + BinaryValue.GetHashCode(); - } - if(__isset.lenValue) - { - hashcode = (hashcode * 397) + LenValue.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp345 = new StringBuilder("TGetInfoValue("); - int tmp346 = 0; - if((StringValue != null) && __isset.stringValue) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("StringValue: "); - StringValue.ToString(tmp345); - } - if(__isset.smallIntValue) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("SmallIntValue: "); - SmallIntValue.ToString(tmp345); - } - if(__isset.integerBitmask) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("IntegerBitmask: "); - IntegerBitmask.ToString(tmp345); - } - if(__isset.integerFlag) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("IntegerFlag: "); - IntegerFlag.ToString(tmp345); - } - if(__isset.binaryValue) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("BinaryValue: "); - BinaryValue.ToString(tmp345); - } - if(__isset.lenValue) - { - if(0 < tmp346++) { tmp345.Append(", "); } - tmp345.Append("LenValue: "); - LenValue.ToString(tmp345); - } - tmp345.Append(')'); - return tmp345.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs deleted file mode 100644 index edb8bb89e0..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs +++ /dev/null @@ -1,223 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetOperationStatusReq : TBase - { - private bool _getProgressUpdate; - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public bool GetProgressUpdate - { - get - { - return _getProgressUpdate; - } - set - { - __isset.getProgressUpdate = true; - this._getProgressUpdate = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool getProgressUpdate; - } - - public TGetOperationStatusReq() - { - } - - public TGetOperationStatusReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.OperationHandle = operationHandle; - } - - public TGetOperationStatusReq DeepCopy() - { - var tmp539 = new TGetOperationStatusReq(); - if((OperationHandle != null)) - { - tmp539.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - if(__isset.getProgressUpdate) - { - tmp539.GetProgressUpdate = this.GetProgressUpdate; - } - tmp539.__isset.getProgressUpdate = this.__isset.getProgressUpdate; - return tmp539; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Bool) - { - GetProgressUpdate = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp540 = new TStruct("TGetOperationStatusReq"); - await oprot.WriteStructBeginAsync(tmp540, cancellationToken); - var tmp541 = new TField(); - if((OperationHandle != null)) - { - tmp541.Name = "operationHandle"; - tmp541.Type = TType.Struct; - tmp541.ID = 1; - await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.getProgressUpdate) - { - tmp541.Name = "getProgressUpdate"; - tmp541.Type = TType.Bool; - tmp541.ID = 2; - await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); - await oprot.WriteBoolAsync(GetProgressUpdate, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetOperationStatusReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle) - && ((__isset.getProgressUpdate == other.__isset.getProgressUpdate) && ((!__isset.getProgressUpdate) || (global::System.Object.Equals(GetProgressUpdate, other.GetProgressUpdate)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if(__isset.getProgressUpdate) - { - hashcode = (hashcode * 397) + GetProgressUpdate.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp542 = new StringBuilder("TGetOperationStatusReq("); - if((OperationHandle != null)) - { - tmp542.Append(", OperationHandle: "); - OperationHandle.ToString(tmp542); - } - if(__isset.getProgressUpdate) - { - tmp542.Append(", GetProgressUpdate: "); - GetProgressUpdate.ToString(tmp542); - } - tmp542.Append(')'); - return tmp542.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs deleted file mode 100644 index dd024f750b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs +++ /dev/null @@ -1,963 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetOperationStatusResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationState _operationState; - private string _sqlState; - private int _errorCode; - private string _errorMessage; - private string _taskStatus; - private long _operationStarted; - private long _operationCompleted; - private bool _hasResultSet; - private global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp _progressUpdateResponse; - private long _numModifiedRows; - private string _displayMessage; - private string _diagnosticInfo; - private string _responseValidation; - private int _idempotencyType; - private long _statementTimeout; - private int _statementTimeoutLevel; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TOperationState OperationState - { - get - { - return _operationState; - } - set - { - __isset.operationState = true; - this._operationState = value; - } - } - - public string SqlState - { - get - { - return _sqlState; - } - set - { - __isset.sqlState = true; - this._sqlState = value; - } - } - - public int ErrorCode - { - get - { - return _errorCode; - } - set - { - __isset.errorCode = true; - this._errorCode = value; - } - } - - public string ErrorMessage - { - get - { - return _errorMessage; - } - set - { - __isset.errorMessage = true; - this._errorMessage = value; - } - } - - public string TaskStatus - { - get - { - return _taskStatus; - } - set - { - __isset.taskStatus = true; - this._taskStatus = value; - } - } - - public long OperationStarted - { - get - { - return _operationStarted; - } - set - { - __isset.operationStarted = true; - this._operationStarted = value; - } - } - - public long OperationCompleted - { - get - { - return _operationCompleted; - } - set - { - __isset.operationCompleted = true; - this._operationCompleted = value; - } - } - - public bool HasResultSet - { - get - { - return _hasResultSet; - } - set - { - __isset.hasResultSet = true; - this._hasResultSet = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp ProgressUpdateResponse - { - get - { - return _progressUpdateResponse; - } - set - { - __isset.progressUpdateResponse = true; - this._progressUpdateResponse = value; - } - } - - public long NumModifiedRows - { - get - { - return _numModifiedRows; - } - set - { - __isset.numModifiedRows = true; - this._numModifiedRows = value; - } - } - - public string DisplayMessage - { - get - { - return _displayMessage; - } - set - { - __isset.displayMessage = true; - this._displayMessage = value; - } - } - - public string DiagnosticInfo - { - get - { - return _diagnosticInfo; - } - set - { - __isset.diagnosticInfo = true; - this._diagnosticInfo = value; - } - } - - public string ResponseValidation - { - get - { - return _responseValidation; - } - set - { - __isset.responseValidation = true; - this._responseValidation = value; - } - } - - public int IdempotencyType - { - get - { - return _idempotencyType; - } - set - { - __isset.idempotencyType = true; - this._idempotencyType = value; - } - } - - public long StatementTimeout - { - get - { - return _statementTimeout; - } - set - { - __isset.statementTimeout = true; - this._statementTimeout = value; - } - } - - public int StatementTimeoutLevel - { - get - { - return _statementTimeoutLevel; - } - set - { - __isset.statementTimeoutLevel = true; - this._statementTimeoutLevel = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationState; - public bool sqlState; - public bool errorCode; - public bool errorMessage; - public bool taskStatus; - public bool operationStarted; - public bool operationCompleted; - public bool hasResultSet; - public bool progressUpdateResponse; - public bool numModifiedRows; - public bool displayMessage; - public bool diagnosticInfo; - public bool responseValidation; - public bool idempotencyType; - public bool statementTimeout; - public bool statementTimeoutLevel; - } - - public TGetOperationStatusResp() - { - } - - public TGetOperationStatusResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetOperationStatusResp DeepCopy() - { - var tmp544 = new TGetOperationStatusResp(); - if((Status != null)) - { - tmp544.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if(__isset.operationState) - { - tmp544.OperationState = this.OperationState; - } - tmp544.__isset.operationState = this.__isset.operationState; - if((SqlState != null) && __isset.sqlState) - { - tmp544.SqlState = this.SqlState; - } - tmp544.__isset.sqlState = this.__isset.sqlState; - if(__isset.errorCode) - { - tmp544.ErrorCode = this.ErrorCode; - } - tmp544.__isset.errorCode = this.__isset.errorCode; - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp544.ErrorMessage = this.ErrorMessage; - } - tmp544.__isset.errorMessage = this.__isset.errorMessage; - if((TaskStatus != null) && __isset.taskStatus) - { - tmp544.TaskStatus = this.TaskStatus; - } - tmp544.__isset.taskStatus = this.__isset.taskStatus; - if(__isset.operationStarted) - { - tmp544.OperationStarted = this.OperationStarted; - } - tmp544.__isset.operationStarted = this.__isset.operationStarted; - if(__isset.operationCompleted) - { - tmp544.OperationCompleted = this.OperationCompleted; - } - tmp544.__isset.operationCompleted = this.__isset.operationCompleted; - if(__isset.hasResultSet) - { - tmp544.HasResultSet = this.HasResultSet; - } - tmp544.__isset.hasResultSet = this.__isset.hasResultSet; - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) - { - tmp544.ProgressUpdateResponse = (global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp)this.ProgressUpdateResponse.DeepCopy(); - } - tmp544.__isset.progressUpdateResponse = this.__isset.progressUpdateResponse; - if(__isset.numModifiedRows) - { - tmp544.NumModifiedRows = this.NumModifiedRows; - } - tmp544.__isset.numModifiedRows = this.__isset.numModifiedRows; - if((DisplayMessage != null) && __isset.displayMessage) - { - tmp544.DisplayMessage = this.DisplayMessage; - } - tmp544.__isset.displayMessage = this.__isset.displayMessage; - if((DiagnosticInfo != null) && __isset.diagnosticInfo) - { - tmp544.DiagnosticInfo = this.DiagnosticInfo; - } - tmp544.__isset.diagnosticInfo = this.__isset.diagnosticInfo; - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp544.ResponseValidation = this.ResponseValidation; - } - tmp544.__isset.responseValidation = this.__isset.responseValidation; - if(__isset.idempotencyType) - { - tmp544.IdempotencyType = this.IdempotencyType; - } - tmp544.__isset.idempotencyType = this.__isset.idempotencyType; - if(__isset.statementTimeout) - { - tmp544.StatementTimeout = this.StatementTimeout; - } - tmp544.__isset.statementTimeout = this.__isset.statementTimeout; - if(__isset.statementTimeoutLevel) - { - tmp544.StatementTimeoutLevel = this.StatementTimeoutLevel; - } - tmp544.__isset.statementTimeoutLevel = this.__isset.statementTimeoutLevel; - return tmp544; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - OperationState = (global::Apache.Hive.Service.Rpc.Thrift.TOperationState)await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SqlState = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I32) - { - ErrorCode = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - ErrorMessage = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.String) - { - TaskStatus = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 7: - if (field.Type == TType.I64) - { - OperationStarted = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 8: - if (field.Type == TType.I64) - { - OperationCompleted = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 9: - if (field.Type == TType.Bool) - { - HasResultSet = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 10: - if (field.Type == TType.Struct) - { - ProgressUpdateResponse = new global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp(); - await ProgressUpdateResponse.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 11: - if (field.Type == TType.I64) - { - NumModifiedRows = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.String) - { - DisplayMessage = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.String) - { - DiagnosticInfo = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.String) - { - ResponseValidation = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.I32) - { - IdempotencyType = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3331: - if (field.Type == TType.I64) - { - StatementTimeout = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3332: - if (field.Type == TType.I32) - { - StatementTimeoutLevel = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp545 = new TStruct("TGetOperationStatusResp"); - await oprot.WriteStructBeginAsync(tmp545, cancellationToken); - var tmp546 = new TField(); - if((Status != null)) - { - tmp546.Name = "status"; - tmp546.Type = TType.Struct; - tmp546.ID = 1; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.operationState) - { - tmp546.Name = "operationState"; - tmp546.Type = TType.I32; - tmp546.ID = 2; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI32Async((int)OperationState, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SqlState != null) && __isset.sqlState) - { - tmp546.Name = "sqlState"; - tmp546.Type = TType.String; - tmp546.ID = 3; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(SqlState, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.errorCode) - { - tmp546.Name = "errorCode"; - tmp546.Type = TType.I32; - tmp546.ID = 4; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI32Async(ErrorCode, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp546.Name = "errorMessage"; - tmp546.Type = TType.String; - tmp546.ID = 5; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(ErrorMessage, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TaskStatus != null) && __isset.taskStatus) - { - tmp546.Name = "taskStatus"; - tmp546.Type = TType.String; - tmp546.ID = 6; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(TaskStatus, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.operationStarted) - { - tmp546.Name = "operationStarted"; - tmp546.Type = TType.I64; - tmp546.ID = 7; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI64Async(OperationStarted, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.operationCompleted) - { - tmp546.Name = "operationCompleted"; - tmp546.Type = TType.I64; - tmp546.ID = 8; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI64Async(OperationCompleted, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.hasResultSet) - { - tmp546.Name = "hasResultSet"; - tmp546.Type = TType.Bool; - tmp546.ID = 9; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteBoolAsync(HasResultSet, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) - { - tmp546.Name = "progressUpdateResponse"; - tmp546.Type = TType.Struct; - tmp546.ID = 10; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await ProgressUpdateResponse.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.numModifiedRows) - { - tmp546.Name = "numModifiedRows"; - tmp546.Type = TType.I64; - tmp546.ID = 11; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI64Async(NumModifiedRows, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DisplayMessage != null) && __isset.displayMessage) - { - tmp546.Name = "displayMessage"; - tmp546.Type = TType.String; - tmp546.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(DisplayMessage, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) - { - tmp546.Name = "diagnosticInfo"; - tmp546.Type = TType.String; - tmp546.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(DiagnosticInfo, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp546.Name = "responseValidation"; - tmp546.Type = TType.String; - tmp546.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteStringAsync(ResponseValidation, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.idempotencyType) - { - tmp546.Name = "idempotencyType"; - tmp546.Type = TType.I32; - tmp546.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI32Async(IdempotencyType, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.statementTimeout) - { - tmp546.Name = "statementTimeout"; - tmp546.Type = TType.I64; - tmp546.ID = 3331; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI64Async(StatementTimeout, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.statementTimeoutLevel) - { - tmp546.Name = "statementTimeoutLevel"; - tmp546.Type = TType.I32; - tmp546.ID = 3332; - await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); - await oprot.WriteI32Async(StatementTimeoutLevel, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetOperationStatusResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationState == other.__isset.operationState) && ((!__isset.operationState) || (global::System.Object.Equals(OperationState, other.OperationState)))) - && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) - && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) - && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))) - && ((__isset.taskStatus == other.__isset.taskStatus) && ((!__isset.taskStatus) || (global::System.Object.Equals(TaskStatus, other.TaskStatus)))) - && ((__isset.operationStarted == other.__isset.operationStarted) && ((!__isset.operationStarted) || (global::System.Object.Equals(OperationStarted, other.OperationStarted)))) - && ((__isset.operationCompleted == other.__isset.operationCompleted) && ((!__isset.operationCompleted) || (global::System.Object.Equals(OperationCompleted, other.OperationCompleted)))) - && ((__isset.hasResultSet == other.__isset.hasResultSet) && ((!__isset.hasResultSet) || (global::System.Object.Equals(HasResultSet, other.HasResultSet)))) - && ((__isset.progressUpdateResponse == other.__isset.progressUpdateResponse) && ((!__isset.progressUpdateResponse) || (global::System.Object.Equals(ProgressUpdateResponse, other.ProgressUpdateResponse)))) - && ((__isset.numModifiedRows == other.__isset.numModifiedRows) && ((!__isset.numModifiedRows) || (global::System.Object.Equals(NumModifiedRows, other.NumModifiedRows)))) - && ((__isset.displayMessage == other.__isset.displayMessage) && ((!__isset.displayMessage) || (global::System.Object.Equals(DisplayMessage, other.DisplayMessage)))) - && ((__isset.diagnosticInfo == other.__isset.diagnosticInfo) && ((!__isset.diagnosticInfo) || (global::System.Object.Equals(DiagnosticInfo, other.DiagnosticInfo)))) - && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))) - && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))) - && ((__isset.statementTimeout == other.__isset.statementTimeout) && ((!__isset.statementTimeout) || (global::System.Object.Equals(StatementTimeout, other.StatementTimeout)))) - && ((__isset.statementTimeoutLevel == other.__isset.statementTimeoutLevel) && ((!__isset.statementTimeoutLevel) || (global::System.Object.Equals(StatementTimeoutLevel, other.StatementTimeoutLevel)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if(__isset.operationState) - { - hashcode = (hashcode * 397) + OperationState.GetHashCode(); - } - if((SqlState != null) && __isset.sqlState) - { - hashcode = (hashcode * 397) + SqlState.GetHashCode(); - } - if(__isset.errorCode) - { - hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); - } - if((TaskStatus != null) && __isset.taskStatus) - { - hashcode = (hashcode * 397) + TaskStatus.GetHashCode(); - } - if(__isset.operationStarted) - { - hashcode = (hashcode * 397) + OperationStarted.GetHashCode(); - } - if(__isset.operationCompleted) - { - hashcode = (hashcode * 397) + OperationCompleted.GetHashCode(); - } - if(__isset.hasResultSet) - { - hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); - } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) - { - hashcode = (hashcode * 397) + ProgressUpdateResponse.GetHashCode(); - } - if(__isset.numModifiedRows) - { - hashcode = (hashcode * 397) + NumModifiedRows.GetHashCode(); - } - if((DisplayMessage != null) && __isset.displayMessage) - { - hashcode = (hashcode * 397) + DisplayMessage.GetHashCode(); - } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) - { - hashcode = (hashcode * 397) + DiagnosticInfo.GetHashCode(); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); - } - if(__isset.idempotencyType) - { - hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); - } - if(__isset.statementTimeout) - { - hashcode = (hashcode * 397) + StatementTimeout.GetHashCode(); - } - if(__isset.statementTimeoutLevel) - { - hashcode = (hashcode * 397) + StatementTimeoutLevel.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp547 = new StringBuilder("TGetOperationStatusResp("); - if((Status != null)) - { - tmp547.Append(", Status: "); - Status.ToString(tmp547); - } - if(__isset.operationState) - { - tmp547.Append(", OperationState: "); - OperationState.ToString(tmp547); - } - if((SqlState != null) && __isset.sqlState) - { - tmp547.Append(", SqlState: "); - SqlState.ToString(tmp547); - } - if(__isset.errorCode) - { - tmp547.Append(", ErrorCode: "); - ErrorCode.ToString(tmp547); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp547.Append(", ErrorMessage: "); - ErrorMessage.ToString(tmp547); - } - if((TaskStatus != null) && __isset.taskStatus) - { - tmp547.Append(", TaskStatus: "); - TaskStatus.ToString(tmp547); - } - if(__isset.operationStarted) - { - tmp547.Append(", OperationStarted: "); - OperationStarted.ToString(tmp547); - } - if(__isset.operationCompleted) - { - tmp547.Append(", OperationCompleted: "); - OperationCompleted.ToString(tmp547); - } - if(__isset.hasResultSet) - { - tmp547.Append(", HasResultSet: "); - HasResultSet.ToString(tmp547); - } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) - { - tmp547.Append(", ProgressUpdateResponse: "); - ProgressUpdateResponse.ToString(tmp547); - } - if(__isset.numModifiedRows) - { - tmp547.Append(", NumModifiedRows: "); - NumModifiedRows.ToString(tmp547); - } - if((DisplayMessage != null) && __isset.displayMessage) - { - tmp547.Append(", DisplayMessage: "); - DisplayMessage.ToString(tmp547); - } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) - { - tmp547.Append(", DiagnosticInfo: "); - DiagnosticInfo.ToString(tmp547); - } - if((ResponseValidation != null) && __isset.responseValidation) - { - tmp547.Append(", ResponseValidation: "); - ResponseValidation.ToString(tmp547); - } - if(__isset.idempotencyType) - { - tmp547.Append(", IdempotencyType: "); - IdempotencyType.ToString(tmp547); - } - if(__isset.statementTimeout) - { - tmp547.Append(", StatementTimeout: "); - StatementTimeout.ToString(tmp547); - } - if(__isset.statementTimeoutLevel) - { - tmp547.Append(", StatementTimeoutLevel: "); - StatementTimeoutLevel.ToString(tmp547); - } - tmp547.Append(')'); - return tmp547.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs deleted file mode 100644 index fefa1fede2..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs +++ /dev/null @@ -1,520 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetPrimaryKeysReq : TBase - { - private string _catalogName; - private string _schemaName; - private string _tableName; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - public string TableName - { - get - { - return _tableName; - } - set - { - __isset.tableName = true; - this._tableName = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - public bool tableName; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetPrimaryKeysReq() - { - } - - public TGetPrimaryKeysReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetPrimaryKeysReq DeepCopy() - { - var tmp519 = new TGetPrimaryKeysReq(); - if((SessionHandle != null)) - { - tmp519.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp519.CatalogName = this.CatalogName; - } - tmp519.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp519.SchemaName = this.SchemaName; - } - tmp519.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) - { - tmp519.TableName = this.TableName; - } - tmp519.__isset.tableName = this.__isset.tableName; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp519.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp519.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp519.RunAsync = this.RunAsync; - } - tmp519.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp519.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp519.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp519.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp519.__isset.sessionConf = this.__isset.sessionConf; - return tmp519; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - TableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp520 = new TStruct("TGetPrimaryKeysReq"); - await oprot.WriteStructBeginAsync(tmp520, cancellationToken); - var tmp521 = new TField(); - if((SessionHandle != null)) - { - tmp521.Name = "sessionHandle"; - tmp521.Type = TType.Struct; - tmp521.ID = 1; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp521.Name = "catalogName"; - tmp521.Type = TType.String; - tmp521.ID = 2; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp521.Name = "schemaName"; - tmp521.Type = TType.String; - tmp521.ID = 3; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableName != null) && __isset.tableName) - { - tmp521.Name = "tableName"; - tmp521.Type = TType.String; - tmp521.ID = 4; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await oprot.WriteStringAsync(TableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp521.Name = "getDirectResults"; - tmp521.Type = TType.Struct; - tmp521.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp521.Name = "runAsync"; - tmp521.Type = TType.Bool; - tmp521.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp521.Name = "operationId"; - tmp521.Type = TType.Struct; - tmp521.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp521.Name = "sessionConf"; - tmp521.Type = TType.Struct; - tmp521.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetPrimaryKeysReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) - && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - if((TableName != null) && __isset.tableName) - { - hashcode = (hashcode * 397) + TableName.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp522 = new StringBuilder("TGetPrimaryKeysReq("); - if((SessionHandle != null)) - { - tmp522.Append(", SessionHandle: "); - SessionHandle.ToString(tmp522); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp522.Append(", CatalogName: "); - CatalogName.ToString(tmp522); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp522.Append(", SchemaName: "); - SchemaName.ToString(tmp522); - } - if((TableName != null) && __isset.tableName) - { - tmp522.Append(", TableName: "); - TableName.ToString(tmp522); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp522.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp522); - } - if(__isset.runAsync) - { - tmp522.Append(", RunAsync: "); - RunAsync.ToString(tmp522); - } - if((OperationId != null) && __isset.operationId) - { - tmp522.Append(", OperationId: "); - OperationId.ToString(tmp522); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp522.Append(", SessionConf: "); - SessionConf.ToString(tmp522); - } - tmp522.Append(')'); - return tmp522.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs deleted file mode 100644 index 7071e690e6..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetPrimaryKeysResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetPrimaryKeysResp() - { - } - - public TGetPrimaryKeysResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetPrimaryKeysResp DeepCopy() - { - var tmp524 = new TGetPrimaryKeysResp(); - if((Status != null)) - { - tmp524.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp524.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp524.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp524.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp524.__isset.directResults = this.__isset.directResults; - return tmp524; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp525 = new TStruct("TGetPrimaryKeysResp"); - await oprot.WriteStructBeginAsync(tmp525, cancellationToken); - var tmp526 = new TField(); - if((Status != null)) - { - tmp526.Name = "status"; - tmp526.Type = TType.Struct; - tmp526.ID = 1; - await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp526.Name = "operationHandle"; - tmp526.Type = TType.Struct; - tmp526.ID = 2; - await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp526.Name = "directResults"; - tmp526.Type = TType.Struct; - tmp526.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetPrimaryKeysResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp527 = new StringBuilder("TGetPrimaryKeysResp("); - if((Status != null)) - { - tmp527.Append(", Status: "); - Status.ToString(tmp527); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp527.Append(", OperationHandle: "); - OperationHandle.ToString(tmp527); - } - if((DirectResults != null) && __isset.directResults) - { - tmp527.Append(", DirectResults: "); - DirectResults.ToString(tmp527); - } - tmp527.Append(')'); - return tmp527.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs deleted file mode 100644 index c11d9b5b07..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetQueryIdReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public TGetQueryIdReq() - { - } - - public TGetQueryIdReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.OperationHandle = operationHandle; - } - - public TGetQueryIdReq DeepCopy() - { - var tmp645 = new TGetQueryIdReq(); - if((OperationHandle != null)) - { - tmp645.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - return tmp645; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp646 = new TStruct("TGetQueryIdReq"); - await oprot.WriteStructBeginAsync(tmp646, cancellationToken); - var tmp647 = new TField(); - if((OperationHandle != null)) - { - tmp647.Name = "operationHandle"; - tmp647.Type = TType.Struct; - tmp647.ID = 1; - await oprot.WriteFieldBeginAsync(tmp647, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetQueryIdReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp648 = new StringBuilder("TGetQueryIdReq("); - if((OperationHandle != null)) - { - tmp648.Append(", OperationHandle: "); - OperationHandle.ToString(tmp648); - } - tmp648.Append(')'); - return tmp648.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs deleted file mode 100644 index d0144f3418..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs +++ /dev/null @@ -1,167 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetQueryIdResp : TBase - { - - public string QueryId { get; set; } - - public TGetQueryIdResp() - { - } - - public TGetQueryIdResp(string queryId) : this() - { - this.QueryId = queryId; - } - - public TGetQueryIdResp DeepCopy() - { - var tmp650 = new TGetQueryIdResp(); - if((QueryId != null)) - { - tmp650.QueryId = this.QueryId; - } - return tmp650; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_queryId = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - QueryId = await iprot.ReadStringAsync(cancellationToken); - isset_queryId = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_queryId) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp651 = new TStruct("TGetQueryIdResp"); - await oprot.WriteStructBeginAsync(tmp651, cancellationToken); - var tmp652 = new TField(); - if((QueryId != null)) - { - tmp652.Name = "queryId"; - tmp652.Type = TType.String; - tmp652.ID = 1; - await oprot.WriteFieldBeginAsync(tmp652, cancellationToken); - await oprot.WriteStringAsync(QueryId, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetQueryIdResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(QueryId, other.QueryId); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((QueryId != null)) - { - hashcode = (hashcode * 397) + QueryId.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp653 = new StringBuilder("TGetQueryIdResp("); - if((QueryId != null)) - { - tmp653.Append(", QueryId: "); - QueryId.ToString(tmp653); - } - tmp653.Append(')'); - return tmp653.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs deleted file mode 100644 index 375c3efb8a..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs +++ /dev/null @@ -1,223 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetResultSetMetadataReq : TBase - { - private bool _includeCloudResultFiles; - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public bool IncludeCloudResultFiles - { - get - { - return _includeCloudResultFiles; - } - set - { - __isset.includeCloudResultFiles = true; - this._includeCloudResultFiles = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool includeCloudResultFiles; - } - - public TGetResultSetMetadataReq() - { - } - - public TGetResultSetMetadataReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.OperationHandle = operationHandle; - } - - public TGetResultSetMetadataReq DeepCopy() - { - var tmp569 = new TGetResultSetMetadataReq(); - if((OperationHandle != null)) - { - tmp569.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - if(__isset.includeCloudResultFiles) - { - tmp569.IncludeCloudResultFiles = this.IncludeCloudResultFiles; - } - tmp569.__isset.includeCloudResultFiles = this.__isset.includeCloudResultFiles; - return tmp569; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Bool) - { - IncludeCloudResultFiles = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp570 = new TStruct("TGetResultSetMetadataReq"); - await oprot.WriteStructBeginAsync(tmp570, cancellationToken); - var tmp571 = new TField(); - if((OperationHandle != null)) - { - tmp571.Name = "operationHandle"; - tmp571.Type = TType.Struct; - tmp571.ID = 1; - await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.includeCloudResultFiles) - { - tmp571.Name = "includeCloudResultFiles"; - tmp571.Type = TType.Bool; - tmp571.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); - await oprot.WriteBoolAsync(IncludeCloudResultFiles, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetResultSetMetadataReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationHandle, other.OperationHandle) - && ((__isset.includeCloudResultFiles == other.__isset.includeCloudResultFiles) && ((!__isset.includeCloudResultFiles) || (global::System.Object.Equals(IncludeCloudResultFiles, other.IncludeCloudResultFiles)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if(__isset.includeCloudResultFiles) - { - hashcode = (hashcode * 397) + IncludeCloudResultFiles.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp572 = new StringBuilder("TGetResultSetMetadataReq("); - if((OperationHandle != null)) - { - tmp572.Append(", OperationHandle: "); - OperationHandle.ToString(tmp572); - } - if(__isset.includeCloudResultFiles) - { - tmp572.Append(", IncludeCloudResultFiles: "); - IncludeCloudResultFiles.ToString(tmp572); - } - tmp572.Append(')'); - return tmp572.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs deleted file mode 100644 index 9833c26834..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs +++ /dev/null @@ -1,779 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetResultSetMetadataResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TTableSchema _schema; - private int _resultFormat; - private bool _lz4Compressed; - private string _arrowSchema; - private int _cacheLookupResult; - private long _uncompressedBytes; - private long _compressedBytes; - private bool _isStagingOperation; - private int _reasonForNoCloudFetch; - private List _resultFiles; - private string _manifestFile; - private string _manifestFileFormat; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TTableSchema Schema - { - get - { - return _schema; - } - set - { - __isset.schema = true; - this._schema = value; - } - } - - public int ResultFormat - { - get - { - return _resultFormat; - } - set - { - __isset.resultFormat = true; - this._resultFormat = value; - } - } - - public bool Lz4Compressed - { - get - { - return _lz4Compressed; - } - set - { - __isset.lz4Compressed = true; - this._lz4Compressed = value; - } - } - - public string ArrowSchema - { - get - { - return _arrowSchema; - } - set - { - __isset.arrowSchema = true; - this._arrowSchema = value; - } - } - - public int CacheLookupResult - { - get - { - return _cacheLookupResult; - } - set - { - __isset.cacheLookupResult = true; - this._cacheLookupResult = value; - } - } - - public long UncompressedBytes - { - get - { - return _uncompressedBytes; - } - set - { - __isset.uncompressedBytes = true; - this._uncompressedBytes = value; - } - } - - public long CompressedBytes - { - get - { - return _compressedBytes; - } - set - { - __isset.compressedBytes = true; - this._compressedBytes = value; - } - } - - public bool IsStagingOperation - { - get - { - return _isStagingOperation; - } - set - { - __isset.isStagingOperation = true; - this._isStagingOperation = value; - } - } - - public int ReasonForNoCloudFetch - { - get - { - return _reasonForNoCloudFetch; - } - set - { - __isset.reasonForNoCloudFetch = true; - this._reasonForNoCloudFetch = value; - } - } - - public List ResultFiles - { - get - { - return _resultFiles; - } - set - { - __isset.resultFiles = true; - this._resultFiles = value; - } - } - - public string ManifestFile - { - get - { - return _manifestFile; - } - set - { - __isset.manifestFile = true; - this._manifestFile = value; - } - } - - public string ManifestFileFormat - { - get - { - return _manifestFileFormat; - } - set - { - __isset.manifestFileFormat = true; - this._manifestFileFormat = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool schema; - public bool resultFormat; - public bool lz4Compressed; - public bool arrowSchema; - public bool cacheLookupResult; - public bool uncompressedBytes; - public bool compressedBytes; - public bool isStagingOperation; - public bool reasonForNoCloudFetch; - public bool resultFiles; - public bool manifestFile; - public bool manifestFileFormat; - } - - public TGetResultSetMetadataResp() - { - } - - public TGetResultSetMetadataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetResultSetMetadataResp DeepCopy() - { - var tmp574 = new TGetResultSetMetadataResp(); - if((Status != null)) - { - tmp574.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((Schema != null) && __isset.schema) - { - tmp574.Schema = (global::Apache.Hive.Service.Rpc.Thrift.TTableSchema)this.Schema.DeepCopy(); - } - tmp574.__isset.schema = this.__isset.schema; - if(__isset.resultFormat) - { - tmp574.ResultFormat = this.ResultFormat; - } - tmp574.__isset.resultFormat = this.__isset.resultFormat; - if(__isset.lz4Compressed) - { - tmp574.Lz4Compressed = this.Lz4Compressed; - } - tmp574.__isset.lz4Compressed = this.__isset.lz4Compressed; - if((ArrowSchema != null) && __isset.arrowSchema) - { - tmp574.ArrowSchema = this.ArrowSchema; - } - tmp574.__isset.arrowSchema = this.__isset.arrowSchema; - if(__isset.cacheLookupResult) - { - tmp574.CacheLookupResult = this.CacheLookupResult; - } - tmp574.__isset.cacheLookupResult = this.__isset.cacheLookupResult; - if(__isset.uncompressedBytes) - { - tmp574.UncompressedBytes = this.UncompressedBytes; - } - tmp574.__isset.uncompressedBytes = this.__isset.uncompressedBytes; - if(__isset.compressedBytes) - { - tmp574.CompressedBytes = this.CompressedBytes; - } - tmp574.__isset.compressedBytes = this.__isset.compressedBytes; - if(__isset.isStagingOperation) - { - tmp574.IsStagingOperation = this.IsStagingOperation; - } - tmp574.__isset.isStagingOperation = this.__isset.isStagingOperation; - if(__isset.reasonForNoCloudFetch) - { - tmp574.ReasonForNoCloudFetch = this.ReasonForNoCloudFetch; - } - tmp574.__isset.reasonForNoCloudFetch = this.__isset.reasonForNoCloudFetch; - if((ResultFiles != null) && __isset.resultFiles) - { - tmp574.ResultFiles = this.ResultFiles.DeepCopy(); - } - tmp574.__isset.resultFiles = this.__isset.resultFiles; - if((ManifestFile != null) && __isset.manifestFile) - { - tmp574.ManifestFile = this.ManifestFile; - } - tmp574.__isset.manifestFile = this.__isset.manifestFile; - if((ManifestFileFormat != null) && __isset.manifestFileFormat) - { - tmp574.ManifestFileFormat = this.ManifestFileFormat; - } - tmp574.__isset.manifestFileFormat = this.__isset.manifestFileFormat; - return tmp574; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - Schema = new global::Apache.Hive.Service.Rpc.Thrift.TTableSchema(); - await Schema.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.I32) - { - ResultFormat = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - Lz4Compressed = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1283: - if (field.Type == TType.String) - { - ArrowSchema = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1284: - if (field.Type == TType.I32) - { - CacheLookupResult = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1285: - if (field.Type == TType.I64) - { - UncompressedBytes = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1286: - if (field.Type == TType.I64) - { - CompressedBytes = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1287: - if (field.Type == TType.Bool) - { - IsStagingOperation = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.I32) - { - ReasonForNoCloudFetch = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.List) - { - { - var _list575 = await iprot.ReadListBeginAsync(cancellationToken); - ResultFiles = new List(_list575.Count); - for(int _i576 = 0; _i576 < _list575.Count; ++_i576) - { - global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _elem577; - _elem577 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile(); - await _elem577.ReadAsync(iprot, cancellationToken); - ResultFiles.Add(_elem577); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3331: - if (field.Type == TType.String) - { - ManifestFile = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3332: - if (field.Type == TType.String) - { - ManifestFileFormat = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp578 = new TStruct("TGetResultSetMetadataResp"); - await oprot.WriteStructBeginAsync(tmp578, cancellationToken); - var tmp579 = new TField(); - if((Status != null)) - { - tmp579.Name = "status"; - tmp579.Type = TType.Struct; - tmp579.ID = 1; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Schema != null) && __isset.schema) - { - tmp579.Name = "schema"; - tmp579.Type = TType.Struct; - tmp579.ID = 2; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await Schema.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.resultFormat) - { - tmp579.Name = "resultFormat"; - tmp579.Type = TType.I32; - tmp579.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteI32Async(ResultFormat, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.lz4Compressed) - { - tmp579.Name = "lz4Compressed"; - tmp579.Type = TType.Bool; - tmp579.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteBoolAsync(Lz4Compressed, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ArrowSchema != null) && __isset.arrowSchema) - { - tmp579.Name = "arrowSchema"; - tmp579.Type = TType.String; - tmp579.ID = 1283; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteStringAsync(ArrowSchema, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.cacheLookupResult) - { - tmp579.Name = "cacheLookupResult"; - tmp579.Type = TType.I32; - tmp579.ID = 1284; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteI32Async(CacheLookupResult, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.uncompressedBytes) - { - tmp579.Name = "uncompressedBytes"; - tmp579.Type = TType.I64; - tmp579.ID = 1285; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteI64Async(UncompressedBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.compressedBytes) - { - tmp579.Name = "compressedBytes"; - tmp579.Type = TType.I64; - tmp579.ID = 1286; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteI64Async(CompressedBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.isStagingOperation) - { - tmp579.Name = "isStagingOperation"; - tmp579.Type = TType.Bool; - tmp579.ID = 1287; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteBoolAsync(IsStagingOperation, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.reasonForNoCloudFetch) - { - tmp579.Name = "reasonForNoCloudFetch"; - tmp579.Type = TType.I32; - tmp579.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteI32Async(ReasonForNoCloudFetch, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResultFiles != null) && __isset.resultFiles) - { - tmp579.Name = "resultFiles"; - tmp579.Type = TType.List; - tmp579.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultFiles.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _iter580 in ResultFiles) - { - await _iter580.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ManifestFile != null) && __isset.manifestFile) - { - tmp579.Name = "manifestFile"; - tmp579.Type = TType.String; - tmp579.ID = 3331; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteStringAsync(ManifestFile, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) - { - tmp579.Name = "manifestFileFormat"; - tmp579.Type = TType.String; - tmp579.ID = 3332; - await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); - await oprot.WriteStringAsync(ManifestFileFormat, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetResultSetMetadataResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.schema == other.__isset.schema) && ((!__isset.schema) || (global::System.Object.Equals(Schema, other.Schema)))) - && ((__isset.resultFormat == other.__isset.resultFormat) && ((!__isset.resultFormat) || (global::System.Object.Equals(ResultFormat, other.ResultFormat)))) - && ((__isset.lz4Compressed == other.__isset.lz4Compressed) && ((!__isset.lz4Compressed) || (global::System.Object.Equals(Lz4Compressed, other.Lz4Compressed)))) - && ((__isset.arrowSchema == other.__isset.arrowSchema) && ((!__isset.arrowSchema) || (global::System.Object.Equals(ArrowSchema, other.ArrowSchema)))) - && ((__isset.cacheLookupResult == other.__isset.cacheLookupResult) && ((!__isset.cacheLookupResult) || (global::System.Object.Equals(CacheLookupResult, other.CacheLookupResult)))) - && ((__isset.uncompressedBytes == other.__isset.uncompressedBytes) && ((!__isset.uncompressedBytes) || (global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes)))) - && ((__isset.compressedBytes == other.__isset.compressedBytes) && ((!__isset.compressedBytes) || (global::System.Object.Equals(CompressedBytes, other.CompressedBytes)))) - && ((__isset.isStagingOperation == other.__isset.isStagingOperation) && ((!__isset.isStagingOperation) || (global::System.Object.Equals(IsStagingOperation, other.IsStagingOperation)))) - && ((__isset.reasonForNoCloudFetch == other.__isset.reasonForNoCloudFetch) && ((!__isset.reasonForNoCloudFetch) || (global::System.Object.Equals(ReasonForNoCloudFetch, other.ReasonForNoCloudFetch)))) - && ((__isset.resultFiles == other.__isset.resultFiles) && ((!__isset.resultFiles) || (TCollections.Equals(ResultFiles, other.ResultFiles)))) - && ((__isset.manifestFile == other.__isset.manifestFile) && ((!__isset.manifestFile) || (global::System.Object.Equals(ManifestFile, other.ManifestFile)))) - && ((__isset.manifestFileFormat == other.__isset.manifestFileFormat) && ((!__isset.manifestFileFormat) || (global::System.Object.Equals(ManifestFileFormat, other.ManifestFileFormat)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((Schema != null) && __isset.schema) - { - hashcode = (hashcode * 397) + Schema.GetHashCode(); - } - if(__isset.resultFormat) - { - hashcode = (hashcode * 397) + ResultFormat.GetHashCode(); - } - if(__isset.lz4Compressed) - { - hashcode = (hashcode * 397) + Lz4Compressed.GetHashCode(); - } - if((ArrowSchema != null) && __isset.arrowSchema) - { - hashcode = (hashcode * 397) + ArrowSchema.GetHashCode(); - } - if(__isset.cacheLookupResult) - { - hashcode = (hashcode * 397) + CacheLookupResult.GetHashCode(); - } - if(__isset.uncompressedBytes) - { - hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); - } - if(__isset.compressedBytes) - { - hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); - } - if(__isset.isStagingOperation) - { - hashcode = (hashcode * 397) + IsStagingOperation.GetHashCode(); - } - if(__isset.reasonForNoCloudFetch) - { - hashcode = (hashcode * 397) + ReasonForNoCloudFetch.GetHashCode(); - } - if((ResultFiles != null) && __isset.resultFiles) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultFiles); - } - if((ManifestFile != null) && __isset.manifestFile) - { - hashcode = (hashcode * 397) + ManifestFile.GetHashCode(); - } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) - { - hashcode = (hashcode * 397) + ManifestFileFormat.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp581 = new StringBuilder("TGetResultSetMetadataResp("); - if((Status != null)) - { - tmp581.Append(", Status: "); - Status.ToString(tmp581); - } - if((Schema != null) && __isset.schema) - { - tmp581.Append(", Schema: "); - Schema.ToString(tmp581); - } - if(__isset.resultFormat) - { - tmp581.Append(", ResultFormat: "); - ResultFormat.ToString(tmp581); - } - if(__isset.lz4Compressed) - { - tmp581.Append(", Lz4Compressed: "); - Lz4Compressed.ToString(tmp581); - } - if((ArrowSchema != null) && __isset.arrowSchema) - { - tmp581.Append(", ArrowSchema: "); - ArrowSchema.ToString(tmp581); - } - if(__isset.cacheLookupResult) - { - tmp581.Append(", CacheLookupResult: "); - CacheLookupResult.ToString(tmp581); - } - if(__isset.uncompressedBytes) - { - tmp581.Append(", UncompressedBytes: "); - UncompressedBytes.ToString(tmp581); - } - if(__isset.compressedBytes) - { - tmp581.Append(", CompressedBytes: "); - CompressedBytes.ToString(tmp581); - } - if(__isset.isStagingOperation) - { - tmp581.Append(", IsStagingOperation: "); - IsStagingOperation.ToString(tmp581); - } - if(__isset.reasonForNoCloudFetch) - { - tmp581.Append(", ReasonForNoCloudFetch: "); - ReasonForNoCloudFetch.ToString(tmp581); - } - if((ResultFiles != null) && __isset.resultFiles) - { - tmp581.Append(", ResultFiles: "); - ResultFiles.ToString(tmp581); - } - if((ManifestFile != null) && __isset.manifestFile) - { - tmp581.Append(", ManifestFile: "); - ManifestFile.ToString(tmp581); - } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) - { - tmp581.Append(", ManifestFileFormat: "); - ManifestFileFormat.ToString(tmp581); - } - tmp581.Append(')'); - return tmp581.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs deleted file mode 100644 index 742b50bca1..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs +++ /dev/null @@ -1,471 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetSchemasReq : TBase - { - private string _catalogName; - private string _schemaName; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetSchemasReq() - { - } - - public TGetSchemasReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetSchemasReq DeepCopy() - { - var tmp465 = new TGetSchemasReq(); - if((SessionHandle != null)) - { - tmp465.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp465.CatalogName = this.CatalogName; - } - tmp465.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp465.SchemaName = this.SchemaName; - } - tmp465.__isset.schemaName = this.__isset.schemaName; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp465.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp465.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp465.RunAsync = this.RunAsync; - } - tmp465.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp465.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp465.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp465.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp465.__isset.sessionConf = this.__isset.sessionConf; - return tmp465; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp466 = new TStruct("TGetSchemasReq"); - await oprot.WriteStructBeginAsync(tmp466, cancellationToken); - var tmp467 = new TField(); - if((SessionHandle != null)) - { - tmp467.Name = "sessionHandle"; - tmp467.Type = TType.Struct; - tmp467.ID = 1; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp467.Name = "catalogName"; - tmp467.Type = TType.String; - tmp467.ID = 2; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp467.Name = "schemaName"; - tmp467.Type = TType.String; - tmp467.ID = 3; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp467.Name = "getDirectResults"; - tmp467.Type = TType.Struct; - tmp467.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp467.Name = "runAsync"; - tmp467.Type = TType.Bool; - tmp467.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp467.Name = "operationId"; - tmp467.Type = TType.Struct; - tmp467.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp467.Name = "sessionConf"; - tmp467.Type = TType.Struct; - tmp467.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetSchemasReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp468 = new StringBuilder("TGetSchemasReq("); - if((SessionHandle != null)) - { - tmp468.Append(", SessionHandle: "); - SessionHandle.ToString(tmp468); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp468.Append(", CatalogName: "); - CatalogName.ToString(tmp468); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp468.Append(", SchemaName: "); - SchemaName.ToString(tmp468); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp468.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp468); - } - if(__isset.runAsync) - { - tmp468.Append(", RunAsync: "); - RunAsync.ToString(tmp468); - } - if((OperationId != null) && __isset.operationId) - { - tmp468.Append(", OperationId: "); - OperationId.ToString(tmp468); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp468.Append(", SessionConf: "); - SessionConf.ToString(tmp468); - } - tmp468.Append(')'); - return tmp468.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs deleted file mode 100644 index 66e4a9d7ce..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetSchemasResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetSchemasResp() - { - } - - public TGetSchemasResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetSchemasResp DeepCopy() - { - var tmp470 = new TGetSchemasResp(); - if((Status != null)) - { - tmp470.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp470.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp470.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp470.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp470.__isset.directResults = this.__isset.directResults; - return tmp470; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp471 = new TStruct("TGetSchemasResp"); - await oprot.WriteStructBeginAsync(tmp471, cancellationToken); - var tmp472 = new TField(); - if((Status != null)) - { - tmp472.Name = "status"; - tmp472.Type = TType.Struct; - tmp472.ID = 1; - await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp472.Name = "operationHandle"; - tmp472.Type = TType.Struct; - tmp472.ID = 2; - await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp472.Name = "directResults"; - tmp472.Type = TType.Struct; - tmp472.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetSchemasResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp473 = new StringBuilder("TGetSchemasResp("); - if((Status != null)) - { - tmp473.Append(", Status: "); - Status.ToString(tmp473); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp473.Append(", OperationHandle: "); - OperationHandle.ToString(tmp473); - } - if((DirectResults != null) && __isset.directResults) - { - tmp473.Append(", DirectResults: "); - DirectResults.ToString(tmp473); - } - tmp473.Append(')'); - return tmp473.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs deleted file mode 100644 index 3a72f4065f..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs +++ /dev/null @@ -1,373 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTableTypesReq : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetTableTypesReq() - { - } - - public TGetTableTypesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetTableTypesReq DeepCopy() - { - var tmp489 = new TGetTableTypesReq(); - if((SessionHandle != null)) - { - tmp489.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp489.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp489.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp489.RunAsync = this.RunAsync; - } - tmp489.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp489.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp489.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp489.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp489.__isset.sessionConf = this.__isset.sessionConf; - return tmp489; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp490 = new TStruct("TGetTableTypesReq"); - await oprot.WriteStructBeginAsync(tmp490, cancellationToken); - var tmp491 = new TField(); - if((SessionHandle != null)) - { - tmp491.Name = "sessionHandle"; - tmp491.Type = TType.Struct; - tmp491.ID = 1; - await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp491.Name = "getDirectResults"; - tmp491.Type = TType.Struct; - tmp491.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp491.Name = "runAsync"; - tmp491.Type = TType.Bool; - tmp491.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp491.Name = "operationId"; - tmp491.Type = TType.Struct; - tmp491.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp491.Name = "sessionConf"; - tmp491.Type = TType.Struct; - tmp491.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTableTypesReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp492 = new StringBuilder("TGetTableTypesReq("); - if((SessionHandle != null)) - { - tmp492.Append(", SessionHandle: "); - SessionHandle.ToString(tmp492); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp492.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp492); - } - if(__isset.runAsync) - { - tmp492.Append(", RunAsync: "); - RunAsync.ToString(tmp492); - } - if((OperationId != null) && __isset.operationId) - { - tmp492.Append(", OperationId: "); - OperationId.ToString(tmp492); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp492.Append(", SessionConf: "); - SessionConf.ToString(tmp492); - } - tmp492.Append(')'); - return tmp492.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs deleted file mode 100644 index 2dbd3ad16f..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTableTypesResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetTableTypesResp() - { - } - - public TGetTableTypesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetTableTypesResp DeepCopy() - { - var tmp494 = new TGetTableTypesResp(); - if((Status != null)) - { - tmp494.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp494.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp494.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp494.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp494.__isset.directResults = this.__isset.directResults; - return tmp494; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp495 = new TStruct("TGetTableTypesResp"); - await oprot.WriteStructBeginAsync(tmp495, cancellationToken); - var tmp496 = new TField(); - if((Status != null)) - { - tmp496.Name = "status"; - tmp496.Type = TType.Struct; - tmp496.ID = 1; - await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp496.Name = "operationHandle"; - tmp496.Type = TType.Struct; - tmp496.ID = 2; - await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp496.Name = "directResults"; - tmp496.Type = TType.Struct; - tmp496.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTableTypesResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp497 = new StringBuilder("TGetTableTypesResp("); - if((Status != null)) - { - tmp497.Append(", Status: "); - Status.ToString(tmp497); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp497.Append(", OperationHandle: "); - OperationHandle.ToString(tmp497); - } - if((DirectResults != null) && __isset.directResults) - { - tmp497.Append(", DirectResults: "); - DirectResults.ToString(tmp497); - } - tmp497.Append(')'); - return tmp497.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs deleted file mode 100644 index 4e60863e00..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs +++ /dev/null @@ -1,584 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTablesReq : TBase - { - private string _catalogName; - private string _schemaName; - private string _tableName; - private List _tableTypes; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - public string TableName - { - get - { - return _tableName; - } - set - { - __isset.tableName = true; - this._tableName = value; - } - } - - public List TableTypes - { - get - { - return _tableTypes; - } - set - { - __isset.tableTypes = true; - this._tableTypes = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - public bool tableName; - public bool tableTypes; - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetTablesReq() - { - } - - public TGetTablesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetTablesReq DeepCopy() - { - var tmp475 = new TGetTablesReq(); - if((SessionHandle != null)) - { - tmp475.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp475.CatalogName = this.CatalogName; - } - tmp475.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp475.SchemaName = this.SchemaName; - } - tmp475.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) - { - tmp475.TableName = this.TableName; - } - tmp475.__isset.tableName = this.__isset.tableName; - if((TableTypes != null) && __isset.tableTypes) - { - tmp475.TableTypes = this.TableTypes.DeepCopy(); - } - tmp475.__isset.tableTypes = this.__isset.tableTypes; - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp475.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp475.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp475.RunAsync = this.RunAsync; - } - tmp475.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp475.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp475.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp475.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp475.__isset.sessionConf = this.__isset.sessionConf; - return tmp475; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - TableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.List) - { - { - var _list476 = await iprot.ReadListBeginAsync(cancellationToken); - TableTypes = new List(_list476.Count); - for(int _i477 = 0; _i477 < _list476.Count; ++_i477) - { - string _elem478; - _elem478 = await iprot.ReadStringAsync(cancellationToken); - TableTypes.Add(_elem478); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp479 = new TStruct("TGetTablesReq"); - await oprot.WriteStructBeginAsync(tmp479, cancellationToken); - var tmp480 = new TField(); - if((SessionHandle != null)) - { - tmp480.Name = "sessionHandle"; - tmp480.Type = TType.Struct; - tmp480.ID = 1; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp480.Name = "catalogName"; - tmp480.Type = TType.String; - tmp480.ID = 2; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp480.Name = "schemaName"; - tmp480.Type = TType.String; - tmp480.ID = 3; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableName != null) && __isset.tableName) - { - tmp480.Name = "tableName"; - tmp480.Type = TType.String; - tmp480.ID = 4; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await oprot.WriteStringAsync(TableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableTypes != null) && __isset.tableTypes) - { - tmp480.Name = "tableTypes"; - tmp480.Type = TType.List; - tmp480.ID = 5; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.String, TableTypes.Count), cancellationToken); - foreach (string _iter481 in TableTypes) - { - await oprot.WriteStringAsync(_iter481, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp480.Name = "getDirectResults"; - tmp480.Type = TType.Struct; - tmp480.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp480.Name = "runAsync"; - tmp480.Type = TType.Bool; - tmp480.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp480.Name = "operationId"; - tmp480.Type = TType.Struct; - tmp480.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp480.Name = "sessionConf"; - tmp480.Type = TType.Struct; - tmp480.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTablesReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) - && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) - && ((__isset.tableTypes == other.__isset.tableTypes) && ((!__isset.tableTypes) || (TCollections.Equals(TableTypes, other.TableTypes)))) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - if((TableName != null) && __isset.tableName) - { - hashcode = (hashcode * 397) + TableName.GetHashCode(); - } - if((TableTypes != null) && __isset.tableTypes) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(TableTypes); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp482 = new StringBuilder("TGetTablesReq("); - if((SessionHandle != null)) - { - tmp482.Append(", SessionHandle: "); - SessionHandle.ToString(tmp482); - } - if((CatalogName != null) && __isset.catalogName) - { - tmp482.Append(", CatalogName: "); - CatalogName.ToString(tmp482); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp482.Append(", SchemaName: "); - SchemaName.ToString(tmp482); - } - if((TableName != null) && __isset.tableName) - { - tmp482.Append(", TableName: "); - TableName.ToString(tmp482); - } - if((TableTypes != null) && __isset.tableTypes) - { - tmp482.Append(", TableTypes: "); - TableTypes.ToString(tmp482); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp482.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp482); - } - if(__isset.runAsync) - { - tmp482.Append(", RunAsync: "); - RunAsync.ToString(tmp482); - } - if((OperationId != null) && __isset.operationId) - { - tmp482.Append(", OperationId: "); - OperationId.ToString(tmp482); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp482.Append(", SessionConf: "); - SessionConf.ToString(tmp482); - } - tmp482.Append(')'); - return tmp482.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs deleted file mode 100644 index 628d3f5d42..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTablesResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetTablesResp() - { - } - - public TGetTablesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetTablesResp DeepCopy() - { - var tmp484 = new TGetTablesResp(); - if((Status != null)) - { - tmp484.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp484.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp484.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp484.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp484.__isset.directResults = this.__isset.directResults; - return tmp484; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp485 = new TStruct("TGetTablesResp"); - await oprot.WriteStructBeginAsync(tmp485, cancellationToken); - var tmp486 = new TField(); - if((Status != null)) - { - tmp486.Name = "status"; - tmp486.Type = TType.Struct; - tmp486.ID = 1; - await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp486.Name = "operationHandle"; - tmp486.Type = TType.Struct; - tmp486.ID = 2; - await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp486.Name = "directResults"; - tmp486.Type = TType.Struct; - tmp486.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTablesResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp487 = new StringBuilder("TGetTablesResp("); - if((Status != null)) - { - tmp487.Append(", Status: "); - Status.ToString(tmp487); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp487.Append(", OperationHandle: "); - OperationHandle.ToString(tmp487); - } - if((DirectResults != null) && __isset.directResults) - { - tmp487.Append(", DirectResults: "); - DirectResults.ToString(tmp487); - } - tmp487.Append(')'); - return tmp487.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs deleted file mode 100644 index 75893e6468..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs +++ /dev/null @@ -1,373 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTypeInfoReq : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; - private bool _runAsync; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; - private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults - { - get - { - return _getDirectResults; - } - set - { - __isset.getDirectResults = true; - this._getDirectResults = value; - } - } - - public bool RunAsync - { - get - { - return _runAsync; - } - set - { - __isset.runAsync = true; - this._runAsync = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId - { - get - { - return _operationId; - } - set - { - __isset.operationId = true; - this._operationId = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf - { - get - { - return _sessionConf; - } - set - { - __isset.sessionConf = true; - this._sessionConf = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool getDirectResults; - public bool runAsync; - public bool operationId; - public bool sessionConf; - } - - public TGetTypeInfoReq() - { - } - - public TGetTypeInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TGetTypeInfoReq DeepCopy() - { - var tmp420 = new TGetTypeInfoReq(); - if((SessionHandle != null)) - { - tmp420.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp420.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); - } - tmp420.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) - { - tmp420.RunAsync = this.RunAsync; - } - tmp420.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) - { - tmp420.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp420.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) - { - tmp420.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); - } - tmp420.__isset.sessionConf = this.__isset.sessionConf; - return tmp420; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); - await GetDirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.Bool) - { - RunAsync = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3330: - if (field.Type == TType.Struct) - { - SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); - await SessionConf.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp421 = new TStruct("TGetTypeInfoReq"); - await oprot.WriteStructBeginAsync(tmp421, cancellationToken); - var tmp422 = new TField(); - if((SessionHandle != null)) - { - tmp422.Name = "sessionHandle"; - tmp422.Type = TType.Struct; - tmp422.ID = 1; - await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp422.Name = "getDirectResults"; - tmp422.Type = TType.Struct; - tmp422.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); - await GetDirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.runAsync) - { - tmp422.Name = "runAsync"; - tmp422.Type = TType.Bool; - tmp422.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); - await oprot.WriteBoolAsync(RunAsync, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationId != null) && __isset.operationId) - { - tmp422.Name = "operationId"; - tmp422.Type = TType.Struct; - tmp422.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp422.Name = "sessionConf"; - tmp422.Type = TType.Struct; - tmp422.ID = 3330; - await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); - await SessionConf.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTypeInfoReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) - && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) - && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) - && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); - } - if(__isset.runAsync) - { - hashcode = (hashcode * 397) + RunAsync.GetHashCode(); - } - if((OperationId != null) && __isset.operationId) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - if((SessionConf != null) && __isset.sessionConf) - { - hashcode = (hashcode * 397) + SessionConf.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp423 = new StringBuilder("TGetTypeInfoReq("); - if((SessionHandle != null)) - { - tmp423.Append(", SessionHandle: "); - SessionHandle.ToString(tmp423); - } - if((GetDirectResults != null) && __isset.getDirectResults) - { - tmp423.Append(", GetDirectResults: "); - GetDirectResults.ToString(tmp423); - } - if(__isset.runAsync) - { - tmp423.Append(", RunAsync: "); - RunAsync.ToString(tmp423); - } - if((OperationId != null) && __isset.operationId) - { - tmp423.Append(", OperationId: "); - OperationId.ToString(tmp423); - } - if((SessionConf != null) && __isset.sessionConf) - { - tmp423.Append(", SessionConf: "); - SessionConf.ToString(tmp423); - } - tmp423.Append(')'); - return tmp423.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs deleted file mode 100644 index c5cbb2ad8c..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs +++ /dev/null @@ -1,274 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TGetTypeInfoResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; - private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle - { - get - { - return _operationHandle; - } - set - { - __isset.operationHandle = true; - this._operationHandle = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults - { - get - { - return _directResults; - } - set - { - __isset.directResults = true; - this._directResults = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationHandle; - public bool directResults; - } - - public TGetTypeInfoResp() - { - } - - public TGetTypeInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TGetTypeInfoResp DeepCopy() - { - var tmp425 = new TGetTypeInfoResp(); - if((Status != null)) - { - tmp425.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp425.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - tmp425.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) - { - tmp425.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); - } - tmp425.__isset.directResults = this.__isset.directResults; - return tmp425; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.Struct) - { - DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); - await DirectResults.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp426 = new TStruct("TGetTypeInfoResp"); - await oprot.WriteStructBeginAsync(tmp426, cancellationToken); - var tmp427 = new TField(); - if((Status != null)) - { - tmp427.Name = "status"; - tmp427.Type = TType.Struct; - tmp427.ID = 1; - await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp427.Name = "operationHandle"; - tmp427.Type = TType.Struct; - tmp427.ID = 2; - await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DirectResults != null) && __isset.directResults) - { - tmp427.Name = "directResults"; - tmp427.Type = TType.Struct; - tmp427.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); - await DirectResults.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TGetTypeInfoResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) - && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null) && __isset.operationHandle) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - if((DirectResults != null) && __isset.directResults) - { - hashcode = (hashcode * 397) + DirectResults.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp428 = new StringBuilder("TGetTypeInfoResp("); - if((Status != null)) - { - tmp428.Append(", Status: "); - Status.ToString(tmp428); - } - if((OperationHandle != null) && __isset.operationHandle) - { - tmp428.Append(", OperationHandle: "); - OperationHandle.ToString(tmp428); - } - if((DirectResults != null) && __isset.directResults) - { - tmp428.Append(", DirectResults: "); - DirectResults.ToString(tmp428); - } - tmp428.Append(')'); - return tmp428.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs deleted file mode 100644 index e8167d0184..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs +++ /dev/null @@ -1,209 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class THandleIdentifier : TBase - { - - public byte[] Guid { get; set; } - - public byte[] Secret { get; set; } - - public THandleIdentifier() - { - } - - public THandleIdentifier(byte[] guid, byte[] secret) : this() - { - this.Guid = guid; - this.Secret = secret; - } - - public THandleIdentifier DeepCopy() - { - var tmp264 = new THandleIdentifier(); - if((Guid != null)) - { - tmp264.Guid = this.Guid.ToArray(); - } - if((Secret != null)) - { - tmp264.Secret = this.Secret.ToArray(); - } - return tmp264; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_guid = false; - bool isset_secret = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - Guid = await iprot.ReadBinaryAsync(cancellationToken); - isset_guid = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - Secret = await iprot.ReadBinaryAsync(cancellationToken); - isset_secret = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_guid) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_secret) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp265 = new TStruct("THandleIdentifier"); - await oprot.WriteStructBeginAsync(tmp265, cancellationToken); - var tmp266 = new TField(); - if((Guid != null)) - { - tmp266.Name = "guid"; - tmp266.Type = TType.String; - tmp266.ID = 1; - await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); - await oprot.WriteBinaryAsync(Guid, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Secret != null)) - { - tmp266.Name = "secret"; - tmp266.Type = TType.String; - tmp266.ID = 2; - await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); - await oprot.WriteBinaryAsync(Secret, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is THandleIdentifier other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Guid, other.Guid) - && TCollections.Equals(Secret, other.Secret); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Guid != null)) - { - hashcode = (hashcode * 397) + Guid.GetHashCode(); - } - if((Secret != null)) - { - hashcode = (hashcode * 397) + Secret.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp267 = new StringBuilder("THandleIdentifier("); - if((Guid != null)) - { - tmp267.Append(", Guid: "); - Guid.ToString(tmp267); - } - if((Secret != null)) - { - tmp267.Append(", Secret: "); - Secret.ToString(tmp267); - } - tmp267.Append(')'); - return tmp267.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs deleted file mode 100644 index 9685a7f700..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.Buffers.Binary; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI16Column : TBase - { - - public Int16Array Values { get; set; } - - public TI16Column() - { - } - - public TI16Column(Int16Array values) : this() - { - this.Values = values; - } - - public TI16Column DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - byte[] nulls = null; - byte[] buffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list151 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list151.Count; - - buffer = new byte[length * 2]; - var memory = buffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - for (int _i152 = 0; _i152 < length; ++_i152) - { - typedMemory.Span[_i152] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i152]); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new Int16Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp154 = new TStruct("TI16Column"); - await oprot.WriteStructBeginAsync(tmp154, cancellationToken); - var tmp155 = new TField(); - if((Values != null)) - { - tmp155.Name = "values"; - tmp155.Type = TType.List; - tmp155.ID = 1; - await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.I16, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - short _iter156 = Values.GetValue(i) ?? (short)0; - await oprot.WriteI16Async(_iter156, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp155.Name = "nulls"; - tmp155.Type = TType.String; - tmp155.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI16Column other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp157 = new StringBuilder("TI16Column("); - if((Values != null)) - { - tmp157.Append(", Values: "); - Values.ToString(tmp157); - } - tmp157.Append(')'); - return tmp157.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs deleted file mode 100644 index 9f31d83683..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI16Value : TBase - { - private short _value; - - public short Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TI16Value() - { - } - - public TI16Value DeepCopy() - { - var tmp93 = new TI16Value(); - if(__isset.@value) - { - tmp93.Value = this.Value; - } - tmp93.__isset.@value = this.__isset.@value; - return tmp93; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I16) - { - Value = await iprot.ReadI16Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp94 = new TStruct("TI16Value"); - await oprot.WriteStructBeginAsync(tmp94, cancellationToken); - var tmp95 = new TField(); - if(__isset.@value) - { - tmp95.Name = "value"; - tmp95.Type = TType.I16; - tmp95.ID = 1; - await oprot.WriteFieldBeginAsync(tmp95, cancellationToken); - await oprot.WriteI16Async(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI16Value other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp96 = new StringBuilder("TI16Value("); - int tmp97 = 0; - if(__isset.@value) - { - if(0 < tmp97++) { tmp96.Append(", "); } - tmp96.Append("Value: "); - Value.ToString(tmp96); - } - tmp96.Append(')'); - return tmp96.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs deleted file mode 100644 index a5fe557bf7..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs +++ /dev/null @@ -1,199 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.Buffers.Binary; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI32Column : TBase - { - - public Int32Array Values { get; set; } - - public TI32Column() - { - } - - public TI32Column(Int32Array values) : this() - { - this.Values = values; - } - - public TI32Column DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - byte[] nulls = null; - byte[] buffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list160 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list160.Count; - buffer = new byte[length * 4]; - var memory = buffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - for (int _i161 = 0; _i161 < length; ++_i161) - { - typedMemory.Span[_i161] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i161]); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new Int32Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp163 = new TStruct("TI32Column"); - await oprot.WriteStructBeginAsync(tmp163, cancellationToken); - var tmp164 = new TField(); - if((Values != null)) - { - tmp164.Name = "values"; - tmp164.Type = TType.List; - tmp164.ID = 1; - await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.I32, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - int _iter165 = Values.GetValue(i) ?? 0; - await oprot.WriteI32Async(_iter165, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp164.Name = "nulls"; - tmp164.Type = TType.String; - tmp164.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI32Column other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp166 = new StringBuilder("TI32Column("); - if((Values != null)) - { - tmp166.Append(", Values: "); - Values.ToString(tmp166); - } - tmp166.Append(')'); - return tmp166.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs deleted file mode 100644 index 40bb1ac89d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI32Value : TBase - { - private int _value; - - public int Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TI32Value() - { - } - - public TI32Value DeepCopy() - { - var tmp98 = new TI32Value(); - if(__isset.@value) - { - tmp98.Value = this.Value; - } - tmp98.__isset.@value = this.__isset.@value; - return tmp98; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - Value = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp99 = new TStruct("TI32Value"); - await oprot.WriteStructBeginAsync(tmp99, cancellationToken); - var tmp100 = new TField(); - if(__isset.@value) - { - tmp100.Name = "value"; - tmp100.Type = TType.I32; - tmp100.ID = 1; - await oprot.WriteFieldBeginAsync(tmp100, cancellationToken); - await oprot.WriteI32Async(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI32Value other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp101 = new StringBuilder("TI32Value("); - int tmp102 = 0; - if(__isset.@value) - { - if(0 < tmp102++) { tmp101.Append(", "); } - tmp101.Append("Value: "); - Value.ToString(tmp101); - } - tmp101.Append(')'); - return tmp101.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs deleted file mode 100644 index 9629336635..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.Buffers.Binary; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI64Column : TBase - { - - public Int64Array Values { get; set; } - - public TI64Column() - { - } - - public TI64Column(Int64Array values) : this() - { - this.Values = values; - } - - public TI64Column DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - byte[] nulls = null; - byte[] buffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list169 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list169.Count; - - buffer = new byte[length * 8]; - var memory = buffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); - iprot.Transport.CheckReadBytesAvailable(buffer.Length); - await transport.ReadExactlyAsync(memory, cancellationToken); - for (int _i170 = 0; _i170 < length; ++_i170) - { - typedMemory.Span[_i170] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i170]); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new Int64Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp172 = new TStruct("TI64Column"); - await oprot.WriteStructBeginAsync(tmp172, cancellationToken); - var tmp173 = new TField(); - if((Values != null)) - { - tmp173.Name = "values"; - tmp173.Type = TType.List; - tmp173.ID = 1; - await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.I64, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - long _iter174 = Values.GetValue(i) ?? 0; - await oprot.WriteI64Async(_iter174, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp173.Name = "nulls"; - tmp173.Type = TType.String; - tmp173.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI64Column other)) return false; - if (ReferenceEquals(this, other)) return true; - throw new NotImplementedException(); - } - - public override int GetHashCode() - { - throw new NotImplementedException(); - } - - public override string ToString() - { - var tmp175 = new StringBuilder("TI64Column("); - if((Values != null)) - { - tmp175.Append(", Values: "); - Values.ToString(tmp175); - } - tmp175.Append(')'); - return tmp175.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs deleted file mode 100644 index c823fce883..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TI64Value : TBase - { - private long _value; - - public long Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TI64Value() - { - } - - public TI64Value DeepCopy() - { - var tmp103 = new TI64Value(); - if(__isset.@value) - { - tmp103.Value = this.Value; - } - tmp103.__isset.@value = this.__isset.@value; - return tmp103; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I64) - { - Value = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp104 = new TStruct("TI64Value"); - await oprot.WriteStructBeginAsync(tmp104, cancellationToken); - var tmp105 = new TField(); - if(__isset.@value) - { - tmp105.Name = "value"; - tmp105.Type = TType.I64; - tmp105.ID = 1; - await oprot.WriteFieldBeginAsync(tmp105, cancellationToken); - await oprot.WriteI64Async(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TI64Value other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp106 = new StringBuilder("TI64Value("); - int tmp107 = 0; - if(__isset.@value) - { - if(0 < tmp107++) { tmp106.Append(", "); } - tmp106.Append("Value: "); - Value.ToString(tmp106); - } - tmp106.Append(')'); - return tmp106.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs deleted file mode 100644 index 70bbb3be4b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs +++ /dev/null @@ -1,23 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TJobExecutionStatus - { - IN_PROGRESS = 0, - COMPLETE = 1, - NOT_AVAILABLE = 2, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs deleted file mode 100644 index ae68167ad8..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs +++ /dev/null @@ -1,185 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TMapTypeEntry : TBase - { - - public int KeyTypePtr { get; set; } - - public int ValueTypePtr { get; set; } - - public TMapTypeEntry() - { - } - - public TMapTypeEntry(int keyTypePtr, int valueTypePtr) : this() - { - this.KeyTypePtr = keyTypePtr; - this.ValueTypePtr = valueTypePtr; - } - - public TMapTypeEntry DeepCopy() - { - var tmp25 = new TMapTypeEntry(); - tmp25.KeyTypePtr = this.KeyTypePtr; - tmp25.ValueTypePtr = this.ValueTypePtr; - return tmp25; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_keyTypePtr = false; - bool isset_valueTypePtr = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - KeyTypePtr = await iprot.ReadI32Async(cancellationToken); - isset_keyTypePtr = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - ValueTypePtr = await iprot.ReadI32Async(cancellationToken); - isset_valueTypePtr = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_keyTypePtr) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_valueTypePtr) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp26 = new TStruct("TMapTypeEntry"); - await oprot.WriteStructBeginAsync(tmp26, cancellationToken); - var tmp27 = new TField(); - tmp27.Name = "keyTypePtr"; - tmp27.Type = TType.I32; - tmp27.ID = 1; - await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); - await oprot.WriteI32Async(KeyTypePtr, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp27.Name = "valueTypePtr"; - tmp27.Type = TType.I32; - tmp27.ID = 2; - await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); - await oprot.WriteI32Async(ValueTypePtr, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TMapTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(KeyTypePtr, other.KeyTypePtr) - && global::System.Object.Equals(ValueTypePtr, other.ValueTypePtr); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + KeyTypePtr.GetHashCode(); - hashcode = (hashcode * 397) + ValueTypePtr.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp28 = new StringBuilder("TMapTypeEntry("); - tmp28.Append(", KeyTypePtr: "); - KeyTypePtr.ToString(tmp28); - tmp28.Append(", ValueTypePtr: "); - ValueTypePtr.ToString(tmp28); - tmp28.Append(')'); - return tmp28.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs deleted file mode 100644 index 2aeae8012d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs +++ /dev/null @@ -1,228 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TNamespace : TBase - { - private string _catalogName; - private string _schemaName; - - public string CatalogName - { - get - { - return _catalogName; - } - set - { - __isset.catalogName = true; - this._catalogName = value; - } - } - - public string SchemaName - { - get - { - return _schemaName; - } - set - { - __isset.schemaName = true; - this._schemaName = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool catalogName; - public bool schemaName; - } - - public TNamespace() - { - } - - public TNamespace DeepCopy() - { - var tmp298 = new TNamespace(); - if((CatalogName != null) && __isset.catalogName) - { - tmp298.CatalogName = this.CatalogName; - } - tmp298.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) - { - tmp298.SchemaName = this.SchemaName; - } - tmp298.__isset.schemaName = this.__isset.schemaName; - return tmp298; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - CatalogName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - SchemaName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp299 = new TStruct("TNamespace"); - await oprot.WriteStructBeginAsync(tmp299, cancellationToken); - var tmp300 = new TField(); - if((CatalogName != null) && __isset.catalogName) - { - tmp300.Name = "catalogName"; - tmp300.Type = TType.String; - tmp300.ID = 1; - await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); - await oprot.WriteStringAsync(CatalogName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SchemaName != null) && __isset.schemaName) - { - tmp300.Name = "schemaName"; - tmp300.Type = TType.String; - tmp300.ID = 2; - await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); - await oprot.WriteStringAsync(SchemaName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TNamespace other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) - && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((CatalogName != null) && __isset.catalogName) - { - hashcode = (hashcode * 397) + CatalogName.GetHashCode(); - } - if((SchemaName != null) && __isset.schemaName) - { - hashcode = (hashcode * 397) + SchemaName.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp301 = new StringBuilder("TNamespace("); - int tmp302 = 0; - if((CatalogName != null) && __isset.catalogName) - { - if(0 < tmp302++) { tmp301.Append(", "); } - tmp301.Append("CatalogName: "); - CatalogName.ToString(tmp301); - } - if((SchemaName != null) && __isset.schemaName) - { - if(0 < tmp302++) { tmp301.Append(", "); } - tmp301.Append("SchemaName: "); - SchemaName.ToString(tmp301); - } - tmp301.Append(')'); - return tmp301.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs deleted file mode 100644 index 4986a43910..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs +++ /dev/null @@ -1,660 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TOpenSessionReq : TBase - { - private string _username; - private string _password; - private Dictionary _configuration; - private List _getInfos; - private long _client_protocol_i64; - private Dictionary _connectionProperties; - private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; - private bool _canUseMultipleCatalogs; - private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _sessionId; - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion Client_protocol { get; set; } - - public string Username - { - get - { - return _username; - } - set - { - __isset.username = true; - this._username = value; - } - } - - public string Password - { - get - { - return _password; - } - set - { - __isset.password = true; - this._password = value; - } - } - - public Dictionary Configuration - { - get - { - return _configuration; - } - set - { - __isset.configuration = true; - this._configuration = value; - } - } - - public List GetInfos - { - get - { - return _getInfos; - } - set - { - __isset.getInfos = true; - this._getInfos = value; - } - } - - public long Client_protocol_i64 - { - get - { - return _client_protocol_i64; - } - set - { - __isset.client_protocol_i64 = true; - this._client_protocol_i64 = value; - } - } - - public Dictionary ConnectionProperties - { - get - { - return _connectionProperties; - } - set - { - __isset.connectionProperties = true; - this._connectionProperties = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace - { - get - { - return _initialNamespace; - } - set - { - __isset.initialNamespace = true; - this._initialNamespace = value; - } - } - - public bool CanUseMultipleCatalogs - { - get - { - return _canUseMultipleCatalogs; - } - set - { - __isset.canUseMultipleCatalogs = true; - this._canUseMultipleCatalogs = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId - { - get - { - return _sessionId; - } - set - { - __isset.sessionId = true; - this._sessionId = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool username; - public bool password; - public bool configuration; - public bool getInfos; - public bool client_protocol_i64; - public bool connectionProperties; - public bool initialNamespace; - public bool canUseMultipleCatalogs; - public bool sessionId; - } - - public TOpenSessionReq() - { - this.Client_protocol = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; - } - - public TOpenSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion client_protocol) : this() - { - this.Client_protocol = client_protocol; - } - - public TOpenSessionReq DeepCopy() - { - var tmp279 = new TOpenSessionReq(); - tmp279.Client_protocol = this.Client_protocol; - if((Username != null) && __isset.username) - { - tmp279.Username = this.Username; - } - tmp279.__isset.username = this.__isset.username; - if((Password != null) && __isset.password) - { - tmp279.Password = this.Password; - } - tmp279.__isset.password = this.__isset.password; - if((Configuration != null) && __isset.configuration) - { - tmp279.Configuration = this.Configuration.DeepCopy(); - } - tmp279.__isset.configuration = this.__isset.configuration; - if((GetInfos != null) && __isset.getInfos) - { - tmp279.GetInfos = this.GetInfos.DeepCopy(); - } - tmp279.__isset.getInfos = this.__isset.getInfos; - if(__isset.client_protocol_i64) - { - tmp279.Client_protocol_i64 = this.Client_protocol_i64; - } - tmp279.__isset.client_protocol_i64 = this.__isset.client_protocol_i64; - if((ConnectionProperties != null) && __isset.connectionProperties) - { - tmp279.ConnectionProperties = this.ConnectionProperties.DeepCopy(); - } - tmp279.__isset.connectionProperties = this.__isset.connectionProperties; - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp279.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); - } - tmp279.__isset.initialNamespace = this.__isset.initialNamespace; - if(__isset.canUseMultipleCatalogs) - { - tmp279.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; - } - tmp279.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; - if((SessionId != null) && __isset.sessionId) - { - tmp279.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); - } - tmp279.__isset.sessionId = this.__isset.sessionId; - return tmp279; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_client_protocol = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - Client_protocol = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); - isset_client_protocol = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - Username = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - Password = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Map) - { - { - var _map280 = await iprot.ReadMapBeginAsync(cancellationToken); - Configuration = new Dictionary(_map280.Count); - for(int _i281 = 0; _i281 < _map280.Count; ++_i281) - { - string _key282; - string _val283; - _key282 = await iprot.ReadStringAsync(cancellationToken); - _val283 = await iprot.ReadStringAsync(cancellationToken); - Configuration[_key282] = _val283; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.List) - { - { - var _list284 = await iprot.ReadListBeginAsync(cancellationToken); - GetInfos = new List(_list284.Count); - for(int _i285 = 0; _i285 < _list284.Count; ++_i285) - { - int _elem286; - _elem286 = await iprot.ReadI32Async(cancellationToken); - GetInfos.Add(_elem286); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.I64) - { - Client_protocol_i64 = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1283: - if (field.Type == TType.Map) - { - { - var _map287 = await iprot.ReadMapBeginAsync(cancellationToken); - ConnectionProperties = new Dictionary(_map287.Count); - for(int _i288 = 0; _i288 < _map287.Count; ++_i288) - { - string _key289; - string _val290; - _key289 = await iprot.ReadStringAsync(cancellationToken); - _val290 = await iprot.ReadStringAsync(cancellationToken); - ConnectionProperties[_key289] = _val290; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1284: - if (field.Type == TType.Struct) - { - InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); - await InitialNamespace.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1285: - if (field.Type == TType.Bool) - { - CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3329: - if (field.Type == TType.Struct) - { - SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await SessionId.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_client_protocol) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp291 = new TStruct("TOpenSessionReq"); - await oprot.WriteStructBeginAsync(tmp291, cancellationToken); - var tmp292 = new TField(); - tmp292.Name = "client_protocol"; - tmp292.Type = TType.I32; - tmp292.ID = 1; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteI32Async((int)Client_protocol, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((Username != null) && __isset.username) - { - tmp292.Name = "username"; - tmp292.Type = TType.String; - tmp292.ID = 2; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteStringAsync(Username, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Password != null) && __isset.password) - { - tmp292.Name = "password"; - tmp292.Type = TType.String; - tmp292.ID = 3; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteStringAsync(Password, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Configuration != null) && __isset.configuration) - { - tmp292.Name = "configuration"; - tmp292.Type = TType.Map; - tmp292.ID = 4; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); - foreach (string _iter293 in Configuration.Keys) - { - await oprot.WriteStringAsync(_iter293, cancellationToken); - await oprot.WriteStringAsync(Configuration[_iter293], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetInfos != null) && __isset.getInfos) - { - tmp292.Name = "getInfos"; - tmp292.Type = TType.List; - tmp292.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); - foreach (int _iter294 in GetInfos) - { - await oprot.WriteI32Async(_iter294, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.client_protocol_i64) - { - tmp292.Name = "client_protocol_i64"; - tmp292.Type = TType.I64; - tmp292.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteI64Async(Client_protocol_i64, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ConnectionProperties != null) && __isset.connectionProperties) - { - tmp292.Name = "connectionProperties"; - tmp292.Type = TType.Map; - tmp292.ID = 1283; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConnectionProperties.Count), cancellationToken); - foreach (string _iter295 in ConnectionProperties.Keys) - { - await oprot.WriteStringAsync(_iter295, cancellationToken); - await oprot.WriteStringAsync(ConnectionProperties[_iter295], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp292.Name = "initialNamespace"; - tmp292.Type = TType.Struct; - tmp292.ID = 1284; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await InitialNamespace.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.canUseMultipleCatalogs) - { - tmp292.Name = "canUseMultipleCatalogs"; - tmp292.Type = TType.Bool; - tmp292.ID = 1285; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SessionId != null) && __isset.sessionId) - { - tmp292.Name = "sessionId"; - tmp292.Type = TType.Struct; - tmp292.ID = 3329; - await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); - await SessionId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TOpenSessionReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Client_protocol, other.Client_protocol) - && ((__isset.username == other.__isset.username) && ((!__isset.username) || (global::System.Object.Equals(Username, other.Username)))) - && ((__isset.password == other.__isset.password) && ((!__isset.password) || (global::System.Object.Equals(Password, other.Password)))) - && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) - && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))) - && ((__isset.client_protocol_i64 == other.__isset.client_protocol_i64) && ((!__isset.client_protocol_i64) || (global::System.Object.Equals(Client_protocol_i64, other.Client_protocol_i64)))) - && ((__isset.connectionProperties == other.__isset.connectionProperties) && ((!__isset.connectionProperties) || (TCollections.Equals(ConnectionProperties, other.ConnectionProperties)))) - && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) - && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) - && ((__isset.sessionId == other.__isset.sessionId) && ((!__isset.sessionId) || (global::System.Object.Equals(SessionId, other.SessionId)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + Client_protocol.GetHashCode(); - if((Username != null) && __isset.username) - { - hashcode = (hashcode * 397) + Username.GetHashCode(); - } - if((Password != null) && __isset.password) - { - hashcode = (hashcode * 397) + Password.GetHashCode(); - } - if((Configuration != null) && __isset.configuration) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); - } - if((GetInfos != null) && __isset.getInfos) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); - } - if(__isset.client_protocol_i64) - { - hashcode = (hashcode * 397) + Client_protocol_i64.GetHashCode(); - } - if((ConnectionProperties != null) && __isset.connectionProperties) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ConnectionProperties); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); - } - if(__isset.canUseMultipleCatalogs) - { - hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); - } - if((SessionId != null) && __isset.sessionId) - { - hashcode = (hashcode * 397) + SessionId.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp296 = new StringBuilder("TOpenSessionReq("); - tmp296.Append(", Client_protocol: "); - Client_protocol.ToString(tmp296); - if((Username != null) && __isset.username) - { - tmp296.Append(", Username: "); - Username.ToString(tmp296); - } - if((Password != null) && __isset.password) - { - tmp296.Append(", Password: "); - Password.ToString(tmp296); - } - if((Configuration != null) && __isset.configuration) - { - tmp296.Append(", Configuration: "); - Configuration.ToString(tmp296); - } - if((GetInfos != null) && __isset.getInfos) - { - tmp296.Append(", GetInfos: "); - GetInfos.ToString(tmp296); - } - if(__isset.client_protocol_i64) - { - tmp296.Append(", Client_protocol_i64: "); - Client_protocol_i64.ToString(tmp296); - } - if((ConnectionProperties != null) && __isset.connectionProperties) - { - tmp296.Append(", ConnectionProperties: "); - ConnectionProperties.ToString(tmp296); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp296.Append(", InitialNamespace: "); - InitialNamespace.ToString(tmp296); - } - if(__isset.canUseMultipleCatalogs) - { - tmp296.Append(", CanUseMultipleCatalogs: "); - CanUseMultipleCatalogs.ToString(tmp296); - } - if((SessionId != null) && __isset.sessionId) - { - tmp296.Append(", SessionId: "); - SessionId.ToString(tmp296); - } - tmp296.Append(')'); - return tmp296.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs deleted file mode 100644 index 1f87d016b8..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs +++ /dev/null @@ -1,489 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TOpenSessionResp : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle _sessionHandle; - private Dictionary _configuration; - private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; - private bool _canUseMultipleCatalogs; - private List _getInfos; - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion ServerProtocolVersion { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle - { - get - { - return _sessionHandle; - } - set - { - __isset.sessionHandle = true; - this._sessionHandle = value; - } - } - - public Dictionary Configuration - { - get - { - return _configuration; - } - set - { - __isset.configuration = true; - this._configuration = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace - { - get - { - return _initialNamespace; - } - set - { - __isset.initialNamespace = true; - this._initialNamespace = value; - } - } - - public bool CanUseMultipleCatalogs - { - get - { - return _canUseMultipleCatalogs; - } - set - { - __isset.canUseMultipleCatalogs = true; - this._canUseMultipleCatalogs = value; - } - } - - public List GetInfos - { - get - { - return _getInfos; - } - set - { - __isset.getInfos = true; - this._getInfos = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool sessionHandle; - public bool configuration; - public bool initialNamespace; - public bool canUseMultipleCatalogs; - public bool getInfos; - } - - public TOpenSessionResp() - { - this.ServerProtocolVersion = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; - } - - public TOpenSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion serverProtocolVersion) : this() - { - this.Status = status; - this.ServerProtocolVersion = serverProtocolVersion; - } - - public TOpenSessionResp DeepCopy() - { - var tmp303 = new TOpenSessionResp(); - if((Status != null)) - { - tmp303.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - tmp303.ServerProtocolVersion = this.ServerProtocolVersion; - if((SessionHandle != null) && __isset.sessionHandle) - { - tmp303.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - tmp303.__isset.sessionHandle = this.__isset.sessionHandle; - if((Configuration != null) && __isset.configuration) - { - tmp303.Configuration = this.Configuration.DeepCopy(); - } - tmp303.__isset.configuration = this.__isset.configuration; - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp303.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); - } - tmp303.__isset.initialNamespace = this.__isset.initialNamespace; - if(__isset.canUseMultipleCatalogs) - { - tmp303.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; - } - tmp303.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; - if((GetInfos != null) && __isset.getInfos) - { - tmp303.GetInfos = this.GetInfos.DeepCopy(); - } - tmp303.__isset.getInfos = this.__isset.getInfos; - return tmp303; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - bool isset_serverProtocolVersion = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - ServerProtocolVersion = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); - isset_serverProtocolVersion = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Map) - { - { - var _map304 = await iprot.ReadMapBeginAsync(cancellationToken); - Configuration = new Dictionary(_map304.Count); - for(int _i305 = 0; _i305 < _map304.Count; ++_i305) - { - string _key306; - string _val307; - _key306 = await iprot.ReadStringAsync(cancellationToken); - _val307 = await iprot.ReadStringAsync(cancellationToken); - Configuration[_key306] = _val307; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1284: - if (field.Type == TType.Struct) - { - InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); - await InitialNamespace.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1285: - if (field.Type == TType.Bool) - { - CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.List) - { - { - var _list308 = await iprot.ReadListBeginAsync(cancellationToken); - GetInfos = new List(_list308.Count); - for(int _i309 = 0; _i309 < _list308.Count; ++_i309) - { - int _elem310; - _elem310 = await iprot.ReadI32Async(cancellationToken); - GetInfos.Add(_elem310); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_serverProtocolVersion) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp311 = new TStruct("TOpenSessionResp"); - await oprot.WriteStructBeginAsync(tmp311, cancellationToken); - var tmp312 = new TField(); - if((Status != null)) - { - tmp312.Name = "status"; - tmp312.Type = TType.Struct; - tmp312.ID = 1; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp312.Name = "serverProtocolVersion"; - tmp312.Type = TType.I32; - tmp312.ID = 2; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await oprot.WriteI32Async((int)ServerProtocolVersion, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((SessionHandle != null) && __isset.sessionHandle) - { - tmp312.Name = "sessionHandle"; - tmp312.Type = TType.Struct; - tmp312.ID = 3; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Configuration != null) && __isset.configuration) - { - tmp312.Name = "configuration"; - tmp312.Type = TType.Map; - tmp312.ID = 4; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); - foreach (string _iter313 in Configuration.Keys) - { - await oprot.WriteStringAsync(_iter313, cancellationToken); - await oprot.WriteStringAsync(Configuration[_iter313], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((GetInfos != null) && __isset.getInfos) - { - tmp312.Name = "getInfos"; - tmp312.Type = TType.List; - tmp312.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); - foreach (int _iter314 in GetInfos) - { - await oprot.WriteI32Async(_iter314, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp312.Name = "initialNamespace"; - tmp312.Type = TType.Struct; - tmp312.ID = 1284; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await InitialNamespace.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.canUseMultipleCatalogs) - { - tmp312.Name = "canUseMultipleCatalogs"; - tmp312.Type = TType.Bool; - tmp312.ID = 1285; - await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); - await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TOpenSessionResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && global::System.Object.Equals(ServerProtocolVersion, other.ServerProtocolVersion) - && ((__isset.sessionHandle == other.__isset.sessionHandle) && ((!__isset.sessionHandle) || (global::System.Object.Equals(SessionHandle, other.SessionHandle)))) - && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) - && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) - && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) - && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - hashcode = (hashcode * 397) + ServerProtocolVersion.GetHashCode(); - if((SessionHandle != null) && __isset.sessionHandle) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((Configuration != null) && __isset.configuration) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); - } - if(__isset.canUseMultipleCatalogs) - { - hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); - } - if((GetInfos != null) && __isset.getInfos) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp315 = new StringBuilder("TOpenSessionResp("); - if((Status != null)) - { - tmp315.Append(", Status: "); - Status.ToString(tmp315); - } - tmp315.Append(", ServerProtocolVersion: "); - ServerProtocolVersion.ToString(tmp315); - if((SessionHandle != null) && __isset.sessionHandle) - { - tmp315.Append(", SessionHandle: "); - SessionHandle.ToString(tmp315); - } - if((Configuration != null) && __isset.configuration) - { - tmp315.Append(", Configuration: "); - Configuration.ToString(tmp315); - } - if((InitialNamespace != null) && __isset.initialNamespace) - { - tmp315.Append(", InitialNamespace: "); - InitialNamespace.ToString(tmp315); - } - if(__isset.canUseMultipleCatalogs) - { - tmp315.Append(", CanUseMultipleCatalogs: "); - CanUseMultipleCatalogs.ToString(tmp315); - } - if((GetInfos != null) && __isset.getInfos) - { - tmp315.Append(", GetInfos: "); - GetInfos.ToString(tmp315); - } - tmp315.Append(')'); - return tmp315.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs deleted file mode 100644 index f260602229..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs +++ /dev/null @@ -1,287 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TOperationHandle : TBase - { - private double _modifiedRowCount; - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TOperationType OperationType { get; set; } - - public bool HasResultSet { get; set; } - - public double ModifiedRowCount - { - get - { - return _modifiedRowCount; - } - set - { - __isset.modifiedRowCount = true; - this._modifiedRowCount = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool modifiedRowCount; - } - - public TOperationHandle() - { - } - - public TOperationHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier operationId, global::Apache.Hive.Service.Rpc.Thrift.TOperationType operationType, bool hasResultSet) : this() - { - this.OperationId = operationId; - this.OperationType = operationType; - this.HasResultSet = hasResultSet; - } - - public TOperationHandle DeepCopy() - { - var tmp274 = new TOperationHandle(); - if((OperationId != null)) - { - tmp274.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); - } - tmp274.OperationType = this.OperationType; - tmp274.HasResultSet = this.HasResultSet; - if(__isset.modifiedRowCount) - { - tmp274.ModifiedRowCount = this.ModifiedRowCount; - } - tmp274.__isset.modifiedRowCount = this.__isset.modifiedRowCount; - return tmp274; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_operationId = false; - bool isset_operationType = false; - bool isset_hasResultSet = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await OperationId.ReadAsync(iprot, cancellationToken); - isset_operationId = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I32) - { - OperationType = (global::Apache.Hive.Service.Rpc.Thrift.TOperationType)await iprot.ReadI32Async(cancellationToken); - isset_operationType = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Bool) - { - HasResultSet = await iprot.ReadBoolAsync(cancellationToken); - isset_hasResultSet = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Double) - { - ModifiedRowCount = await iprot.ReadDoubleAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_operationId) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_operationType) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_hasResultSet) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp275 = new TStruct("TOperationHandle"); - await oprot.WriteStructBeginAsync(tmp275, cancellationToken); - var tmp276 = new TField(); - if((OperationId != null)) - { - tmp276.Name = "operationId"; - tmp276.Type = TType.Struct; - tmp276.ID = 1; - await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); - await OperationId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp276.Name = "operationType"; - tmp276.Type = TType.I32; - tmp276.ID = 2; - await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); - await oprot.WriteI32Async((int)OperationType, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp276.Name = "hasResultSet"; - tmp276.Type = TType.Bool; - tmp276.ID = 3; - await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); - await oprot.WriteBoolAsync(HasResultSet, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.modifiedRowCount) - { - tmp276.Name = "modifiedRowCount"; - tmp276.Type = TType.Double; - tmp276.ID = 4; - await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); - await oprot.WriteDoubleAsync(ModifiedRowCount, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TOperationHandle other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(OperationId, other.OperationId) - && global::System.Object.Equals(OperationType, other.OperationType) - && global::System.Object.Equals(HasResultSet, other.HasResultSet) - && ((__isset.modifiedRowCount == other.__isset.modifiedRowCount) && ((!__isset.modifiedRowCount) || (global::System.Object.Equals(ModifiedRowCount, other.ModifiedRowCount)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationId != null)) - { - hashcode = (hashcode * 397) + OperationId.GetHashCode(); - } - hashcode = (hashcode * 397) + OperationType.GetHashCode(); - hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); - if(__isset.modifiedRowCount) - { - hashcode = (hashcode * 397) + ModifiedRowCount.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp277 = new StringBuilder("TOperationHandle("); - if((OperationId != null)) - { - tmp277.Append(", OperationId: "); - OperationId.ToString(tmp277); - } - tmp277.Append(", OperationType: "); - OperationType.ToString(tmp277); - tmp277.Append(", HasResultSet: "); - HasResultSet.ToString(tmp277); - if(__isset.modifiedRowCount) - { - tmp277.Append(", ModifiedRowCount: "); - ModifiedRowCount.ToString(tmp277); - } - tmp277.Append(')'); - return tmp277.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs deleted file mode 100644 index 8050cd527b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs +++ /dev/null @@ -1,23 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TOperationIdempotencyType - { - UNKNOWN = 0, - NON_IDEMPOTENT = 1, - IDEMPOTENT = 2, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs deleted file mode 100644 index 2969546b3b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs +++ /dev/null @@ -1,29 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TOperationState - { - INITIALIZED_STATE = 0, - RUNNING_STATE = 1, - FINISHED_STATE = 2, - CANCELED_STATE = 3, - CLOSED_STATE = 4, - ERROR_STATE = 5, - UKNOWN_STATE = 6, - PENDING_STATE = 7, - TIMEDOUT_STATE = 8, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs deleted file mode 100644 index 71d69f8e11..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs +++ /dev/null @@ -1,22 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TOperationTimeoutLevel - { - CLUSTER = 0, - SESSION = 1, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs deleted file mode 100644 index 35110c8306..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs +++ /dev/null @@ -1,30 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TOperationType - { - EXECUTE_STATEMENT = 0, - GET_TYPE_INFO = 1, - GET_CATALOGS = 2, - GET_SCHEMAS = 3, - GET_TABLES = 4, - GET_TABLE_TYPES = 5, - GET_COLUMNS = 6, - GET_FUNCTIONS = 7, - UNKNOWN = 8, - PROCEDURAL_SQL = 9, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs deleted file mode 100644 index 375fbf951e..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs +++ /dev/null @@ -1,215 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TPrimitiveTypeEntry : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers _typeQualifiers; - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TTypeId Type { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers TypeQualifiers - { - get - { - return _typeQualifiers; - } - set - { - __isset.typeQualifiers = true; - this._typeQualifiers = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool typeQualifiers; - } - - public TPrimitiveTypeEntry() - { - } - - public TPrimitiveTypeEntry(global::Apache.Hive.Service.Rpc.Thrift.TTypeId type) : this() - { - this.Type = type; - } - - public TPrimitiveTypeEntry DeepCopy() - { - var tmp15 = new TPrimitiveTypeEntry(); - tmp15.Type = this.Type; - if((TypeQualifiers != null) && __isset.typeQualifiers) - { - tmp15.TypeQualifiers = (global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers)this.TypeQualifiers.DeepCopy(); - } - tmp15.__isset.typeQualifiers = this.__isset.typeQualifiers; - return tmp15; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_type = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - Type = (global::Apache.Hive.Service.Rpc.Thrift.TTypeId)await iprot.ReadI32Async(cancellationToken); - isset_type = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - TypeQualifiers = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers(); - await TypeQualifiers.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_type) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp16 = new TStruct("TPrimitiveTypeEntry"); - await oprot.WriteStructBeginAsync(tmp16, cancellationToken); - var tmp17 = new TField(); - tmp17.Name = "type"; - tmp17.Type = TType.I32; - tmp17.ID = 1; - await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); - await oprot.WriteI32Async((int)Type, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((TypeQualifiers != null) && __isset.typeQualifiers) - { - tmp17.Name = "typeQualifiers"; - tmp17.Type = TType.Struct; - tmp17.ID = 2; - await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); - await TypeQualifiers.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TPrimitiveTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Type, other.Type) - && ((__isset.typeQualifiers == other.__isset.typeQualifiers) && ((!__isset.typeQualifiers) || (global::System.Object.Equals(TypeQualifiers, other.TypeQualifiers)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + Type.GetHashCode(); - if((TypeQualifiers != null) && __isset.typeQualifiers) - { - hashcode = (hashcode * 397) + TypeQualifiers.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp18 = new StringBuilder("TPrimitiveTypeEntry("); - tmp18.Append(", Type: "); - Type.ToString(tmp18); - if((TypeQualifiers != null) && __isset.typeQualifiers) - { - tmp18.Append(", TypeQualifiers: "); - TypeQualifiers.ToString(tmp18); - } - tmp18.Append(')'); - return tmp18.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs deleted file mode 100644 index 249134504b..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs +++ /dev/null @@ -1,390 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TProgressUpdateResp : TBase - { - - public List HeaderNames { get; set; } - - public List> Rows { get; set; } - - public double ProgressedPercentage { get; set; } - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus Status { get; set; } - - public string FooterSummary { get; set; } - - public long StartTime { get; set; } - - public TProgressUpdateResp() - { - } - - public TProgressUpdateResp(List headerNames, List> rows, double progressedPercentage, global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus status, string footerSummary, long startTime) : this() - { - this.HeaderNames = headerNames; - this.Rows = rows; - this.ProgressedPercentage = progressedPercentage; - this.Status = status; - this.FooterSummary = footerSummary; - this.StartTime = startTime; - } - - public TProgressUpdateResp DeepCopy() - { - var tmp628 = new TProgressUpdateResp(); - if((HeaderNames != null)) - { - tmp628.HeaderNames = this.HeaderNames.DeepCopy(); - } - if((Rows != null)) - { - tmp628.Rows = this.Rows.DeepCopy(); - } - tmp628.ProgressedPercentage = this.ProgressedPercentage; - tmp628.Status = this.Status; - if((FooterSummary != null)) - { - tmp628.FooterSummary = this.FooterSummary; - } - tmp628.StartTime = this.StartTime; - return tmp628; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_headerNames = false; - bool isset_rows = false; - bool isset_progressedPercentage = false; - bool isset_status = false; - bool isset_footerSummary = false; - bool isset_startTime = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list629 = await iprot.ReadListBeginAsync(cancellationToken); - HeaderNames = new List(_list629.Count); - for(int _i630 = 0; _i630 < _list629.Count; ++_i630) - { - string _elem631; - _elem631 = await iprot.ReadStringAsync(cancellationToken); - HeaderNames.Add(_elem631); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_headerNames = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.List) - { - { - var _list632 = await iprot.ReadListBeginAsync(cancellationToken); - Rows = new List>(_list632.Count); - for(int _i633 = 0; _i633 < _list632.Count; ++_i633) - { - List _elem634; - { - var _list635 = await iprot.ReadListBeginAsync(cancellationToken); - _elem634 = new List(_list635.Count); - for(int _i636 = 0; _i636 < _list635.Count; ++_i636) - { - string _elem637; - _elem637 = await iprot.ReadStringAsync(cancellationToken); - _elem634.Add(_elem637); - } - await iprot.ReadListEndAsync(cancellationToken); - } - Rows.Add(_elem634); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_rows = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Double) - { - ProgressedPercentage = await iprot.ReadDoubleAsync(cancellationToken); - isset_progressedPercentage = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I32) - { - Status = (global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus)await iprot.ReadI32Async(cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - FooterSummary = await iprot.ReadStringAsync(cancellationToken); - isset_footerSummary = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.I64) - { - StartTime = await iprot.ReadI64Async(cancellationToken); - isset_startTime = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_headerNames) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_rows) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_progressedPercentage) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_footerSummary) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_startTime) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp638 = new TStruct("TProgressUpdateResp"); - await oprot.WriteStructBeginAsync(tmp638, cancellationToken); - var tmp639 = new TField(); - if((HeaderNames != null)) - { - tmp639.Name = "headerNames"; - tmp639.Type = TType.List; - tmp639.ID = 1; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.String, HeaderNames.Count), cancellationToken); - foreach (string _iter640 in HeaderNames) - { - await oprot.WriteStringAsync(_iter640, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Rows != null)) - { - tmp639.Name = "rows"; - tmp639.Type = TType.List; - tmp639.ID = 2; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.List, Rows.Count), cancellationToken); - foreach (List _iter641 in Rows) - { - await oprot.WriteListBeginAsync(new TList(TType.String, _iter641.Count), cancellationToken); - foreach (string _iter642 in _iter641) - { - await oprot.WriteStringAsync(_iter642, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp639.Name = "progressedPercentage"; - tmp639.Type = TType.Double; - tmp639.ID = 3; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteDoubleAsync(ProgressedPercentage, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp639.Name = "status"; - tmp639.Type = TType.I32; - tmp639.ID = 4; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteI32Async((int)Status, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((FooterSummary != null)) - { - tmp639.Name = "footerSummary"; - tmp639.Type = TType.String; - tmp639.ID = 5; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteStringAsync(FooterSummary, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp639.Name = "startTime"; - tmp639.Type = TType.I64; - tmp639.ID = 6; - await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); - await oprot.WriteI64Async(StartTime, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TProgressUpdateResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(HeaderNames, other.HeaderNames) - && TCollections.Equals(Rows, other.Rows) - && global::System.Object.Equals(ProgressedPercentage, other.ProgressedPercentage) - && global::System.Object.Equals(Status, other.Status) - && global::System.Object.Equals(FooterSummary, other.FooterSummary) - && global::System.Object.Equals(StartTime, other.StartTime); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((HeaderNames != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(HeaderNames); - } - if((Rows != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); - } - hashcode = (hashcode * 397) + ProgressedPercentage.GetHashCode(); - hashcode = (hashcode * 397) + Status.GetHashCode(); - if((FooterSummary != null)) - { - hashcode = (hashcode * 397) + FooterSummary.GetHashCode(); - } - hashcode = (hashcode * 397) + StartTime.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp643 = new StringBuilder("TProgressUpdateResp("); - if((HeaderNames != null)) - { - tmp643.Append(", HeaderNames: "); - HeaderNames.ToString(tmp643); - } - if((Rows != null)) - { - tmp643.Append(", Rows: "); - Rows.ToString(tmp643); - } - tmp643.Append(", ProgressedPercentage: "); - ProgressedPercentage.ToString(tmp643); - tmp643.Append(", Status: "); - Status.ToString(tmp643); - if((FooterSummary != null)) - { - tmp643.Append(", FooterSummary: "); - FooterSummary.ToString(tmp643); - } - tmp643.Append(", StartTime: "); - StartTime.ToString(tmp643); - tmp643.Append(')'); - return tmp643.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs deleted file mode 100644 index 02a5f4db11..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs +++ /dev/null @@ -1,38 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TProtocolVersion - { - HIVE_CLI_SERVICE_PROTOCOL_V1 = 0, - HIVE_CLI_SERVICE_PROTOCOL_V2 = 1, - HIVE_CLI_SERVICE_PROTOCOL_V3 = 2, - HIVE_CLI_SERVICE_PROTOCOL_V4 = 3, - HIVE_CLI_SERVICE_PROTOCOL_V5 = 4, - HIVE_CLI_SERVICE_PROTOCOL_V6 = 5, - HIVE_CLI_SERVICE_PROTOCOL_V7 = 6, - HIVE_CLI_SERVICE_PROTOCOL_V8 = 7, - HIVE_CLI_SERVICE_PROTOCOL_V9 = 8, - HIVE_CLI_SERVICE_PROTOCOL_V10 = 9, - HIVE_CLI_SERVICE_PROTOCOL_V11 = 10, - SPARK_CLI_SERVICE_PROTOCOL_V1 = 42241, - SPARK_CLI_SERVICE_PROTOCOL_V2 = 42242, - SPARK_CLI_SERVICE_PROTOCOL_V3 = 42243, - SPARK_CLI_SERVICE_PROTOCOL_V4 = 42244, - SPARK_CLI_SERVICE_PROTOCOL_V5 = 42245, - SPARK_CLI_SERVICE_PROTOCOL_V6 = 42246, - SPARK_CLI_SERVICE_PROTOCOL_V7 = 42247, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs deleted file mode 100644 index 0888c6c91f..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs +++ /dev/null @@ -1,210 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TRenewDelegationTokenReq : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string DelegationToken { get; set; } - - public TRenewDelegationTokenReq() - { - } - - public TRenewDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() - { - this.SessionHandle = sessionHandle; - this.DelegationToken = delegationToken; - } - - public TRenewDelegationTokenReq DeepCopy() - { - var tmp618 = new TRenewDelegationTokenReq(); - if((SessionHandle != null)) - { - tmp618.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((DelegationToken != null)) - { - tmp618.DelegationToken = this.DelegationToken; - } - return tmp618; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_delegationToken = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - DelegationToken = await iprot.ReadStringAsync(cancellationToken); - isset_delegationToken = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_delegationToken) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp619 = new TStruct("TRenewDelegationTokenReq"); - await oprot.WriteStructBeginAsync(tmp619, cancellationToken); - var tmp620 = new TField(); - if((SessionHandle != null)) - { - tmp620.Name = "sessionHandle"; - tmp620.Type = TType.Struct; - tmp620.ID = 1; - await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((DelegationToken != null)) - { - tmp620.Name = "delegationToken"; - tmp620.Type = TType.String; - tmp620.ID = 2; - await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); - await oprot.WriteStringAsync(DelegationToken, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TRenewDelegationTokenReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && global::System.Object.Equals(DelegationToken, other.DelegationToken); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((DelegationToken != null)) - { - hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp621 = new StringBuilder("TRenewDelegationTokenReq("); - if((SessionHandle != null)) - { - tmp621.Append(", SessionHandle: "); - SessionHandle.ToString(tmp621); - } - if((DelegationToken != null)) - { - tmp621.Append(", DelegationToken: "); - DelegationToken.ToString(tmp621); - } - tmp621.Append(')'); - return tmp621.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs deleted file mode 100644 index f62b657ea4..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TRenewDelegationTokenResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TRenewDelegationTokenResp() - { - } - - public TRenewDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TRenewDelegationTokenResp DeepCopy() - { - var tmp623 = new TRenewDelegationTokenResp(); - if((Status != null)) - { - tmp623.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp623; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp624 = new TStruct("TRenewDelegationTokenResp"); - await oprot.WriteStructBeginAsync(tmp624, cancellationToken); - var tmp625 = new TField(); - if((Status != null)) - { - tmp625.Name = "status"; - tmp625.Type = TType.Struct; - tmp625.ID = 1; - await oprot.WriteFieldBeginAsync(tmp625, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TRenewDelegationTokenResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp626 = new StringBuilder("TRenewDelegationTokenResp("); - if((Status != null)) - { - tmp626.Append(", Status: "); - Status.ToString(tmp626); - } - tmp626.Append(')'); - return tmp626.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs deleted file mode 100644 index 728620e02a..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs +++ /dev/null @@ -1,23 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TResultPersistenceMode - { - ONLY_LARGE_RESULTS = 0, - ALL_QUERY_RESULTS = 1, - ALL_RESULTS = 2, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs deleted file mode 100644 index f04da578d7..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs +++ /dev/null @@ -1,183 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TRow : TBase - { - - public List ColVals { get; set; } - - public TRow() - { - } - - public TRow(List colVals) : this() - { - this.ColVals = colVals; - } - - public TRow DeepCopy() - { - var tmp123 = new TRow(); - if((ColVals != null)) - { - tmp123.ColVals = this.ColVals.DeepCopy(); - } - return tmp123; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_colVals = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list124 = await iprot.ReadListBeginAsync(cancellationToken); - ColVals = new List(_list124.Count); - for(int _i125 = 0; _i125 < _list124.Count; ++_i125) - { - global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _elem126; - _elem126 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnValue(); - await _elem126.ReadAsync(iprot, cancellationToken); - ColVals.Add(_elem126); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_colVals = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_colVals) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp127 = new TStruct("TRow"); - await oprot.WriteStructBeginAsync(tmp127, cancellationToken); - var tmp128 = new TField(); - if((ColVals != null)) - { - tmp128.Name = "colVals"; - tmp128.Type = TType.List; - tmp128.ID = 1; - await oprot.WriteFieldBeginAsync(tmp128, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, ColVals.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _iter129 in ColVals) - { - await _iter129.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TRow other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(ColVals, other.ColVals); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((ColVals != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ColVals); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp130 = new StringBuilder("TRow("); - if((ColVals != null)) - { - tmp130.Append(", ColVals: "); - ColVals.ToString(tmp130); - } - tmp130.Append(')'); - return tmp130.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs deleted file mode 100644 index 9b5aed6a36..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs +++ /dev/null @@ -1,512 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TRowSet : TBase - { - private List _columns; - private byte[] _binaryColumns; - private int _columnCount; - private List _arrowBatches; - private List _resultLinks; - - public long StartRowOffset { get; set; } - - public List Rows { get; set; } - - public List Columns - { - get - { - return _columns; - } - set - { - __isset.columns = true; - this._columns = value; - } - } - - public byte[] BinaryColumns - { - get - { - return _binaryColumns; - } - set - { - __isset.binaryColumns = true; - this._binaryColumns = value; - } - } - - public int ColumnCount - { - get - { - return _columnCount; - } - set - { - __isset.columnCount = true; - this._columnCount = value; - } - } - - public List ArrowBatches - { - get - { - return _arrowBatches; - } - set - { - __isset.arrowBatches = true; - this._arrowBatches = value; - } - } - - public List ResultLinks - { - get - { - return _resultLinks; - } - set - { - __isset.resultLinks = true; - this._resultLinks = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool columns; - public bool binaryColumns; - public bool columnCount; - public bool arrowBatches; - public bool resultLinks; - } - - public TRowSet() - { - } - - public TRowSet(long startRowOffset, List rows) : this() - { - this.StartRowOffset = startRowOffset; - this.Rows = rows; - } - - public TRowSet DeepCopy() - { - var tmp209 = new TRowSet(); - tmp209.StartRowOffset = this.StartRowOffset; - if((Rows != null)) - { - tmp209.Rows = this.Rows.DeepCopy(); - } - if((Columns != null) && __isset.columns) - { - tmp209.Columns = this.Columns.DeepCopy(); - } - tmp209.__isset.columns = this.__isset.columns; - if((BinaryColumns != null) && __isset.binaryColumns) - { - tmp209.BinaryColumns = this.BinaryColumns.ToArray(); - } - tmp209.__isset.binaryColumns = this.__isset.binaryColumns; - if(__isset.columnCount) - { - tmp209.ColumnCount = this.ColumnCount; - } - tmp209.__isset.columnCount = this.__isset.columnCount; - if((ArrowBatches != null) && __isset.arrowBatches) - { - tmp209.ArrowBatches = this.ArrowBatches.DeepCopy(); - } - tmp209.__isset.arrowBatches = this.__isset.arrowBatches; - if((ResultLinks != null) && __isset.resultLinks) - { - tmp209.ResultLinks = this.ResultLinks.DeepCopy(); - } - tmp209.__isset.resultLinks = this.__isset.resultLinks; - return tmp209; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_startRowOffset = false; - bool isset_rows = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I64) - { - StartRowOffset = await iprot.ReadI64Async(cancellationToken); - isset_startRowOffset = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.List) - { - { - var _list210 = await iprot.ReadListBeginAsync(cancellationToken); - Rows = new List(_list210.Count); - for(int _i211 = 0; _i211 < _list210.Count; ++_i211) - { - global::Apache.Hive.Service.Rpc.Thrift.TRow _elem212; - _elem212 = new global::Apache.Hive.Service.Rpc.Thrift.TRow(); - await _elem212.ReadAsync(iprot, cancellationToken); - Rows.Add(_elem212); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_rows = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.List) - { - { - var _list213 = await iprot.ReadListBeginAsync(cancellationToken); - Columns = new List(_list213.Count); - for(int _i214 = 0; _i214 < _list213.Count; ++_i214) - { - global::Apache.Hive.Service.Rpc.Thrift.TColumn _elem215; - _elem215 = new global::Apache.Hive.Service.Rpc.Thrift.TColumn(); - await _elem215.ReadAsync(iprot, cancellationToken); - Columns.Add(_elem215); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - BinaryColumns = await iprot.ReadBinaryAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.I32) - { - ColumnCount = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1281: - if (field.Type == TType.List) - { - { - var _list216 = await iprot.ReadListBeginAsync(cancellationToken); - ArrowBatches = new List(_list216.Count); - for(int _i217 = 0; _i217 < _list216.Count; ++_i217) - { - global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _elem218; - _elem218 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch(); - await _elem218.ReadAsync(iprot, cancellationToken); - ArrowBatches.Add(_elem218); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 1282: - if (field.Type == TType.List) - { - { - var _list219 = await iprot.ReadListBeginAsync(cancellationToken); - ResultLinks = new List(_list219.Count); - for(int _i220 = 0; _i220 < _list219.Count; ++_i220) - { - global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _elem221; - _elem221 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink(); - await _elem221.ReadAsync(iprot, cancellationToken); - ResultLinks.Add(_elem221); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_startRowOffset) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_rows) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp222 = new TStruct("TRowSet"); - await oprot.WriteStructBeginAsync(tmp222, cancellationToken); - var tmp223 = new TField(); - tmp223.Name = "startRowOffset"; - tmp223.Type = TType.I64; - tmp223.ID = 1; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteI64Async(StartRowOffset, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((Rows != null)) - { - tmp223.Name = "rows"; - tmp223.Type = TType.List; - tmp223.ID = 2; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, Rows.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TRow _iter224 in Rows) - { - await _iter224.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Columns != null) && __isset.columns) - { - tmp223.Name = "columns"; - tmp223.Type = TType.List; - tmp223.ID = 3; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumn _iter225 in Columns) - { - await _iter225.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((BinaryColumns != null) && __isset.binaryColumns) - { - tmp223.Name = "binaryColumns"; - tmp223.Type = TType.String; - tmp223.ID = 4; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteBinaryAsync(BinaryColumns, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.columnCount) - { - tmp223.Name = "columnCount"; - tmp223.Type = TType.I32; - tmp223.ID = 5; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteI32Async(ColumnCount, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ArrowBatches != null) && __isset.arrowBatches) - { - tmp223.Name = "arrowBatches"; - tmp223.Type = TType.List; - tmp223.ID = 1281; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, ArrowBatches.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _iter226 in ArrowBatches) - { - await _iter226.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResultLinks != null) && __isset.resultLinks) - { - tmp223.Name = "resultLinks"; - tmp223.Type = TType.List; - tmp223.ID = 1282; - await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultLinks.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _iter227 in ResultLinks) - { - await _iter227.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TRowSet other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(StartRowOffset, other.StartRowOffset) - && TCollections.Equals(Rows, other.Rows) - && ((__isset.columns == other.__isset.columns) && ((!__isset.columns) || (TCollections.Equals(Columns, other.Columns)))) - && ((__isset.binaryColumns == other.__isset.binaryColumns) && ((!__isset.binaryColumns) || (TCollections.Equals(BinaryColumns, other.BinaryColumns)))) - && ((__isset.columnCount == other.__isset.columnCount) && ((!__isset.columnCount) || (global::System.Object.Equals(ColumnCount, other.ColumnCount)))) - && ((__isset.arrowBatches == other.__isset.arrowBatches) && ((!__isset.arrowBatches) || (TCollections.Equals(ArrowBatches, other.ArrowBatches)))) - && ((__isset.resultLinks == other.__isset.resultLinks) && ((!__isset.resultLinks) || (TCollections.Equals(ResultLinks, other.ResultLinks)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); - if((Rows != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); - } - if((Columns != null) && __isset.columns) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); - } - if((BinaryColumns != null) && __isset.binaryColumns) - { - hashcode = (hashcode * 397) + BinaryColumns.GetHashCode(); - } - if(__isset.columnCount) - { - hashcode = (hashcode * 397) + ColumnCount.GetHashCode(); - } - if((ArrowBatches != null) && __isset.arrowBatches) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ArrowBatches); - } - if((ResultLinks != null) && __isset.resultLinks) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultLinks); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp228 = new StringBuilder("TRowSet("); - tmp228.Append(", StartRowOffset: "); - StartRowOffset.ToString(tmp228); - if((Rows != null)) - { - tmp228.Append(", Rows: "); - Rows.ToString(tmp228); - } - if((Columns != null) && __isset.columns) - { - tmp228.Append(", Columns: "); - Columns.ToString(tmp228); - } - if((BinaryColumns != null) && __isset.binaryColumns) - { - tmp228.Append(", BinaryColumns: "); - BinaryColumns.ToString(tmp228); - } - if(__isset.columnCount) - { - tmp228.Append(", ColumnCount: "); - ColumnCount.ToString(tmp228); - } - if((ArrowBatches != null) && __isset.arrowBatches) - { - tmp228.Append(", ArrowBatches: "); - ArrowBatches.ToString(tmp228); - } - if((ResultLinks != null) && __isset.resultLinks) - { - tmp228.Append(", ResultLinks: "); - ResultLinks.ToString(tmp228); - } - tmp228.Append(')'); - return tmp228.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs deleted file mode 100644 index ef0e2b2cb4..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSessionHandle : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId { get; set; } - - public TSessionHandle() - { - } - - public TSessionHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier sessionId) : this() - { - this.SessionId = sessionId; - } - - public TSessionHandle DeepCopy() - { - var tmp269 = new TSessionHandle(); - if((SessionId != null)) - { - tmp269.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); - } - return tmp269; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionId = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); - await SessionId.ReadAsync(iprot, cancellationToken); - isset_sessionId = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionId) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp270 = new TStruct("TSessionHandle"); - await oprot.WriteStructBeginAsync(tmp270, cancellationToken); - var tmp271 = new TField(); - if((SessionId != null)) - { - tmp271.Name = "sessionId"; - tmp271.Type = TType.Struct; - tmp271.ID = 1; - await oprot.WriteFieldBeginAsync(tmp271, cancellationToken); - await SessionId.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSessionHandle other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionId, other.SessionId); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionId != null)) - { - hashcode = (hashcode * 397) + SessionId.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp272 = new StringBuilder("TSessionHandle("); - if((SessionId != null)) - { - tmp272.Append(", SessionId: "); - SessionId.ToString(tmp272); - } - tmp272.Append(')'); - return tmp272.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs deleted file mode 100644 index 15578dc770..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs +++ /dev/null @@ -1,241 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSetClientInfoReq : TBase - { - private Dictionary _configuration; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public Dictionary Configuration - { - get - { - return _configuration; - } - set - { - __isset.configuration = true; - this._configuration = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool configuration; - } - - public TSetClientInfoReq() - { - } - - public TSetClientInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() - { - this.SessionHandle = sessionHandle; - } - - public TSetClientInfoReq DeepCopy() - { - var tmp317 = new TSetClientInfoReq(); - if((SessionHandle != null)) - { - tmp317.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((Configuration != null) && __isset.configuration) - { - tmp317.Configuration = this.Configuration.DeepCopy(); - } - tmp317.__isset.configuration = this.__isset.configuration; - return tmp317; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Map) - { - { - var _map318 = await iprot.ReadMapBeginAsync(cancellationToken); - Configuration = new Dictionary(_map318.Count); - for(int _i319 = 0; _i319 < _map318.Count; ++_i319) - { - string _key320; - string _val321; - _key320 = await iprot.ReadStringAsync(cancellationToken); - _val321 = await iprot.ReadStringAsync(cancellationToken); - Configuration[_key320] = _val321; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp322 = new TStruct("TSetClientInfoReq"); - await oprot.WriteStructBeginAsync(tmp322, cancellationToken); - var tmp323 = new TField(); - if((SessionHandle != null)) - { - tmp323.Name = "sessionHandle"; - tmp323.Type = TType.Struct; - tmp323.ID = 1; - await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Configuration != null) && __isset.configuration) - { - tmp323.Name = "configuration"; - tmp323.Type = TType.Map; - tmp323.ID = 2; - await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); - foreach (string _iter324 in Configuration.Keys) - { - await oprot.WriteStringAsync(_iter324, cancellationToken); - await oprot.WriteStringAsync(Configuration[_iter324], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSetClientInfoReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((Configuration != null) && __isset.configuration) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp325 = new StringBuilder("TSetClientInfoReq("); - if((SessionHandle != null)) - { - tmp325.Append(", SessionHandle: "); - SessionHandle.ToString(tmp325); - } - if((Configuration != null) && __isset.configuration) - { - tmp325.Append(", Configuration: "); - Configuration.ToString(tmp325); - } - tmp325.Append(')'); - return tmp325.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs deleted file mode 100644 index 07a9f53444..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSetClientInfoResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public TSetClientInfoResp() - { - } - - public TSetClientInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() - { - this.Status = status; - } - - public TSetClientInfoResp DeepCopy() - { - var tmp327 = new TSetClientInfoResp(); - if((Status != null)) - { - tmp327.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - return tmp327; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp328 = new TStruct("TSetClientInfoResp"); - await oprot.WriteStructBeginAsync(tmp328, cancellationToken); - var tmp329 = new TField(); - if((Status != null)) - { - tmp329.Name = "status"; - tmp329.Type = TType.Struct; - tmp329.ID = 1; - await oprot.WriteFieldBeginAsync(tmp329, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSetClientInfoResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp330 = new StringBuilder("TSetClientInfoResp("); - if((Status != null)) - { - tmp330.Append(", Status: "); - Status.ToString(tmp330); - } - tmp330.Append(')'); - return tmp330.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs deleted file mode 100644 index 25690516e1..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs +++ /dev/null @@ -1,197 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSparkArrowBatch : TBase - { - - public byte[] Batch { get; set; } - - public long RowCount { get; set; } - - public TSparkArrowBatch() - { - } - - public TSparkArrowBatch(byte[] batch, long rowCount) : this() - { - this.Batch = batch; - this.RowCount = rowCount; - } - - public TSparkArrowBatch DeepCopy() - { - var tmp230 = new TSparkArrowBatch(); - if((Batch != null)) - { - tmp230.Batch = this.Batch.ToArray(); - } - tmp230.RowCount = this.RowCount; - return tmp230; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_batch = false; - bool isset_rowCount = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - Batch = await iprot.ReadBinaryAsync(cancellationToken); - isset_batch = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I64) - { - RowCount = await iprot.ReadI64Async(cancellationToken); - isset_rowCount = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_batch) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_rowCount) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp231 = new TStruct("TSparkArrowBatch"); - await oprot.WriteStructBeginAsync(tmp231, cancellationToken); - var tmp232 = new TField(); - if((Batch != null)) - { - tmp232.Name = "batch"; - tmp232.Type = TType.String; - tmp232.ID = 1; - await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); - await oprot.WriteBinaryAsync(Batch, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp232.Name = "rowCount"; - tmp232.Type = TType.I64; - tmp232.ID = 2; - await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); - await oprot.WriteI64Async(RowCount, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSparkArrowBatch other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Batch, other.Batch) - && global::System.Object.Equals(RowCount, other.RowCount); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Batch != null)) - { - hashcode = (hashcode * 397) + Batch.GetHashCode(); - } - hashcode = (hashcode * 397) + RowCount.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp233 = new StringBuilder("TSparkArrowBatch("); - if((Batch != null)) - { - tmp233.Append(", Batch: "); - Batch.ToString(tmp233); - } - tmp233.Append(", RowCount: "); - RowCount.ToString(tmp233); - tmp233.Append(')'); - return tmp233.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs deleted file mode 100644 index 2e45731410..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs +++ /dev/null @@ -1,287 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSparkArrowResultLink : TBase - { - - public string FileLink { get; set; } - - public long ExpiryTime { get; set; } - - public long StartRowOffset { get; set; } - - public long RowCount { get; set; } - - public long BytesNum { get; set; } - - public TSparkArrowResultLink() - { - } - - public TSparkArrowResultLink(string fileLink, long expiryTime, long startRowOffset, long rowCount, long bytesNum) : this() - { - this.FileLink = fileLink; - this.ExpiryTime = expiryTime; - this.StartRowOffset = startRowOffset; - this.RowCount = rowCount; - this.BytesNum = bytesNum; - } - - public TSparkArrowResultLink DeepCopy() - { - var tmp235 = new TSparkArrowResultLink(); - if((FileLink != null)) - { - tmp235.FileLink = this.FileLink; - } - tmp235.ExpiryTime = this.ExpiryTime; - tmp235.StartRowOffset = this.StartRowOffset; - tmp235.RowCount = this.RowCount; - tmp235.BytesNum = this.BytesNum; - return tmp235; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_fileLink = false; - bool isset_expiryTime = false; - bool isset_startRowOffset = false; - bool isset_rowCount = false; - bool isset_bytesNum = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - FileLink = await iprot.ReadStringAsync(cancellationToken); - isset_fileLink = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I64) - { - ExpiryTime = await iprot.ReadI64Async(cancellationToken); - isset_expiryTime = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.I64) - { - StartRowOffset = await iprot.ReadI64Async(cancellationToken); - isset_startRowOffset = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I64) - { - RowCount = await iprot.ReadI64Async(cancellationToken); - isset_rowCount = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.I64) - { - BytesNum = await iprot.ReadI64Async(cancellationToken); - isset_bytesNum = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_fileLink) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_expiryTime) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_startRowOffset) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_rowCount) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_bytesNum) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp236 = new TStruct("TSparkArrowResultLink"); - await oprot.WriteStructBeginAsync(tmp236, cancellationToken); - var tmp237 = new TField(); - if((FileLink != null)) - { - tmp237.Name = "fileLink"; - tmp237.Type = TType.String; - tmp237.ID = 1; - await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); - await oprot.WriteStringAsync(FileLink, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - tmp237.Name = "expiryTime"; - tmp237.Type = TType.I64; - tmp237.ID = 2; - await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); - await oprot.WriteI64Async(ExpiryTime, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp237.Name = "startRowOffset"; - tmp237.Type = TType.I64; - tmp237.ID = 3; - await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); - await oprot.WriteI64Async(StartRowOffset, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp237.Name = "rowCount"; - tmp237.Type = TType.I64; - tmp237.ID = 4; - await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); - await oprot.WriteI64Async(RowCount, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - tmp237.Name = "bytesNum"; - tmp237.Type = TType.I64; - tmp237.ID = 5; - await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); - await oprot.WriteI64Async(BytesNum, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSparkArrowResultLink other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(FileLink, other.FileLink) - && global::System.Object.Equals(ExpiryTime, other.ExpiryTime) - && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) - && global::System.Object.Equals(RowCount, other.RowCount) - && global::System.Object.Equals(BytesNum, other.BytesNum); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((FileLink != null)) - { - hashcode = (hashcode * 397) + FileLink.GetHashCode(); - } - hashcode = (hashcode * 397) + ExpiryTime.GetHashCode(); - hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); - hashcode = (hashcode * 397) + RowCount.GetHashCode(); - hashcode = (hashcode * 397) + BytesNum.GetHashCode(); - } - return hashcode; - } - - public override string ToString() - { - var tmp238 = new StringBuilder("TSparkArrowResultLink("); - if((FileLink != null)) - { - tmp238.Append(", FileLink: "); - FileLink.ToString(tmp238); - } - tmp238.Append(", ExpiryTime: "); - ExpiryTime.ToString(tmp238); - tmp238.Append(", StartRowOffset: "); - StartRowOffset.ToString(tmp238); - tmp238.Append(", RowCount: "); - RowCount.ToString(tmp238); - tmp238.Append(", BytesNum: "); - BytesNum.ToString(tmp238); - tmp238.Append(')'); - return tmp238.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs deleted file mode 100644 index fc66ad4bd4..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs +++ /dev/null @@ -1,328 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSparkArrowTypes : TBase - { - private bool _timestampAsArrow; - private bool _decimalAsArrow; - private bool _complexTypesAsArrow; - private bool _intervalTypesAsArrow; - - public bool TimestampAsArrow - { - get - { - return _timestampAsArrow; - } - set - { - __isset.timestampAsArrow = true; - this._timestampAsArrow = value; - } - } - - public bool DecimalAsArrow - { - get - { - return _decimalAsArrow; - } - set - { - __isset.decimalAsArrow = true; - this._decimalAsArrow = value; - } - } - - public bool ComplexTypesAsArrow - { - get - { - return _complexTypesAsArrow; - } - set - { - __isset.complexTypesAsArrow = true; - this._complexTypesAsArrow = value; - } - } - - public bool IntervalTypesAsArrow - { - get - { - return _intervalTypesAsArrow; - } - set - { - __isset.intervalTypesAsArrow = true; - this._intervalTypesAsArrow = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool timestampAsArrow; - public bool decimalAsArrow; - public bool complexTypesAsArrow; - public bool intervalTypesAsArrow; - } - - public TSparkArrowTypes() - { - } - - public TSparkArrowTypes DeepCopy() - { - var tmp250 = new TSparkArrowTypes(); - if(__isset.timestampAsArrow) - { - tmp250.TimestampAsArrow = this.TimestampAsArrow; - } - tmp250.__isset.timestampAsArrow = this.__isset.timestampAsArrow; - if(__isset.decimalAsArrow) - { - tmp250.DecimalAsArrow = this.DecimalAsArrow; - } - tmp250.__isset.decimalAsArrow = this.__isset.decimalAsArrow; - if(__isset.complexTypesAsArrow) - { - tmp250.ComplexTypesAsArrow = this.ComplexTypesAsArrow; - } - tmp250.__isset.complexTypesAsArrow = this.__isset.complexTypesAsArrow; - if(__isset.intervalTypesAsArrow) - { - tmp250.IntervalTypesAsArrow = this.IntervalTypesAsArrow; - } - tmp250.__isset.intervalTypesAsArrow = this.__isset.intervalTypesAsArrow; - return tmp250; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Bool) - { - TimestampAsArrow = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Bool) - { - DecimalAsArrow = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Bool) - { - ComplexTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Bool) - { - IntervalTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp251 = new TStruct("TSparkArrowTypes"); - await oprot.WriteStructBeginAsync(tmp251, cancellationToken); - var tmp252 = new TField(); - if(__isset.timestampAsArrow) - { - tmp252.Name = "timestampAsArrow"; - tmp252.Type = TType.Bool; - tmp252.ID = 1; - await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); - await oprot.WriteBoolAsync(TimestampAsArrow, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.decimalAsArrow) - { - tmp252.Name = "decimalAsArrow"; - tmp252.Type = TType.Bool; - tmp252.ID = 2; - await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); - await oprot.WriteBoolAsync(DecimalAsArrow, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.complexTypesAsArrow) - { - tmp252.Name = "complexTypesAsArrow"; - tmp252.Type = TType.Bool; - tmp252.ID = 3; - await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); - await oprot.WriteBoolAsync(ComplexTypesAsArrow, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.intervalTypesAsArrow) - { - tmp252.Name = "intervalTypesAsArrow"; - tmp252.Type = TType.Bool; - tmp252.ID = 4; - await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); - await oprot.WriteBoolAsync(IntervalTypesAsArrow, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSparkArrowTypes other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.timestampAsArrow == other.__isset.timestampAsArrow) && ((!__isset.timestampAsArrow) || (global::System.Object.Equals(TimestampAsArrow, other.TimestampAsArrow)))) - && ((__isset.decimalAsArrow == other.__isset.decimalAsArrow) && ((!__isset.decimalAsArrow) || (global::System.Object.Equals(DecimalAsArrow, other.DecimalAsArrow)))) - && ((__isset.complexTypesAsArrow == other.__isset.complexTypesAsArrow) && ((!__isset.complexTypesAsArrow) || (global::System.Object.Equals(ComplexTypesAsArrow, other.ComplexTypesAsArrow)))) - && ((__isset.intervalTypesAsArrow == other.__isset.intervalTypesAsArrow) && ((!__isset.intervalTypesAsArrow) || (global::System.Object.Equals(IntervalTypesAsArrow, other.IntervalTypesAsArrow)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.timestampAsArrow) - { - hashcode = (hashcode * 397) + TimestampAsArrow.GetHashCode(); - } - if(__isset.decimalAsArrow) - { - hashcode = (hashcode * 397) + DecimalAsArrow.GetHashCode(); - } - if(__isset.complexTypesAsArrow) - { - hashcode = (hashcode * 397) + ComplexTypesAsArrow.GetHashCode(); - } - if(__isset.intervalTypesAsArrow) - { - hashcode = (hashcode * 397) + IntervalTypesAsArrow.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp253 = new StringBuilder("TSparkArrowTypes("); - int tmp254 = 0; - if(__isset.timestampAsArrow) - { - if(0 < tmp254++) { tmp253.Append(", "); } - tmp253.Append("TimestampAsArrow: "); - TimestampAsArrow.ToString(tmp253); - } - if(__isset.decimalAsArrow) - { - if(0 < tmp254++) { tmp253.Append(", "); } - tmp253.Append("DecimalAsArrow: "); - DecimalAsArrow.ToString(tmp253); - } - if(__isset.complexTypesAsArrow) - { - if(0 < tmp254++) { tmp253.Append(", "); } - tmp253.Append("ComplexTypesAsArrow: "); - ComplexTypesAsArrow.ToString(tmp253); - } - if(__isset.intervalTypesAsArrow) - { - if(0 < tmp254++) { tmp253.Append(", "); } - tmp253.Append("IntervalTypesAsArrow: "); - IntervalTypesAsArrow.ToString(tmp253); - } - tmp253.Append(')'); - return tmp253.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs deleted file mode 100644 index b970f9e62d..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs +++ /dev/null @@ -1,332 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSparkDirectResults : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _operationStatus; - private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; - private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _resultSet; - private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _closeOperation; - - public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp OperationStatus - { - get - { - return _operationStatus; - } - set - { - __isset.operationStatus = true; - this._operationStatus = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata - { - get - { - return _resultSetMetadata; - } - set - { - __isset.resultSetMetadata = true; - this._resultSetMetadata = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp ResultSet - { - get - { - return _resultSet; - } - set - { - __isset.resultSet = true; - this._resultSet = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp CloseOperation - { - get - { - return _closeOperation; - } - set - { - __isset.closeOperation = true; - this._closeOperation = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool operationStatus; - public bool resultSetMetadata; - public bool resultSet; - public bool closeOperation; - } - - public TSparkDirectResults() - { - } - - public TSparkDirectResults DeepCopy() - { - var tmp245 = new TSparkDirectResults(); - if((OperationStatus != null) && __isset.operationStatus) - { - tmp245.OperationStatus = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.OperationStatus.DeepCopy(); - } - tmp245.__isset.operationStatus = this.__isset.operationStatus; - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - tmp245.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); - } - tmp245.__isset.resultSetMetadata = this.__isset.resultSetMetadata; - if((ResultSet != null) && __isset.resultSet) - { - tmp245.ResultSet = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.ResultSet.DeepCopy(); - } - tmp245.__isset.resultSet = this.__isset.resultSet; - if((CloseOperation != null) && __isset.closeOperation) - { - tmp245.CloseOperation = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.CloseOperation.DeepCopy(); - } - tmp245.__isset.closeOperation = this.__isset.closeOperation; - return tmp245; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - OperationStatus = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); - await OperationStatus.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); - await ResultSetMetadata.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - ResultSet = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); - await ResultSet.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Struct) - { - CloseOperation = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); - await CloseOperation.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp246 = new TStruct("TSparkDirectResults"); - await oprot.WriteStructBeginAsync(tmp246, cancellationToken); - var tmp247 = new TField(); - if((OperationStatus != null) && __isset.operationStatus) - { - tmp247.Name = "operationStatus"; - tmp247.Type = TType.Struct; - tmp247.ID = 1; - await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); - await OperationStatus.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - tmp247.Name = "resultSetMetadata"; - tmp247.Type = TType.Struct; - tmp247.ID = 2; - await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); - await ResultSetMetadata.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ResultSet != null) && __isset.resultSet) - { - tmp247.Name = "resultSet"; - tmp247.Type = TType.Struct; - tmp247.ID = 3; - await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); - await ResultSet.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((CloseOperation != null) && __isset.closeOperation) - { - tmp247.Name = "closeOperation"; - tmp247.Type = TType.Struct; - tmp247.ID = 4; - await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); - await CloseOperation.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSparkDirectResults other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.operationStatus == other.__isset.operationStatus) && ((!__isset.operationStatus) || (global::System.Object.Equals(OperationStatus, other.OperationStatus)))) - && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) - && ((__isset.resultSet == other.__isset.resultSet) && ((!__isset.resultSet) || (global::System.Object.Equals(ResultSet, other.ResultSet)))) - && ((__isset.closeOperation == other.__isset.closeOperation) && ((!__isset.closeOperation) || (global::System.Object.Equals(CloseOperation, other.CloseOperation)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((OperationStatus != null) && __isset.operationStatus) - { - hashcode = (hashcode * 397) + OperationStatus.GetHashCode(); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); - } - if((ResultSet != null) && __isset.resultSet) - { - hashcode = (hashcode * 397) + ResultSet.GetHashCode(); - } - if((CloseOperation != null) && __isset.closeOperation) - { - hashcode = (hashcode * 397) + CloseOperation.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp248 = new StringBuilder("TSparkDirectResults("); - int tmp249 = 0; - if((OperationStatus != null) && __isset.operationStatus) - { - if(0 < tmp249++) { tmp248.Append(", "); } - tmp248.Append("OperationStatus: "); - OperationStatus.ToString(tmp248); - } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) - { - if(0 < tmp249++) { tmp248.Append(", "); } - tmp248.Append("ResultSetMetadata: "); - ResultSetMetadata.ToString(tmp248); - } - if((ResultSet != null) && __isset.resultSet) - { - if(0 < tmp249++) { tmp248.Append(", "); } - tmp248.Append("ResultSet: "); - ResultSet.ToString(tmp248); - } - if((CloseOperation != null) && __isset.closeOperation) - { - if(0 < tmp249++) { tmp248.Append(", "); } - tmp248.Append("CloseOperation: "); - CloseOperation.ToString(tmp248); - } - tmp248.Append(')'); - return tmp248.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs deleted file mode 100644 index 04d3b27731..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs +++ /dev/null @@ -1,210 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TSparkGetDirectResults : TBase - { - private long _maxBytes; - - public long MaxRows { get; set; } - - public long MaxBytes - { - get - { - return _maxBytes; - } - set - { - __isset.maxBytes = true; - this._maxBytes = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool maxBytes; - } - - public TSparkGetDirectResults() - { - } - - public TSparkGetDirectResults(long maxRows) : this() - { - this.MaxRows = maxRows; - } - - public TSparkGetDirectResults DeepCopy() - { - var tmp240 = new TSparkGetDirectResults(); - tmp240.MaxRows = this.MaxRows; - if(__isset.maxBytes) - { - tmp240.MaxBytes = this.MaxBytes; - } - tmp240.__isset.maxBytes = this.__isset.maxBytes; - return tmp240; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_maxRows = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I64) - { - MaxRows = await iprot.ReadI64Async(cancellationToken); - isset_maxRows = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.I64) - { - MaxBytes = await iprot.ReadI64Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_maxRows) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp241 = new TStruct("TSparkGetDirectResults"); - await oprot.WriteStructBeginAsync(tmp241, cancellationToken); - var tmp242 = new TField(); - tmp242.Name = "maxRows"; - tmp242.Type = TType.I64; - tmp242.ID = 1; - await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); - await oprot.WriteI64Async(MaxRows, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.maxBytes) - { - tmp242.Name = "maxBytes"; - tmp242.Type = TType.I64; - tmp242.ID = 2; - await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); - await oprot.WriteI64Async(MaxBytes, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TSparkGetDirectResults other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(MaxRows, other.MaxRows) - && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + MaxRows.GetHashCode(); - if(__isset.maxBytes) - { - hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp243 = new StringBuilder("TSparkGetDirectResults("); - tmp243.Append(", MaxRows: "); - MaxRows.ToString(tmp243); - if(__isset.maxBytes) - { - tmp243.Append(", MaxBytes: "); - MaxBytes.ToString(tmp243); - } - tmp243.Append(')'); - return tmp243.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs deleted file mode 100644 index aec77d61a5..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs +++ /dev/null @@ -1,24 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TSparkRowSetType - { - ARROW_BASED_SET = 0, - COLUMN_BASED_SET = 1, - ROW_BASED_SET = 2, - URL_BASED_SET = 3, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs deleted file mode 100644 index 9ccbb7f626..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs +++ /dev/null @@ -1,376 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TStatus : TBase - { - private List _infoMessages; - private string _sqlState; - private int _errorCode; - private string _errorMessage; - - /// - /// - /// - /// - public global::Apache.Hive.Service.Rpc.Thrift.TStatusCode StatusCode { get; set; } - - public List InfoMessages - { - get - { - return _infoMessages; - } - set - { - __isset.infoMessages = true; - this._infoMessages = value; - } - } - - public string SqlState - { - get - { - return _sqlState; - } - set - { - __isset.sqlState = true; - this._sqlState = value; - } - } - - public int ErrorCode - { - get - { - return _errorCode; - } - set - { - __isset.errorCode = true; - this._errorCode = value; - } - } - - public string ErrorMessage - { - get - { - return _errorMessage; - } - set - { - __isset.errorMessage = true; - this._errorMessage = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool infoMessages; - public bool sqlState; - public bool errorCode; - public bool errorMessage; - } - - public TStatus() - { - } - - public TStatus(global::Apache.Hive.Service.Rpc.Thrift.TStatusCode statusCode) : this() - { - this.StatusCode = statusCode; - } - - public TStatus DeepCopy() - { - var tmp255 = new TStatus(); - tmp255.StatusCode = this.StatusCode; - if((InfoMessages != null) && __isset.infoMessages) - { - tmp255.InfoMessages = this.InfoMessages.DeepCopy(); - } - tmp255.__isset.infoMessages = this.__isset.infoMessages; - if((SqlState != null) && __isset.sqlState) - { - tmp255.SqlState = this.SqlState; - } - tmp255.__isset.sqlState = this.__isset.sqlState; - if(__isset.errorCode) - { - tmp255.ErrorCode = this.ErrorCode; - } - tmp255.__isset.errorCode = this.__isset.errorCode; - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp255.ErrorMessage = this.ErrorMessage; - } - tmp255.__isset.errorMessage = this.__isset.errorMessage; - return tmp255; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_statusCode = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - StatusCode = (global::Apache.Hive.Service.Rpc.Thrift.TStatusCode)await iprot.ReadI32Async(cancellationToken); - isset_statusCode = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.List) - { - { - var _list256 = await iprot.ReadListBeginAsync(cancellationToken); - InfoMessages = new List(_list256.Count); - for(int _i257 = 0; _i257 < _list256.Count; ++_i257) - { - string _elem258; - _elem258 = await iprot.ReadStringAsync(cancellationToken); - InfoMessages.Add(_elem258); - } - await iprot.ReadListEndAsync(cancellationToken); - } - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - SqlState = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.I32) - { - ErrorCode = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.String) - { - ErrorMessage = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_statusCode) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp259 = new TStruct("TStatus"); - await oprot.WriteStructBeginAsync(tmp259, cancellationToken); - var tmp260 = new TField(); - tmp260.Name = "statusCode"; - tmp260.Type = TType.I32; - tmp260.ID = 1; - await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); - await oprot.WriteI32Async((int)StatusCode, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - if((InfoMessages != null) && __isset.infoMessages) - { - tmp260.Name = "infoMessages"; - tmp260.Type = TType.List; - tmp260.ID = 2; - await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.String, InfoMessages.Count), cancellationToken); - foreach (string _iter261 in InfoMessages) - { - await oprot.WriteStringAsync(_iter261, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((SqlState != null) && __isset.sqlState) - { - tmp260.Name = "sqlState"; - tmp260.Type = TType.String; - tmp260.ID = 3; - await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); - await oprot.WriteStringAsync(SqlState, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if(__isset.errorCode) - { - tmp260.Name = "errorCode"; - tmp260.Type = TType.I32; - tmp260.ID = 4; - await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); - await oprot.WriteI32Async(ErrorCode, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp260.Name = "errorMessage"; - tmp260.Type = TType.String; - tmp260.ID = 5; - await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); - await oprot.WriteStringAsync(ErrorMessage, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TStatus other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(StatusCode, other.StatusCode) - && ((__isset.infoMessages == other.__isset.infoMessages) && ((!__isset.infoMessages) || (TCollections.Equals(InfoMessages, other.InfoMessages)))) - && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) - && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) - && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - hashcode = (hashcode * 397) + StatusCode.GetHashCode(); - if((InfoMessages != null) && __isset.infoMessages) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(InfoMessages); - } - if((SqlState != null) && __isset.sqlState) - { - hashcode = (hashcode * 397) + SqlState.GetHashCode(); - } - if(__isset.errorCode) - { - hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp262 = new StringBuilder("TStatus("); - tmp262.Append(", StatusCode: "); - StatusCode.ToString(tmp262); - if((InfoMessages != null) && __isset.infoMessages) - { - tmp262.Append(", InfoMessages: "); - InfoMessages.ToString(tmp262); - } - if((SqlState != null) && __isset.sqlState) - { - tmp262.Append(", SqlState: "); - SqlState.ToString(tmp262); - } - if(__isset.errorCode) - { - tmp262.Append(", ErrorCode: "); - ErrorCode.ToString(tmp262); - } - if((ErrorMessage != null) && __isset.errorMessage) - { - tmp262.Append(", ErrorMessage: "); - ErrorMessage.ToString(tmp262); - } - tmp262.Append(')'); - return tmp262.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs deleted file mode 100644 index ce355fc6ad..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs +++ /dev/null @@ -1,25 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TStatusCode - { - SUCCESS_STATUS = 0, - SUCCESS_WITH_INFO_STATUS = 1, - STILL_EXECUTING_STATUS = 2, - ERROR_STATUS = 3, - INVALID_HANDLE_STATUS = 4, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs deleted file mode 100644 index 95fedcd776..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs +++ /dev/null @@ -1,233 +0,0 @@ -/** - * Autogenerated by Thrift Compiler (0.17.0) - * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK - */ -using System; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; -using Apache.Arrow; -using Apache.Arrow.Adbc.Drivers.Apache; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TStringColumn : TBase - { - - public StringArray Values { get; set; } - - public TStringColumn() - { - } - - public TStringColumn(StringArray values) : this() - { - this.Values = values; - } - - public TStringColumn DeepCopy() - { - throw new NotImplementedException(); - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_values = false; - bool isset_nulls = false; - TField field; - - ArrowBuffer.Builder values = null; - byte[] nulls = null; - byte[] offsetBuffer = null; - Stream transport = ((IPeekableTransport)iprot.Transport).Input; - int length = -1; - byte[] preAllocatedBuffer = new byte[65536]; - - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list187 = await iprot.ReadListBeginAsync(cancellationToken); - length = _list187.Count; - - values = new ArrowBuffer.Builder(); - int offset = 0; - offsetBuffer = new byte[(length + 1) * 4]; - var memory = offsetBuffer.AsMemory(); - var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); - - for(int _i188 = 0; _i188 < length; ++_i188) - { - typedMemory.Span[_i188] = offset; - var size = await iprot.ReadI32Async(cancellationToken); - offset += size; - - iprot.Transport.CheckReadBytesAvailable(size); - - byte[] tmp; - if (size <= preAllocatedBuffer.Length) - { - tmp = preAllocatedBuffer; - } - else - { - tmp = new byte[size]; - } - - await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); - values.Append(tmp.AsMemory(0, size).Span); - } - typedMemory.Span[length] = offset; - - await iprot.ReadListEndAsync(cancellationToken); - } - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - nulls = await iprot.ReadBinaryAsync(cancellationToken); - isset_nulls = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_nulls) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - - Values = new StringArray(length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp190 = new TStruct("TStringColumn"); - await oprot.WriteStructBeginAsync(tmp190, cancellationToken); - var tmp191 = new TField(); - if((Values != null)) - { - tmp191.Name = "values"; - tmp191.Type = TType.List; - tmp191.ID = 1; - await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); - for (int i = 0; i < Values.Length; i++) - { - // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans - string _iter192 = Values.GetString(i); - await oprot.WriteStringAsync(_iter192, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - - tmp191.Name = "nulls"; - tmp191.Type = TType.String; - tmp191.ID = 2; - byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; - Values.NullBitmapBuffer.Span.CopyTo(nulls); - await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); - await oprot.WriteBinaryAsync(nulls, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TStringColumn other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Values, other.Values); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Values != null)) - { - for (int i = 0; i < Values.Length; i++) - { - string thisValue = Values.GetString(i); - hashcode = (hashcode * 397) + (thisValue?.GetHashCode() ?? 0); - } - } - } - return hashcode; - } - - public override string ToString() - { - var tmp193 = new StringBuilder("TStringColumn("); - if((Values != null)) - { - tmp193.Append(", Values: "); - Values.ToString(tmp193); - } - tmp193.Append(')'); - return tmp193.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs deleted file mode 100644 index e1b7c8f6be..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs +++ /dev/null @@ -1,178 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TStringValue : TBase - { - private string _value; - - public string Value - { - get - { - return _value; - } - set - { - __isset.@value = true; - this._value = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool @value; - } - - public TStringValue() - { - } - - public TStringValue DeepCopy() - { - var tmp113 = new TStringValue(); - if((Value != null) && __isset.@value) - { - tmp113.Value = this.Value; - } - tmp113.__isset.@value = this.__isset.@value; - return tmp113; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - Value = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp114 = new TStruct("TStringValue"); - await oprot.WriteStructBeginAsync(tmp114, cancellationToken); - var tmp115 = new TField(); - if((Value != null) && __isset.@value) - { - tmp115.Name = "value"; - tmp115.Type = TType.String; - tmp115.ID = 1; - await oprot.WriteFieldBeginAsync(tmp115, cancellationToken); - await oprot.WriteStringAsync(Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TStringValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Value != null) && __isset.@value) - { - hashcode = (hashcode * 397) + Value.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp116 = new StringBuilder("TStringValue("); - int tmp117 = 0; - if((Value != null) && __isset.@value) - { - if(0 < tmp117++) { tmp116.Append(", "); } - tmp116.Append("Value: "); - Value.ToString(tmp116); - } - tmp116.Append(')'); - return tmp116.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs deleted file mode 100644 index 1ac1886691..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs +++ /dev/null @@ -1,185 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TStructTypeEntry : TBase - { - - public Dictionary NameToTypePtr { get; set; } - - public TStructTypeEntry() - { - } - - public TStructTypeEntry(Dictionary nameToTypePtr) : this() - { - this.NameToTypePtr = nameToTypePtr; - } - - public TStructTypeEntry DeepCopy() - { - var tmp30 = new TStructTypeEntry(); - if((NameToTypePtr != null)) - { - tmp30.NameToTypePtr = this.NameToTypePtr.DeepCopy(); - } - return tmp30; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_nameToTypePtr = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Map) - { - { - var _map31 = await iprot.ReadMapBeginAsync(cancellationToken); - NameToTypePtr = new Dictionary(_map31.Count); - for(int _i32 = 0; _i32 < _map31.Count; ++_i32) - { - string _key33; - int _val34; - _key33 = await iprot.ReadStringAsync(cancellationToken); - _val34 = await iprot.ReadI32Async(cancellationToken); - NameToTypePtr[_key33] = _val34; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - isset_nameToTypePtr = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_nameToTypePtr) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp35 = new TStruct("TStructTypeEntry"); - await oprot.WriteStructBeginAsync(tmp35, cancellationToken); - var tmp36 = new TField(); - if((NameToTypePtr != null)) - { - tmp36.Name = "nameToTypePtr"; - tmp36.Type = TType.Map; - tmp36.ID = 1; - await oprot.WriteFieldBeginAsync(tmp36, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); - foreach (string _iter37 in NameToTypePtr.Keys) - { - await oprot.WriteStringAsync(_iter37, cancellationToken); - await oprot.WriteI32Async(NameToTypePtr[_iter37], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TStructTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((NameToTypePtr != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp38 = new StringBuilder("TStructTypeEntry("); - if((NameToTypePtr != null)) - { - tmp38.Append(", NameToTypePtr: "); - NameToTypePtr.ToString(tmp38); - } - tmp38.Append(')'); - return tmp38.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs deleted file mode 100644 index 7ae7d63512..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs +++ /dev/null @@ -1,183 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TTableSchema : TBase - { - - public List Columns { get; set; } - - public TTableSchema() - { - } - - public TTableSchema(List columns) : this() - { - this.Columns = columns; - } - - public TTableSchema DeepCopy() - { - var tmp74 = new TTableSchema(); - if((Columns != null)) - { - tmp74.Columns = this.Columns.DeepCopy(); - } - return tmp74; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_columns = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list75 = await iprot.ReadListBeginAsync(cancellationToken); - Columns = new List(_list75.Count); - for(int _i76 = 0; _i76 < _list75.Count; ++_i76) - { - global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _elem77; - _elem77 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc(); - await _elem77.ReadAsync(iprot, cancellationToken); - Columns.Add(_elem77); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_columns = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_columns) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp78 = new TStruct("TTableSchema"); - await oprot.WriteStructBeginAsync(tmp78, cancellationToken); - var tmp79 = new TField(); - if((Columns != null)) - { - tmp79.Name = "columns"; - tmp79.Type = TType.List; - tmp79.ID = 1; - await oprot.WriteFieldBeginAsync(tmp79, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _iter80 in Columns) - { - await _iter80.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TTableSchema other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Columns, other.Columns); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Columns != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp81 = new StringBuilder("TTableSchema("); - if((Columns != null)) - { - tmp81.Append(", Columns: "); - Columns.ToString(tmp81); - } - tmp81.Append(')'); - return tmp81.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs deleted file mode 100644 index 318f1e5d05..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs +++ /dev/null @@ -1,183 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TTypeDesc : TBase - { - - public List Types { get; set; } - - public TTypeDesc() - { - } - - public TTypeDesc(List types) : this() - { - this.Types = types; - } - - public TTypeDesc DeepCopy() - { - var tmp60 = new TTypeDesc(); - if((Types != null)) - { - tmp60.Types = this.Types.DeepCopy(); - } - return tmp60; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_types = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.List) - { - { - var _list61 = await iprot.ReadListBeginAsync(cancellationToken); - Types = new List(_list61.Count); - for(int _i62 = 0; _i62 < _list61.Count; ++_i62) - { - global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _elem63; - _elem63 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry(); - await _elem63.ReadAsync(iprot, cancellationToken); - Types.Add(_elem63); - } - await iprot.ReadListEndAsync(cancellationToken); - } - isset_types = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_types) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp64 = new TStruct("TTypeDesc"); - await oprot.WriteStructBeginAsync(tmp64, cancellationToken); - var tmp65 = new TField(); - if((Types != null)) - { - tmp65.Name = "types"; - tmp65.Type = TType.List; - tmp65.ID = 1; - await oprot.WriteFieldBeginAsync(tmp65, cancellationToken); - await oprot.WriteListBeginAsync(new TList(TType.Struct, Types.Count), cancellationToken); - foreach (global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _iter66 in Types) - { - await _iter66.WriteAsync(oprot, cancellationToken); - } - await oprot.WriteListEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TTypeDesc other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Types, other.Types); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Types != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Types); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp67 = new StringBuilder("TTypeDesc("); - if((Types != null)) - { - tmp67.Append(", Types: "); - Types.ToString(tmp67); - } - tmp67.Append(')'); - return tmp67.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs deleted file mode 100644 index 7aec87b834..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs +++ /dev/null @@ -1,434 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TTypeEntry : TBase - { - private global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry _primitiveEntry; - private global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry _arrayEntry; - private global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry _mapEntry; - private global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry _structEntry; - private global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry _unionEntry; - private global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry _userDefinedTypeEntry; - - public global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry PrimitiveEntry - { - get - { - return _primitiveEntry; - } - set - { - __isset.primitiveEntry = true; - this._primitiveEntry = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry ArrayEntry - { - get - { - return _arrayEntry; - } - set - { - __isset.arrayEntry = true; - this._arrayEntry = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry MapEntry - { - get - { - return _mapEntry; - } - set - { - __isset.mapEntry = true; - this._mapEntry = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry StructEntry - { - get - { - return _structEntry; - } - set - { - __isset.structEntry = true; - this._structEntry = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry UnionEntry - { - get - { - return _unionEntry; - } - set - { - __isset.unionEntry = true; - this._unionEntry = value; - } - } - - public global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry UserDefinedTypeEntry - { - get - { - return _userDefinedTypeEntry; - } - set - { - __isset.userDefinedTypeEntry = true; - this._userDefinedTypeEntry = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool primitiveEntry; - public bool arrayEntry; - public bool mapEntry; - public bool structEntry; - public bool unionEntry; - public bool userDefinedTypeEntry; - } - - public TTypeEntry() - { - } - - public TTypeEntry DeepCopy() - { - var tmp55 = new TTypeEntry(); - if((PrimitiveEntry != null) && __isset.primitiveEntry) - { - tmp55.PrimitiveEntry = (global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry)this.PrimitiveEntry.DeepCopy(); - } - tmp55.__isset.primitiveEntry = this.__isset.primitiveEntry; - if((ArrayEntry != null) && __isset.arrayEntry) - { - tmp55.ArrayEntry = (global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry)this.ArrayEntry.DeepCopy(); - } - tmp55.__isset.arrayEntry = this.__isset.arrayEntry; - if((MapEntry != null) && __isset.mapEntry) - { - tmp55.MapEntry = (global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry)this.MapEntry.DeepCopy(); - } - tmp55.__isset.mapEntry = this.__isset.mapEntry; - if((StructEntry != null) && __isset.structEntry) - { - tmp55.StructEntry = (global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry)this.StructEntry.DeepCopy(); - } - tmp55.__isset.structEntry = this.__isset.structEntry; - if((UnionEntry != null) && __isset.unionEntry) - { - tmp55.UnionEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry)this.UnionEntry.DeepCopy(); - } - tmp55.__isset.unionEntry = this.__isset.unionEntry; - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) - { - tmp55.UserDefinedTypeEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry)this.UserDefinedTypeEntry.DeepCopy(); - } - tmp55.__isset.userDefinedTypeEntry = this.__isset.userDefinedTypeEntry; - return tmp55; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - PrimitiveEntry = new global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry(); - await PrimitiveEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - ArrayEntry = new global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry(); - await ArrayEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.Struct) - { - MapEntry = new global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry(); - await MapEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.Struct) - { - StructEntry = new global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry(); - await StructEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 5: - if (field.Type == TType.Struct) - { - UnionEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry(); - await UnionEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 6: - if (field.Type == TType.Struct) - { - UserDefinedTypeEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry(); - await UserDefinedTypeEntry.ReadAsync(iprot, cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp56 = new TStruct("TTypeEntry"); - await oprot.WriteStructBeginAsync(tmp56, cancellationToken); - var tmp57 = new TField(); - if((PrimitiveEntry != null) && __isset.primitiveEntry) - { - tmp57.Name = "primitiveEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 1; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await PrimitiveEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((ArrayEntry != null) && __isset.arrayEntry) - { - tmp57.Name = "arrayEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 2; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await ArrayEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((MapEntry != null) && __isset.mapEntry) - { - tmp57.Name = "mapEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 3; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await MapEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((StructEntry != null) && __isset.structEntry) - { - tmp57.Name = "structEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 4; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await StructEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((UnionEntry != null) && __isset.unionEntry) - { - tmp57.Name = "unionEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 5; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await UnionEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) - { - tmp57.Name = "userDefinedTypeEntry"; - tmp57.Type = TType.Struct; - tmp57.ID = 6; - await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); - await UserDefinedTypeEntry.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.primitiveEntry == other.__isset.primitiveEntry) && ((!__isset.primitiveEntry) || (global::System.Object.Equals(PrimitiveEntry, other.PrimitiveEntry)))) - && ((__isset.arrayEntry == other.__isset.arrayEntry) && ((!__isset.arrayEntry) || (global::System.Object.Equals(ArrayEntry, other.ArrayEntry)))) - && ((__isset.mapEntry == other.__isset.mapEntry) && ((!__isset.mapEntry) || (global::System.Object.Equals(MapEntry, other.MapEntry)))) - && ((__isset.structEntry == other.__isset.structEntry) && ((!__isset.structEntry) || (global::System.Object.Equals(StructEntry, other.StructEntry)))) - && ((__isset.unionEntry == other.__isset.unionEntry) && ((!__isset.unionEntry) || (global::System.Object.Equals(UnionEntry, other.UnionEntry)))) - && ((__isset.userDefinedTypeEntry == other.__isset.userDefinedTypeEntry) && ((!__isset.userDefinedTypeEntry) || (global::System.Object.Equals(UserDefinedTypeEntry, other.UserDefinedTypeEntry)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((PrimitiveEntry != null) && __isset.primitiveEntry) - { - hashcode = (hashcode * 397) + PrimitiveEntry.GetHashCode(); - } - if((ArrayEntry != null) && __isset.arrayEntry) - { - hashcode = (hashcode * 397) + ArrayEntry.GetHashCode(); - } - if((MapEntry != null) && __isset.mapEntry) - { - hashcode = (hashcode * 397) + MapEntry.GetHashCode(); - } - if((StructEntry != null) && __isset.structEntry) - { - hashcode = (hashcode * 397) + StructEntry.GetHashCode(); - } - if((UnionEntry != null) && __isset.unionEntry) - { - hashcode = (hashcode * 397) + UnionEntry.GetHashCode(); - } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) - { - hashcode = (hashcode * 397) + UserDefinedTypeEntry.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp58 = new StringBuilder("TTypeEntry("); - int tmp59 = 0; - if((PrimitiveEntry != null) && __isset.primitiveEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("PrimitiveEntry: "); - PrimitiveEntry.ToString(tmp58); - } - if((ArrayEntry != null) && __isset.arrayEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("ArrayEntry: "); - ArrayEntry.ToString(tmp58); - } - if((MapEntry != null) && __isset.mapEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("MapEntry: "); - MapEntry.ToString(tmp58); - } - if((StructEntry != null) && __isset.structEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("StructEntry: "); - StructEntry.ToString(tmp58); - } - if((UnionEntry != null) && __isset.unionEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("UnionEntry: "); - UnionEntry.ToString(tmp58); - } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) - { - if(0 < tmp59++) { tmp58.Append(", "); } - tmp58.Append("UserDefinedTypeEntry: "); - UserDefinedTypeEntry.ToString(tmp58); - } - tmp58.Append(')'); - return tmp58.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs deleted file mode 100644 index 61f7c44efc..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs +++ /dev/null @@ -1,43 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - public enum TTypeId - { - BOOLEAN_TYPE = 0, - TINYINT_TYPE = 1, - SMALLINT_TYPE = 2, - INT_TYPE = 3, - BIGINT_TYPE = 4, - FLOAT_TYPE = 5, - DOUBLE_TYPE = 6, - STRING_TYPE = 7, - TIMESTAMP_TYPE = 8, - BINARY_TYPE = 9, - ARRAY_TYPE = 10, - MAP_TYPE = 11, - STRUCT_TYPE = 12, - UNION_TYPE = 13, - USER_DEFINED_TYPE = 14, - DECIMAL_TYPE = 15, - NULL_TYPE = 16, - DATE_TYPE = 17, - VARCHAR_TYPE = 18, - CHAR_TYPE = 19, - INTERVAL_YEAR_MONTH_TYPE = 20, - INTERVAL_DAY_TIME_TYPE = 21, - TIMESTAMPLOCALTZ_TYPE = 22, - } -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs deleted file mode 100644 index 6e0bc6da80..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs +++ /dev/null @@ -1,228 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TTypeQualifierValue : TBase - { - private int _i32Value; - private string _stringValue; - - public int I32Value - { - get - { - return _i32Value; - } - set - { - __isset.i32Value = true; - this._i32Value = value; - } - } - - public string StringValue - { - get - { - return _stringValue; - } - set - { - __isset.stringValue = true; - this._stringValue = value; - } - } - - - public Isset __isset; - public struct Isset - { - public bool i32Value; - public bool stringValue; - } - - public TTypeQualifierValue() - { - } - - public TTypeQualifierValue DeepCopy() - { - var tmp0 = new TTypeQualifierValue(); - if(__isset.i32Value) - { - tmp0.I32Value = this.I32Value; - } - tmp0.__isset.i32Value = this.__isset.i32Value; - if((StringValue != null) && __isset.stringValue) - { - tmp0.StringValue = this.StringValue; - } - tmp0.__isset.stringValue = this.__isset.stringValue; - return tmp0; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.I32) - { - I32Value = await iprot.ReadI32Async(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - StringValue = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp1 = new TStruct("TTypeQualifierValue"); - await oprot.WriteStructBeginAsync(tmp1, cancellationToken); - var tmp2 = new TField(); - if(__isset.i32Value) - { - tmp2.Name = "i32Value"; - tmp2.Type = TType.I32; - tmp2.ID = 1; - await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); - await oprot.WriteI32Async(I32Value, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((StringValue != null) && __isset.stringValue) - { - tmp2.Name = "stringValue"; - tmp2.Type = TType.String; - tmp2.ID = 2; - await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); - await oprot.WriteStringAsync(StringValue, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TTypeQualifierValue other)) return false; - if (ReferenceEquals(this, other)) return true; - return ((__isset.i32Value == other.__isset.i32Value) && ((!__isset.i32Value) || (global::System.Object.Equals(I32Value, other.I32Value)))) - && ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if(__isset.i32Value) - { - hashcode = (hashcode * 397) + I32Value.GetHashCode(); - } - if((StringValue != null) && __isset.stringValue) - { - hashcode = (hashcode * 397) + StringValue.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp3 = new StringBuilder("TTypeQualifierValue("); - int tmp4 = 0; - if(__isset.i32Value) - { - if(0 < tmp4++) { tmp3.Append(", "); } - tmp3.Append("I32Value: "); - I32Value.ToString(tmp3); - } - if((StringValue != null) && __isset.stringValue) - { - if(0 < tmp4++) { tmp3.Append(", "); } - tmp3.Append("StringValue: "); - StringValue.ToString(tmp3); - } - tmp3.Append(')'); - return tmp3.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs deleted file mode 100644 index 31dee30ad0..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs +++ /dev/null @@ -1,186 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TTypeQualifiers : TBase - { - - public Dictionary Qualifiers { get; set; } - - public TTypeQualifiers() - { - } - - public TTypeQualifiers(Dictionary qualifiers) : this() - { - this.Qualifiers = qualifiers; - } - - public TTypeQualifiers DeepCopy() - { - var tmp5 = new TTypeQualifiers(); - if((Qualifiers != null)) - { - tmp5.Qualifiers = this.Qualifiers.DeepCopy(); - } - return tmp5; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_qualifiers = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Map) - { - { - var _map6 = await iprot.ReadMapBeginAsync(cancellationToken); - Qualifiers = new Dictionary(_map6.Count); - for(int _i7 = 0; _i7 < _map6.Count; ++_i7) - { - string _key8; - global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue _val9; - _key8 = await iprot.ReadStringAsync(cancellationToken); - _val9 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue(); - await _val9.ReadAsync(iprot, cancellationToken); - Qualifiers[_key8] = _val9; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - isset_qualifiers = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_qualifiers) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp10 = new TStruct("TTypeQualifiers"); - await oprot.WriteStructBeginAsync(tmp10, cancellationToken); - var tmp11 = new TField(); - if((Qualifiers != null)) - { - tmp11.Name = "qualifiers"; - tmp11.Type = TType.Map; - tmp11.ID = 1; - await oprot.WriteFieldBeginAsync(tmp11, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, Qualifiers.Count), cancellationToken); - foreach (string _iter12 in Qualifiers.Keys) - { - await oprot.WriteStringAsync(_iter12, cancellationToken); - await Qualifiers[_iter12].WriteAsync(oprot, cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TTypeQualifiers other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(Qualifiers, other.Qualifiers); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Qualifiers != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(Qualifiers); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp13 = new StringBuilder("TTypeQualifiers("); - if((Qualifiers != null)) - { - tmp13.Append(", Qualifiers: "); - Qualifiers.ToString(tmp13); - } - tmp13.Append(')'); - return tmp13.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs deleted file mode 100644 index 6c4c42d9e3..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs +++ /dev/null @@ -1,185 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TUnionTypeEntry : TBase - { - - public Dictionary NameToTypePtr { get; set; } - - public TUnionTypeEntry() - { - } - - public TUnionTypeEntry(Dictionary nameToTypePtr) : this() - { - this.NameToTypePtr = nameToTypePtr; - } - - public TUnionTypeEntry DeepCopy() - { - var tmp40 = new TUnionTypeEntry(); - if((NameToTypePtr != null)) - { - tmp40.NameToTypePtr = this.NameToTypePtr.DeepCopy(); - } - return tmp40; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_nameToTypePtr = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Map) - { - { - var _map41 = await iprot.ReadMapBeginAsync(cancellationToken); - NameToTypePtr = new Dictionary(_map41.Count); - for(int _i42 = 0; _i42 < _map41.Count; ++_i42) - { - string _key43; - int _val44; - _key43 = await iprot.ReadStringAsync(cancellationToken); - _val44 = await iprot.ReadI32Async(cancellationToken); - NameToTypePtr[_key43] = _val44; - } - await iprot.ReadMapEndAsync(cancellationToken); - } - isset_nameToTypePtr = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_nameToTypePtr) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp45 = new TStruct("TUnionTypeEntry"); - await oprot.WriteStructBeginAsync(tmp45, cancellationToken); - var tmp46 = new TField(); - if((NameToTypePtr != null)) - { - tmp46.Name = "nameToTypePtr"; - tmp46.Type = TType.Map; - tmp46.ID = 1; - await oprot.WriteFieldBeginAsync(tmp46, cancellationToken); - await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); - foreach (string _iter47 in NameToTypePtr.Keys) - { - await oprot.WriteStringAsync(_iter47, cancellationToken); - await oprot.WriteI32Async(NameToTypePtr[_iter47], cancellationToken); - } - await oprot.WriteMapEndAsync(cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TUnionTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((NameToTypePtr != null)) - { - hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp48 = new StringBuilder("TUnionTypeEntry("); - if((NameToTypePtr != null)) - { - tmp48.Append(", NameToTypePtr: "); - NameToTypePtr.ToString(tmp48); - } - tmp48.Append(')'); - return tmp48.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs deleted file mode 100644 index 0af51fc483..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs +++ /dev/null @@ -1,314 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TUploadDataReq : TBase - { - private string _tableName; - private string _path; - - public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } - - public string TableName - { - get - { - return _tableName; - } - set - { - __isset.tableName = true; - this._tableName = value; - } - } - - public string Path - { - get - { - return _path; - } - set - { - __isset.path = true; - this._path = value; - } - } - - public byte[] Values { get; set; } - - - public Isset __isset; - public struct Isset - { - public bool tableName; - public bool path; - } - - public TUploadDataReq() - { - } - - public TUploadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, byte[] values) : this() - { - this.SessionHandle = sessionHandle; - this.Values = values; - } - - public TUploadDataReq DeepCopy() - { - var tmp430 = new TUploadDataReq(); - if((SessionHandle != null)) - { - tmp430.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); - } - if((TableName != null) && __isset.tableName) - { - tmp430.TableName = this.TableName; - } - tmp430.__isset.tableName = this.__isset.tableName; - if((Path != null) && __isset.path) - { - tmp430.Path = this.Path; - } - tmp430.__isset.path = this.__isset.path; - if((Values != null)) - { - tmp430.Values = this.Values.ToArray(); - } - return tmp430; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_sessionHandle = false; - bool isset_values = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); - await SessionHandle.ReadAsync(iprot, cancellationToken); - isset_sessionHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.String) - { - TableName = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 3: - if (field.Type == TType.String) - { - Path = await iprot.ReadStringAsync(cancellationToken); - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 4: - if (field.Type == TType.String) - { - Values = await iprot.ReadBinaryAsync(cancellationToken); - isset_values = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_sessionHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_values) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp431 = new TStruct("TUploadDataReq"); - await oprot.WriteStructBeginAsync(tmp431, cancellationToken); - var tmp432 = new TField(); - if((SessionHandle != null)) - { - tmp432.Name = "sessionHandle"; - tmp432.Type = TType.Struct; - tmp432.ID = 1; - await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); - await SessionHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((TableName != null) && __isset.tableName) - { - tmp432.Name = "tableName"; - tmp432.Type = TType.String; - tmp432.ID = 2; - await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); - await oprot.WriteStringAsync(TableName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Path != null) && __isset.path) - { - tmp432.Name = "path"; - tmp432.Type = TType.String; - tmp432.ID = 3; - await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); - await oprot.WriteStringAsync(Path, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((Values != null)) - { - tmp432.Name = "values"; - tmp432.Type = TType.String; - tmp432.ID = 4; - await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); - await oprot.WriteBinaryAsync(Values, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TUploadDataReq other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(SessionHandle, other.SessionHandle) - && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) - && ((__isset.path == other.__isset.path) && ((!__isset.path) || (global::System.Object.Equals(Path, other.Path)))) - && TCollections.Equals(Values, other.Values); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((SessionHandle != null)) - { - hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); - } - if((TableName != null) && __isset.tableName) - { - hashcode = (hashcode * 397) + TableName.GetHashCode(); - } - if((Path != null) && __isset.path) - { - hashcode = (hashcode * 397) + Path.GetHashCode(); - } - if((Values != null)) - { - hashcode = (hashcode * 397) + Values.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp433 = new StringBuilder("TUploadDataReq("); - if((SessionHandle != null)) - { - tmp433.Append(", SessionHandle: "); - SessionHandle.ToString(tmp433); - } - if((TableName != null) && __isset.tableName) - { - tmp433.Append(", TableName: "); - TableName.ToString(tmp433); - } - if((Path != null) && __isset.path) - { - tmp433.Append(", Path: "); - Path.ToString(tmp433); - } - if((Values != null)) - { - tmp433.Append(", Values: "); - Values.ToString(tmp433); - } - tmp433.Append(')'); - return tmp433.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs deleted file mode 100644 index 1855089d7c..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs +++ /dev/null @@ -1,211 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TUploadDataResp : TBase - { - - public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } - - public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } - - public TUploadDataResp() - { - } - - public TUploadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() - { - this.Status = status; - this.OperationHandle = operationHandle; - } - - public TUploadDataResp DeepCopy() - { - var tmp435 = new TUploadDataResp(); - if((Status != null)) - { - tmp435.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); - } - if((OperationHandle != null)) - { - tmp435.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); - } - return tmp435; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_status = false; - bool isset_operationHandle = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.Struct) - { - Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); - await Status.ReadAsync(iprot, cancellationToken); - isset_status = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - case 2: - if (field.Type == TType.Struct) - { - OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); - await OperationHandle.ReadAsync(iprot, cancellationToken); - isset_operationHandle = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_status) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - if (!isset_operationHandle) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp436 = new TStruct("TUploadDataResp"); - await oprot.WriteStructBeginAsync(tmp436, cancellationToken); - var tmp437 = new TField(); - if((Status != null)) - { - tmp437.Name = "status"; - tmp437.Type = TType.Struct; - tmp437.ID = 1; - await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); - await Status.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - if((OperationHandle != null)) - { - tmp437.Name = "operationHandle"; - tmp437.Type = TType.Struct; - tmp437.ID = 2; - await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); - await OperationHandle.WriteAsync(oprot, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TUploadDataResp other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(Status, other.Status) - && global::System.Object.Equals(OperationHandle, other.OperationHandle); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((Status != null)) - { - hashcode = (hashcode * 397) + Status.GetHashCode(); - } - if((OperationHandle != null)) - { - hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp438 = new StringBuilder("TUploadDataResp("); - if((Status != null)) - { - tmp438.Append(", Status: "); - Status.ToString(tmp438); - } - if((OperationHandle != null)) - { - tmp438.Append(", OperationHandle: "); - OperationHandle.ToString(tmp438); - } - tmp438.Append(')'); - return tmp438.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs deleted file mode 100644 index 67a522e8c7..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs +++ /dev/null @@ -1,167 +0,0 @@ -/** - * - * Autogenerated by Thrift Compiler (0.17.0) - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Thrift; -using Thrift.Collections; -using Thrift.Protocol; -using Thrift.Protocol.Entities; -using Thrift.Protocol.Utilities; -using Thrift.Transport; -using Thrift.Transport.Client; -using Thrift.Transport.Server; -using Thrift.Processor; - - -#pragma warning disable IDE0079 // remove unnecessary pragmas -#pragma warning disable IDE0017 // object init can be simplified -#pragma warning disable IDE0028 // collection init can be simplified -#pragma warning disable IDE1006 // parts of the code use IDL spelling -#pragma warning disable CA1822 // empty DeepCopy() methods still non-static -#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions - -namespace Apache.Hive.Service.Rpc.Thrift -{ - - public partial class TUserDefinedTypeEntry : TBase - { - - public string TypeClassName { get; set; } - - public TUserDefinedTypeEntry() - { - } - - public TUserDefinedTypeEntry(string typeClassName) : this() - { - this.TypeClassName = typeClassName; - } - - public TUserDefinedTypeEntry DeepCopy() - { - var tmp50 = new TUserDefinedTypeEntry(); - if((TypeClassName != null)) - { - tmp50.TypeClassName = this.TypeClassName; - } - return tmp50; - } - - public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) - { - iprot.IncrementRecursionDepth(); - try - { - bool isset_typeClassName = false; - TField field; - await iprot.ReadStructBeginAsync(cancellationToken); - while (true) - { - field = await iprot.ReadFieldBeginAsync(cancellationToken); - if (field.Type == TType.Stop) - { - break; - } - - switch (field.ID) - { - case 1: - if (field.Type == TType.String) - { - TypeClassName = await iprot.ReadStringAsync(cancellationToken); - isset_typeClassName = true; - } - else - { - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - } - break; - default: - await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); - break; - } - - await iprot.ReadFieldEndAsync(cancellationToken); - } - - await iprot.ReadStructEndAsync(cancellationToken); - if (!isset_typeClassName) - { - throw new TProtocolException(TProtocolException.INVALID_DATA); - } - } - finally - { - iprot.DecrementRecursionDepth(); - } - } - - public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) - { - oprot.IncrementRecursionDepth(); - try - { - var tmp51 = new TStruct("TUserDefinedTypeEntry"); - await oprot.WriteStructBeginAsync(tmp51, cancellationToken); - var tmp52 = new TField(); - if((TypeClassName != null)) - { - tmp52.Name = "typeClassName"; - tmp52.Type = TType.String; - tmp52.ID = 1; - await oprot.WriteFieldBeginAsync(tmp52, cancellationToken); - await oprot.WriteStringAsync(TypeClassName, cancellationToken); - await oprot.WriteFieldEndAsync(cancellationToken); - } - await oprot.WriteFieldStopAsync(cancellationToken); - await oprot.WriteStructEndAsync(cancellationToken); - } - finally - { - oprot.DecrementRecursionDepth(); - } - } - - public override bool Equals(object that) - { - if (!(that is TUserDefinedTypeEntry other)) return false; - if (ReferenceEquals(this, other)) return true; - return global::System.Object.Equals(TypeClassName, other.TypeClassName); - } - - public override int GetHashCode() { - int hashcode = 157; - unchecked { - if((TypeClassName != null)) - { - hashcode = (hashcode * 397) + TypeClassName.GetHashCode(); - } - } - return hashcode; - } - - public override string ToString() - { - var tmp53 = new StringBuilder("TUserDefinedTypeEntry("); - if((TypeClassName != null)) - { - tmp53.Append(", TypeClassName: "); - TypeClassName.ToString(tmp53); - } - tmp53.Append(')'); - return tmp53.ToString(); - } - } - -} diff --git a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs deleted file mode 100644 index 9080dc549c..0000000000 --- a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.IO; -using System.Net.Http; -using System.Threading.Tasks; -using System.Threading; -using Thrift; -using Thrift.Transport; -using Thrift.Transport.Client; -using System.Reflection; - -namespace Apache.Arrow.Adbc.Drivers.Apache -{ - class ThriftSocketTransport : TSocketTransport, IPeekableTransport - { - public ThriftSocketTransport(string host, int port, TConfiguration config, int timeout = 0) - : base(host, port, config, timeout) - { - } - - public Stream Input { get { return this.InputStream; } } - public Stream Output { get { return this.OutputStream; } } - } - - // TODO: Experimental - class ThriftHttpTransport : THttpTransport, IPeekableTransport - { - public ThriftHttpTransport(HttpClient httpClient, TConfiguration config) - : base(httpClient, config) - { - - } - - public Stream Input - { - get - { - // not advocating for this, but it works - Stream stream = ((FieldInfo[])((TypeInfo)this.GetType().BaseType).DeclaredFields)[4].GetValue(this) as Stream; - return stream; - } - } - public Stream Output - { - get - { - Stream stream = this.GetType().BaseType.GetField("_outputStream", BindingFlags.NonPublic).GetValue(this) as Stream; - return stream; - } - } - } -} diff --git a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj deleted file mode 100644 index 0c4ca36935..0000000000 --- a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - net7.0 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj deleted file mode 100644 index e526d055e2..0000000000 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - net7.0 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - diff --git a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs deleted file mode 100644 index 2d419e77c1..0000000000 --- a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Text.Json.Serialization; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache -{ - internal class ApacheTestConfiguration : TestConfiguration - { - [JsonPropertyName("hostName")] - public string HostName { get; set; } - - [JsonPropertyName("port")] - public string Port { get; set; } - - [JsonPropertyName("token"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Token { get; set; } - - [JsonPropertyName("path"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Path { get; set; } - - } -} diff --git a/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs b/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs deleted file mode 100644 index ae19e22247..0000000000 --- a/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs +++ /dev/null @@ -1,50 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using Apache.Arrow.Adbc.Drivers.Apache.Impala; -using Apache.Arrow.Adbc.Tests.Xunit; -using Xunit; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Impala -{ - [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] - public class ImpalaTests - { - [SkippableFact, Order(1)] - public void CanDriverConnect() - { - ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("impalaconfig.json"); - - Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase) - { - { "HostName", testConfiguration.HostName }, - { "Port", testConfiguration.Port }, - }; - - AdbcDatabase database = new ImpalaDriver().Open(parameters); - AdbcConnection connection = database.Connect(new Dictionary()); - AdbcStatement statement = connection.CreateStatement(); - statement.SqlQuery = testConfiguration.Query; - QueryResult queryResult = statement.ExecuteQuery(); - - //Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); - - } - } -} diff --git a/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json b/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json deleted file mode 100644 index 550fd3a97c..0000000000 --- a/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "hostName": "", - "port": "", - "query": "", - "expectedResults": 0 -} diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs deleted file mode 100644 index 6fa2507a38..0000000000 --- a/csharp/test/Drivers/Apache/Spark/DriverTests.cs +++ /dev/null @@ -1,206 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using Apache.Arrow.Adbc.Tests.Metadata; -using Apache.Arrow.Adbc.Tests.Xunit; -using Apache.Arrow.Ipc; -using Xunit; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - /// - /// Class for testing the Snowflake ADBC driver connection tests. - /// - /// - /// Tests are ordered to ensure data is created for the other - /// queries to run. - /// - [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] - public class DriverTests - { - SparkTestConfiguration _testConfiguration; - - public DriverTests() - { - Skip.IfNot(Utils.CanExecuteTestConfig(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE)); - _testConfiguration = Utils.LoadTestConfiguration(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE); - } - - /// - /// Validates if the driver can connect to a live server and - /// parse the results. - /// - [SkippableFact, Order(1)] - public void CanExecuteUpdate() - { - - //AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - //string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); - - //List expectedResults = new List() { -1, 1, 1 }; - - //for (int i = 0; i < queries.Length; i++) - //{ - // string query = queries[i]; - // AdbcStatement statement = adbcConnection.CreateStatement(); - // statement.SqlQuery = query; - - // UpdateResult updateResult = statement.ExecuteUpdate(); - - // Assert.Equal(expectedResults[i], updateResult.AffectedRows); - //} - } - - /// - /// Validates if the driver can call GetInfo. - /// - [SkippableFact, Order(2)] - public void CanGetInfo() - { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - IArrowArrayStream stream = adbcConnection.GetInfo(new List() { AdbcInfoCode.DriverName, AdbcInfoCode.DriverVersion, AdbcInfoCode.VendorName }); - - RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; - UInt32Array infoNameArray = (UInt32Array)recordBatch.Column("info_name"); - - List expectedValues = new List() { "DriverName", "DriverVersion", "VendorName" }; - - for (int i = 0; i < infoNameArray.Length; i++) - { - AdbcInfoCode value = (AdbcInfoCode)infoNameArray.GetValue(i); - DenseUnionArray valueArray = (DenseUnionArray)recordBatch.Column("info_value"); - - Assert.Contains(value.ToString(), expectedValues); - - StringArray stringArray = (StringArray)valueArray.Fields[0]; - Console.WriteLine($"{value}={stringArray.GetString(i)}"); - } - } - - /// - /// Validates if the driver can call GetObjects. - /// - [SkippableFact, Order(3)] - public void CanGetObjects() - { - // need to add the database - string catalogName = _testConfiguration.Metadata.Catalog; - string schemaName = _testConfiguration.Metadata.Schema; - string tableName = _testConfiguration.Metadata.Table; - string columnName = null; - - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - IArrowArrayStream stream = adbcConnection.GetObjects( - depth: AdbcConnection.GetObjectsDepth.All, - catalogPattern: catalogName, - dbSchemaPattern: schemaName, - tableNamePattern: tableName, - tableTypes: new List { "BASE TABLE", "VIEW" }, - columnNamePattern: columnName); - - RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; - - List catalogs = GetObjectsParser.ParseCatalog(recordBatch, catalogName, schemaName); - - List columns = catalogs - .Select(s => s.DbSchemas) - .FirstOrDefault() - .Select(t => t.Tables) - .FirstOrDefault() - .Select(c => c.Columns) - .FirstOrDefault(); - - Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, columns.Count); - } - - /// - /// Validates if the driver can call GetTableSchema. - /// - [SkippableFact, Order(4)] - public void CanGetTableSchema() - { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - string catalogName = _testConfiguration.Metadata.Catalog; - string schemaName = _testConfiguration.Metadata.Schema; - string tableName = _testConfiguration.Metadata.Table; - - Schema schema = adbcConnection.GetTableSchema(catalogName, schemaName, tableName); - - int numberOfFields = schema.FieldsList.Count; - - Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, numberOfFields); - } - - /// - /// Validates if the driver can call GetTableTypes. - /// - [SkippableFact, Order(5)] - public void CanGetTableTypes() - { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - IArrowArrayStream arrowArrayStream = adbcConnection.GetTableTypes(); - - RecordBatch recordBatch = arrowArrayStream.ReadNextRecordBatchAsync().Result; - - StringArray stringArray = (StringArray)recordBatch.Column("table_type"); - - List known_types = new List - { - "BASE TABLE", "VIEW" - }; - - int results = 0; - - for (int i = 0; i < stringArray.Length; i++) - { - string value = stringArray.GetString(i); - - if (known_types.Contains(value)) - { - results++; - } - } - - Assert.Equal(known_types.Count, results); - } - - /// - /// Validates if the driver can connect to a live server and - /// parse the results. - /// - [SkippableFact, Order(6)] - public void CanExecuteQuery() - { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - AdbcStatement statement = adbcConnection.CreateStatement(); - statement.SqlQuery = _testConfiguration.Query; - - QueryResult queryResult = statement.ExecuteQuery(); - - Tests.DriverTests.CanExecuteQuery(queryResult, _testConfiguration.ExpectedResultsCount); - } - } -} diff --git a/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json deleted file mode 100644 index fb76fa164c..0000000000 --- a/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "hostName": "", - "path": "", - "token": "", - "query": "", - "expectedResults": 0, - "metadata": { - "catalog": "", - "schema": "", - "table": "", - "expectedColumnCount": 0 - } -} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs deleted file mode 100644 index c73134dd85..0000000000 --- a/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System.Text.Json.Serialization; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - internal class SparkTestConfiguration : ApacheTestConfiguration - { - - } -} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs deleted file mode 100644 index 06d1812279..0000000000 --- a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using Apache.Arrow.Adbc.Drivers.Apache.Spark; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - internal class SparkTestingUtils - { - internal const string SPARK_TEST_CONFIG_VARIABLE = "SPARK_TEST_CONFIG_FILE"; - - /// - /// Gets a the Spark ADBC driver with settings from the . - /// - /// - /// - /// - internal static AdbcConnection GetSparkAdbcConnection( - SparkTestConfiguration testConfiguration - ) - { - Dictionary parameters = GetSparkParameters(testConfiguration); - AdbcDatabase database = new SparkDriver().Open(parameters); - AdbcConnection connection = database.Connect(new Dictionary()); - - return connection; - } - - /// - /// Gets the parameters for connecting to Spark. - /// - /// - /// - internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) - { - Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase); - - // TODO: make these parameters that are passed in - - if (!string.IsNullOrEmpty(testConfiguration.HostName)) - { - parameters.Add("HostName", testConfiguration.HostName); - } - - if (!string.IsNullOrEmpty(testConfiguration.Path)) - { - parameters.Add("Path", testConfiguration.Path); - } - - if (!string.IsNullOrEmpty(testConfiguration.Token)) - { - parameters.Add("Token", testConfiguration.Token); - } - - return parameters; - } - - ///// - ///// Parses the queries from resources/SparkData.sql - ///// - ///// - //internal static string[] GetQueries(SparkTestConfiguration testConfiguration) - //{ - // // get past the license header - // StringBuilder content = new StringBuilder(); - - // string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; - - // string[] sql = File.ReadAllLines("resources/SparkData.sql"); - - // foreach (string line in sql) - // { - // if (!line.TrimStart().StartsWith("--")) - // { - // if (line.Contains(placeholder)) - // { - // string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); - - // content.AppendLine(modifiedLine); - // } - // else - // { - // content.AppendLine(line); - // } - // } - // } - - // string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); - - // return queries; - //} - } -} From 1949057fab76a34bd2ad7c00ee5377f38071d061 Mon Sep 17 00:00:00 2001 From: Jade Wang <111902719+jadewang-db@users.noreply.github.com> Date: Fri, 15 Mar 2024 05:40:41 +0000 Subject: [PATCH 16/61] Revert "Revert "Merge branch 'dev/apache-drivers' of github.com:gopalldb/arrow-adbc into dev/apache-drivers"" This reverts commit f7ca69323383da2f359c3bc73047dc8a6492f66a. --- .vs/VSWorkspaceState.json | 7 + .vs/arrow-adbc/v17/.wsuo | Bin 0 -> 11264 bytes .vs/arrow-adbc/v17/DocumentLayout.json | 23 + csharp/Apache.Arrow.Adbc.sln | 14 + .../Apache.Arrow.Adbc.Drivers.Apache.csproj | 15 + .../Apache/Hive2/HiveServer2Connection.cs | 209 + .../Apache/Hive2/HiveServer2Statement.cs | 83 + .../Drivers/Apache/Impala/ImpalaConnection.cs | 80 + .../Drivers/Apache/Impala/ImpalaDatabase.cs | 38 + .../src/Drivers/Apache/Impala/ImpalaDriver.cs | 29 + .../Drivers/Apache/Impala/ImpalaStatement.cs | 114 + .../Drivers/Apache/Spark/SparkConnection.cs | 805 ++ .../src/Drivers/Apache/Spark/SparkDatabase.cs | 38 + .../src/Drivers/Apache/Spark/SparkDriver.cs | 29 + .../Drivers/Apache/Spark/SparkStatement.cs | 129 + .../src/Drivers/Apache/Thrift/ChunkStream.cs | 109 + .../Apache/Thrift/IPeekableTransport.cs | 27 + .../src/Drivers/Apache/Thrift/SchemaParser.cs | 82 + .../Service/Rpc/Thrift/TArrayTypeEntry.cs | 155 + .../Service/Rpc/Thrift/TBinaryColumn.cs | 234 + .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 198 + .../Thrift/Service/Rpc/Thrift/TBoolValue.cs | 178 + .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 196 + .../Thrift/Service/Rpc/Thrift/TByteValue.cs | 178 + .../Thrift/Service/Rpc/Thrift/TCLIService.cs | 9212 +++++++++++++++++ .../Rpc/Thrift/TCLIService2.Constants.cs | 89 + .../Rpc/Thrift/TCLIService2.Extensions.cs | 654 ++ .../Service/Rpc/Thrift/TCacheLookupResult.cs | 24 + .../Rpc/Thrift/TCancelDelegationTokenReq.cs | 210 + .../Rpc/Thrift/TCancelDelegationTokenResp.cs | 168 + .../Service/Rpc/Thrift/TCancelOperationReq.cs | 168 + .../Rpc/Thrift/TCancelOperationResp.cs | 168 + .../Service/Rpc/Thrift/TCloseOperationReq.cs | 168 + .../Service/Rpc/Thrift/TCloseOperationResp.cs | 168 + .../Service/Rpc/Thrift/TCloseSessionReq.cs | 168 + .../Service/Rpc/Thrift/TCloseSessionResp.cs | 168 + .../Rpc/Thrift/TCloudFetchDisabledReason.cs | 28 + .../Thrift/Service/Rpc/Thrift/TColumn.cs | 536 + .../Thrift/Service/Rpc/Thrift/TColumnDesc.cs | 295 + .../Thrift/Service/Rpc/Thrift/TColumnValue.cs | 485 + .../Rpc/Thrift/TDBSqlCloudResultFile.cs | 287 + .../Service/Rpc/Thrift/TDBSqlConfValue.cs | 178 + .../Rpc/Thrift/TDBSqlSessionCapabilities.cs | 178 + .../Service/Rpc/Thrift/TDBSqlSessionConf.cs | 548 + .../Service/Rpc/Thrift/TDBSqlTempView.cs | 346 + .../Service/Rpc/Thrift/TDoubleColumn.cs | 199 + .../Thrift/Service/Rpc/Thrift/TDoubleValue.cs | 178 + .../Service/Rpc/Thrift/TDownloadDataReq.cs | 388 + .../Service/Rpc/Thrift/TDownloadDataResp.cs | 211 + .../Rpc/Thrift/TExecuteStatementReq.cs | 1124 ++ .../Rpc/Thrift/TExecuteStatementResp.cs | 569 + .../Service/Rpc/Thrift/TExpressionInfo.cs | 728 ++ .../Service/Rpc/Thrift/TFetchOrientation.cs | 26 + .../Service/Rpc/Thrift/TFetchResultsReq.cs | 437 + .../Service/Rpc/Thrift/TFetchResultsResp.cs | 372 + .../Service/Rpc/Thrift/TGetCatalogsReq.cs | 373 + .../Service/Rpc/Thrift/TGetCatalogsResp.cs | 274 + .../Service/Rpc/Thrift/TGetColumnsReq.cs | 569 + .../Service/Rpc/Thrift/TGetColumnsResp.cs | 274 + .../Rpc/Thrift/TGetCrossReferenceReq.cs | 667 ++ .../Rpc/Thrift/TGetCrossReferenceResp.cs | 274 + .../Rpc/Thrift/TGetDelegationTokenReq.cs | 252 + .../Rpc/Thrift/TGetDelegationTokenResp.cs | 223 + .../Service/Rpc/Thrift/TGetFunctionsReq.cs | 513 + .../Service/Rpc/Thrift/TGetFunctionsResp.cs | 274 + .../Thrift/Service/Rpc/Thrift/TGetInfoReq.cs | 202 + .../Thrift/Service/Rpc/Thrift/TGetInfoResp.cs | 211 + .../Thrift/Service/Rpc/Thrift/TGetInfoType.cs | 68 + .../Service/Rpc/Thrift/TGetInfoValue.cs | 428 + .../Rpc/Thrift/TGetOperationStatusReq.cs | 223 + .../Rpc/Thrift/TGetOperationStatusResp.cs | 963 ++ .../Service/Rpc/Thrift/TGetPrimaryKeysReq.cs | 520 + .../Service/Rpc/Thrift/TGetPrimaryKeysResp.cs | 274 + .../Service/Rpc/Thrift/TGetQueryIdReq.cs | 168 + .../Service/Rpc/Thrift/TGetQueryIdResp.cs | 167 + .../Rpc/Thrift/TGetResultSetMetadataReq.cs | 223 + .../Rpc/Thrift/TGetResultSetMetadataResp.cs | 779 ++ .../Service/Rpc/Thrift/TGetSchemasReq.cs | 471 + .../Service/Rpc/Thrift/TGetSchemasResp.cs | 274 + .../Service/Rpc/Thrift/TGetTableTypesReq.cs | 373 + .../Service/Rpc/Thrift/TGetTableTypesResp.cs | 274 + .../Service/Rpc/Thrift/TGetTablesReq.cs | 584 ++ .../Service/Rpc/Thrift/TGetTablesResp.cs | 274 + .../Service/Rpc/Thrift/TGetTypeInfoReq.cs | 373 + .../Service/Rpc/Thrift/TGetTypeInfoResp.cs | 274 + .../Service/Rpc/Thrift/THandleIdentifier.cs | 209 + .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 200 + .../Thrift/Service/Rpc/Thrift/TI16Value.cs | 178 + .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 199 + .../Thrift/Service/Rpc/Thrift/TI32Value.cs | 178 + .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 200 + .../Thrift/Service/Rpc/Thrift/TI64Value.cs | 178 + .../Service/Rpc/Thrift/TJobExecutionStatus.cs | 23 + .../Service/Rpc/Thrift/TMapTypeEntry.cs | 185 + .../Thrift/Service/Rpc/Thrift/TNamespace.cs | 228 + .../Service/Rpc/Thrift/TOpenSessionReq.cs | 660 ++ .../Service/Rpc/Thrift/TOpenSessionResp.cs | 489 + .../Service/Rpc/Thrift/TOperationHandle.cs | 287 + .../Rpc/Thrift/TOperationIdempotencyType.cs | 23 + .../Service/Rpc/Thrift/TOperationState.cs | 29 + .../Rpc/Thrift/TOperationTimeoutLevel.cs | 22 + .../Service/Rpc/Thrift/TOperationType.cs | 30 + .../Service/Rpc/Thrift/TPrimitiveTypeEntry.cs | 215 + .../Service/Rpc/Thrift/TProgressUpdateResp.cs | 390 + .../Service/Rpc/Thrift/TProtocolVersion.cs | 38 + .../Rpc/Thrift/TRenewDelegationTokenReq.cs | 210 + .../Rpc/Thrift/TRenewDelegationTokenResp.cs | 168 + .../Rpc/Thrift/TResultPersistenceMode.cs | 23 + .../Apache/Thrift/Service/Rpc/Thrift/TRow.cs | 183 + .../Thrift/Service/Rpc/Thrift/TRowSet.cs | 512 + .../Service/Rpc/Thrift/TSessionHandle.cs | 168 + .../Service/Rpc/Thrift/TSetClientInfoReq.cs | 241 + .../Service/Rpc/Thrift/TSetClientInfoResp.cs | 168 + .../Service/Rpc/Thrift/TSparkArrowBatch.cs | 197 + .../Rpc/Thrift/TSparkArrowResultLink.cs | 287 + .../Service/Rpc/Thrift/TSparkArrowTypes.cs | 328 + .../Service/Rpc/Thrift/TSparkDirectResults.cs | 332 + .../Rpc/Thrift/TSparkGetDirectResults.cs | 210 + .../Service/Rpc/Thrift/TSparkRowSetType.cs | 24 + .../Thrift/Service/Rpc/Thrift/TStatus.cs | 376 + .../Thrift/Service/Rpc/Thrift/TStatusCode.cs | 25 + .../Service/Rpc/Thrift/TStringColumn.cs | 233 + .../Thrift/Service/Rpc/Thrift/TStringValue.cs | 178 + .../Service/Rpc/Thrift/TStructTypeEntry.cs | 185 + .../Thrift/Service/Rpc/Thrift/TTableSchema.cs | 183 + .../Thrift/Service/Rpc/Thrift/TTypeDesc.cs | 183 + .../Thrift/Service/Rpc/Thrift/TTypeEntry.cs | 434 + .../Thrift/Service/Rpc/Thrift/TTypeId.cs | 43 + .../Service/Rpc/Thrift/TTypeQualifierValue.cs | 228 + .../Service/Rpc/Thrift/TTypeQualifiers.cs | 186 + .../Service/Rpc/Thrift/TUnionTypeEntry.cs | 185 + .../Service/Rpc/Thrift/TUploadDataReq.cs | 314 + .../Service/Rpc/Thrift/TUploadDataResp.cs | 211 + .../Rpc/Thrift/TUserDefinedTypeEntry.cs | 167 + .../Apache/Thrift/ThriftSocketTransport.cs | 68 + ...kup.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 + ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 + .../Drivers/Apache/ApacheTestConfiguration.cs | 37 + .../test/Drivers/Apache/Impala/ImpalaTests.cs | 50 + .../Apache/Impala/Resources/impalaconfig.json | 6 + .../test/Drivers/Apache/Spark/DriverTests.cs | 206 + .../Apache/Spark/Resources/sparkconfig.json | 13 + .../Apache/Spark/SparkTestConfiguration.cs | 26 + .../Drivers/Apache/Spark/SparkTestingUtils.cs | 109 + 144 files changed, 43006 insertions(+) create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/arrow-adbc/v17/.wsuo create mode 100644 .vs/arrow-adbc/v17/DocumentLayout.json create mode 100644 csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj create mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs create mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs create mode 100644 csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkConnection.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkDatabase.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkDriver.cs create mode 100644 csharp/src/Drivers/Apache/Spark/SparkStatement.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/ChunkStream.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/SchemaParser.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs create mode 100644 csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs create mode 100644 csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj create mode 100644 csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj create mode 100644 csharp/test/Drivers/Apache/ApacheTestConfiguration.cs create mode 100644 csharp/test/Drivers/Apache/Impala/ImpalaTests.cs create mode 100644 csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json create mode 100644 csharp/test/Drivers/Apache/Spark/DriverTests.cs create mode 100644 csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json create mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs create mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000000..ff583ff94e --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\Apache.Arrow.Adbc.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/arrow-adbc/v17/.wsuo b/.vs/arrow-adbc/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..50e7e37621bd862aad90f1d49a78262638f154eb GIT binary patch literal 11264 zcmeHNTW=dh6h2N#q2>~c^Ua*g%$Z|9d~ojZ zPd{JyOFVQ%PRNs;Q*zR%PZ)VQEAkS`tb4Mvv%^=+BipAV#DUvV!KWd^a$U+uYjTgG zj7&o^xGVF)4!s_q{o}opTaOaYv)!|9<9Q%f2!3J;y;7>0X$LH{~FqAyXIW}H5Y*V%gwP^O+G!>EWd#CMLe(Iq0Lj?Oiv*_ zhllN1?$goXz|*wEg9#w5sT2qI0ow0*~&s&jqv2%pYn-9Mj3=;PI4{53-J2 zS!UJu3OtWh)Yg;_g<3$qd*FJev z{_}kQPOV2AI$@b}gJ zvRLmXPEvT(7N3H<>4U9vZj*8Fyg1!VP zD*gh{sSC7)s$mJRzXbV7pFS!+aW#Gp8t%Z-xVo<~b^$A^$*9tQ^IROo4pqU*3u-6W z0-qWjMzH>_<^MYR>HVi0e4bMc?ASb&%b4{V#+iwMPkCwi=dfPx{2Yy1Mugj_quq0j zpF`&42+zj)?kfYPxB!mrvjS{oT0z2Y>wjhhF+eooBzDKL=hf@ul=cq zz2MW1*uOPKbq2-A)a(2s1BEoycM-EmFLmZP2c1tCoR5R0&!ISd*@tq!i)U7*Wmy)n zC-bzbBfpB%tcsnxgwvdNyb|h6uXb6Tb5(WbEvqw-KESqE$QQ8RJ80jT=zDx2Uv_R7 z(4wWc0S!7-^WN+3<)$VtqLw4yOyZ(#eyrV6c+Tv@{DBeg4O#dYu4k9Sxk_)Op*&4} z0~7fOzee)Z{IG2vyvJ}47_rl-Onzk|V`Wly+DaEzl2-n*Jz+WaSU#B_pGc?1ClyoF zb(Q0+&#-*e$}LPM@%h$qiW5`m{G^q1#;2@wI-Roeb}D0yC7sE%?OZNqrdIBg%bba( zyALRV_%zaX1Fy?4Vi9Ee7&MpPVbrVsnDIF?e-QCMj^C%l#eshO=Xl3|vN#17vEz8- zz{5r)ENuUY6Mx}do%`s1k!ex;HD)*C9A$iO{3%BKPyG+*e~kaB_}4`UjBmBD*YQ6;eD@cyf{OQanh)c@+)K~n x;T(cdTW|PVO%Q%x{$0yo@%^aEUu#9&_+78@Kk6>y$JE?7@yCArP)jgg`X6u9-yr}1 literal 0 HcmV?d00001 diff --git a/.vs/arrow-adbc/v17/DocumentLayout.json b/.vs/arrow-adbc/v17/DocumentLayout.json new file mode 100644 index 0000000000..c88b2bf087 --- /dev/null +++ b/.vs/arrow-adbc/v17/DocumentLayout.json @@ -0,0 +1,23 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\gopal.lal\\source\\repos\\arrow-adbc\\", + "Documents": [], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": -1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/csharp/Apache.Arrow.Adbc.sln b/csharp/Apache.Arrow.Adbc.sln index 82b55b6395..0f0652cde7 100644 --- a/csharp/Apache.Arrow.Adbc.sln +++ b/csharp/Apache.Arrow.Adbc.sln @@ -28,6 +28,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.I EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake", "test\Drivers\Interop\Snowflake\Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake.csproj", "{8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Drivers.Apache", "src\Drivers\Apache\Apache.Arrow.Adbc.Drivers.Apache.csproj", "{6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apache.Arrow.Adbc.Tests.Drivers.Apache", "test\Drivers\Apache\Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj", "{714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -70,6 +74,14 @@ Global {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7}.Release|Any CPU.Build.0 = Release|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903}.Release|Any CPU.Build.0 = Release|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -84,6 +96,8 @@ Global {EA43BB7C-BC00-4701-BDF4-367880C2495C} = {C7290227-E925-47E7-8B6B-A8B171645D58} {30024B6F-7BC1-4574-BE5A-924FBD6EAF83} = {FEB257A0-4FD3-495E-9A47-9E1649755445} {8BE1EECC-3ACF-41B2-AF7D-1A67196FF6C7} = {C7290227-E925-47E7-8B6B-A8B171645D58} + {6C0D8BE1-4A23-4C2F-88B1-D2FBEA0B1903} = {FEB257A0-4FD3-495E-9A47-9E1649755445} + {714F0BD2-3A92-4D1A-8FAC-D0C0599BE3E3} = {C7290227-E925-47E7-8B6B-A8B171645D58} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4795CF16-0FDB-4BE0-9768-5CF31564DC03} diff --git a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj new file mode 100644 index 0000000000..ebd30f6134 --- /dev/null +++ b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + + + + + + + + + + + diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs new file mode 100644 index 0000000000..74cb728455 --- /dev/null +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -0,0 +1,209 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift.Protocol; +using Thrift.Transport; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 +{ + public abstract class HiveServer2Connection : AdbcConnection + { + const string userAgent = "AdbcExperimental/0.0"; + + protected TOperationHandle operationHandle; + protected IReadOnlyDictionary properties; + internal TTransport transport; + internal TCLIService.Client client; + internal TSessionHandle sessionHandle; + + internal HiveServer2Connection() : this(null) + { + + } + + internal HiveServer2Connection(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public void Open() + { + TProtocol protocol = CreateProtocol(); + this.transport = protocol.Transport; + this.client = new TCLIService.Client(protocol); + + var s0 = this.client.OpenSession(CreateSessionRequest()).Result; + this.sessionHandle = s0.SessionHandle; + } + + protected abstract TProtocol CreateProtocol(); + protected abstract TOpenSessionReq CreateSessionRequest(); + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + Dictionary>>> catalogMap = new Dictionary>>>(); + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) + { + TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) + { + TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) + { + TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); + } + + if (depth == GetObjectsDepth.All) + { + TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); + columnsReq.CatalogName = catalogPattern; + columnsReq.SchemaName = dbSchemaPattern; + columnsReq.TableName = tableNamePattern; + + if (!string.IsNullOrEmpty(columnNamePattern)) + columnsReq.ColumnName = columnNamePattern; + + var columnsResponse = this.client.GetColumns(columnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + this.operationHandle = columnsResponse.OperationHandle; + } + + PollForResponse(); + + Schema schema = GetSchema(); + + return new GetObjectsReader(this,schema); + } + + public override IArrowArrayStream GetInfo(List codes) + { + throw new NotImplementedException(); + } + + public override IArrowArrayStream GetTableTypes() + { + throw new NotImplementedException(); + } + + protected void PollForResponse() + { + TGetOperationStatusResp statusResponse = null; + do + { + if (statusResponse != null) { Thread.Sleep(500); } + TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); + statusResponse = this.client.GetOperationStatus(request).Result; + } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); + } + + + public override void Dispose() + { + if (this.client != null) + { + TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); + this.client.CloseSession(r6).Wait(); + + this.transport.Close(); + this.client.Dispose(); + this.transport = null; + this.client = null; + } + } + + protected Schema GetSchema() + { + TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); + TGetResultSetMetadataResp response = this.client.GetResultSetMetadata(request).Result; + return SchemaParser.GetArrowSchema(response.Schema); + } + + sealed class GetObjectsReader : IArrowArrayStream + { + HiveServer2Connection connection; + Schema schema; + List batches; + int index; + IArrowReader reader; + + public GetObjectsReader(HiveServer2Connection connection, Schema schema) + { + this.connection = connection; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + while (true) + { + if (this.reader != null) + { + RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + if (next != null) + { + return next; + } + this.reader = null; + } + + if (this.batches != null && this.index < this.batches.Count) + { + this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); + continue; + } + + this.batches = null; + this.index = 0; + + if (this.connection == null) + { + return null; + } + + TFetchResultsReq request = new TFetchResultsReq(this.connection.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = await this.connection.client.FetchResults(request, cancellationToken); + this.batches = response.Results.ArrowBatches; + + if (!response.HasMoreRows) + { + this.connection = null; + } + } + } + + public void Dispose() + { + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs new file mode 100644 index 0000000000..0076c090fa --- /dev/null +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs @@ -0,0 +1,83 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Threading; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 +{ + public abstract class HiveServer2Statement : AdbcStatement + { + protected HiveServer2Connection connection; + protected TOperationHandle operationHandle; + + protected HiveServer2Statement(HiveServer2Connection connection) + { + this.connection = connection; + } + + protected virtual void SetStatementProperties(TExecuteStatementReq statement) + { + } + + protected void ExecuteStatement() + { + TExecuteStatementReq executeRequest = new TExecuteStatementReq(this.connection.sessionHandle, this.SqlQuery); + SetStatementProperties(executeRequest); + var executeResponse = this.connection.client.ExecuteStatement(executeRequest).Result; + if (executeResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(executeResponse.Status.ErrorMessage); + } + + this.operationHandle = executeResponse.OperationHandle; + } + + protected void PollForResponse() + { + TGetOperationStatusResp statusResponse = null; + do + { + if (statusResponse != null) { Thread.Sleep(500); } + TGetOperationStatusReq request = new TGetOperationStatusReq(this.operationHandle); + statusResponse = this.connection.client.GetOperationStatus(request).Result; + } while (statusResponse.OperationState == TOperationState.PENDING_STATE || statusResponse.OperationState == TOperationState.RUNNING_STATE); + } + + protected Schema GetSchema() + { + TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); + TGetResultSetMetadataResp response = this.connection.client.GetResultSetMetadata(request).Result; + return SchemaParser.GetArrowSchema(response.Schema); + } + + public override void Dispose() + { + if (this.operationHandle != null) + { + TCloseOperationReq request = new TCloseOperationReq(this.operationHandle); + this.connection.client.CloseOperation(request).Wait(); + this.operationHandle = null; + } + + base.Dispose(); + } + + + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs new file mode 100644 index 0000000000..ec6210c2f3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaConnection.cs @@ -0,0 +1,80 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaConnection : HiveServer2Connection + { + internal ImpalaConnection(IReadOnlyDictionary properties) + : base(properties) + { + } + + protected override TProtocol CreateProtocol() + { + string hostName = properties["HostName"]; + string tmp; + int port = 21050; // default? + if (properties.TryGetValue("Port", out tmp)) + { + port = int.Parse(tmp); + } + + TConfiguration config = new TConfiguration(); + TTransport transport = new ThriftSocketTransport(hostName, port, config); + return new TBinaryProtocol(transport); + } + + protected override TOpenSessionReq CreateSessionRequest() + { + return new TOpenSessionReq(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V7) + { + CanUseMultipleCatalogs = true, + }; + } + + public override AdbcStatement CreateStatement() + { + return new ImpalaStatement(this); + } + + public override IArrowArrayStream GetInfo(List codes) + { + throw new System.NotImplementedException(); + } + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + throw new System.NotImplementedException(); + } + + public override IArrowArrayStream GetTableTypes() + { + throw new System.NotImplementedException(); + } + + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) => throw new System.NotImplementedException(); + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs new file mode 100644 index 0000000000..e63fead5bb --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaDatabase.cs @@ -0,0 +1,38 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaDatabase : AdbcDatabase + { + readonly IReadOnlyDictionary properties; + + internal ImpalaDatabase(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public override AdbcConnection Connect(IReadOnlyDictionary properties) + { + ImpalaConnection connection = new ImpalaConnection(this.properties); + connection.Open(); + return connection; + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs b/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs new file mode 100644 index 0000000000..69674f0f2d --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaDriver.cs @@ -0,0 +1,29 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaDriver : AdbcDriver + { + public override AdbcDatabase Open(IReadOnlyDictionary parameters) + { + return new ImpalaDatabase(parameters); + } + } +} diff --git a/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs new file mode 100644 index 0000000000..0fd8140bb3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Impala/ImpalaStatement.cs @@ -0,0 +1,114 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport.Client; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Impala +{ + public class ImpalaStatement : HiveServer2Statement + { + internal ImpalaStatement(ImpalaConnection connection) + : base(connection) + { + } + + public override QueryResult ExecuteQuery() + { + ExecuteStatement(); + PollForResponse(); + + Schema schema = GetSchema(); + + return new QueryResult(-1, new HiveServer2Reader(this, schema)); + } + + public override UpdateResult ExecuteUpdate() + { + throw new NotImplementedException(); + } + + public override object GetValue(IArrowArray arrowArray, int index) + { + throw new NotSupportedException(); + } + + class HiveServer2Reader : IArrowArrayStream + { + ImpalaStatement statement; + Schema schema; + int counter; + + public HiveServer2Reader(ImpalaStatement statement, Schema schema) + { + this.statement = statement; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + if (this.statement == null) + { + return new ValueTask((RecordBatch)null); + } + + TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = this.statement.connection.client.FetchResults(request).Result; + + var buffer = new System.IO.MemoryStream(); + response.WriteAsync(new TBinaryProtocol(new TStreamTransport(null, buffer, new TConfiguration())), cancellationToken).Wait(); + System.IO.File.WriteAllBytes(string.Format("d:/src/buffer{0}.bin", this.counter++), buffer.ToArray()); + + RecordBatch result = new RecordBatch(this.schema, response.Results.Columns.Select(GetArray), GetArray(response.Results.Columns[0]).Length); + + if (!response.HasMoreRows) + { + this.statement = null; + } + + return new ValueTask(result); + } + + public void Dispose() + { + } + + static IArrowArray GetArray(TColumn column) + { + return + (IArrowArray)column.BoolVal?.Values ?? + (IArrowArray)column.ByteVal?.Values ?? + (IArrowArray)column.I16Val?.Values ?? + (IArrowArray)column.I32Val?.Values ?? + (IArrowArray)column.I64Val?.Values ?? + (IArrowArray)column.DoubleVal?.Values ?? + (IArrowArray)column.StringVal?.Values ?? + (IArrowArray)column.BinaryVal?.Values; + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs new file mode 100644 index 0000000000..49929e7b6f --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -0,0 +1,805 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Arrow.Types; +using Apache.Hive.Service.Rpc.Thrift; +using Thrift; +using Thrift.Protocol; +using Thrift.Transport.Client; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkConnection : HiveServer2Connection + { + const string userAgent = "MicrosoftSparkODBCDriver/2.7.6.1014"; + + readonly IReadOnlyList infoSupportedCodes = new List { + AdbcInfoCode.DriverName, + AdbcInfoCode.DriverVersion, + AdbcInfoCode.DriverArrowVersion, + AdbcInfoCode.VendorName + }; + + const string infoDriverName = "ADBC Spark Driver"; + const string infoDriverVersion = "1.0.0"; + const string infoVendorName = "Spark"; + const string infoDriverArrowVersion = "1.0.0"; + + internal static TSparkGetDirectResults sparkGetDirectResults = new TSparkGetDirectResults(1000); + + internal static readonly Dictionary timestampConfig = new Dictionary + { + { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } + }; + + public SparkConnection() : this(null) + { + + } + + internal SparkConnection(IReadOnlyDictionary properties) + : base(properties) + { + } + + protected override TProtocol CreateProtocol() + { + string hostName = properties["HostName"]; + string path = properties["Path"]; + string token = properties["Token"]; + + string uri = "https://" + hostName + "/" + path; + + HttpClient httpClient = new HttpClient(); + httpClient.BaseAddress = new Uri(uri); + httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent); + httpClient.DefaultRequestHeaders.AcceptEncoding.Clear(); + httpClient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("identity")); + httpClient.DefaultRequestHeaders.ExpectContinue = false; + + TConfiguration config = new TConfiguration(); + + ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); + // can switch to the one below if want to use the experimental one with IPeekableTransport + // ThriftHttpTransport transport = new ThriftHttpTransport(httpClient, config); + transport.OpenAsync(CancellationToken.None).Wait(); + return new TBinaryProtocol(transport); + } + + protected override TOpenSessionReq CreateSessionRequest() + { + return new TOpenSessionReq(TProtocolVersion.SPARK_CLI_SERVICE_PROTOCOL_V7) + { + CanUseMultipleCatalogs = true, + Configuration = timestampConfig, + }; + } + + public override AdbcStatement CreateStatement() + { + return new SparkStatement(this); + } + + public override void Dispose() + { + if (this.client != null) + { + TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); + this.client.CloseSession(r6).Wait(); + + this.transport.Close(); + this.client.Dispose(); + + this.transport = null; + this.client = null; + } + } + + public override IArrowArrayStream GetInfo(List codes) + { + const int strValTypeID = 0; + + UnionType infoUnionType = new UnionType( + new List() + { + new Field("string_value", StringType.Default, true), + new Field("bool_value", BooleanType.Default, true), + new Field("int64_value", Int64Type.Default, true), + new Field("int32_bitmask", Int32Type.Default, true), + new Field( + "string_list", + new ListType( + new Field("item", StringType.Default, true) + ), + false + ), + new Field( + "int32_to_int32_list_map", + new ListType( + new Field("entries", new StructType( + new List() + { + new Field("key", Int32Type.Default, false), + new Field("value", Int32Type.Default, true), + } + ), false) + ), + true + ) + }, + new int[] { 0, 1, 2, 3, 4, 5 }, + UnionMode.Dense); + + if (codes.Count == 0) + { + codes = new List(infoSupportedCodes); + } + + UInt32Array.Builder infoNameBuilder = new UInt32Array.Builder(); + ArrowBuffer.Builder typeBuilder = new ArrowBuffer.Builder(); + ArrowBuffer.Builder offsetBuilder = new ArrowBuffer.Builder(); + StringArray.Builder stringInfoBuilder = new StringArray.Builder(); + int nullCount = 0; + int arrayLength = codes.Count; + + foreach (AdbcInfoCode code in codes) + { + switch (code) + { + case AdbcInfoCode.DriverName: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverName); + break; + case AdbcInfoCode.DriverVersion: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverVersion); + break; + case AdbcInfoCode.DriverArrowVersion: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoDriverArrowVersion); + break; + case AdbcInfoCode.VendorName: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.Append(infoVendorName); + break; + default: + infoNameBuilder.Append((UInt32)code); + typeBuilder.Append(strValTypeID); + offsetBuilder.Append(stringInfoBuilder.Length); + stringInfoBuilder.AppendNull(); + nullCount++; + break; + } + } + + StructType entryType = new StructType( + new List(){ + new Field("key", Int32Type.Default, false), + new Field("value", Int32Type.Default, true)}); + + StructArray entriesDataArray = new StructArray(entryType, 0, + new[] { new Int32Array.Builder().Build(), new Int32Array.Builder().Build() }, + new ArrowBuffer.BitmapBuilder().Build()); + + List childrenArrays = new List() + { + stringInfoBuilder.Build(), + new BooleanArray.Builder().Build(), + new Int64Array.Builder().Build(), + new Int32Array.Builder().Build(), + new ListArray.Builder(StringType.Default).Build(), + CreateNestedListArray(new List(){ entriesDataArray }, entryType) + }; + + DenseUnionArray infoValue = new DenseUnionArray(infoUnionType, arrayLength, childrenArrays, typeBuilder.Build(), offsetBuilder.Build(), nullCount); + + List dataArrays = new List + { + infoNameBuilder.Build(), + infoValue + }; + + return new SparkInfoArrowStream(StandardSchemas.GetInfoSchema, dataArrays); + + } + + public override IArrowArrayStream GetInfo(List codes) => base.GetInfo(codes); + + public override IArrowArrayStream GetTableTypes() + { + StringArray.Builder tableTypesBuilder = new StringArray.Builder(); + tableTypesBuilder.AppendRange(new string[] { "BASE TABLE", "VIEW" }); + + List dataArrays = new List + { + tableTypesBuilder.Build() + }; + + return new SparkInfoArrowStream(StandardSchemas.TableTypesSchema, dataArrays); + } + + public override Schema GetTableSchema(string catalog, string dbSchema, string tableName) + { + TGetColumnsReq getColumnsReq = new TGetColumnsReq(this.sessionHandle); + getColumnsReq.CatalogName = catalog; + getColumnsReq.SchemaName = dbSchema; + getColumnsReq.TableName = tableName; + getColumnsReq.GetDirectResults = sparkGetDirectResults; + + var columnsResponse = this.client.GetColumns(getColumnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + var result = columnsResponse.DirectResults; + var resultSchema = result.ResultSetMetadata.ArrowSchema; + var columns = result.ResultSet.Results.Columns; + var rowCount = columns[3].StringVal.Values.Length; + + Field[] fields = new Field[rowCount]; + for (int i = 0; i < rowCount; i++) + { + fields[i] = new Field(columns[3].StringVal.Values.GetString(i), + SchemaParser.GetArrowType((TTypeId)columns[4].I32Val.Values.GetValue(i)), + nullable: true /* ??? */); + } + return new Schema(fields, null); + } + private static IReadOnlyList ConvertSpanToReadOnlyList(Int32Array span) + { + // Initialize a list with the capacity equal to the length of the span + // to avoid resizing during the addition of elements + List list = new List(span.Length); + + // Copy elements from the span to the list + foreach (int item in span) + { + list.Add(item); + } + + // Return the list as IReadOnlyList + return list; + } + + public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) + { + Dictionary>> catalogMap = new Dictionary>>(); + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) + { + TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + getCatalogsReq.GetDirectResults = sparkGetDirectResults; + + TGetCatalogsResp getCatalogsResp = this.client.GetCatalogs(getCatalogsReq).Result; + if (getCatalogsResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getCatalogsResp.Status.ErrorMessage); + } + + string catalogRegexp = PatternToRegEx(catalogPattern); + TRowSet resp = getCatalogsResp.DirectResults.ResultSet.Results; + IReadOnlyList list = resp.Columns[0].StringVal.Values; + for (int i = 0; i < list.Count; i++) + { + string col = list[i]; + string catalog = col; + + if (Regex.IsMatch(catalog, catalogRegexp, RegexOptions.IgnoreCase)) + { + catalogMap.Add(catalog, new Dictionary>()); + } + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) + { + TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + getSchemasReq.CatalogName = catalogPattern; + getSchemasReq.SchemaName = dbSchemaPattern; + getSchemasReq.GetDirectResults = sparkGetDirectResults; + + TGetSchemasResp getSchemasResp = this.client.GetSchemas(getSchemasReq).Result; + if (getSchemasResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getSchemasResp.Status.ErrorMessage); + } + TRowSet resp = getSchemasResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[1].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[0].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + catalogMap.GetValueOrDefault(catalog).Add(schemaDb, new Dictionary()); + } + } + + if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) + { + TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); + getTablesReq.CatalogName = catalogPattern; + getTablesReq.SchemaName = dbSchemaPattern; + getTablesReq.TableName = tableNamePattern; + getTablesReq.GetDirectResults = sparkGetDirectResults; + + TGetTablesResp getTablesResp = this.client.GetTables(getTablesReq).Result; + if (getTablesResp.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(getTablesResp.Status.ErrorMessage); + } + TRowSet resp = getTablesResp.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList tableTypeList = resp.Columns[3].StringVal.Values; + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string tableType = tableTypeList[i]; + TableInfoPair tableInfo = new TableInfoPair(); + tableInfo.Type = tableType; + tableInfo.Columns = new List(); + tableInfo.ColType = new List(); + catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).Add(tableName, tableInfo); + } + } + + if (depth == GetObjectsDepth.All) + { + TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); + columnsReq.CatalogName = catalogPattern; + columnsReq.SchemaName = dbSchemaPattern; + columnsReq.TableName = tableNamePattern; + columnsReq.GetDirectResults = sparkGetDirectResults; + + if (!string.IsNullOrEmpty(columnNamePattern)) + columnsReq.ColumnName = columnNamePattern; + + var columnsResponse = this.client.GetColumns(columnsReq).Result; + if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) + { + throw new Exception(columnsResponse.Status.ErrorMessage); + } + + TRowSet resp = columnsResponse.DirectResults.ResultSet.Results; + + IReadOnlyList catalogList = resp.Columns[0].StringVal.Values; + IReadOnlyList schemaList = resp.Columns[1].StringVal.Values; + IReadOnlyList tableList = resp.Columns[2].StringVal.Values; + IReadOnlyList columnList = resp.Columns[3].StringVal.Values; + IReadOnlyList columnTypeList = ConvertSpanToReadOnlyList(resp.Columns[4].I32Val.Values); + + for (int i = 0; i < catalogList.Count; i++) + { + string catalog = catalogList[i]; + string schemaDb = schemaList[i]; + string tableName = tableList[i]; + string column = columnList[i]; + int colType = columnTypeList[i]; + TableInfoPair tableInfo = catalogMap.GetValueOrDefault(catalog).GetValueOrDefault(schemaDb).GetValueOrDefault(tableName); + tableInfo.Columns.Add(column); + tableInfo.ColType.Add(colType); + } + } + + StringArray.Builder catalogNameBuilder = new StringArray.Builder(); + List catalogDbSchemasValues = new List(); + + + foreach (KeyValuePair>> catalogEntry in catalogMap) + { + catalogNameBuilder.Append(catalogEntry.Key); + + if (depth == GetObjectsDepth.Catalogs) + { + catalogDbSchemasValues.Add(null); + } + else + { + catalogDbSchemasValues.Add(GetDbSchemas( + depth, catalogEntry.Value)); + } + + } + + List dataArrays = new List + { + catalogNameBuilder.Build(), + CreateNestedListArray(catalogDbSchemasValues, new StructType(StandardSchemas.DbSchemaSchema)), + }; + return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); + } + + private StructArray GetDbSchemas( + GetObjectsDepth depth, + Dictionary> schemaMap) + { + StringArray.Builder dbSchemaNameBuilder = new StringArray.Builder(); + List dbSchemaTablesValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair> schemaEntry in schemaMap) + { + + dbSchemaNameBuilder.Append(schemaEntry.Key); + length++; + nullBitmapBuffer.Append(true); + + if (depth == GetObjectsDepth.DbSchemas) + { + dbSchemaTablesValues.Add(null); + } + else + { + dbSchemaTablesValues.Add(GetTableSchemas( + depth, schemaEntry.Value)); + } + + } + + + List dataArrays = new List + { + dbSchemaNameBuilder.Build(), + CreateNestedListArray(dbSchemaTablesValues, new StructType(StandardSchemas.TableSchema)), + }; + + return new StructArray( + new StructType(StandardSchemas.DbSchemaSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetTableSchemas( + GetObjectsDepth depth, + Dictionary tableMap) + { + StringArray.Builder tableNameBuilder = new StringArray.Builder(); + StringArray.Builder tableTypeBuilder = new StringArray.Builder(); + List tableColumnsValues = new List(); + List tableConstraintsValues = new List(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + foreach (KeyValuePair tableEntry in tableMap) + { + tableNameBuilder.Append(tableEntry.Key); + tableTypeBuilder.Append(tableEntry.Value.Type); + nullBitmapBuffer.Append(true); + length++; + + + tableConstraintsValues.Add(null); + + + if (depth == GetObjectsDepth.Tables) + { + tableColumnsValues.Add(null); + } + else + { + tableColumnsValues.Add(GetColumnSchema(tableEntry.Value.Columns, tableEntry.Value.ColType)); + } + } + + + List dataArrays = new List + { + tableNameBuilder.Build(), + tableTypeBuilder.Build(), + CreateNestedListArray(tableColumnsValues, new StructType(StandardSchemas.ColumnSchema)), + CreateNestedListArray(tableConstraintsValues, new StructType(StandardSchemas.ConstraintSchema)) + }; + + return new StructArray( + new StructType(StandardSchemas.TableSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private StructArray GetColumnSchema( + List columns, List colTypes) + { + StringArray.Builder columnNameBuilder = new StringArray.Builder(); + Int32Array.Builder ordinalPositionBuilder = new Int32Array.Builder(); + StringArray.Builder remarksBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcDataTypeBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcTypeNameBuilder = new StringArray.Builder(); + Int32Array.Builder xdbcColumnSizeBuilder = new Int32Array.Builder(); + Int16Array.Builder xdbcDecimalDigitsBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNumPrecRadixBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcNullableBuilder = new Int16Array.Builder(); + StringArray.Builder xdbcColumnDefBuilder = new StringArray.Builder(); + Int16Array.Builder xdbcSqlDataTypeBuilder = new Int16Array.Builder(); + Int16Array.Builder xdbcDatetimeSubBuilder = new Int16Array.Builder(); + Int32Array.Builder xdbcCharOctetLengthBuilder = new Int32Array.Builder(); + StringArray.Builder xdbcIsNullableBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeCatalogBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeSchemaBuilder = new StringArray.Builder(); + StringArray.Builder xdbcScopeTableBuilder = new StringArray.Builder(); + BooleanArray.Builder xdbcIsAutoincrementBuilder = new BooleanArray.Builder(); + BooleanArray.Builder xdbcIsGeneratedcolumnBuilder = new BooleanArray.Builder(); + ArrowBuffer.BitmapBuilder nullBitmapBuffer = new ArrowBuffer.BitmapBuilder(); + int length = 0; + + + for (int i = 0; i < columns.Count; i++) + { + columnNameBuilder.Append(columns[i]); + ordinalPositionBuilder.Append((int)colTypes[i]); + remarksBuilder.Append(""); + + + + xdbcColumnSizeBuilder.AppendNull(); + xdbcDecimalDigitsBuilder.AppendNull(); + + + xdbcDataTypeBuilder.AppendNull(); + xdbcTypeNameBuilder.Append(""); + xdbcNumPrecRadixBuilder.AppendNull(); + xdbcNullableBuilder.AppendNull(); + xdbcColumnDefBuilder.AppendNull(); + xdbcSqlDataTypeBuilder.Append((short)colTypes[i]); + xdbcDatetimeSubBuilder.AppendNull(); + xdbcCharOctetLengthBuilder.AppendNull(); + xdbcIsNullableBuilder.Append("true"); + xdbcScopeCatalogBuilder.AppendNull(); + xdbcScopeSchemaBuilder.AppendNull(); + xdbcScopeTableBuilder.AppendNull(); + xdbcIsAutoincrementBuilder.AppendNull(); + xdbcIsGeneratedcolumnBuilder.Append(true); + nullBitmapBuffer.Append(true); + length++; + } + + List dataArrays = new List + { + columnNameBuilder.Build(), + ordinalPositionBuilder.Build(), + remarksBuilder.Build(), + xdbcDataTypeBuilder.Build(), + xdbcTypeNameBuilder.Build(), + xdbcColumnSizeBuilder.Build(), + xdbcDecimalDigitsBuilder.Build(), + xdbcNumPrecRadixBuilder.Build(), + xdbcNullableBuilder.Build(), + xdbcColumnDefBuilder.Build(), + xdbcSqlDataTypeBuilder.Build(), + xdbcDatetimeSubBuilder.Build(), + xdbcCharOctetLengthBuilder.Build(), + xdbcIsNullableBuilder.Build(), + xdbcScopeCatalogBuilder.Build(), + xdbcScopeSchemaBuilder.Build(), + xdbcScopeTableBuilder.Build(), + xdbcIsAutoincrementBuilder.Build(), + xdbcIsGeneratedcolumnBuilder.Build() + }; + + return new StructArray( + new StructType(StandardSchemas.ColumnSchema), + length, + dataArrays, + nullBitmapBuffer.Build()); + } + + private ListArray CreateNestedListArray(List arrayList, IArrowType dataType) + { + ArrowBuffer.Builder valueOffsetsBufferBuilder = new ArrowBuffer.Builder(); + ArrowBuffer.BitmapBuilder validityBufferBuilder = new ArrowBuffer.BitmapBuilder(); + List arrayDataList = new List(arrayList.Count); + int length = 0; + int nullCount = 0; + + foreach (IArrowArray? array in arrayList) + { + if (array == null) + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(false); + nullCount++; + } + else + { + valueOffsetsBufferBuilder.Append(length); + validityBufferBuilder.Append(true); + arrayDataList.Add(array.Data); + length += array.Length; + } + } + + ArrowBuffer validityBuffer = nullCount > 0 + ? validityBufferBuilder.Build() : ArrowBuffer.Empty; + + ArrayData? data = ArrayDataConcatenator.Concatenate(arrayDataList); + + if (data == null) + { + EmptyArrayCreationVisitor visitor = new EmptyArrayCreationVisitor(); + dataType.Accept(visitor); + data = visitor.Result; + } + + IArrowArray value = ArrowArrayFactory.BuildArray(data); + + valueOffsetsBufferBuilder.Append(length); + + return new ListArray(new ListType(dataType), arrayList.Count, + valueOffsetsBufferBuilder.Build(), value, + validityBuffer, nullCount, 0); + } + + private class EmptyArrayCreationVisitor : + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor, + IArrowTypeVisitor + { + public ArrayData? Result { get; private set; } + + public void Visit(BooleanType type) + { + Result = new BooleanArray.Builder().Build().Data; + } + + public void Visit(FixedWidthType type) + { + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, ArrowBuffer.Empty }); + } + + public void Visit(BinaryType type) + { + Result = new BinaryArray.Builder().Build().Data; + } + + public void Visit(StringType type) + { + Result = new StringArray.Builder().Build().Data; + } + + public void Visit(ListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty, MakeInt0Buffer() }, new[] { child }); + } + + public void Visit(FixedSizeListType type) + { + type.ValueDataType.Accept(this); + ArrayData? child = Result; + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, new[] { child }); + } + + public void Visit(StructType type) + { + ArrayData?[] children = new ArrayData[type.Fields.Count]; + for (int i = 0; i < type.Fields.Count; i++) + { + type.Fields[i].DataType.Accept(this); + children[i] = Result; + } + + Result = new ArrayData(type, 0, 0, 0, new[] { ArrowBuffer.Empty }, children); + } + + public void Visit(MapType type) + { + Result = new MapArray.Builder(type).Build().Data; + } + + public void Visit(IArrowType type) + { + throw new NotImplementedException($"EmptyArrayCreationVisitor for {type.Name} is not supported yet."); + } + + private static ArrowBuffer MakeInt0Buffer() + { + ArrowBuffer.Builder builder = new ArrowBuffer.Builder(); + builder.Append(0); + return builder.Build(); + } + } + + private string PatternToRegEx(string pattern) + { + if (pattern == null) + return ".*"; + + StringBuilder builder = new StringBuilder("(?i)^"); + string convertedPattern = pattern.Replace("_", ".").Replace("%", ".*"); + builder.Append(convertedPattern); + builder.Append("$"); + + return builder.ToString(); + } + } + + public struct TableInfoPair + { + public string Type { get; set; } + + public List Columns { get; set; } + + public List ColType { get; set; } + } + + internal class SparkInfoArrowStream : IArrowArrayStream + { + private Schema schema; + private RecordBatch? batch; + + public SparkInfoArrowStream(Schema schema, List data) + { + this.schema = schema; + this.batch = new RecordBatch(schema, data, data[0].Length); + } + + public Schema Schema { get { return this.schema; } } + + public ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + RecordBatch? batch = this.batch; + this.batch = null; + return new ValueTask(batch); + } + + public void Dispose() + { + this.batch?.Dispose(); + this.batch = null; + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs b/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs new file mode 100644 index 0000000000..0b7c99dbcf --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkDatabase.cs @@ -0,0 +1,38 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkDatabase : AdbcDatabase + { + readonly IReadOnlyDictionary properties; + + public SparkDatabase(IReadOnlyDictionary properties) + { + this.properties = properties; + } + + public override AdbcConnection Connect(IReadOnlyDictionary properties) + { + SparkConnection connection = new SparkConnection(this.properties); + connection.Open(); + return connection; + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkDriver.cs b/csharp/src/Drivers/Apache/Spark/SparkDriver.cs new file mode 100644 index 0000000000..359f654349 --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkDriver.cs @@ -0,0 +1,29 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Collections.Generic; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkDriver : AdbcDriver + { + public override AdbcDatabase Open(IReadOnlyDictionary parameters) + { + return new SparkDatabase(parameters); + } + } +} diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs new file mode 100644 index 0000000000..4df66f2778 --- /dev/null +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -0,0 +1,129 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Apache.Arrow.Ipc; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Spark +{ + public class SparkStatement : HiveServer2Statement + { + internal SparkStatement(SparkConnection connection) + : base(connection) + { + } + + protected override void SetStatementProperties(TExecuteStatementReq statement) + { + statement.CanReadArrowResult = true; + statement.CanDownloadResult = true; + statement.ConfOverlay = SparkConnection.timestampConfig; + statement.UseArrowNativeTypes = new TSparkArrowTypes + { + TimestampAsArrow = true, + DecimalAsArrow = true, + ComplexTypesAsArrow = true, + IntervalTypesAsArrow = false, + }; + } + + public override QueryResult ExecuteQuery() + { + ExecuteStatement(); + PollForResponse(); + + Schema schema = GetSchema(); + + return new QueryResult(-1, new SparkReader(this, schema)); + } + + public override UpdateResult ExecuteUpdate() + { + throw new NotImplementedException(); + } + + public override object GetValue(IArrowArray arrowArray, int index) + { + throw new NotSupportedException(); + } + + sealed class SparkReader : IArrowArrayStream + { + SparkStatement statement; + Schema schema; + List batches; + int index; + IArrowReader reader; + + public SparkReader(SparkStatement statement, Schema schema) + { + this.statement = statement; + this.schema = schema; + } + + public Schema Schema { get { return schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + while (true) + { + if (this.reader != null) + { + RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + if (next != null) + { + return next; + } + this.reader = null; + } + + if (this.batches != null && this.index < this.batches.Count) + { + this.reader = new ArrowStreamReader(new ChunkStream(this.schema, this.batches[this.index++].Batch)); + continue; + } + + this.batches = null; + this.index = 0; + + if (this.statement == null) + { + return null; + } + + TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 50000); + TFetchResultsResp response = await this.statement.connection.client.FetchResults(request, cancellationToken); + this.batches = response.Results.ArrowBatches; + + if (!response.HasMoreRows) + { + this.statement = null; + } + } + } + + public void Dispose() + { + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs new file mode 100644 index 0000000000..4db0e80764 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/ChunkStream.cs @@ -0,0 +1,109 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Apache.Arrow.Ipc; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + internal class ChunkStream : Stream + { + ReadOnlyMemory currentBuffer; + byte[] data; + bool first; + int position; + + public ChunkStream(Schema schema, byte[] data) + { + MemoryStream buffer = new MemoryStream(); + ArrowStreamWriter writer = new ArrowStreamWriter(buffer, schema, leaveOpen: true); + writer.WriteStart(); + writer.WriteEnd(); + writer.Dispose(); + + this.currentBuffer = new ReadOnlyMemory(buffer.GetBuffer(), 0, (int)buffer.Length - 8); + this.data = data; + this.first = true; + } + + public override bool CanRead => true; + + public override bool CanSeek => false; + + public override bool CanWrite => false; + + public override long Length => throw new NotSupportedException(); + + public override long Position { get => throw new NotSupportedException(); set => throw new NotSupportedException(); } + + public override void Flush() + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + int remaining = this.currentBuffer.Length - this.position; + if (remaining == 0) + { + if (this.first) + { + this.first = false; + } + else + { + return 0; + } + this.currentBuffer = new ReadOnlyMemory(this.data); + this.position = 0; + remaining = this.currentBuffer.Length - this.position; + } + + int bytes = Math.Min(remaining, count); + this.currentBuffer.Slice(this.position, bytes).CopyTo(new Memory(buffer, offset, bytes)); + this.position += bytes; + return bytes; + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return base.ReadAsync(buffer, offset, count, cancellationToken); + } + + public override int ReadByte() + { + return base.ReadByte(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs new file mode 100644 index 0000000000..cf1f5ebeb1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/IPeekableTransport.cs @@ -0,0 +1,27 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.IO; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + public interface IPeekableTransport + { + Stream Input { get; } + Stream Output { get; } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs new file mode 100644 index 0000000000..96da30de0b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -0,0 +1,82 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using Apache.Arrow.Types; +using Apache.Hive.Service.Rpc.Thrift; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + internal class SchemaParser + { + internal static Schema GetArrowSchema(TTableSchema thriftSchema) + { + Field[] fields = new Field[thriftSchema.Columns.Count]; + for (int i = 0; i < thriftSchema.Columns.Count; i++) + { + TColumnDesc column = thriftSchema.Columns[i]; + fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); + } + return new Schema(fields, null); + } + + static IArrowType GetArrowType(TTypeEntry thriftType) + { + if (thriftType.PrimitiveEntry != null) + { + return GetArrowType(thriftType.PrimitiveEntry.Type); + } + throw new InvalidOperationException(); + } + + public static IArrowType GetArrowType(TTypeId thriftType) + { + switch (thriftType) + { + case TTypeId.BIGINT_TYPE: return Int64Type.Default; + case TTypeId.BINARY_TYPE: return BinaryType.Default; + case TTypeId.BOOLEAN_TYPE: return BooleanType.Default; + case TTypeId.CHAR_TYPE: return StringType.Default; + case TTypeId.DATE_TYPE: return Date32Type.Default; + case TTypeId.DOUBLE_TYPE: return DoubleType.Default; + case TTypeId.FLOAT_TYPE: return FloatType.Default; + case TTypeId.INT_TYPE: return Int32Type.Default; + case TTypeId.NULL_TYPE: return NullType.Default; + case TTypeId.SMALLINT_TYPE: return Int16Type.Default; + case TTypeId.STRING_TYPE: return StringType.Default; + case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); + case TTypeId.TINYINT_TYPE: return Int8Type.Default; + case TTypeId.VARCHAR_TYPE: return StringType.Default; + + // ??? + case TTypeId.DECIMAL_TYPE: + case TTypeId.INTERVAL_DAY_TIME_TYPE: + case TTypeId.INTERVAL_YEAR_MONTH_TYPE: + return StringType.Default; + + case TTypeId.ARRAY_TYPE: + case TTypeId.MAP_TYPE: + case TTypeId.STRUCT_TYPE: + case TTypeId.UNION_TYPE: + case TTypeId.USER_DEFINED_TYPE: + return StringType.Default; + default: + throw new NotImplementedException(); + } + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs new file mode 100644 index 0000000000..ce59bb03fe --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs @@ -0,0 +1,155 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TArrayTypeEntry : TBase + { + + public int ObjectTypePtr { get; set; } + + public TArrayTypeEntry() + { + } + + public TArrayTypeEntry(int objectTypePtr) : this() + { + this.ObjectTypePtr = objectTypePtr; + } + + public TArrayTypeEntry DeepCopy() + { + var tmp20 = new TArrayTypeEntry(); + tmp20.ObjectTypePtr = this.ObjectTypePtr; + return tmp20; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_objectTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + ObjectTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_objectTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_objectTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp21 = new TStruct("TArrayTypeEntry"); + await oprot.WriteStructBeginAsync(tmp21, cancellationToken); + var tmp22 = new TField(); + tmp22.Name = "objectTypePtr"; + tmp22.Type = TType.I32; + tmp22.ID = 1; + await oprot.WriteFieldBeginAsync(tmp22, cancellationToken); + await oprot.WriteI32Async(ObjectTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TArrayTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(ObjectTypePtr, other.ObjectTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + ObjectTypePtr.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp23 = new StringBuilder("TArrayTypeEntry("); + tmp23.Append(", ObjectTypePtr: "); + ObjectTypePtr.ToString(tmp23); + tmp23.Append(')'); + return tmp23.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs new file mode 100644 index 0000000000..5aee28cf97 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs @@ -0,0 +1,234 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Types; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBinaryColumn : TBase + { + + public BinaryArray Values { get; set; } + + public TBinaryColumn() + { + } + + public TBinaryColumn(BinaryArray values) : this() + { + this.Values = values; + } + + public TBinaryColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.Builder values = null; + byte[] nulls = null; + byte[] offsetBuffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + byte[] preAllocatedBuffer = new byte[65536]; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list196 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list196.Count; + + values = new ArrowBuffer.Builder(); + int offset = 0; + offsetBuffer = new byte[(length + 1) * 4]; + var memory = offsetBuffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); + + for(int _i197 = 0; _i197 < length; ++_i197) + { + typedMemory.Span[_i197] = offset; + var size = await iprot.ReadI32Async(cancellationToken); + offset += size; + + iprot.Transport.CheckReadBytesAvailable(size); + + byte[] tmp; + if (size <= preAllocatedBuffer.Length) + { + tmp = preAllocatedBuffer; + } + else + { + tmp = new byte[size]; + } + + await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); + values.Append(tmp.AsMemory(0, size).Span); + } + typedMemory.Span[length] = offset; + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new BinaryArray(BinaryType.Default, length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp199 = new TStruct("TBinaryColumn"); + await oprot.WriteStructBeginAsync(tmp199, cancellationToken); + var tmp200 = new TField(); + if((Values != null)) + { + tmp200.Name = "values"; + tmp200.Type = TType.List; + tmp200.ID = 1; + await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans + byte[] value = new byte[Values.GetValueLength(i)]; + Values.GetBytes(i).CopyTo(value); + await oprot.WriteBinaryAsync(value, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp200.Name = "nulls"; + tmp200.Type = TType.String; + tmp200.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp200, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBinaryColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Values != null)) + { + for (int i = 0; i < Values.Length; i++) + { + hashcode = (hashcode * 397) + Values.GetBytes(i).GetHashCode(); + } + } + } + return hashcode; + } + + public override string ToString() + { + var tmp202 = new StringBuilder("TBinaryColumn("); + if((Values != null)) + { + tmp202.Append(", Values: "); + Values.ToString(tmp202); + } + tmp202.Append(')'); + return tmp202.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs new file mode 100644 index 0000000000..6d284c0f31 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs @@ -0,0 +1,198 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBoolColumn : TBase + { + + public BooleanArray Values { get; set; } + + public TBoolColumn() + { + } + + public TBoolColumn(BooleanArray values) : this() + { + this.Values = values; + } + + public TBoolColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.BitmapBuilder values = null; + byte[] nulls = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list133 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list133.Count; + + byte[] buffer = new byte[length]; + var memory = buffer.AsMemory(); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + + values = new ArrowBuffer.BitmapBuilder(length); + for (int _i134 = 0; _i134 < length; ++_i134) + { + values.Append(buffer[_i134] == 1); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new BooleanArray(values.Build(), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp136 = new TStruct("TBoolColumn"); + await oprot.WriteStructBeginAsync(tmp136, cancellationToken); + var tmp137 = new TField(); + if((Values != null)) + { + tmp137.Name = "values"; + tmp137.Type = TType.List; + tmp137.ID = 1; + await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Bool, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + bool _iter138 = Values.GetValue(i) ?? false; + await oprot.WriteBoolAsync(_iter138, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp137.Name = "nulls"; + tmp137.Type = TType.String; + tmp137.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp137, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBoolColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp139 = new StringBuilder("TBoolColumn("); + if((Values != null)) + { + tmp139.Append(", Values: "); + Values.ToString(tmp139); + } + tmp139.Append(')'); + return tmp139.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs new file mode 100644 index 0000000000..ed39088e5c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TBoolValue : TBase + { + private bool _value; + + public bool Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TBoolValue() + { + } + + public TBoolValue DeepCopy() + { + var tmp83 = new TBoolValue(); + if(__isset.@value) + { + tmp83.Value = this.Value; + } + tmp83.__isset.@value = this.__isset.@value; + return tmp83; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + Value = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp84 = new TStruct("TBoolValue"); + await oprot.WriteStructBeginAsync(tmp84, cancellationToken); + var tmp85 = new TField(); + if(__isset.@value) + { + tmp85.Name = "value"; + tmp85.Type = TType.Bool; + tmp85.ID = 1; + await oprot.WriteFieldBeginAsync(tmp85, cancellationToken); + await oprot.WriteBoolAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TBoolValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp86 = new StringBuilder("TBoolValue("); + int tmp87 = 0; + if(__isset.@value) + { + if(0 < tmp87++) { tmp86.Append(", "); } + tmp86.Append("Value: "); + Value.ToString(tmp86); + } + tmp86.Append(')'); + return tmp86.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs new file mode 100644 index 0000000000..ce579c37a7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs @@ -0,0 +1,196 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TByteColumn : TBase + { + + public Int8Array Values { get; set; } + + public TByteColumn() + { + } + + public TByteColumn(Int8Array values) : this() + { + this.Values = values; + } + + public TByteColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list142 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list142.Count; + + buffer = new byte[length]; + var memory = buffer.AsMemory(); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int8Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp145 = new TStruct("TByteColumn"); + await oprot.WriteStructBeginAsync(tmp145, cancellationToken); + var tmp146 = new TField(); + if((Values != null)) + { + tmp146.Name = "values"; + tmp146.Type = TType.List; + tmp146.ID = 1; + await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Byte, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + sbyte _iter147 = Values.GetValue(i) ?? 0; + await oprot.WriteByteAsync(_iter147, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp146.Name = "nulls"; + tmp146.Type = TType.String; + tmp146.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp146, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TByteColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp148 = new StringBuilder("TByteColumn("); + if((Values != null)) + { + tmp148.Append(", Values: "); + Values.ToString(tmp148); + } + tmp148.Append(')'); + return tmp148.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs new file mode 100644 index 0000000000..d9b15e8ee1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TByteValue : TBase + { + private sbyte _value; + + public sbyte Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TByteValue() + { + } + + public TByteValue DeepCopy() + { + var tmp88 = new TByteValue(); + if(__isset.@value) + { + tmp88.Value = this.Value; + } + tmp88.__isset.@value = this.__isset.@value; + return tmp88; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Byte) + { + Value = await iprot.ReadByteAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp89 = new TStruct("TByteValue"); + await oprot.WriteStructBeginAsync(tmp89, cancellationToken); + var tmp90 = new TField(); + if(__isset.@value) + { + tmp90.Name = "value"; + tmp90.Type = TType.Byte; + tmp90.ID = 1; + await oprot.WriteFieldBeginAsync(tmp90, cancellationToken); + await oprot.WriteByteAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TByteValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp91 = new StringBuilder("TByteValue("); + int tmp92 = 0; + if(__isset.@value) + { + if(0 < tmp92++) { tmp91.Append(", "); } + tmp91.Append("Value: "); + Value.ToString(tmp91); + } + tmp91.Append(')'); + return tmp91.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs new file mode 100644 index 0000000000..a62f77f790 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs @@ -0,0 +1,9212 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public partial class TCLIService + { + public interface IAsync + { + global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default); + + global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default); + + } + + + public class Client : TBaseClient, IDisposable, IAsync + { + public Client(TProtocol protocol) : this(protocol, protocol) + { + } + + public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputProtocol, outputProtocol) + { + } + + public async global::System.Threading.Tasks.Task OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) + { + await send_OpenSession(req, cancellationToken); + return await recv_OpenSession(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Call, SeqId), cancellationToken); + + var tmp655 = new InternalStructs.OpenSession_args() { + Req = req, + }; + + await tmp655.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_OpenSession(CancellationToken cancellationToken = default) + { + + var tmp656 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp656.Type == TMessageType.Exception) + { + var tmp657 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp657; + } + + var tmp658 = new InternalStructs.OpenSession_result(); + await tmp658.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp658.__isset.success) + { + return tmp658.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "OpenSession failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) + { + await send_CloseSession(req, cancellationToken); + return await recv_CloseSession(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Call, SeqId), cancellationToken); + + var tmp659 = new InternalStructs.CloseSession_args() { + Req = req, + }; + + await tmp659.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CloseSession(CancellationToken cancellationToken = default) + { + + var tmp660 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp660.Type == TMessageType.Exception) + { + var tmp661 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp661; + } + + var tmp662 = new InternalStructs.CloseSession_result(); + await tmp662.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp662.__isset.success) + { + return tmp662.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseSession failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) + { + await send_GetInfo(req, cancellationToken); + return await recv_GetInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp663 = new InternalStructs.GetInfo_args() { + Req = req, + }; + + await tmp663.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetInfo(CancellationToken cancellationToken = default) + { + + var tmp664 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp664.Type == TMessageType.Exception) + { + var tmp665 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp665; + } + + var tmp666 = new InternalStructs.GetInfo_result(); + await tmp666.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp666.__isset.success) + { + return tmp666.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) + { + await send_ExecuteStatement(req, cancellationToken); + return await recv_ExecuteStatement(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Call, SeqId), cancellationToken); + + var tmp667 = new InternalStructs.ExecuteStatement_args() { + Req = req, + }; + + await tmp667.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_ExecuteStatement(CancellationToken cancellationToken = default) + { + + var tmp668 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp668.Type == TMessageType.Exception) + { + var tmp669 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp669; + } + + var tmp670 = new InternalStructs.ExecuteStatement_result(); + await tmp670.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp670.__isset.success) + { + return tmp670.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "ExecuteStatement failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) + { + await send_GetTypeInfo(req, cancellationToken); + return await recv_GetTypeInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp671 = new InternalStructs.GetTypeInfo_args() { + Req = req, + }; + + await tmp671.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTypeInfo(CancellationToken cancellationToken = default) + { + + var tmp672 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp672.Type == TMessageType.Exception) + { + var tmp673 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp673; + } + + var tmp674 = new InternalStructs.GetTypeInfo_result(); + await tmp674.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp674.__isset.success) + { + return tmp674.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTypeInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) + { + await send_GetCatalogs(req, cancellationToken); + return await recv_GetCatalogs(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Call, SeqId), cancellationToken); + + var tmp675 = new InternalStructs.GetCatalogs_args() { + Req = req, + }; + + await tmp675.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetCatalogs(CancellationToken cancellationToken = default) + { + + var tmp676 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp676.Type == TMessageType.Exception) + { + var tmp677 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp677; + } + + var tmp678 = new InternalStructs.GetCatalogs_result(); + await tmp678.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp678.__isset.success) + { + return tmp678.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCatalogs failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) + { + await send_GetSchemas(req, cancellationToken); + return await recv_GetSchemas(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Call, SeqId), cancellationToken); + + var tmp679 = new InternalStructs.GetSchemas_args() { + Req = req, + }; + + await tmp679.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetSchemas(CancellationToken cancellationToken = default) + { + + var tmp680 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp680.Type == TMessageType.Exception) + { + var tmp681 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp681; + } + + var tmp682 = new InternalStructs.GetSchemas_result(); + await tmp682.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp682.__isset.success) + { + return tmp682.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetSchemas failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) + { + await send_GetTables(req, cancellationToken); + return await recv_GetTables(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Call, SeqId), cancellationToken); + + var tmp683 = new InternalStructs.GetTables_args() { + Req = req, + }; + + await tmp683.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTables(CancellationToken cancellationToken = default) + { + + var tmp684 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp684.Type == TMessageType.Exception) + { + var tmp685 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp685; + } + + var tmp686 = new InternalStructs.GetTables_result(); + await tmp686.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp686.__isset.success) + { + return tmp686.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTables failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) + { + await send_GetTableTypes(req, cancellationToken); + return await recv_GetTableTypes(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Call, SeqId), cancellationToken); + + var tmp687 = new InternalStructs.GetTableTypes_args() { + Req = req, + }; + + await tmp687.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetTableTypes(CancellationToken cancellationToken = default) + { + + var tmp688 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp688.Type == TMessageType.Exception) + { + var tmp689 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp689; + } + + var tmp690 = new InternalStructs.GetTableTypes_result(); + await tmp690.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp690.__isset.success) + { + return tmp690.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetTableTypes failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) + { + await send_GetColumns(req, cancellationToken); + return await recv_GetColumns(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Call, SeqId), cancellationToken); + + var tmp691 = new InternalStructs.GetColumns_args() { + Req = req, + }; + + await tmp691.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetColumns(CancellationToken cancellationToken = default) + { + + var tmp692 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp692.Type == TMessageType.Exception) + { + var tmp693 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp693; + } + + var tmp694 = new InternalStructs.GetColumns_result(); + await tmp694.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp694.__isset.success) + { + return tmp694.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetColumns failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) + { + await send_GetFunctions(req, cancellationToken); + return await recv_GetFunctions(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Call, SeqId), cancellationToken); + + var tmp695 = new InternalStructs.GetFunctions_args() { + Req = req, + }; + + await tmp695.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetFunctions(CancellationToken cancellationToken = default) + { + + var tmp696 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp696.Type == TMessageType.Exception) + { + var tmp697 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp697; + } + + var tmp698 = new InternalStructs.GetFunctions_result(); + await tmp698.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp698.__isset.success) + { + return tmp698.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetFunctions failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) + { + await send_GetPrimaryKeys(req, cancellationToken); + return await recv_GetPrimaryKeys(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Call, SeqId), cancellationToken); + + var tmp699 = new InternalStructs.GetPrimaryKeys_args() { + Req = req, + }; + + await tmp699.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetPrimaryKeys(CancellationToken cancellationToken = default) + { + + var tmp700 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp700.Type == TMessageType.Exception) + { + var tmp701 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp701; + } + + var tmp702 = new InternalStructs.GetPrimaryKeys_result(); + await tmp702.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp702.__isset.success) + { + return tmp702.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetPrimaryKeys failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) + { + await send_GetCrossReference(req, cancellationToken); + return await recv_GetCrossReference(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Call, SeqId), cancellationToken); + + var tmp703 = new InternalStructs.GetCrossReference_args() { + Req = req, + }; + + await tmp703.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetCrossReference(CancellationToken cancellationToken = default) + { + + var tmp704 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp704.Type == TMessageType.Exception) + { + var tmp705 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp705; + } + + var tmp706 = new InternalStructs.GetCrossReference_result(); + await tmp706.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp706.__isset.success) + { + return tmp706.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetCrossReference failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) + { + await send_GetOperationStatus(req, cancellationToken); + return await recv_GetOperationStatus(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Call, SeqId), cancellationToken); + + var tmp707 = new InternalStructs.GetOperationStatus_args() { + Req = req, + }; + + await tmp707.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetOperationStatus(CancellationToken cancellationToken = default) + { + + var tmp708 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp708.Type == TMessageType.Exception) + { + var tmp709 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp709; + } + + var tmp710 = new InternalStructs.GetOperationStatus_result(); + await tmp710.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp710.__isset.success) + { + return tmp710.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetOperationStatus failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) + { + await send_CancelOperation(req, cancellationToken); + return await recv_CancelOperation(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Call, SeqId), cancellationToken); + + var tmp711 = new InternalStructs.CancelOperation_args() { + Req = req, + }; + + await tmp711.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CancelOperation(CancellationToken cancellationToken = default) + { + + var tmp712 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp712.Type == TMessageType.Exception) + { + var tmp713 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp713; + } + + var tmp714 = new InternalStructs.CancelOperation_result(); + await tmp714.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp714.__isset.success) + { + return tmp714.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelOperation failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) + { + await send_CloseOperation(req, cancellationToken); + return await recv_CloseOperation(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Call, SeqId), cancellationToken); + + var tmp715 = new InternalStructs.CloseOperation_args() { + Req = req, + }; + + await tmp715.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CloseOperation(CancellationToken cancellationToken = default) + { + + var tmp716 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp716.Type == TMessageType.Exception) + { + var tmp717 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp717; + } + + var tmp718 = new InternalStructs.CloseOperation_result(); + await tmp718.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp718.__isset.success) + { + return tmp718.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CloseOperation failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) + { + await send_GetResultSetMetadata(req, cancellationToken); + return await recv_GetResultSetMetadata(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Call, SeqId), cancellationToken); + + var tmp719 = new InternalStructs.GetResultSetMetadata_args() { + Req = req, + }; + + await tmp719.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetResultSetMetadata(CancellationToken cancellationToken = default) + { + + var tmp720 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp720.Type == TMessageType.Exception) + { + var tmp721 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp721; + } + + var tmp722 = new InternalStructs.GetResultSetMetadata_result(); + await tmp722.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp722.__isset.success) + { + return tmp722.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetResultSetMetadata failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) + { + await send_FetchResults(req, cancellationToken); + return await recv_FetchResults(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Call, SeqId), cancellationToken); + + var tmp723 = new InternalStructs.FetchResults_args() { + Req = req, + }; + + await tmp723.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_FetchResults(CancellationToken cancellationToken = default) + { + + var tmp724 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp724.Type == TMessageType.Exception) + { + var tmp725 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp725; + } + + var tmp726 = new InternalStructs.FetchResults_result(); + await tmp726.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp726.__isset.success) + { + return tmp726.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "FetchResults failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_GetDelegationToken(req, cancellationToken); + return await recv_GetDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp727 = new InternalStructs.GetDelegationToken_args() { + Req = req, + }; + + await tmp727.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp728 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp728.Type == TMessageType.Exception) + { + var tmp729 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp729; + } + + var tmp730 = new InternalStructs.GetDelegationToken_result(); + await tmp730.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp730.__isset.success) + { + return tmp730.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_CancelDelegationToken(req, cancellationToken); + return await recv_CancelDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp731 = new InternalStructs.CancelDelegationToken_args() { + Req = req, + }; + + await tmp731.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_CancelDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp732 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp732.Type == TMessageType.Exception) + { + var tmp733 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp733; + } + + var tmp734 = new InternalStructs.CancelDelegationToken_result(); + await tmp734.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp734.__isset.success) + { + return tmp734.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "CancelDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await send_RenewDelegationToken(req, cancellationToken); + return await recv_RenewDelegationToken(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Call, SeqId), cancellationToken); + + var tmp735 = new InternalStructs.RenewDelegationToken_args() { + Req = req, + }; + + await tmp735.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_RenewDelegationToken(CancellationToken cancellationToken = default) + { + + var tmp736 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp736.Type == TMessageType.Exception) + { + var tmp737 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp737; + } + + var tmp738 = new InternalStructs.RenewDelegationToken_result(); + await tmp738.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp738.__isset.success) + { + return tmp738.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "RenewDelegationToken failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) + { + await send_GetQueryId(req, cancellationToken); + return await recv_GetQueryId(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Call, SeqId), cancellationToken); + + var tmp739 = new InternalStructs.GetQueryId_args() { + Req = req, + }; + + await tmp739.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_GetQueryId(CancellationToken cancellationToken = default) + { + + var tmp740 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp740.Type == TMessageType.Exception) + { + var tmp741 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp741; + } + + var tmp742 = new InternalStructs.GetQueryId_result(); + await tmp742.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp742.__isset.success) + { + return tmp742.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "GetQueryId failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) + { + await send_SetClientInfo(req, cancellationToken); + return await recv_SetClientInfo(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Call, SeqId), cancellationToken); + + var tmp743 = new InternalStructs.SetClientInfo_args() { + Req = req, + }; + + await tmp743.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_SetClientInfo(CancellationToken cancellationToken = default) + { + + var tmp744 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp744.Type == TMessageType.Exception) + { + var tmp745 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp745; + } + + var tmp746 = new InternalStructs.SetClientInfo_result(); + await tmp746.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp746.__isset.success) + { + return tmp746.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "SetClientInfo failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) + { + await send_UploadData(req, cancellationToken); + return await recv_UploadData(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Call, SeqId), cancellationToken); + + var tmp747 = new InternalStructs.UploadData_args() { + Req = req, + }; + + await tmp747.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_UploadData(CancellationToken cancellationToken = default) + { + + var tmp748 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp748.Type == TMessageType.Exception) + { + var tmp749 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp749; + } + + var tmp750 = new InternalStructs.UploadData_result(); + await tmp750.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp750.__isset.success) + { + return tmp750.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "UploadData failed: unknown result"); + } + + public async global::System.Threading.Tasks.Task DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) + { + await send_DownloadData(req, cancellationToken); + return await recv_DownloadData(cancellationToken); + } + + public async global::System.Threading.Tasks.Task send_DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) + { + await OutputProtocol.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Call, SeqId), cancellationToken); + + var tmp751 = new InternalStructs.DownloadData_args() { + Req = req, + }; + + await tmp751.WriteAsync(OutputProtocol, cancellationToken); + await OutputProtocol.WriteMessageEndAsync(cancellationToken); + await OutputProtocol.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task recv_DownloadData(CancellationToken cancellationToken = default) + { + + var tmp752 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); + if (tmp752.Type == TMessageType.Exception) + { + var tmp753 = await TApplicationException.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + throw tmp753; + } + + var tmp754 = new InternalStructs.DownloadData_result(); + await tmp754.ReadAsync(InputProtocol, cancellationToken); + await InputProtocol.ReadMessageEndAsync(cancellationToken); + if (tmp754.__isset.success) + { + return tmp754.Success; + } + throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, "DownloadData failed: unknown result"); + } + + } + + public class AsyncProcessor : ITAsyncProcessor + { + private readonly IAsync _iAsync; + private readonly ILogger _logger; + + public AsyncProcessor(IAsync iAsync, ILogger logger = default) + { + _iAsync = iAsync ?? throw new ArgumentNullException(nameof(iAsync)); + _logger = logger; + processMap_["OpenSession"] = OpenSession_ProcessAsync; + processMap_["CloseSession"] = CloseSession_ProcessAsync; + processMap_["GetInfo"] = GetInfo_ProcessAsync; + processMap_["ExecuteStatement"] = ExecuteStatement_ProcessAsync; + processMap_["GetTypeInfo"] = GetTypeInfo_ProcessAsync; + processMap_["GetCatalogs"] = GetCatalogs_ProcessAsync; + processMap_["GetSchemas"] = GetSchemas_ProcessAsync; + processMap_["GetTables"] = GetTables_ProcessAsync; + processMap_["GetTableTypes"] = GetTableTypes_ProcessAsync; + processMap_["GetColumns"] = GetColumns_ProcessAsync; + processMap_["GetFunctions"] = GetFunctions_ProcessAsync; + processMap_["GetPrimaryKeys"] = GetPrimaryKeys_ProcessAsync; + processMap_["GetCrossReference"] = GetCrossReference_ProcessAsync; + processMap_["GetOperationStatus"] = GetOperationStatus_ProcessAsync; + processMap_["CancelOperation"] = CancelOperation_ProcessAsync; + processMap_["CloseOperation"] = CloseOperation_ProcessAsync; + processMap_["GetResultSetMetadata"] = GetResultSetMetadata_ProcessAsync; + processMap_["FetchResults"] = FetchResults_ProcessAsync; + processMap_["GetDelegationToken"] = GetDelegationToken_ProcessAsync; + processMap_["CancelDelegationToken"] = CancelDelegationToken_ProcessAsync; + processMap_["RenewDelegationToken"] = RenewDelegationToken_ProcessAsync; + processMap_["GetQueryId"] = GetQueryId_ProcessAsync; + processMap_["SetClientInfo"] = SetClientInfo_ProcessAsync; + processMap_["UploadData"] = UploadData_ProcessAsync; + processMap_["DownloadData"] = DownloadData_ProcessAsync; + } + + protected delegate global::System.Threading.Tasks.Task ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken); + protected Dictionary processMap_ = new Dictionary(); + + public async Task ProcessAsync(TProtocol iprot, TProtocol oprot) + { + return await ProcessAsync(iprot, oprot, CancellationToken.None); + } + + public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + try + { + var msg = await iprot.ReadMessageBeginAsync(cancellationToken); + + processMap_.TryGetValue(msg.Name, out var fn); + + if (fn == null) + { + await TProtocolUtil.SkipAsync(iprot, TType.Struct, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var x = new TApplicationException (TApplicationException.ExceptionType.UnknownMethod, "Invalid method name: '" + msg.Name + "'"); + await oprot.WriteMessageBeginAsync(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID), cancellationToken); + await x.WriteAsync(oprot, cancellationToken); + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + return true; + } + + await fn(msg.SeqID, iprot, oprot, cancellationToken); + + } + catch (IOException) + { + return false; + } + + return true; + } + + public async global::System.Threading.Tasks.Task OpenSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp755 = new InternalStructs.OpenSession_args(); + await tmp755.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp756 = new InternalStructs.OpenSession_result(); + try + { + tmp756.Success = await _iAsync.OpenSession(tmp755.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Reply, seqid), cancellationToken); + await tmp756.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp757) + { + var tmp758 = $"Error occurred in {GetType().FullName}: {tmp757.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp757, tmp758); + else + Console.Error.WriteLine(tmp758); + var tmp759 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Exception, seqid), cancellationToken); + await tmp759.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CloseSession_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp760 = new InternalStructs.CloseSession_args(); + await tmp760.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp761 = new InternalStructs.CloseSession_result(); + try + { + tmp761.Success = await _iAsync.CloseSession(tmp760.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Reply, seqid), cancellationToken); + await tmp761.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp762) + { + var tmp763 = $"Error occurred in {GetType().FullName}: {tmp762.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp762, tmp763); + else + Console.Error.WriteLine(tmp763); + var tmp764 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Exception, seqid), cancellationToken); + await tmp764.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp765 = new InternalStructs.GetInfo_args(); + await tmp765.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp766 = new InternalStructs.GetInfo_result(); + try + { + tmp766.Success = await _iAsync.GetInfo(tmp765.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp766.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp767) + { + var tmp768 = $"Error occurred in {GetType().FullName}: {tmp767.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp767, tmp768); + else + Console.Error.WriteLine(tmp768); + var tmp769 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp769.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task ExecuteStatement_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp770 = new InternalStructs.ExecuteStatement_args(); + await tmp770.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp771 = new InternalStructs.ExecuteStatement_result(); + try + { + tmp771.Success = await _iAsync.ExecuteStatement(tmp770.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Reply, seqid), cancellationToken); + await tmp771.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp772) + { + var tmp773 = $"Error occurred in {GetType().FullName}: {tmp772.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp772, tmp773); + else + Console.Error.WriteLine(tmp773); + var tmp774 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Exception, seqid), cancellationToken); + await tmp774.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTypeInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp775 = new InternalStructs.GetTypeInfo_args(); + await tmp775.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp776 = new InternalStructs.GetTypeInfo_result(); + try + { + tmp776.Success = await _iAsync.GetTypeInfo(tmp775.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp776.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp777) + { + var tmp778 = $"Error occurred in {GetType().FullName}: {tmp777.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp777, tmp778); + else + Console.Error.WriteLine(tmp778); + var tmp779 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp779.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetCatalogs_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp780 = new InternalStructs.GetCatalogs_args(); + await tmp780.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp781 = new InternalStructs.GetCatalogs_result(); + try + { + tmp781.Success = await _iAsync.GetCatalogs(tmp780.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Reply, seqid), cancellationToken); + await tmp781.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp782) + { + var tmp783 = $"Error occurred in {GetType().FullName}: {tmp782.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp782, tmp783); + else + Console.Error.WriteLine(tmp783); + var tmp784 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Exception, seqid), cancellationToken); + await tmp784.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetSchemas_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp785 = new InternalStructs.GetSchemas_args(); + await tmp785.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp786 = new InternalStructs.GetSchemas_result(); + try + { + tmp786.Success = await _iAsync.GetSchemas(tmp785.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Reply, seqid), cancellationToken); + await tmp786.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp787) + { + var tmp788 = $"Error occurred in {GetType().FullName}: {tmp787.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp787, tmp788); + else + Console.Error.WriteLine(tmp788); + var tmp789 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Exception, seqid), cancellationToken); + await tmp789.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTables_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp790 = new InternalStructs.GetTables_args(); + await tmp790.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp791 = new InternalStructs.GetTables_result(); + try + { + tmp791.Success = await _iAsync.GetTables(tmp790.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Reply, seqid), cancellationToken); + await tmp791.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp792) + { + var tmp793 = $"Error occurred in {GetType().FullName}: {tmp792.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp792, tmp793); + else + Console.Error.WriteLine(tmp793); + var tmp794 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Exception, seqid), cancellationToken); + await tmp794.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetTableTypes_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp795 = new InternalStructs.GetTableTypes_args(); + await tmp795.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp796 = new InternalStructs.GetTableTypes_result(); + try + { + tmp796.Success = await _iAsync.GetTableTypes(tmp795.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Reply, seqid), cancellationToken); + await tmp796.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp797) + { + var tmp798 = $"Error occurred in {GetType().FullName}: {tmp797.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp797, tmp798); + else + Console.Error.WriteLine(tmp798); + var tmp799 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Exception, seqid), cancellationToken); + await tmp799.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetColumns_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp800 = new InternalStructs.GetColumns_args(); + await tmp800.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp801 = new InternalStructs.GetColumns_result(); + try + { + tmp801.Success = await _iAsync.GetColumns(tmp800.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Reply, seqid), cancellationToken); + await tmp801.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp802) + { + var tmp803 = $"Error occurred in {GetType().FullName}: {tmp802.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp802, tmp803); + else + Console.Error.WriteLine(tmp803); + var tmp804 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Exception, seqid), cancellationToken); + await tmp804.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetFunctions_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp805 = new InternalStructs.GetFunctions_args(); + await tmp805.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp806 = new InternalStructs.GetFunctions_result(); + try + { + tmp806.Success = await _iAsync.GetFunctions(tmp805.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Reply, seqid), cancellationToken); + await tmp806.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp807) + { + var tmp808 = $"Error occurred in {GetType().FullName}: {tmp807.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp807, tmp808); + else + Console.Error.WriteLine(tmp808); + var tmp809 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Exception, seqid), cancellationToken); + await tmp809.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetPrimaryKeys_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp810 = new InternalStructs.GetPrimaryKeys_args(); + await tmp810.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp811 = new InternalStructs.GetPrimaryKeys_result(); + try + { + tmp811.Success = await _iAsync.GetPrimaryKeys(tmp810.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Reply, seqid), cancellationToken); + await tmp811.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp812) + { + var tmp813 = $"Error occurred in {GetType().FullName}: {tmp812.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp812, tmp813); + else + Console.Error.WriteLine(tmp813); + var tmp814 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Exception, seqid), cancellationToken); + await tmp814.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetCrossReference_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp815 = new InternalStructs.GetCrossReference_args(); + await tmp815.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp816 = new InternalStructs.GetCrossReference_result(); + try + { + tmp816.Success = await _iAsync.GetCrossReference(tmp815.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Reply, seqid), cancellationToken); + await tmp816.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp817) + { + var tmp818 = $"Error occurred in {GetType().FullName}: {tmp817.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp817, tmp818); + else + Console.Error.WriteLine(tmp818); + var tmp819 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Exception, seqid), cancellationToken); + await tmp819.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetOperationStatus_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp820 = new InternalStructs.GetOperationStatus_args(); + await tmp820.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp821 = new InternalStructs.GetOperationStatus_result(); + try + { + tmp821.Success = await _iAsync.GetOperationStatus(tmp820.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Reply, seqid), cancellationToken); + await tmp821.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp822) + { + var tmp823 = $"Error occurred in {GetType().FullName}: {tmp822.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp822, tmp823); + else + Console.Error.WriteLine(tmp823); + var tmp824 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Exception, seqid), cancellationToken); + await tmp824.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CancelOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp825 = new InternalStructs.CancelOperation_args(); + await tmp825.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp826 = new InternalStructs.CancelOperation_result(); + try + { + tmp826.Success = await _iAsync.CancelOperation(tmp825.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Reply, seqid), cancellationToken); + await tmp826.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp827) + { + var tmp828 = $"Error occurred in {GetType().FullName}: {tmp827.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp827, tmp828); + else + Console.Error.WriteLine(tmp828); + var tmp829 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Exception, seqid), cancellationToken); + await tmp829.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CloseOperation_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp830 = new InternalStructs.CloseOperation_args(); + await tmp830.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp831 = new InternalStructs.CloseOperation_result(); + try + { + tmp831.Success = await _iAsync.CloseOperation(tmp830.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Reply, seqid), cancellationToken); + await tmp831.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp832) + { + var tmp833 = $"Error occurred in {GetType().FullName}: {tmp832.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp832, tmp833); + else + Console.Error.WriteLine(tmp833); + var tmp834 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Exception, seqid), cancellationToken); + await tmp834.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetResultSetMetadata_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp835 = new InternalStructs.GetResultSetMetadata_args(); + await tmp835.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp836 = new InternalStructs.GetResultSetMetadata_result(); + try + { + tmp836.Success = await _iAsync.GetResultSetMetadata(tmp835.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Reply, seqid), cancellationToken); + await tmp836.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp837) + { + var tmp838 = $"Error occurred in {GetType().FullName}: {tmp837.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp837, tmp838); + else + Console.Error.WriteLine(tmp838); + var tmp839 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Exception, seqid), cancellationToken); + await tmp839.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task FetchResults_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp840 = new InternalStructs.FetchResults_args(); + await tmp840.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp841 = new InternalStructs.FetchResults_result(); + try + { + tmp841.Success = await _iAsync.FetchResults(tmp840.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Reply, seqid), cancellationToken); + await tmp841.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp842) + { + var tmp843 = $"Error occurred in {GetType().FullName}: {tmp842.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp842, tmp843); + else + Console.Error.WriteLine(tmp843); + var tmp844 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Exception, seqid), cancellationToken); + await tmp844.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp845 = new InternalStructs.GetDelegationToken_args(); + await tmp845.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp846 = new InternalStructs.GetDelegationToken_result(); + try + { + tmp846.Success = await _iAsync.GetDelegationToken(tmp845.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp846.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp847) + { + var tmp848 = $"Error occurred in {GetType().FullName}: {tmp847.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp847, tmp848); + else + Console.Error.WriteLine(tmp848); + var tmp849 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp849.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task CancelDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp850 = new InternalStructs.CancelDelegationToken_args(); + await tmp850.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp851 = new InternalStructs.CancelDelegationToken_result(); + try + { + tmp851.Success = await _iAsync.CancelDelegationToken(tmp850.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp851.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp852) + { + var tmp853 = $"Error occurred in {GetType().FullName}: {tmp852.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp852, tmp853); + else + Console.Error.WriteLine(tmp853); + var tmp854 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp854.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task RenewDelegationToken_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp855 = new InternalStructs.RenewDelegationToken_args(); + await tmp855.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp856 = new InternalStructs.RenewDelegationToken_result(); + try + { + tmp856.Success = await _iAsync.RenewDelegationToken(tmp855.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await tmp856.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp857) + { + var tmp858 = $"Error occurred in {GetType().FullName}: {tmp857.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp857, tmp858); + else + Console.Error.WriteLine(tmp858); + var tmp859 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Exception, seqid), cancellationToken); + await tmp859.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task GetQueryId_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp860 = new InternalStructs.GetQueryId_args(); + await tmp860.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp861 = new InternalStructs.GetQueryId_result(); + try + { + tmp861.Success = await _iAsync.GetQueryId(tmp860.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Reply, seqid), cancellationToken); + await tmp861.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp862) + { + var tmp863 = $"Error occurred in {GetType().FullName}: {tmp862.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp862, tmp863); + else + Console.Error.WriteLine(tmp863); + var tmp864 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Exception, seqid), cancellationToken); + await tmp864.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task SetClientInfo_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp865 = new InternalStructs.SetClientInfo_args(); + await tmp865.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp866 = new InternalStructs.SetClientInfo_result(); + try + { + tmp866.Success = await _iAsync.SetClientInfo(tmp865.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Reply, seqid), cancellationToken); + await tmp866.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp867) + { + var tmp868 = $"Error occurred in {GetType().FullName}: {tmp867.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp867, tmp868); + else + Console.Error.WriteLine(tmp868); + var tmp869 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Exception, seqid), cancellationToken); + await tmp869.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task UploadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp870 = new InternalStructs.UploadData_args(); + await tmp870.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp871 = new InternalStructs.UploadData_result(); + try + { + tmp871.Success = await _iAsync.UploadData(tmp870.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Reply, seqid), cancellationToken); + await tmp871.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp872) + { + var tmp873 = $"Error occurred in {GetType().FullName}: {tmp872.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp872, tmp873); + else + Console.Error.WriteLine(tmp873); + var tmp874 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Exception, seqid), cancellationToken); + await tmp874.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + public async global::System.Threading.Tasks.Task DownloadData_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot, CancellationToken cancellationToken) + { + var tmp875 = new InternalStructs.DownloadData_args(); + await tmp875.ReadAsync(iprot, cancellationToken); + await iprot.ReadMessageEndAsync(cancellationToken); + var tmp876 = new InternalStructs.DownloadData_result(); + try + { + tmp876.Success = await _iAsync.DownloadData(tmp875.Req, cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Reply, seqid), cancellationToken); + await tmp876.WriteAsync(oprot, cancellationToken); + } + catch (TTransportException) + { + throw; + } + catch (Exception tmp877) + { + var tmp878 = $"Error occurred in {GetType().FullName}: {tmp877.Message}"; + if(_logger != null) + _logger.LogError("{Exception}, {Message}", tmp877, tmp878); + else + Console.Error.WriteLine(tmp878); + var tmp879 = new TApplicationException(TApplicationException.ExceptionType.InternalError," Internal error."); + await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Exception, seqid), cancellationToken); + await tmp879.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMessageEndAsync(cancellationToken); + await oprot.Transport.FlushAsync(cancellationToken); + } + + } + + public class InternalStructs + { + + public partial class OpenSession_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public OpenSession_args() + { + } + + public OpenSession_args DeepCopy() + { + var tmp880 = new OpenSession_args(); + if((Req != null) && __isset.req) + { + tmp880.Req = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq)this.Req.DeepCopy(); + } + tmp880.__isset.req = this.__isset.req; + return tmp880; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp881 = new TStruct("OpenSession_args"); + await oprot.WriteStructBeginAsync(tmp881, cancellationToken); + var tmp882 = new TField(); + if((Req != null) && __isset.req) + { + tmp882.Name = "req"; + tmp882.Type = TType.Struct; + tmp882.ID = 1; + await oprot.WriteFieldBeginAsync(tmp882, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is OpenSession_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp883 = new StringBuilder("OpenSession_args("); + int tmp884 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp884++) { tmp883.Append(", "); } + tmp883.Append("Req: "); + Req.ToString(tmp883); + } + tmp883.Append(')'); + return tmp883.ToString(); + } + } + + + public partial class OpenSession_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public OpenSession_result() + { + } + + public OpenSession_result DeepCopy() + { + var tmp885 = new OpenSession_result(); + if((Success != null) && __isset.success) + { + tmp885.Success = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp)this.Success.DeepCopy(); + } + tmp885.__isset.success = this.__isset.success; + return tmp885; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp886 = new TStruct("OpenSession_result"); + await oprot.WriteStructBeginAsync(tmp886, cancellationToken); + var tmp887 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp887.Name = "Success"; + tmp887.Type = TType.Struct; + tmp887.ID = 0; + await oprot.WriteFieldBeginAsync(tmp887, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is OpenSession_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp888 = new StringBuilder("OpenSession_result("); + int tmp889 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp889++) { tmp888.Append(", "); } + tmp888.Append("Success: "); + Success.ToString(tmp888); + } + tmp888.Append(')'); + return tmp888.ToString(); + } + } + + + public partial class CloseSession_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CloseSession_args() + { + } + + public CloseSession_args DeepCopy() + { + var tmp890 = new CloseSession_args(); + if((Req != null) && __isset.req) + { + tmp890.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq)this.Req.DeepCopy(); + } + tmp890.__isset.req = this.__isset.req; + return tmp890; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp891 = new TStruct("CloseSession_args"); + await oprot.WriteStructBeginAsync(tmp891, cancellationToken); + var tmp892 = new TField(); + if((Req != null) && __isset.req) + { + tmp892.Name = "req"; + tmp892.Type = TType.Struct; + tmp892.ID = 1; + await oprot.WriteFieldBeginAsync(tmp892, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseSession_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp893 = new StringBuilder("CloseSession_args("); + int tmp894 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp894++) { tmp893.Append(", "); } + tmp893.Append("Req: "); + Req.ToString(tmp893); + } + tmp893.Append(')'); + return tmp893.ToString(); + } + } + + + public partial class CloseSession_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CloseSession_result() + { + } + + public CloseSession_result DeepCopy() + { + var tmp895 = new CloseSession_result(); + if((Success != null) && __isset.success) + { + tmp895.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp)this.Success.DeepCopy(); + } + tmp895.__isset.success = this.__isset.success; + return tmp895; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp896 = new TStruct("CloseSession_result"); + await oprot.WriteStructBeginAsync(tmp896, cancellationToken); + var tmp897 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp897.Name = "Success"; + tmp897.Type = TType.Struct; + tmp897.ID = 0; + await oprot.WriteFieldBeginAsync(tmp897, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseSession_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp898 = new StringBuilder("CloseSession_result("); + int tmp899 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp899++) { tmp898.Append(", "); } + tmp898.Append("Success: "); + Success.ToString(tmp898); + } + tmp898.Append(')'); + return tmp898.ToString(); + } + } + + + public partial class GetInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetInfo_args() + { + } + + public GetInfo_args DeepCopy() + { + var tmp900 = new GetInfo_args(); + if((Req != null) && __isset.req) + { + tmp900.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq)this.Req.DeepCopy(); + } + tmp900.__isset.req = this.__isset.req; + return tmp900; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp901 = new TStruct("GetInfo_args"); + await oprot.WriteStructBeginAsync(tmp901, cancellationToken); + var tmp902 = new TField(); + if((Req != null) && __isset.req) + { + tmp902.Name = "req"; + tmp902.Type = TType.Struct; + tmp902.ID = 1; + await oprot.WriteFieldBeginAsync(tmp902, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp903 = new StringBuilder("GetInfo_args("); + int tmp904 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp904++) { tmp903.Append(", "); } + tmp903.Append("Req: "); + Req.ToString(tmp903); + } + tmp903.Append(')'); + return tmp903.ToString(); + } + } + + + public partial class GetInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetInfo_result() + { + } + + public GetInfo_result DeepCopy() + { + var tmp905 = new GetInfo_result(); + if((Success != null) && __isset.success) + { + tmp905.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp)this.Success.DeepCopy(); + } + tmp905.__isset.success = this.__isset.success; + return tmp905; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp906 = new TStruct("GetInfo_result"); + await oprot.WriteStructBeginAsync(tmp906, cancellationToken); + var tmp907 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp907.Name = "Success"; + tmp907.Type = TType.Struct; + tmp907.ID = 0; + await oprot.WriteFieldBeginAsync(tmp907, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp908 = new StringBuilder("GetInfo_result("); + int tmp909 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp909++) { tmp908.Append(", "); } + tmp908.Append("Success: "); + Success.ToString(tmp908); + } + tmp908.Append(')'); + return tmp908.ToString(); + } + } + + + public partial class ExecuteStatement_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public ExecuteStatement_args() + { + } + + public ExecuteStatement_args DeepCopy() + { + var tmp910 = new ExecuteStatement_args(); + if((Req != null) && __isset.req) + { + tmp910.Req = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq)this.Req.DeepCopy(); + } + tmp910.__isset.req = this.__isset.req; + return tmp910; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp911 = new TStruct("ExecuteStatement_args"); + await oprot.WriteStructBeginAsync(tmp911, cancellationToken); + var tmp912 = new TField(); + if((Req != null) && __isset.req) + { + tmp912.Name = "req"; + tmp912.Type = TType.Struct; + tmp912.ID = 1; + await oprot.WriteFieldBeginAsync(tmp912, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is ExecuteStatement_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp913 = new StringBuilder("ExecuteStatement_args("); + int tmp914 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp914++) { tmp913.Append(", "); } + tmp913.Append("Req: "); + Req.ToString(tmp913); + } + tmp913.Append(')'); + return tmp913.ToString(); + } + } + + + public partial class ExecuteStatement_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public ExecuteStatement_result() + { + } + + public ExecuteStatement_result DeepCopy() + { + var tmp915 = new ExecuteStatement_result(); + if((Success != null) && __isset.success) + { + tmp915.Success = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp)this.Success.DeepCopy(); + } + tmp915.__isset.success = this.__isset.success; + return tmp915; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp916 = new TStruct("ExecuteStatement_result"); + await oprot.WriteStructBeginAsync(tmp916, cancellationToken); + var tmp917 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp917.Name = "Success"; + tmp917.Type = TType.Struct; + tmp917.ID = 0; + await oprot.WriteFieldBeginAsync(tmp917, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is ExecuteStatement_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp918 = new StringBuilder("ExecuteStatement_result("); + int tmp919 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp919++) { tmp918.Append(", "); } + tmp918.Append("Success: "); + Success.ToString(tmp918); + } + tmp918.Append(')'); + return tmp918.ToString(); + } + } + + + public partial class GetTypeInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTypeInfo_args() + { + } + + public GetTypeInfo_args DeepCopy() + { + var tmp920 = new GetTypeInfo_args(); + if((Req != null) && __isset.req) + { + tmp920.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq)this.Req.DeepCopy(); + } + tmp920.__isset.req = this.__isset.req; + return tmp920; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp921 = new TStruct("GetTypeInfo_args"); + await oprot.WriteStructBeginAsync(tmp921, cancellationToken); + var tmp922 = new TField(); + if((Req != null) && __isset.req) + { + tmp922.Name = "req"; + tmp922.Type = TType.Struct; + tmp922.ID = 1; + await oprot.WriteFieldBeginAsync(tmp922, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTypeInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp923 = new StringBuilder("GetTypeInfo_args("); + int tmp924 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp924++) { tmp923.Append(", "); } + tmp923.Append("Req: "); + Req.ToString(tmp923); + } + tmp923.Append(')'); + return tmp923.ToString(); + } + } + + + public partial class GetTypeInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTypeInfo_result() + { + } + + public GetTypeInfo_result DeepCopy() + { + var tmp925 = new GetTypeInfo_result(); + if((Success != null) && __isset.success) + { + tmp925.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp)this.Success.DeepCopy(); + } + tmp925.__isset.success = this.__isset.success; + return tmp925; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp926 = new TStruct("GetTypeInfo_result"); + await oprot.WriteStructBeginAsync(tmp926, cancellationToken); + var tmp927 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp927.Name = "Success"; + tmp927.Type = TType.Struct; + tmp927.ID = 0; + await oprot.WriteFieldBeginAsync(tmp927, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTypeInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp928 = new StringBuilder("GetTypeInfo_result("); + int tmp929 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp929++) { tmp928.Append(", "); } + tmp928.Append("Success: "); + Success.ToString(tmp928); + } + tmp928.Append(')'); + return tmp928.ToString(); + } + } + + + public partial class GetCatalogs_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetCatalogs_args() + { + } + + public GetCatalogs_args DeepCopy() + { + var tmp930 = new GetCatalogs_args(); + if((Req != null) && __isset.req) + { + tmp930.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq)this.Req.DeepCopy(); + } + tmp930.__isset.req = this.__isset.req; + return tmp930; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp931 = new TStruct("GetCatalogs_args"); + await oprot.WriteStructBeginAsync(tmp931, cancellationToken); + var tmp932 = new TField(); + if((Req != null) && __isset.req) + { + tmp932.Name = "req"; + tmp932.Type = TType.Struct; + tmp932.ID = 1; + await oprot.WriteFieldBeginAsync(tmp932, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCatalogs_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp933 = new StringBuilder("GetCatalogs_args("); + int tmp934 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp934++) { tmp933.Append(", "); } + tmp933.Append("Req: "); + Req.ToString(tmp933); + } + tmp933.Append(')'); + return tmp933.ToString(); + } + } + + + public partial class GetCatalogs_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetCatalogs_result() + { + } + + public GetCatalogs_result DeepCopy() + { + var tmp935 = new GetCatalogs_result(); + if((Success != null) && __isset.success) + { + tmp935.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp)this.Success.DeepCopy(); + } + tmp935.__isset.success = this.__isset.success; + return tmp935; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp936 = new TStruct("GetCatalogs_result"); + await oprot.WriteStructBeginAsync(tmp936, cancellationToken); + var tmp937 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp937.Name = "Success"; + tmp937.Type = TType.Struct; + tmp937.ID = 0; + await oprot.WriteFieldBeginAsync(tmp937, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCatalogs_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp938 = new StringBuilder("GetCatalogs_result("); + int tmp939 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp939++) { tmp938.Append(", "); } + tmp938.Append("Success: "); + Success.ToString(tmp938); + } + tmp938.Append(')'); + return tmp938.ToString(); + } + } + + + public partial class GetSchemas_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetSchemas_args() + { + } + + public GetSchemas_args DeepCopy() + { + var tmp940 = new GetSchemas_args(); + if((Req != null) && __isset.req) + { + tmp940.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq)this.Req.DeepCopy(); + } + tmp940.__isset.req = this.__isset.req; + return tmp940; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp941 = new TStruct("GetSchemas_args"); + await oprot.WriteStructBeginAsync(tmp941, cancellationToken); + var tmp942 = new TField(); + if((Req != null) && __isset.req) + { + tmp942.Name = "req"; + tmp942.Type = TType.Struct; + tmp942.ID = 1; + await oprot.WriteFieldBeginAsync(tmp942, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetSchemas_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp943 = new StringBuilder("GetSchemas_args("); + int tmp944 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp944++) { tmp943.Append(", "); } + tmp943.Append("Req: "); + Req.ToString(tmp943); + } + tmp943.Append(')'); + return tmp943.ToString(); + } + } + + + public partial class GetSchemas_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetSchemas_result() + { + } + + public GetSchemas_result DeepCopy() + { + var tmp945 = new GetSchemas_result(); + if((Success != null) && __isset.success) + { + tmp945.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp)this.Success.DeepCopy(); + } + tmp945.__isset.success = this.__isset.success; + return tmp945; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp946 = new TStruct("GetSchemas_result"); + await oprot.WriteStructBeginAsync(tmp946, cancellationToken); + var tmp947 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp947.Name = "Success"; + tmp947.Type = TType.Struct; + tmp947.ID = 0; + await oprot.WriteFieldBeginAsync(tmp947, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetSchemas_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp948 = new StringBuilder("GetSchemas_result("); + int tmp949 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp949++) { tmp948.Append(", "); } + tmp948.Append("Success: "); + Success.ToString(tmp948); + } + tmp948.Append(')'); + return tmp948.ToString(); + } + } + + + public partial class GetTables_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTables_args() + { + } + + public GetTables_args DeepCopy() + { + var tmp950 = new GetTables_args(); + if((Req != null) && __isset.req) + { + tmp950.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq)this.Req.DeepCopy(); + } + tmp950.__isset.req = this.__isset.req; + return tmp950; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp951 = new TStruct("GetTables_args"); + await oprot.WriteStructBeginAsync(tmp951, cancellationToken); + var tmp952 = new TField(); + if((Req != null) && __isset.req) + { + tmp952.Name = "req"; + tmp952.Type = TType.Struct; + tmp952.ID = 1; + await oprot.WriteFieldBeginAsync(tmp952, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTables_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp953 = new StringBuilder("GetTables_args("); + int tmp954 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp954++) { tmp953.Append(", "); } + tmp953.Append("Req: "); + Req.ToString(tmp953); + } + tmp953.Append(')'); + return tmp953.ToString(); + } + } + + + public partial class GetTables_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTables_result() + { + } + + public GetTables_result DeepCopy() + { + var tmp955 = new GetTables_result(); + if((Success != null) && __isset.success) + { + tmp955.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp)this.Success.DeepCopy(); + } + tmp955.__isset.success = this.__isset.success; + return tmp955; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp956 = new TStruct("GetTables_result"); + await oprot.WriteStructBeginAsync(tmp956, cancellationToken); + var tmp957 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp957.Name = "Success"; + tmp957.Type = TType.Struct; + tmp957.ID = 0; + await oprot.WriteFieldBeginAsync(tmp957, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTables_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp958 = new StringBuilder("GetTables_result("); + int tmp959 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp959++) { tmp958.Append(", "); } + tmp958.Append("Success: "); + Success.ToString(tmp958); + } + tmp958.Append(')'); + return tmp958.ToString(); + } + } + + + public partial class GetTableTypes_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetTableTypes_args() + { + } + + public GetTableTypes_args DeepCopy() + { + var tmp960 = new GetTableTypes_args(); + if((Req != null) && __isset.req) + { + tmp960.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq)this.Req.DeepCopy(); + } + tmp960.__isset.req = this.__isset.req; + return tmp960; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp961 = new TStruct("GetTableTypes_args"); + await oprot.WriteStructBeginAsync(tmp961, cancellationToken); + var tmp962 = new TField(); + if((Req != null) && __isset.req) + { + tmp962.Name = "req"; + tmp962.Type = TType.Struct; + tmp962.ID = 1; + await oprot.WriteFieldBeginAsync(tmp962, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTableTypes_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp963 = new StringBuilder("GetTableTypes_args("); + int tmp964 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp964++) { tmp963.Append(", "); } + tmp963.Append("Req: "); + Req.ToString(tmp963); + } + tmp963.Append(')'); + return tmp963.ToString(); + } + } + + + public partial class GetTableTypes_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetTableTypes_result() + { + } + + public GetTableTypes_result DeepCopy() + { + var tmp965 = new GetTableTypes_result(); + if((Success != null) && __isset.success) + { + tmp965.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp)this.Success.DeepCopy(); + } + tmp965.__isset.success = this.__isset.success; + return tmp965; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp966 = new TStruct("GetTableTypes_result"); + await oprot.WriteStructBeginAsync(tmp966, cancellationToken); + var tmp967 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp967.Name = "Success"; + tmp967.Type = TType.Struct; + tmp967.ID = 0; + await oprot.WriteFieldBeginAsync(tmp967, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetTableTypes_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp968 = new StringBuilder("GetTableTypes_result("); + int tmp969 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp969++) { tmp968.Append(", "); } + tmp968.Append("Success: "); + Success.ToString(tmp968); + } + tmp968.Append(')'); + return tmp968.ToString(); + } + } + + + public partial class GetColumns_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetColumns_args() + { + } + + public GetColumns_args DeepCopy() + { + var tmp970 = new GetColumns_args(); + if((Req != null) && __isset.req) + { + tmp970.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq)this.Req.DeepCopy(); + } + tmp970.__isset.req = this.__isset.req; + return tmp970; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp971 = new TStruct("GetColumns_args"); + await oprot.WriteStructBeginAsync(tmp971, cancellationToken); + var tmp972 = new TField(); + if((Req != null) && __isset.req) + { + tmp972.Name = "req"; + tmp972.Type = TType.Struct; + tmp972.ID = 1; + await oprot.WriteFieldBeginAsync(tmp972, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetColumns_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp973 = new StringBuilder("GetColumns_args("); + int tmp974 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp974++) { tmp973.Append(", "); } + tmp973.Append("Req: "); + Req.ToString(tmp973); + } + tmp973.Append(')'); + return tmp973.ToString(); + } + } + + + public partial class GetColumns_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetColumns_result() + { + } + + public GetColumns_result DeepCopy() + { + var tmp975 = new GetColumns_result(); + if((Success != null) && __isset.success) + { + tmp975.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp)this.Success.DeepCopy(); + } + tmp975.__isset.success = this.__isset.success; + return tmp975; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp976 = new TStruct("GetColumns_result"); + await oprot.WriteStructBeginAsync(tmp976, cancellationToken); + var tmp977 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp977.Name = "Success"; + tmp977.Type = TType.Struct; + tmp977.ID = 0; + await oprot.WriteFieldBeginAsync(tmp977, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetColumns_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp978 = new StringBuilder("GetColumns_result("); + int tmp979 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp979++) { tmp978.Append(", "); } + tmp978.Append("Success: "); + Success.ToString(tmp978); + } + tmp978.Append(')'); + return tmp978.ToString(); + } + } + + + public partial class GetFunctions_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetFunctions_args() + { + } + + public GetFunctions_args DeepCopy() + { + var tmp980 = new GetFunctions_args(); + if((Req != null) && __isset.req) + { + tmp980.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq)this.Req.DeepCopy(); + } + tmp980.__isset.req = this.__isset.req; + return tmp980; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp981 = new TStruct("GetFunctions_args"); + await oprot.WriteStructBeginAsync(tmp981, cancellationToken); + var tmp982 = new TField(); + if((Req != null) && __isset.req) + { + tmp982.Name = "req"; + tmp982.Type = TType.Struct; + tmp982.ID = 1; + await oprot.WriteFieldBeginAsync(tmp982, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetFunctions_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp983 = new StringBuilder("GetFunctions_args("); + int tmp984 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp984++) { tmp983.Append(", "); } + tmp983.Append("Req: "); + Req.ToString(tmp983); + } + tmp983.Append(')'); + return tmp983.ToString(); + } + } + + + public partial class GetFunctions_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetFunctions_result() + { + } + + public GetFunctions_result DeepCopy() + { + var tmp985 = new GetFunctions_result(); + if((Success != null) && __isset.success) + { + tmp985.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp)this.Success.DeepCopy(); + } + tmp985.__isset.success = this.__isset.success; + return tmp985; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp986 = new TStruct("GetFunctions_result"); + await oprot.WriteStructBeginAsync(tmp986, cancellationToken); + var tmp987 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp987.Name = "Success"; + tmp987.Type = TType.Struct; + tmp987.ID = 0; + await oprot.WriteFieldBeginAsync(tmp987, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetFunctions_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp988 = new StringBuilder("GetFunctions_result("); + int tmp989 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp989++) { tmp988.Append(", "); } + tmp988.Append("Success: "); + Success.ToString(tmp988); + } + tmp988.Append(')'); + return tmp988.ToString(); + } + } + + + public partial class GetPrimaryKeys_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetPrimaryKeys_args() + { + } + + public GetPrimaryKeys_args DeepCopy() + { + var tmp990 = new GetPrimaryKeys_args(); + if((Req != null) && __isset.req) + { + tmp990.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq)this.Req.DeepCopy(); + } + tmp990.__isset.req = this.__isset.req; + return tmp990; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp991 = new TStruct("GetPrimaryKeys_args"); + await oprot.WriteStructBeginAsync(tmp991, cancellationToken); + var tmp992 = new TField(); + if((Req != null) && __isset.req) + { + tmp992.Name = "req"; + tmp992.Type = TType.Struct; + tmp992.ID = 1; + await oprot.WriteFieldBeginAsync(tmp992, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetPrimaryKeys_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp993 = new StringBuilder("GetPrimaryKeys_args("); + int tmp994 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp994++) { tmp993.Append(", "); } + tmp993.Append("Req: "); + Req.ToString(tmp993); + } + tmp993.Append(')'); + return tmp993.ToString(); + } + } + + + public partial class GetPrimaryKeys_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetPrimaryKeys_result() + { + } + + public GetPrimaryKeys_result DeepCopy() + { + var tmp995 = new GetPrimaryKeys_result(); + if((Success != null) && __isset.success) + { + tmp995.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp)this.Success.DeepCopy(); + } + tmp995.__isset.success = this.__isset.success; + return tmp995; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp996 = new TStruct("GetPrimaryKeys_result"); + await oprot.WriteStructBeginAsync(tmp996, cancellationToken); + var tmp997 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp997.Name = "Success"; + tmp997.Type = TType.Struct; + tmp997.ID = 0; + await oprot.WriteFieldBeginAsync(tmp997, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetPrimaryKeys_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp998 = new StringBuilder("GetPrimaryKeys_result("); + int tmp999 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp999++) { tmp998.Append(", "); } + tmp998.Append("Success: "); + Success.ToString(tmp998); + } + tmp998.Append(')'); + return tmp998.ToString(); + } + } + + + public partial class GetCrossReference_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetCrossReference_args() + { + } + + public GetCrossReference_args DeepCopy() + { + var tmp1000 = new GetCrossReference_args(); + if((Req != null) && __isset.req) + { + tmp1000.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq)this.Req.DeepCopy(); + } + tmp1000.__isset.req = this.__isset.req; + return tmp1000; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1001 = new TStruct("GetCrossReference_args"); + await oprot.WriteStructBeginAsync(tmp1001, cancellationToken); + var tmp1002 = new TField(); + if((Req != null) && __isset.req) + { + tmp1002.Name = "req"; + tmp1002.Type = TType.Struct; + tmp1002.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1002, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCrossReference_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1003 = new StringBuilder("GetCrossReference_args("); + int tmp1004 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1004++) { tmp1003.Append(", "); } + tmp1003.Append("Req: "); + Req.ToString(tmp1003); + } + tmp1003.Append(')'); + return tmp1003.ToString(); + } + } + + + public partial class GetCrossReference_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetCrossReference_result() + { + } + + public GetCrossReference_result DeepCopy() + { + var tmp1005 = new GetCrossReference_result(); + if((Success != null) && __isset.success) + { + tmp1005.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp)this.Success.DeepCopy(); + } + tmp1005.__isset.success = this.__isset.success; + return tmp1005; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1006 = new TStruct("GetCrossReference_result"); + await oprot.WriteStructBeginAsync(tmp1006, cancellationToken); + var tmp1007 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1007.Name = "Success"; + tmp1007.Type = TType.Struct; + tmp1007.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1007, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetCrossReference_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1008 = new StringBuilder("GetCrossReference_result("); + int tmp1009 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1009++) { tmp1008.Append(", "); } + tmp1008.Append("Success: "); + Success.ToString(tmp1008); + } + tmp1008.Append(')'); + return tmp1008.ToString(); + } + } + + + public partial class GetOperationStatus_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetOperationStatus_args() + { + } + + public GetOperationStatus_args DeepCopy() + { + var tmp1010 = new GetOperationStatus_args(); + if((Req != null) && __isset.req) + { + tmp1010.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq)this.Req.DeepCopy(); + } + tmp1010.__isset.req = this.__isset.req; + return tmp1010; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1011 = new TStruct("GetOperationStatus_args"); + await oprot.WriteStructBeginAsync(tmp1011, cancellationToken); + var tmp1012 = new TField(); + if((Req != null) && __isset.req) + { + tmp1012.Name = "req"; + tmp1012.Type = TType.Struct; + tmp1012.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1012, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetOperationStatus_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1013 = new StringBuilder("GetOperationStatus_args("); + int tmp1014 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1014++) { tmp1013.Append(", "); } + tmp1013.Append("Req: "); + Req.ToString(tmp1013); + } + tmp1013.Append(')'); + return tmp1013.ToString(); + } + } + + + public partial class GetOperationStatus_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetOperationStatus_result() + { + } + + public GetOperationStatus_result DeepCopy() + { + var tmp1015 = new GetOperationStatus_result(); + if((Success != null) && __isset.success) + { + tmp1015.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.Success.DeepCopy(); + } + tmp1015.__isset.success = this.__isset.success; + return tmp1015; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1016 = new TStruct("GetOperationStatus_result"); + await oprot.WriteStructBeginAsync(tmp1016, cancellationToken); + var tmp1017 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1017.Name = "Success"; + tmp1017.Type = TType.Struct; + tmp1017.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1017, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetOperationStatus_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1018 = new StringBuilder("GetOperationStatus_result("); + int tmp1019 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1019++) { tmp1018.Append(", "); } + tmp1018.Append("Success: "); + Success.ToString(tmp1018); + } + tmp1018.Append(')'); + return tmp1018.ToString(); + } + } + + + public partial class CancelOperation_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CancelOperation_args() + { + } + + public CancelOperation_args DeepCopy() + { + var tmp1020 = new CancelOperation_args(); + if((Req != null) && __isset.req) + { + tmp1020.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq)this.Req.DeepCopy(); + } + tmp1020.__isset.req = this.__isset.req; + return tmp1020; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1021 = new TStruct("CancelOperation_args"); + await oprot.WriteStructBeginAsync(tmp1021, cancellationToken); + var tmp1022 = new TField(); + if((Req != null) && __isset.req) + { + tmp1022.Name = "req"; + tmp1022.Type = TType.Struct; + tmp1022.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1022, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelOperation_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1023 = new StringBuilder("CancelOperation_args("); + int tmp1024 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1024++) { tmp1023.Append(", "); } + tmp1023.Append("Req: "); + Req.ToString(tmp1023); + } + tmp1023.Append(')'); + return tmp1023.ToString(); + } + } + + + public partial class CancelOperation_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CancelOperation_result() + { + } + + public CancelOperation_result DeepCopy() + { + var tmp1025 = new CancelOperation_result(); + if((Success != null) && __isset.success) + { + tmp1025.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp)this.Success.DeepCopy(); + } + tmp1025.__isset.success = this.__isset.success; + return tmp1025; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1026 = new TStruct("CancelOperation_result"); + await oprot.WriteStructBeginAsync(tmp1026, cancellationToken); + var tmp1027 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1027.Name = "Success"; + tmp1027.Type = TType.Struct; + tmp1027.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1027, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelOperation_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1028 = new StringBuilder("CancelOperation_result("); + int tmp1029 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1029++) { tmp1028.Append(", "); } + tmp1028.Append("Success: "); + Success.ToString(tmp1028); + } + tmp1028.Append(')'); + return tmp1028.ToString(); + } + } + + + public partial class CloseOperation_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CloseOperation_args() + { + } + + public CloseOperation_args DeepCopy() + { + var tmp1030 = new CloseOperation_args(); + if((Req != null) && __isset.req) + { + tmp1030.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq)this.Req.DeepCopy(); + } + tmp1030.__isset.req = this.__isset.req; + return tmp1030; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1031 = new TStruct("CloseOperation_args"); + await oprot.WriteStructBeginAsync(tmp1031, cancellationToken); + var tmp1032 = new TField(); + if((Req != null) && __isset.req) + { + tmp1032.Name = "req"; + tmp1032.Type = TType.Struct; + tmp1032.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1032, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseOperation_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1033 = new StringBuilder("CloseOperation_args("); + int tmp1034 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1034++) { tmp1033.Append(", "); } + tmp1033.Append("Req: "); + Req.ToString(tmp1033); + } + tmp1033.Append(')'); + return tmp1033.ToString(); + } + } + + + public partial class CloseOperation_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CloseOperation_result() + { + } + + public CloseOperation_result DeepCopy() + { + var tmp1035 = new CloseOperation_result(); + if((Success != null) && __isset.success) + { + tmp1035.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.Success.DeepCopy(); + } + tmp1035.__isset.success = this.__isset.success; + return tmp1035; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1036 = new TStruct("CloseOperation_result"); + await oprot.WriteStructBeginAsync(tmp1036, cancellationToken); + var tmp1037 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1037.Name = "Success"; + tmp1037.Type = TType.Struct; + tmp1037.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1037, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CloseOperation_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1038 = new StringBuilder("CloseOperation_result("); + int tmp1039 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1039++) { tmp1038.Append(", "); } + tmp1038.Append("Success: "); + Success.ToString(tmp1038); + } + tmp1038.Append(')'); + return tmp1038.ToString(); + } + } + + + public partial class GetResultSetMetadata_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetResultSetMetadata_args() + { + } + + public GetResultSetMetadata_args DeepCopy() + { + var tmp1040 = new GetResultSetMetadata_args(); + if((Req != null) && __isset.req) + { + tmp1040.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq)this.Req.DeepCopy(); + } + tmp1040.__isset.req = this.__isset.req; + return tmp1040; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1041 = new TStruct("GetResultSetMetadata_args"); + await oprot.WriteStructBeginAsync(tmp1041, cancellationToken); + var tmp1042 = new TField(); + if((Req != null) && __isset.req) + { + tmp1042.Name = "req"; + tmp1042.Type = TType.Struct; + tmp1042.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1042, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetResultSetMetadata_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1043 = new StringBuilder("GetResultSetMetadata_args("); + int tmp1044 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1044++) { tmp1043.Append(", "); } + tmp1043.Append("Req: "); + Req.ToString(tmp1043); + } + tmp1043.Append(')'); + return tmp1043.ToString(); + } + } + + + public partial class GetResultSetMetadata_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetResultSetMetadata_result() + { + } + + public GetResultSetMetadata_result DeepCopy() + { + var tmp1045 = new GetResultSetMetadata_result(); + if((Success != null) && __isset.success) + { + tmp1045.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.Success.DeepCopy(); + } + tmp1045.__isset.success = this.__isset.success; + return tmp1045; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1046 = new TStruct("GetResultSetMetadata_result"); + await oprot.WriteStructBeginAsync(tmp1046, cancellationToken); + var tmp1047 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1047.Name = "Success"; + tmp1047.Type = TType.Struct; + tmp1047.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1047, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetResultSetMetadata_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1048 = new StringBuilder("GetResultSetMetadata_result("); + int tmp1049 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1049++) { tmp1048.Append(", "); } + tmp1048.Append("Success: "); + Success.ToString(tmp1048); + } + tmp1048.Append(')'); + return tmp1048.ToString(); + } + } + + + public partial class FetchResults_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public FetchResults_args() + { + } + + public FetchResults_args DeepCopy() + { + var tmp1050 = new FetchResults_args(); + if((Req != null) && __isset.req) + { + tmp1050.Req = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq)this.Req.DeepCopy(); + } + tmp1050.__isset.req = this.__isset.req; + return tmp1050; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1051 = new TStruct("FetchResults_args"); + await oprot.WriteStructBeginAsync(tmp1051, cancellationToken); + var tmp1052 = new TField(); + if((Req != null) && __isset.req) + { + tmp1052.Name = "req"; + tmp1052.Type = TType.Struct; + tmp1052.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1052, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is FetchResults_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1053 = new StringBuilder("FetchResults_args("); + int tmp1054 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1054++) { tmp1053.Append(", "); } + tmp1053.Append("Req: "); + Req.ToString(tmp1053); + } + tmp1053.Append(')'); + return tmp1053.ToString(); + } + } + + + public partial class FetchResults_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public FetchResults_result() + { + } + + public FetchResults_result DeepCopy() + { + var tmp1055 = new FetchResults_result(); + if((Success != null) && __isset.success) + { + tmp1055.Success = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.Success.DeepCopy(); + } + tmp1055.__isset.success = this.__isset.success; + return tmp1055; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1056 = new TStruct("FetchResults_result"); + await oprot.WriteStructBeginAsync(tmp1056, cancellationToken); + var tmp1057 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1057.Name = "Success"; + tmp1057.Type = TType.Struct; + tmp1057.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1057, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is FetchResults_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1058 = new StringBuilder("FetchResults_result("); + int tmp1059 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1059++) { tmp1058.Append(", "); } + tmp1058.Append("Success: "); + Success.ToString(tmp1058); + } + tmp1058.Append(')'); + return tmp1058.ToString(); + } + } + + + public partial class GetDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetDelegationToken_args() + { + } + + public GetDelegationToken_args DeepCopy() + { + var tmp1060 = new GetDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1060.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1060.__isset.req = this.__isset.req; + return tmp1060; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1061 = new TStruct("GetDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1061, cancellationToken); + var tmp1062 = new TField(); + if((Req != null) && __isset.req) + { + tmp1062.Name = "req"; + tmp1062.Type = TType.Struct; + tmp1062.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1062, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1063 = new StringBuilder("GetDelegationToken_args("); + int tmp1064 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1064++) { tmp1063.Append(", "); } + tmp1063.Append("Req: "); + Req.ToString(tmp1063); + } + tmp1063.Append(')'); + return tmp1063.ToString(); + } + } + + + public partial class GetDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetDelegationToken_result() + { + } + + public GetDelegationToken_result DeepCopy() + { + var tmp1065 = new GetDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1065.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1065.__isset.success = this.__isset.success; + return tmp1065; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1066 = new TStruct("GetDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1066, cancellationToken); + var tmp1067 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1067.Name = "Success"; + tmp1067.Type = TType.Struct; + tmp1067.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1067, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1068 = new StringBuilder("GetDelegationToken_result("); + int tmp1069 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1069++) { tmp1068.Append(", "); } + tmp1068.Append("Success: "); + Success.ToString(tmp1068); + } + tmp1068.Append(')'); + return tmp1068.ToString(); + } + } + + + public partial class CancelDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public CancelDelegationToken_args() + { + } + + public CancelDelegationToken_args DeepCopy() + { + var tmp1070 = new CancelDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1070.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1070.__isset.req = this.__isset.req; + return tmp1070; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1071 = new TStruct("CancelDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1071, cancellationToken); + var tmp1072 = new TField(); + if((Req != null) && __isset.req) + { + tmp1072.Name = "req"; + tmp1072.Type = TType.Struct; + tmp1072.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1072, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1073 = new StringBuilder("CancelDelegationToken_args("); + int tmp1074 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1074++) { tmp1073.Append(", "); } + tmp1073.Append("Req: "); + Req.ToString(tmp1073); + } + tmp1073.Append(')'); + return tmp1073.ToString(); + } + } + + + public partial class CancelDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public CancelDelegationToken_result() + { + } + + public CancelDelegationToken_result DeepCopy() + { + var tmp1075 = new CancelDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1075.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1075.__isset.success = this.__isset.success; + return tmp1075; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1076 = new TStruct("CancelDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1076, cancellationToken); + var tmp1077 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1077.Name = "Success"; + tmp1077.Type = TType.Struct; + tmp1077.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1077, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is CancelDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1078 = new StringBuilder("CancelDelegationToken_result("); + int tmp1079 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1079++) { tmp1078.Append(", "); } + tmp1078.Append("Success: "); + Success.ToString(tmp1078); + } + tmp1078.Append(')'); + return tmp1078.ToString(); + } + } + + + public partial class RenewDelegationToken_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public RenewDelegationToken_args() + { + } + + public RenewDelegationToken_args DeepCopy() + { + var tmp1080 = new RenewDelegationToken_args(); + if((Req != null) && __isset.req) + { + tmp1080.Req = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq)this.Req.DeepCopy(); + } + tmp1080.__isset.req = this.__isset.req; + return tmp1080; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1081 = new TStruct("RenewDelegationToken_args"); + await oprot.WriteStructBeginAsync(tmp1081, cancellationToken); + var tmp1082 = new TField(); + if((Req != null) && __isset.req) + { + tmp1082.Name = "req"; + tmp1082.Type = TType.Struct; + tmp1082.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1082, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is RenewDelegationToken_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1083 = new StringBuilder("RenewDelegationToken_args("); + int tmp1084 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1084++) { tmp1083.Append(", "); } + tmp1083.Append("Req: "); + Req.ToString(tmp1083); + } + tmp1083.Append(')'); + return tmp1083.ToString(); + } + } + + + public partial class RenewDelegationToken_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public RenewDelegationToken_result() + { + } + + public RenewDelegationToken_result DeepCopy() + { + var tmp1085 = new RenewDelegationToken_result(); + if((Success != null) && __isset.success) + { + tmp1085.Success = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp)this.Success.DeepCopy(); + } + tmp1085.__isset.success = this.__isset.success; + return tmp1085; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1086 = new TStruct("RenewDelegationToken_result"); + await oprot.WriteStructBeginAsync(tmp1086, cancellationToken); + var tmp1087 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1087.Name = "Success"; + tmp1087.Type = TType.Struct; + tmp1087.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1087, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is RenewDelegationToken_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1088 = new StringBuilder("RenewDelegationToken_result("); + int tmp1089 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1089++) { tmp1088.Append(", "); } + tmp1088.Append("Success: "); + Success.ToString(tmp1088); + } + tmp1088.Append(')'); + return tmp1088.ToString(); + } + } + + + public partial class GetQueryId_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public GetQueryId_args() + { + } + + public GetQueryId_args DeepCopy() + { + var tmp1090 = new GetQueryId_args(); + if((Req != null) && __isset.req) + { + tmp1090.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq)this.Req.DeepCopy(); + } + tmp1090.__isset.req = this.__isset.req; + return tmp1090; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1091 = new TStruct("GetQueryId_args"); + await oprot.WriteStructBeginAsync(tmp1091, cancellationToken); + var tmp1092 = new TField(); + if((Req != null) && __isset.req) + { + tmp1092.Name = "req"; + tmp1092.Type = TType.Struct; + tmp1092.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1092, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetQueryId_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1093 = new StringBuilder("GetQueryId_args("); + int tmp1094 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1094++) { tmp1093.Append(", "); } + tmp1093.Append("Req: "); + Req.ToString(tmp1093); + } + tmp1093.Append(')'); + return tmp1093.ToString(); + } + } + + + public partial class GetQueryId_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public GetQueryId_result() + { + } + + public GetQueryId_result DeepCopy() + { + var tmp1095 = new GetQueryId_result(); + if((Success != null) && __isset.success) + { + tmp1095.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp)this.Success.DeepCopy(); + } + tmp1095.__isset.success = this.__isset.success; + return tmp1095; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1096 = new TStruct("GetQueryId_result"); + await oprot.WriteStructBeginAsync(tmp1096, cancellationToken); + var tmp1097 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1097.Name = "Success"; + tmp1097.Type = TType.Struct; + tmp1097.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1097, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is GetQueryId_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1098 = new StringBuilder("GetQueryId_result("); + int tmp1099 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1099++) { tmp1098.Append(", "); } + tmp1098.Append("Success: "); + Success.ToString(tmp1098); + } + tmp1098.Append(')'); + return tmp1098.ToString(); + } + } + + + public partial class SetClientInfo_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public SetClientInfo_args() + { + } + + public SetClientInfo_args DeepCopy() + { + var tmp1100 = new SetClientInfo_args(); + if((Req != null) && __isset.req) + { + tmp1100.Req = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq)this.Req.DeepCopy(); + } + tmp1100.__isset.req = this.__isset.req; + return tmp1100; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1101 = new TStruct("SetClientInfo_args"); + await oprot.WriteStructBeginAsync(tmp1101, cancellationToken); + var tmp1102 = new TField(); + if((Req != null) && __isset.req) + { + tmp1102.Name = "req"; + tmp1102.Type = TType.Struct; + tmp1102.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1102, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is SetClientInfo_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1103 = new StringBuilder("SetClientInfo_args("); + int tmp1104 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1104++) { tmp1103.Append(", "); } + tmp1103.Append("Req: "); + Req.ToString(tmp1103); + } + tmp1103.Append(')'); + return tmp1103.ToString(); + } + } + + + public partial class SetClientInfo_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public SetClientInfo_result() + { + } + + public SetClientInfo_result DeepCopy() + { + var tmp1105 = new SetClientInfo_result(); + if((Success != null) && __isset.success) + { + tmp1105.Success = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp)this.Success.DeepCopy(); + } + tmp1105.__isset.success = this.__isset.success; + return tmp1105; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1106 = new TStruct("SetClientInfo_result"); + await oprot.WriteStructBeginAsync(tmp1106, cancellationToken); + var tmp1107 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1107.Name = "Success"; + tmp1107.Type = TType.Struct; + tmp1107.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1107, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is SetClientInfo_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1108 = new StringBuilder("SetClientInfo_result("); + int tmp1109 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1109++) { tmp1108.Append(", "); } + tmp1108.Append("Success: "); + Success.ToString(tmp1108); + } + tmp1108.Append(')'); + return tmp1108.ToString(); + } + } + + + public partial class UploadData_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public UploadData_args() + { + } + + public UploadData_args DeepCopy() + { + var tmp1110 = new UploadData_args(); + if((Req != null) && __isset.req) + { + tmp1110.Req = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq)this.Req.DeepCopy(); + } + tmp1110.__isset.req = this.__isset.req; + return tmp1110; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1111 = new TStruct("UploadData_args"); + await oprot.WriteStructBeginAsync(tmp1111, cancellationToken); + var tmp1112 = new TField(); + if((Req != null) && __isset.req) + { + tmp1112.Name = "req"; + tmp1112.Type = TType.Struct; + tmp1112.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1112, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is UploadData_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1113 = new StringBuilder("UploadData_args("); + int tmp1114 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1114++) { tmp1113.Append(", "); } + tmp1113.Append("Req: "); + Req.ToString(tmp1113); + } + tmp1113.Append(')'); + return tmp1113.ToString(); + } + } + + + public partial class UploadData_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public UploadData_result() + { + } + + public UploadData_result DeepCopy() + { + var tmp1115 = new UploadData_result(); + if((Success != null) && __isset.success) + { + tmp1115.Success = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp)this.Success.DeepCopy(); + } + tmp1115.__isset.success = this.__isset.success; + return tmp1115; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1116 = new TStruct("UploadData_result"); + await oprot.WriteStructBeginAsync(tmp1116, cancellationToken); + var tmp1117 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1117.Name = "Success"; + tmp1117.Type = TType.Struct; + tmp1117.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1117, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is UploadData_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1118 = new StringBuilder("UploadData_result("); + int tmp1119 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1119++) { tmp1118.Append(", "); } + tmp1118.Append("Success: "); + Success.ToString(tmp1118); + } + tmp1118.Append(')'); + return tmp1118.ToString(); + } + } + + + public partial class DownloadData_args : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq _req; + + public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq Req + { + get + { + return _req; + } + set + { + __isset.req = true; + this._req = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool req; + } + + public DownloadData_args() + { + } + + public DownloadData_args DeepCopy() + { + var tmp1120 = new DownloadData_args(); + if((Req != null) && __isset.req) + { + tmp1120.Req = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq)this.Req.DeepCopy(); + } + tmp1120.__isset.req = this.__isset.req; + return tmp1120; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Req = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq(); + await Req.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1121 = new TStruct("DownloadData_args"); + await oprot.WriteStructBeginAsync(tmp1121, cancellationToken); + var tmp1122 = new TField(); + if((Req != null) && __isset.req) + { + tmp1122.Name = "req"; + tmp1122.Type = TType.Struct; + tmp1122.ID = 1; + await oprot.WriteFieldBeginAsync(tmp1122, cancellationToken); + await Req.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is DownloadData_args other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.req == other.__isset.req) && ((!__isset.req) || (global::System.Object.Equals(Req, other.Req)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Req != null) && __isset.req) + { + hashcode = (hashcode * 397) + Req.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1123 = new StringBuilder("DownloadData_args("); + int tmp1124 = 0; + if((Req != null) && __isset.req) + { + if(0 < tmp1124++) { tmp1123.Append(", "); } + tmp1123.Append("Req: "); + Req.ToString(tmp1123); + } + tmp1123.Append(')'); + return tmp1123.ToString(); + } + } + + + public partial class DownloadData_result : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp _success; + + public global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp Success + { + get + { + return _success; + } + set + { + __isset.success = true; + this._success = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool success; + } + + public DownloadData_result() + { + } + + public DownloadData_result DeepCopy() + { + var tmp1125 = new DownloadData_result(); + if((Success != null) && __isset.success) + { + tmp1125.Success = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp)this.Success.DeepCopy(); + } + tmp1125.__isset.success = this.__isset.success; + return tmp1125; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 0: + if (field.Type == TType.Struct) + { + Success = new global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp(); + await Success.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1126 = new TStruct("DownloadData_result"); + await oprot.WriteStructBeginAsync(tmp1126, cancellationToken); + var tmp1127 = new TField(); + + if(this.__isset.success) + { + if (Success != null) + { + tmp1127.Name = "Success"; + tmp1127.Type = TType.Struct; + tmp1127.ID = 0; + await oprot.WriteFieldBeginAsync(tmp1127, cancellationToken); + await Success.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is DownloadData_result other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.success == other.__isset.success) && ((!__isset.success) || (global::System.Object.Equals(Success, other.Success)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Success != null) && __isset.success) + { + hashcode = (hashcode * 397) + Success.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp1128 = new StringBuilder("DownloadData_result("); + int tmp1129 = 0; + if((Success != null) && __isset.success) + { + if(0 < tmp1129++) { tmp1128.Append(", "); } + tmp1128.Append("Success: "); + Success.ToString(tmp1128); + } + tmp1128.Append(')'); + return tmp1128.ToString(); + } + } + + } + + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs new file mode 100644 index 0000000000..b6c46ba763 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Constants.cs @@ -0,0 +1,89 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public static class TCLIService2Constants + { + public static HashSet PRIMITIVE_TYPES = new HashSet(); + public static HashSet COMPLEX_TYPES = new HashSet(); + public static HashSet COLLECTION_TYPES = new HashSet(); + public static Dictionary TYPE_NAMES = new Dictionary(); + public const string CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength"; + public const string PRECISION = "precision"; + public const string SCALE = "scale"; + static TCLIService2Constants() + { + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE); + PRIMITIVE_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE); + COMPLEX_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.USER_DEFINED_TYPE); + COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE); + COLLECTION_TYPES.Add(global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE); + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.ARRAY_TYPE] = "ARRAY"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BIGINT_TYPE] = "BIGINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BINARY_TYPE] = "BINARY"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.BOOLEAN_TYPE] = "BOOLEAN"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.CHAR_TYPE] = "CHAR"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DATE_TYPE] = "DATE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DECIMAL_TYPE] = "DECIMAL"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.DOUBLE_TYPE] = "DOUBLE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.FLOAT_TYPE] = "FLOAT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_DAY_TIME_TYPE] = "INTERVAL_DAY_TIME"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INTERVAL_YEAR_MONTH_TYPE] = "INTERVAL_YEAR_MONTH"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.INT_TYPE] = "INT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.MAP_TYPE] = "MAP"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.NULL_TYPE] = "NULL"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.SMALLINT_TYPE] = "SMALLINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRING_TYPE] = "STRING"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.STRUCT_TYPE] = "STRUCT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMPLOCALTZ_TYPE] = "TIMESTAMP WITH LOCAL TIME ZONE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TIMESTAMP_TYPE] = "TIMESTAMP"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.TINYINT_TYPE] = "TINYINT"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.UNION_TYPE] = "UNIONTYPE"; + TYPE_NAMES[global::Apache.Hive.Service.Rpc.Thrift.TTypeId.VARCHAR_TYPE] = "VARCHAR"; + } + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs new file mode 100644 index 0000000000..25c611993a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService2.Extensions.cs @@ -0,0 +1,654 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public static class TCLIService2Extensions + { + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1130 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1130.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); + return tmp1130; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1131 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1131.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value.DeepCopy() : null); + return tmp1131; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1132 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1132.Add((pair.Key != null) ? pair.Key : null, pair.Value); + return tmp1132; + } + + + public static bool Equals(this Dictionary instance, object that) + { + if (!(that is Dictionary other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this Dictionary instance) + { + return TCollections.GetHashCode(instance); + } + + + public static Dictionary DeepCopy(this Dictionary source) + { + if (source == null) + return null; + + var tmp1133 = new Dictionary(source.Count); + foreach (var pair in source) + tmp1133.Add((pair.Key != null) ? pair.Key : null, (pair.Value != null) ? pair.Value : null); + return tmp1133; + } + + + public static bool Equals(this List> instance, object that) + { + if (!(that is List> other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List> instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List> DeepCopy(this List> source) + { + if (source == null) + return null; + + var tmp1134 = new List>(source.Count); + foreach (var elem in source) + tmp1134.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1134; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1135 = new List(source.Count); + foreach (var elem in source) + tmp1135.Add(elem); + return tmp1135; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1136 = new List(source.Count); + foreach (var elem in source) + tmp1136.Add((elem != null) ? elem.ToArray() : null); + return tmp1136; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1137 = new List(source.Count); + foreach (var elem in source) + tmp1137.Add(elem); + return tmp1137; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1138 = new List(source.Count); + foreach (var elem in source) + tmp1138.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1138; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1139 = new List(source.Count); + foreach (var elem in source) + tmp1139.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1139; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1140 = new List(source.Count); + foreach (var elem in source) + tmp1140.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1140; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1141 = new List(source.Count); + foreach (var elem in source) + tmp1141.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1141; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1142 = new List(source.Count); + foreach (var elem in source) + tmp1142.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1142; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1143 = new List(source.Count); + foreach (var elem in source) + tmp1143.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1143; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1144 = new List(source.Count); + foreach (var elem in source) + tmp1144.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1144; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1145 = new List(source.Count); + foreach (var elem in source) + tmp1145.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1145; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1146 = new List(source.Count); + foreach (var elem in source) + tmp1146.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1146; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1147 = new List(source.Count); + foreach (var elem in source) + tmp1147.Add((elem != null) ? elem.DeepCopy() : null); + return tmp1147; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1148 = new List(source.Count); + foreach (var elem in source) + tmp1148.Add(elem); + return tmp1148; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1149 = new List(source.Count); + foreach (var elem in source) + tmp1149.Add(elem); + return tmp1149; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1150 = new List(source.Count); + foreach (var elem in source) + tmp1150.Add(elem); + return tmp1150; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1151 = new List(source.Count); + foreach (var elem in source) + tmp1151.Add(elem); + return tmp1151; + } + + + public static bool Equals(this List instance, object that) + { + if (!(that is List other)) return false; + if (ReferenceEquals(instance, other)) return true; + + return TCollections.Equals(instance, other); + } + + + public static int GetHashCode(this List instance) + { + return TCollections.GetHashCode(instance); + } + + + public static List DeepCopy(this List source) + { + if (source == null) + return null; + + var tmp1152 = new List(source.Count); + foreach (var elem in source) + tmp1152.Add((elem != null) ? elem : null); + return tmp1152; + } + + + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs new file mode 100644 index 0000000000..2debd21b4d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCacheLookupResult.cs @@ -0,0 +1,24 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TCacheLookupResult + { + CACHE_INELIGIBLE = 0, + LOCAL_CACHE_HIT = 1, + REMOTE_CACHE_HIT = 2, + CACHE_MISS = 3, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs new file mode 100644 index 0000000000..a5fb396318 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string DelegationToken { get; set; } + + public TCancelDelegationTokenReq() + { + } + + public TCancelDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() + { + this.SessionHandle = sessionHandle; + this.DelegationToken = delegationToken; + } + + public TCancelDelegationTokenReq DeepCopy() + { + var tmp608 = new TCancelDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp608.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((DelegationToken != null)) + { + tmp608.DelegationToken = this.DelegationToken; + } + return tmp608; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_delegationToken = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + isset_delegationToken = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_delegationToken) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp609 = new TStruct("TCancelDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp609, cancellationToken); + var tmp610 = new TField(); + if((SessionHandle != null)) + { + tmp610.Name = "sessionHandle"; + tmp610.Type = TType.Struct; + tmp610.ID = 1; + await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null)) + { + tmp610.Name = "delegationToken"; + tmp610.Type = TType.String; + tmp610.ID = 2; + await oprot.WriteFieldBeginAsync(tmp610, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(DelegationToken, other.DelegationToken); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((DelegationToken != null)) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp611 = new StringBuilder("TCancelDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp611.Append(", SessionHandle: "); + SessionHandle.ToString(tmp611); + } + if((DelegationToken != null)) + { + tmp611.Append(", DelegationToken: "); + DelegationToken.ToString(tmp611); + } + tmp611.Append(')'); + return tmp611.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs new file mode 100644 index 0000000000..441914745c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelDelegationTokenResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCancelDelegationTokenResp() + { + } + + public TCancelDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCancelDelegationTokenResp DeepCopy() + { + var tmp613 = new TCancelDelegationTokenResp(); + if((Status != null)) + { + tmp613.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp613; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp614 = new TStruct("TCancelDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp614, cancellationToken); + var tmp615 = new TField(); + if((Status != null)) + { + tmp615.Name = "status"; + tmp615.Type = TType.Struct; + tmp615.ID = 1; + await oprot.WriteFieldBeginAsync(tmp615, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp616 = new StringBuilder("TCancelDelegationTokenResp("); + if((Status != null)) + { + tmp616.Append(", Status: "); + Status.ToString(tmp616); + } + tmp616.Append(')'); + return tmp616.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs new file mode 100644 index 0000000000..578ea6b882 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelOperationReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TCancelOperationReq() + { + } + + public TCancelOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TCancelOperationReq DeepCopy() + { + var tmp549 = new TCancelOperationReq(); + if((OperationHandle != null)) + { + tmp549.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp549; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp550 = new TStruct("TCancelOperationReq"); + await oprot.WriteStructBeginAsync(tmp550, cancellationToken); + var tmp551 = new TField(); + if((OperationHandle != null)) + { + tmp551.Name = "operationHandle"; + tmp551.Type = TType.Struct; + tmp551.ID = 1; + await oprot.WriteFieldBeginAsync(tmp551, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelOperationReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp552 = new StringBuilder("TCancelOperationReq("); + if((OperationHandle != null)) + { + tmp552.Append(", OperationHandle: "); + OperationHandle.ToString(tmp552); + } + tmp552.Append(')'); + return tmp552.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs new file mode 100644 index 0000000000..4a76a9a56a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCancelOperationResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCancelOperationResp() + { + } + + public TCancelOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCancelOperationResp DeepCopy() + { + var tmp554 = new TCancelOperationResp(); + if((Status != null)) + { + tmp554.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp554; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp555 = new TStruct("TCancelOperationResp"); + await oprot.WriteStructBeginAsync(tmp555, cancellationToken); + var tmp556 = new TField(); + if((Status != null)) + { + tmp556.Name = "status"; + tmp556.Type = TType.Struct; + tmp556.ID = 1; + await oprot.WriteFieldBeginAsync(tmp556, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCancelOperationResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp557 = new StringBuilder("TCancelOperationResp("); + if((Status != null)) + { + tmp557.Append(", Status: "); + Status.ToString(tmp557); + } + tmp557.Append(')'); + return tmp557.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs new file mode 100644 index 0000000000..dfa4947412 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseOperationReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TCloseOperationReq() + { + } + + public TCloseOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TCloseOperationReq DeepCopy() + { + var tmp559 = new TCloseOperationReq(); + if((OperationHandle != null)) + { + tmp559.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp559; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp560 = new TStruct("TCloseOperationReq"); + await oprot.WriteStructBeginAsync(tmp560, cancellationToken); + var tmp561 = new TField(); + if((OperationHandle != null)) + { + tmp561.Name = "operationHandle"; + tmp561.Type = TType.Struct; + tmp561.ID = 1; + await oprot.WriteFieldBeginAsync(tmp561, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseOperationReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp562 = new StringBuilder("TCloseOperationReq("); + if((OperationHandle != null)) + { + tmp562.Append(", OperationHandle: "); + OperationHandle.ToString(tmp562); + } + tmp562.Append(')'); + return tmp562.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs new file mode 100644 index 0000000000..56d2a25f52 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseOperationResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCloseOperationResp() + { + } + + public TCloseOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCloseOperationResp DeepCopy() + { + var tmp564 = new TCloseOperationResp(); + if((Status != null)) + { + tmp564.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp564; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp565 = new TStruct("TCloseOperationResp"); + await oprot.WriteStructBeginAsync(tmp565, cancellationToken); + var tmp566 = new TField(); + if((Status != null)) + { + tmp566.Name = "status"; + tmp566.Type = TType.Struct; + tmp566.ID = 1; + await oprot.WriteFieldBeginAsync(tmp566, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseOperationResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp567 = new StringBuilder("TCloseOperationResp("); + if((Status != null)) + { + tmp567.Append(", Status: "); + Status.ToString(tmp567); + } + tmp567.Append(')'); + return tmp567.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs new file mode 100644 index 0000000000..2b0d50c4df --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseSessionReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public TCloseSessionReq() + { + } + + public TCloseSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TCloseSessionReq DeepCopy() + { + var tmp332 = new TCloseSessionReq(); + if((SessionHandle != null)) + { + tmp332.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + return tmp332; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp333 = new TStruct("TCloseSessionReq"); + await oprot.WriteStructBeginAsync(tmp333, cancellationToken); + var tmp334 = new TField(); + if((SessionHandle != null)) + { + tmp334.Name = "sessionHandle"; + tmp334.Type = TType.Struct; + tmp334.ID = 1; + await oprot.WriteFieldBeginAsync(tmp334, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseSessionReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp335 = new StringBuilder("TCloseSessionReq("); + if((SessionHandle != null)) + { + tmp335.Append(", SessionHandle: "); + SessionHandle.ToString(tmp335); + } + tmp335.Append(')'); + return tmp335.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs new file mode 100644 index 0000000000..27667a4bbd --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TCloseSessionResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TCloseSessionResp() + { + } + + public TCloseSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TCloseSessionResp DeepCopy() + { + var tmp337 = new TCloseSessionResp(); + if((Status != null)) + { + tmp337.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp337; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp338 = new TStruct("TCloseSessionResp"); + await oprot.WriteStructBeginAsync(tmp338, cancellationToken); + var tmp339 = new TField(); + if((Status != null)) + { + tmp339.Name = "status"; + tmp339.Type = TType.Struct; + tmp339.ID = 1; + await oprot.WriteFieldBeginAsync(tmp339, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TCloseSessionResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp340 = new StringBuilder("TCloseSessionResp("); + if((Status != null)) + { + tmp340.Append(", Status: "); + Status.ToString(tmp340); + } + tmp340.Append(')'); + return tmp340.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs new file mode 100644 index 0000000000..4dea57487b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloudFetchDisabledReason.cs @@ -0,0 +1,28 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TCloudFetchDisabledReason + { + ARROW_SUPPORT = 0, + CLOUD_FETCH_SUPPORT = 1, + PROTOCOL_VERSION = 2, + REGION_SUPPORT = 3, + BLOCKLISTED_OPERATION = 4, + SMALL_RESULT_SIZE = 5, + CUSTOMER_STORAGE_SUPPORT = 6, + UNKNOWN = 7, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs new file mode 100644 index 0000000000..59126847b5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs @@ -0,0 +1,536 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumn : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn _boolVal; + private global::Apache.Hive.Service.Rpc.Thrift.TByteColumn _byteVal; + private global::Apache.Hive.Service.Rpc.Thrift.TI16Column _i16Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI32Column _i32Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI64Column _i64Val; + private global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn _doubleVal; + private global::Apache.Hive.Service.Rpc.Thrift.TStringColumn _stringVal; + private global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn _binaryVal; + + public global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn BoolVal + { + get + { + return _boolVal; + } + set + { + __isset.boolVal = true; + this._boolVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TByteColumn ByteVal + { + get + { + return _byteVal; + } + set + { + __isset.byteVal = true; + this._byteVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI16Column I16Val + { + get + { + return _i16Val; + } + set + { + __isset.i16Val = true; + this._i16Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI32Column I32Val + { + get + { + return _i32Val; + } + set + { + __isset.i32Val = true; + this._i32Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI64Column I64Val + { + get + { + return _i64Val; + } + set + { + __isset.i64Val = true; + this._i64Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn DoubleVal + { + get + { + return _doubleVal; + } + set + { + __isset.doubleVal = true; + this._doubleVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStringColumn StringVal + { + get + { + return _stringVal; + } + set + { + __isset.stringVal = true; + this._stringVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn BinaryVal + { + get + { + return _binaryVal; + } + set + { + __isset.binaryVal = true; + this._binaryVal = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool boolVal; + public bool byteVal; + public bool i16Val; + public bool i32Val; + public bool i64Val; + public bool doubleVal; + public bool stringVal; + public bool binaryVal; + } + + public TColumn() + { + } + + public TColumn DeepCopy() + { + var tmp204 = new TColumn(); + if((BoolVal != null) && __isset.boolVal) + { + tmp204.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn)this.BoolVal.DeepCopy(); + } + tmp204.__isset.boolVal = this.__isset.boolVal; + if((ByteVal != null) && __isset.byteVal) + { + tmp204.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteColumn)this.ByteVal.DeepCopy(); + } + tmp204.__isset.byteVal = this.__isset.byteVal; + if((I16Val != null) && __isset.i16Val) + { + tmp204.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Column)this.I16Val.DeepCopy(); + } + tmp204.__isset.i16Val = this.__isset.i16Val; + if((I32Val != null) && __isset.i32Val) + { + tmp204.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Column)this.I32Val.DeepCopy(); + } + tmp204.__isset.i32Val = this.__isset.i32Val; + if((I64Val != null) && __isset.i64Val) + { + tmp204.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Column)this.I64Val.DeepCopy(); + } + tmp204.__isset.i64Val = this.__isset.i64Val; + if((DoubleVal != null) && __isset.doubleVal) + { + tmp204.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn)this.DoubleVal.DeepCopy(); + } + tmp204.__isset.doubleVal = this.__isset.doubleVal; + if((StringVal != null) && __isset.stringVal) + { + tmp204.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringColumn)this.StringVal.DeepCopy(); + } + tmp204.__isset.stringVal = this.__isset.stringVal; + if((BinaryVal != null) && __isset.binaryVal) + { + tmp204.BinaryVal = (global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn)this.BinaryVal.DeepCopy(); + } + tmp204.__isset.binaryVal = this.__isset.binaryVal; + return tmp204; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn(); + await BoolVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteColumn(); + await ByteVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Column(); + await I16Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Column(); + await I32Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Column(); + await I64Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn(); + await DoubleVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Struct) + { + StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringColumn(); + await StringVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.Struct) + { + BinaryVal = new global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn(); + await BinaryVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp205 = new TStruct("TColumn"); + await oprot.WriteStructBeginAsync(tmp205, cancellationToken); + var tmp206 = new TField(); + if((BoolVal != null) && __isset.boolVal) + { + tmp206.Name = "boolVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 1; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await BoolVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ByteVal != null) && __isset.byteVal) + { + tmp206.Name = "byteVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 2; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await ByteVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I16Val != null) && __isset.i16Val) + { + tmp206.Name = "i16Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 3; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I16Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I32Val != null) && __isset.i32Val) + { + tmp206.Name = "i32Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 4; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I32Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I64Val != null) && __isset.i64Val) + { + tmp206.Name = "i64Val"; + tmp206.Type = TType.Struct; + tmp206.ID = 5; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await I64Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DoubleVal != null) && __isset.doubleVal) + { + tmp206.Name = "doubleVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 6; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await DoubleVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringVal != null) && __isset.stringVal) + { + tmp206.Name = "stringVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 7; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await StringVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((BinaryVal != null) && __isset.binaryVal) + { + tmp206.Name = "binaryVal"; + tmp206.Type = TType.Struct; + tmp206.ID = 8; + await oprot.WriteFieldBeginAsync(tmp206, cancellationToken); + await BinaryVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) + && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) + && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) + && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) + && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) + && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) + && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))) + && ((__isset.binaryVal == other.__isset.binaryVal) && ((!__isset.binaryVal) || (global::System.Object.Equals(BinaryVal, other.BinaryVal)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((BoolVal != null) && __isset.boolVal) + { + hashcode = (hashcode * 397) + BoolVal.GetHashCode(); + } + if((ByteVal != null) && __isset.byteVal) + { + hashcode = (hashcode * 397) + ByteVal.GetHashCode(); + } + if((I16Val != null) && __isset.i16Val) + { + hashcode = (hashcode * 397) + I16Val.GetHashCode(); + } + if((I32Val != null) && __isset.i32Val) + { + hashcode = (hashcode * 397) + I32Val.GetHashCode(); + } + if((I64Val != null) && __isset.i64Val) + { + hashcode = (hashcode * 397) + I64Val.GetHashCode(); + } + if((DoubleVal != null) && __isset.doubleVal) + { + hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); + } + if((StringVal != null) && __isset.stringVal) + { + hashcode = (hashcode * 397) + StringVal.GetHashCode(); + } + if((BinaryVal != null) && __isset.binaryVal) + { + hashcode = (hashcode * 397) + BinaryVal.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp207 = new StringBuilder("TColumn("); + int tmp208 = 0; + if((BoolVal != null) && __isset.boolVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("BoolVal: "); + BoolVal.ToString(tmp207); + } + if((ByteVal != null) && __isset.byteVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("ByteVal: "); + ByteVal.ToString(tmp207); + } + if((I16Val != null) && __isset.i16Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I16Val: "); + I16Val.ToString(tmp207); + } + if((I32Val != null) && __isset.i32Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I32Val: "); + I32Val.ToString(tmp207); + } + if((I64Val != null) && __isset.i64Val) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("I64Val: "); + I64Val.ToString(tmp207); + } + if((DoubleVal != null) && __isset.doubleVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("DoubleVal: "); + DoubleVal.ToString(tmp207); + } + if((StringVal != null) && __isset.stringVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("StringVal: "); + StringVal.ToString(tmp207); + } + if((BinaryVal != null) && __isset.binaryVal) + { + if(0 < tmp208++) { tmp207.Append(", "); } + tmp207.Append("BinaryVal: "); + BinaryVal.ToString(tmp207); + } + tmp207.Append(')'); + return tmp207.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs new file mode 100644 index 0000000000..9c27cbeb1d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs @@ -0,0 +1,295 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumnDesc : TBase + { + private string _comment; + + public string ColumnName { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc TypeDesc { get; set; } + + public int Position { get; set; } + + public string Comment + { + get + { + return _comment; + } + set + { + __isset.comment = true; + this._comment = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool comment; + } + + public TColumnDesc() + { + } + + public TColumnDesc(string columnName, global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc typeDesc, int position) : this() + { + this.ColumnName = columnName; + this.TypeDesc = typeDesc; + this.Position = position; + } + + public TColumnDesc DeepCopy() + { + var tmp69 = new TColumnDesc(); + if((ColumnName != null)) + { + tmp69.ColumnName = this.ColumnName; + } + if((TypeDesc != null)) + { + tmp69.TypeDesc = (global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc)this.TypeDesc.DeepCopy(); + } + tmp69.Position = this.Position; + if((Comment != null) && __isset.comment) + { + tmp69.Comment = this.Comment; + } + tmp69.__isset.comment = this.__isset.comment; + return tmp69; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_columnName = false; + bool isset_typeDesc = false; + bool isset_position = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + ColumnName = await iprot.ReadStringAsync(cancellationToken); + isset_columnName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + TypeDesc = new global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc(); + await TypeDesc.ReadAsync(iprot, cancellationToken); + isset_typeDesc = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I32) + { + Position = await iprot.ReadI32Async(cancellationToken); + isset_position = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Comment = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_columnName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_typeDesc) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_position) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp70 = new TStruct("TColumnDesc"); + await oprot.WriteStructBeginAsync(tmp70, cancellationToken); + var tmp71 = new TField(); + if((ColumnName != null)) + { + tmp71.Name = "columnName"; + tmp71.Type = TType.String; + tmp71.ID = 1; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteStringAsync(ColumnName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TypeDesc != null)) + { + tmp71.Name = "typeDesc"; + tmp71.Type = TType.Struct; + tmp71.ID = 2; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await TypeDesc.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp71.Name = "position"; + tmp71.Type = TType.I32; + tmp71.ID = 3; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteI32Async(Position, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Comment != null) && __isset.comment) + { + tmp71.Name = "comment"; + tmp71.Type = TType.String; + tmp71.ID = 4; + await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); + await oprot.WriteStringAsync(Comment, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumnDesc other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(ColumnName, other.ColumnName) + && global::System.Object.Equals(TypeDesc, other.TypeDesc) + && global::System.Object.Equals(Position, other.Position) + && ((__isset.comment == other.__isset.comment) && ((!__isset.comment) || (global::System.Object.Equals(Comment, other.Comment)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ColumnName != null)) + { + hashcode = (hashcode * 397) + ColumnName.GetHashCode(); + } + if((TypeDesc != null)) + { + hashcode = (hashcode * 397) + TypeDesc.GetHashCode(); + } + hashcode = (hashcode * 397) + Position.GetHashCode(); + if((Comment != null) && __isset.comment) + { + hashcode = (hashcode * 397) + Comment.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp72 = new StringBuilder("TColumnDesc("); + if((ColumnName != null)) + { + tmp72.Append(", ColumnName: "); + ColumnName.ToString(tmp72); + } + if((TypeDesc != null)) + { + tmp72.Append(", TypeDesc: "); + TypeDesc.ToString(tmp72); + } + tmp72.Append(", Position: "); + Position.ToString(tmp72); + if((Comment != null) && __isset.comment) + { + tmp72.Append(", Comment: "); + Comment.ToString(tmp72); + } + tmp72.Append(')'); + return tmp72.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs new file mode 100644 index 0000000000..012db5de92 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs @@ -0,0 +1,485 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TColumnValue : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TBoolValue _boolVal; + private global::Apache.Hive.Service.Rpc.Thrift.TByteValue _byteVal; + private global::Apache.Hive.Service.Rpc.Thrift.TI16Value _i16Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI32Value _i32Val; + private global::Apache.Hive.Service.Rpc.Thrift.TI64Value _i64Val; + private global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue _doubleVal; + private global::Apache.Hive.Service.Rpc.Thrift.TStringValue _stringVal; + + public global::Apache.Hive.Service.Rpc.Thrift.TBoolValue BoolVal + { + get + { + return _boolVal; + } + set + { + __isset.boolVal = true; + this._boolVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TByteValue ByteVal + { + get + { + return _byteVal; + } + set + { + __isset.byteVal = true; + this._byteVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI16Value I16Val + { + get + { + return _i16Val; + } + set + { + __isset.i16Val = true; + this._i16Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI32Value I32Val + { + get + { + return _i32Val; + } + set + { + __isset.i32Val = true; + this._i32Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TI64Value I64Val + { + get + { + return _i64Val; + } + set + { + __isset.i64Val = true; + this._i64Val = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue DoubleVal + { + get + { + return _doubleVal; + } + set + { + __isset.doubleVal = true; + this._doubleVal = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStringValue StringVal + { + get + { + return _stringVal; + } + set + { + __isset.stringVal = true; + this._stringVal = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool boolVal; + public bool byteVal; + public bool i16Val; + public bool i32Val; + public bool i64Val; + public bool doubleVal; + public bool stringVal; + } + + public TColumnValue() + { + } + + public TColumnValue DeepCopy() + { + var tmp118 = new TColumnValue(); + if((BoolVal != null) && __isset.boolVal) + { + tmp118.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolValue)this.BoolVal.DeepCopy(); + } + tmp118.__isset.boolVal = this.__isset.boolVal; + if((ByteVal != null) && __isset.byteVal) + { + tmp118.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteValue)this.ByteVal.DeepCopy(); + } + tmp118.__isset.byteVal = this.__isset.byteVal; + if((I16Val != null) && __isset.i16Val) + { + tmp118.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Value)this.I16Val.DeepCopy(); + } + tmp118.__isset.i16Val = this.__isset.i16Val; + if((I32Val != null) && __isset.i32Val) + { + tmp118.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Value)this.I32Val.DeepCopy(); + } + tmp118.__isset.i32Val = this.__isset.i32Val; + if((I64Val != null) && __isset.i64Val) + { + tmp118.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Value)this.I64Val.DeepCopy(); + } + tmp118.__isset.i64Val = this.__isset.i64Val; + if((DoubleVal != null) && __isset.doubleVal) + { + tmp118.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue)this.DoubleVal.DeepCopy(); + } + tmp118.__isset.doubleVal = this.__isset.doubleVal; + if((StringVal != null) && __isset.stringVal) + { + tmp118.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringValue)this.StringVal.DeepCopy(); + } + tmp118.__isset.stringVal = this.__isset.stringVal; + return tmp118; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + BoolVal = new global::Apache.Hive.Service.Rpc.Thrift.TBoolValue(); + await BoolVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ByteVal = new global::Apache.Hive.Service.Rpc.Thrift.TByteValue(); + await ByteVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + I16Val = new global::Apache.Hive.Service.Rpc.Thrift.TI16Value(); + await I16Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + I32Val = new global::Apache.Hive.Service.Rpc.Thrift.TI32Value(); + await I32Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + I64Val = new global::Apache.Hive.Service.Rpc.Thrift.TI64Value(); + await I64Val.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + DoubleVal = new global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue(); + await DoubleVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Struct) + { + StringVal = new global::Apache.Hive.Service.Rpc.Thrift.TStringValue(); + await StringVal.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp119 = new TStruct("TColumnValue"); + await oprot.WriteStructBeginAsync(tmp119, cancellationToken); + var tmp120 = new TField(); + if((BoolVal != null) && __isset.boolVal) + { + tmp120.Name = "boolVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 1; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await BoolVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ByteVal != null) && __isset.byteVal) + { + tmp120.Name = "byteVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 2; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await ByteVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I16Val != null) && __isset.i16Val) + { + tmp120.Name = "i16Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 3; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I16Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I32Val != null) && __isset.i32Val) + { + tmp120.Name = "i32Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 4; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I32Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((I64Val != null) && __isset.i64Val) + { + tmp120.Name = "i64Val"; + tmp120.Type = TType.Struct; + tmp120.ID = 5; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await I64Val.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DoubleVal != null) && __isset.doubleVal) + { + tmp120.Name = "doubleVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 6; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await DoubleVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringVal != null) && __isset.stringVal) + { + tmp120.Name = "stringVal"; + tmp120.Type = TType.Struct; + tmp120.ID = 7; + await oprot.WriteFieldBeginAsync(tmp120, cancellationToken); + await StringVal.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TColumnValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.boolVal == other.__isset.boolVal) && ((!__isset.boolVal) || (global::System.Object.Equals(BoolVal, other.BoolVal)))) + && ((__isset.byteVal == other.__isset.byteVal) && ((!__isset.byteVal) || (global::System.Object.Equals(ByteVal, other.ByteVal)))) + && ((__isset.i16Val == other.__isset.i16Val) && ((!__isset.i16Val) || (global::System.Object.Equals(I16Val, other.I16Val)))) + && ((__isset.i32Val == other.__isset.i32Val) && ((!__isset.i32Val) || (global::System.Object.Equals(I32Val, other.I32Val)))) + && ((__isset.i64Val == other.__isset.i64Val) && ((!__isset.i64Val) || (global::System.Object.Equals(I64Val, other.I64Val)))) + && ((__isset.doubleVal == other.__isset.doubleVal) && ((!__isset.doubleVal) || (global::System.Object.Equals(DoubleVal, other.DoubleVal)))) + && ((__isset.stringVal == other.__isset.stringVal) && ((!__isset.stringVal) || (global::System.Object.Equals(StringVal, other.StringVal)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((BoolVal != null) && __isset.boolVal) + { + hashcode = (hashcode * 397) + BoolVal.GetHashCode(); + } + if((ByteVal != null) && __isset.byteVal) + { + hashcode = (hashcode * 397) + ByteVal.GetHashCode(); + } + if((I16Val != null) && __isset.i16Val) + { + hashcode = (hashcode * 397) + I16Val.GetHashCode(); + } + if((I32Val != null) && __isset.i32Val) + { + hashcode = (hashcode * 397) + I32Val.GetHashCode(); + } + if((I64Val != null) && __isset.i64Val) + { + hashcode = (hashcode * 397) + I64Val.GetHashCode(); + } + if((DoubleVal != null) && __isset.doubleVal) + { + hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); + } + if((StringVal != null) && __isset.stringVal) + { + hashcode = (hashcode * 397) + StringVal.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp121 = new StringBuilder("TColumnValue("); + int tmp122 = 0; + if((BoolVal != null) && __isset.boolVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("BoolVal: "); + BoolVal.ToString(tmp121); + } + if((ByteVal != null) && __isset.byteVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("ByteVal: "); + ByteVal.ToString(tmp121); + } + if((I16Val != null) && __isset.i16Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I16Val: "); + I16Val.ToString(tmp121); + } + if((I32Val != null) && __isset.i32Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I32Val: "); + I32Val.ToString(tmp121); + } + if((I64Val != null) && __isset.i64Val) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("I64Val: "); + I64Val.ToString(tmp121); + } + if((DoubleVal != null) && __isset.doubleVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("DoubleVal: "); + DoubleVal.ToString(tmp121); + } + if((StringVal != null) && __isset.stringVal) + { + if(0 < tmp122++) { tmp121.Append(", "); } + tmp121.Append("StringVal: "); + StringVal.ToString(tmp121); + } + tmp121.Append(')'); + return tmp121.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs new file mode 100644 index 0000000000..eae1a362ec --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlCloudResultFile : TBase + { + + public string FilePath { get; set; } + + public long StartRowOffset { get; set; } + + public long RowCount { get; set; } + + public long UncompressedBytes { get; set; } + + public long CompressedBytes { get; set; } + + public TDBSqlCloudResultFile() + { + } + + public TDBSqlCloudResultFile(string filePath, long startRowOffset, long rowCount, long uncompressedBytes, long compressedBytes) : this() + { + this.FilePath = filePath; + this.StartRowOffset = startRowOffset; + this.RowCount = rowCount; + this.UncompressedBytes = uncompressedBytes; + this.CompressedBytes = compressedBytes; + } + + public TDBSqlCloudResultFile DeepCopy() + { + var tmp583 = new TDBSqlCloudResultFile(); + if((FilePath != null)) + { + tmp583.FilePath = this.FilePath; + } + tmp583.StartRowOffset = this.StartRowOffset; + tmp583.RowCount = this.RowCount; + tmp583.UncompressedBytes = this.UncompressedBytes; + tmp583.CompressedBytes = this.CompressedBytes; + return tmp583; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_filePath = false; + bool isset_startRowOffset = false; + bool isset_rowCount = false; + bool isset_uncompressedBytes = false; + bool isset_compressedBytes = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + FilePath = await iprot.ReadStringAsync(cancellationToken); + isset_filePath = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I64) + { + UncompressedBytes = await iprot.ReadI64Async(cancellationToken); + isset_uncompressedBytes = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + CompressedBytes = await iprot.ReadI64Async(cancellationToken); + isset_compressedBytes = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_filePath) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_uncompressedBytes) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_compressedBytes) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp584 = new TStruct("TDBSqlCloudResultFile"); + await oprot.WriteStructBeginAsync(tmp584, cancellationToken); + var tmp585 = new TField(); + if((FilePath != null)) + { + tmp585.Name = "filePath"; + tmp585.Type = TType.String; + tmp585.ID = 1; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteStringAsync(FilePath, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp585.Name = "startRowOffset"; + tmp585.Type = TType.I64; + tmp585.ID = 2; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "rowCount"; + tmp585.Type = TType.I64; + tmp585.ID = 3; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "uncompressedBytes"; + tmp585.Type = TType.I64; + tmp585.ID = 4; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(UncompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp585.Name = "compressedBytes"; + tmp585.Type = TType.I64; + tmp585.ID = 5; + await oprot.WriteFieldBeginAsync(tmp585, cancellationToken); + await oprot.WriteI64Async(CompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlCloudResultFile other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(FilePath, other.FilePath) + && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && global::System.Object.Equals(RowCount, other.RowCount) + && global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes) + && global::System.Object.Equals(CompressedBytes, other.CompressedBytes); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((FilePath != null)) + { + hashcode = (hashcode * 397) + FilePath.GetHashCode(); + } + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); + hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp586 = new StringBuilder("TDBSqlCloudResultFile("); + if((FilePath != null)) + { + tmp586.Append(", FilePath: "); + FilePath.ToString(tmp586); + } + tmp586.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp586); + tmp586.Append(", RowCount: "); + RowCount.ToString(tmp586); + tmp586.Append(", UncompressedBytes: "); + UncompressedBytes.ToString(tmp586); + tmp586.Append(", CompressedBytes: "); + CompressedBytes.ToString(tmp586); + tmp586.Append(')'); + return tmp586.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs new file mode 100644 index 0000000000..9249cec0c9 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlConfValue : TBase + { + private string _value; + + public string Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TDBSqlConfValue() + { + } + + public TDBSqlConfValue DeepCopy() + { + var tmp405 = new TDBSqlConfValue(); + if((Value != null) && __isset.@value) + { + tmp405.Value = this.Value; + } + tmp405.__isset.@value = this.__isset.@value; + return tmp405; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Value = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp406 = new TStruct("TDBSqlConfValue"); + await oprot.WriteStructBeginAsync(tmp406, cancellationToken); + var tmp407 = new TField(); + if((Value != null) && __isset.@value) + { + tmp407.Name = "value"; + tmp407.Type = TType.String; + tmp407.ID = 1; + await oprot.WriteFieldBeginAsync(tmp407, cancellationToken); + await oprot.WriteStringAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlConfValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Value != null) && __isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp408 = new StringBuilder("TDBSqlConfValue("); + int tmp409 = 0; + if((Value != null) && __isset.@value) + { + if(0 < tmp409++) { tmp408.Append(", "); } + tmp408.Append("Value: "); + Value.ToString(tmp408); + } + tmp408.Append(')'); + return tmp408.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs new file mode 100644 index 0000000000..50d2d295e0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlSessionCapabilities : TBase + { + private bool _supportsMultipleCatalogs; + + public bool SupportsMultipleCatalogs + { + get + { + return _supportsMultipleCatalogs; + } + set + { + __isset.supportsMultipleCatalogs = true; + this._supportsMultipleCatalogs = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool supportsMultipleCatalogs; + } + + public TDBSqlSessionCapabilities() + { + } + + public TDBSqlSessionCapabilities DeepCopy() + { + var tmp400 = new TDBSqlSessionCapabilities(); + if(__isset.supportsMultipleCatalogs) + { + tmp400.SupportsMultipleCatalogs = this.SupportsMultipleCatalogs; + } + tmp400.__isset.supportsMultipleCatalogs = this.__isset.supportsMultipleCatalogs; + return tmp400; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + SupportsMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp401 = new TStruct("TDBSqlSessionCapabilities"); + await oprot.WriteStructBeginAsync(tmp401, cancellationToken); + var tmp402 = new TField(); + if(__isset.supportsMultipleCatalogs) + { + tmp402.Name = "supportsMultipleCatalogs"; + tmp402.Type = TType.Bool; + tmp402.ID = 1; + await oprot.WriteFieldBeginAsync(tmp402, cancellationToken); + await oprot.WriteBoolAsync(SupportsMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlSessionCapabilities other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.supportsMultipleCatalogs == other.__isset.supportsMultipleCatalogs) && ((!__isset.supportsMultipleCatalogs) || (global::System.Object.Equals(SupportsMultipleCatalogs, other.SupportsMultipleCatalogs)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.supportsMultipleCatalogs) + { + hashcode = (hashcode * 397) + SupportsMultipleCatalogs.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp403 = new StringBuilder("TDBSqlSessionCapabilities("); + int tmp404 = 0; + if(__isset.supportsMultipleCatalogs) + { + if(0 < tmp404++) { tmp403.Append(", "); } + tmp403.Append("SupportsMultipleCatalogs: "); + SupportsMultipleCatalogs.ToString(tmp403); + } + tmp403.Append(')'); + return tmp403.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs new file mode 100644 index 0000000000..35ee4d908e --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs @@ -0,0 +1,548 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlSessionConf : TBase + { + private Dictionary _confs; + private List _tempViews; + private string _currentDatabase; + private string _currentCatalog; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities _sessionCapabilities; + private List _expressionsInfos; + private Dictionary _internalConfs; + + public Dictionary Confs + { + get + { + return _confs; + } + set + { + __isset.confs = true; + this._confs = value; + } + } + + public List TempViews + { + get + { + return _tempViews; + } + set + { + __isset.tempViews = true; + this._tempViews = value; + } + } + + public string CurrentDatabase + { + get + { + return _currentDatabase; + } + set + { + __isset.currentDatabase = true; + this._currentDatabase = value; + } + } + + public string CurrentCatalog + { + get + { + return _currentCatalog; + } + set + { + __isset.currentCatalog = true; + this._currentCatalog = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities SessionCapabilities + { + get + { + return _sessionCapabilities; + } + set + { + __isset.sessionCapabilities = true; + this._sessionCapabilities = value; + } + } + + public List ExpressionsInfos + { + get + { + return _expressionsInfos; + } + set + { + __isset.expressionsInfos = true; + this._expressionsInfos = value; + } + } + + public Dictionary InternalConfs + { + get + { + return _internalConfs; + } + set + { + __isset.internalConfs = true; + this._internalConfs = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool confs; + public bool tempViews; + public bool currentDatabase; + public bool currentCatalog; + public bool sessionCapabilities; + public bool expressionsInfos; + public bool internalConfs; + } + + public TDBSqlSessionConf() + { + } + + public TDBSqlSessionConf DeepCopy() + { + var tmp367 = new TDBSqlSessionConf(); + if((Confs != null) && __isset.confs) + { + tmp367.Confs = this.Confs.DeepCopy(); + } + tmp367.__isset.confs = this.__isset.confs; + if((TempViews != null) && __isset.tempViews) + { + tmp367.TempViews = this.TempViews.DeepCopy(); + } + tmp367.__isset.tempViews = this.__isset.tempViews; + if((CurrentDatabase != null) && __isset.currentDatabase) + { + tmp367.CurrentDatabase = this.CurrentDatabase; + } + tmp367.__isset.currentDatabase = this.__isset.currentDatabase; + if((CurrentCatalog != null) && __isset.currentCatalog) + { + tmp367.CurrentCatalog = this.CurrentCatalog; + } + tmp367.__isset.currentCatalog = this.__isset.currentCatalog; + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + tmp367.SessionCapabilities = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities)this.SessionCapabilities.DeepCopy(); + } + tmp367.__isset.sessionCapabilities = this.__isset.sessionCapabilities; + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + tmp367.ExpressionsInfos = this.ExpressionsInfos.DeepCopy(); + } + tmp367.__isset.expressionsInfos = this.__isset.expressionsInfos; + if((InternalConfs != null) && __isset.internalConfs) + { + tmp367.InternalConfs = this.InternalConfs.DeepCopy(); + } + tmp367.__isset.internalConfs = this.__isset.internalConfs; + return tmp367; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map368 = await iprot.ReadMapBeginAsync(cancellationToken); + Confs = new Dictionary(_map368.Count); + for(int _i369 = 0; _i369 < _map368.Count; ++_i369) + { + string _key370; + string _val371; + _key370 = await iprot.ReadStringAsync(cancellationToken); + _val371 = await iprot.ReadStringAsync(cancellationToken); + Confs[_key370] = _val371; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list372 = await iprot.ReadListBeginAsync(cancellationToken); + TempViews = new List(_list372.Count); + for(int _i373 = 0; _i373 < _list372.Count; ++_i373) + { + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _elem374; + _elem374 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView(); + await _elem374.ReadAsync(iprot, cancellationToken); + TempViews.Add(_elem374); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + CurrentDatabase = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + CurrentCatalog = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + SessionCapabilities = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities(); + await SessionCapabilities.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.List) + { + { + var _list375 = await iprot.ReadListBeginAsync(cancellationToken); + ExpressionsInfos = new List(_list375.Count); + for(int _i376 = 0; _i376 < _list375.Count; ++_i376) + { + global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _elem377; + _elem377 = new global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo(); + await _elem377.ReadAsync(iprot, cancellationToken); + ExpressionsInfos.Add(_elem377); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.Map) + { + { + var _map378 = await iprot.ReadMapBeginAsync(cancellationToken); + InternalConfs = new Dictionary(_map378.Count); + for(int _i379 = 0; _i379 < _map378.Count; ++_i379) + { + string _key380; + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue _val381; + _key380 = await iprot.ReadStringAsync(cancellationToken); + _val381 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlConfValue(); + await _val381.ReadAsync(iprot, cancellationToken); + InternalConfs[_key380] = _val381; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp382 = new TStruct("TDBSqlSessionConf"); + await oprot.WriteStructBeginAsync(tmp382, cancellationToken); + var tmp383 = new TField(); + if((Confs != null) && __isset.confs) + { + tmp383.Name = "confs"; + tmp383.Type = TType.Map; + tmp383.ID = 1; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Confs.Count), cancellationToken); + foreach (string _iter384 in Confs.Keys) + { + await oprot.WriteStringAsync(_iter384, cancellationToken); + await oprot.WriteStringAsync(Confs[_iter384], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TempViews != null) && __isset.tempViews) + { + tmp383.Name = "tempViews"; + tmp383.Type = TType.List; + tmp383.ID = 2; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, TempViews.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlTempView _iter385 in TempViews) + { + await _iter385.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + tmp383.Name = "currentDatabase"; + tmp383.Type = TType.String; + tmp383.ID = 3; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteStringAsync(CurrentDatabase, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + tmp383.Name = "currentCatalog"; + tmp383.Type = TType.String; + tmp383.ID = 4; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteStringAsync(CurrentCatalog, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + tmp383.Name = "sessionCapabilities"; + tmp383.Type = TType.Struct; + tmp383.ID = 5; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await SessionCapabilities.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + tmp383.Name = "expressionsInfos"; + tmp383.Type = TType.List; + tmp383.ID = 6; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ExpressionsInfos.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TExpressionInfo _iter386 in ExpressionsInfos) + { + await _iter386.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InternalConfs != null) && __isset.internalConfs) + { + tmp383.Name = "internalConfs"; + tmp383.Type = TType.Map; + tmp383.ID = 7; + await oprot.WriteFieldBeginAsync(tmp383, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, InternalConfs.Count), cancellationToken); + foreach (string _iter387 in InternalConfs.Keys) + { + await oprot.WriteStringAsync(_iter387, cancellationToken); + await InternalConfs[_iter387].WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlSessionConf other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.confs == other.__isset.confs) && ((!__isset.confs) || (TCollections.Equals(Confs, other.Confs)))) + && ((__isset.tempViews == other.__isset.tempViews) && ((!__isset.tempViews) || (TCollections.Equals(TempViews, other.TempViews)))) + && ((__isset.currentDatabase == other.__isset.currentDatabase) && ((!__isset.currentDatabase) || (global::System.Object.Equals(CurrentDatabase, other.CurrentDatabase)))) + && ((__isset.currentCatalog == other.__isset.currentCatalog) && ((!__isset.currentCatalog) || (global::System.Object.Equals(CurrentCatalog, other.CurrentCatalog)))) + && ((__isset.sessionCapabilities == other.__isset.sessionCapabilities) && ((!__isset.sessionCapabilities) || (global::System.Object.Equals(SessionCapabilities, other.SessionCapabilities)))) + && ((__isset.expressionsInfos == other.__isset.expressionsInfos) && ((!__isset.expressionsInfos) || (TCollections.Equals(ExpressionsInfos, other.ExpressionsInfos)))) + && ((__isset.internalConfs == other.__isset.internalConfs) && ((!__isset.internalConfs) || (TCollections.Equals(InternalConfs, other.InternalConfs)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Confs != null) && __isset.confs) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Confs); + } + if((TempViews != null) && __isset.tempViews) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(TempViews); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + hashcode = (hashcode * 397) + CurrentDatabase.GetHashCode(); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + hashcode = (hashcode * 397) + CurrentCatalog.GetHashCode(); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + hashcode = (hashcode * 397) + SessionCapabilities.GetHashCode(); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ExpressionsInfos); + } + if((InternalConfs != null) && __isset.internalConfs) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(InternalConfs); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp388 = new StringBuilder("TDBSqlSessionConf("); + int tmp389 = 0; + if((Confs != null) && __isset.confs) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("Confs: "); + Confs.ToString(tmp388); + } + if((TempViews != null) && __isset.tempViews) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("TempViews: "); + TempViews.ToString(tmp388); + } + if((CurrentDatabase != null) && __isset.currentDatabase) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("CurrentDatabase: "); + CurrentDatabase.ToString(tmp388); + } + if((CurrentCatalog != null) && __isset.currentCatalog) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("CurrentCatalog: "); + CurrentCatalog.ToString(tmp388); + } + if((SessionCapabilities != null) && __isset.sessionCapabilities) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("SessionCapabilities: "); + SessionCapabilities.ToString(tmp388); + } + if((ExpressionsInfos != null) && __isset.expressionsInfos) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("ExpressionsInfos: "); + ExpressionsInfos.ToString(tmp388); + } + if((InternalConfs != null) && __isset.internalConfs) + { + if(0 < tmp389++) { tmp388.Append(", "); } + tmp388.Append("InternalConfs: "); + InternalConfs.ToString(tmp388); + } + tmp388.Append(')'); + return tmp388.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs new file mode 100644 index 0000000000..f542caf0b5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs @@ -0,0 +1,346 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDBSqlTempView : TBase + { + private string _name; + private string _sqlStatement; + private Dictionary _properties; + private string _viewSchema; + + public string Name + { + get + { + return _name; + } + set + { + __isset.name = true; + this._name = value; + } + } + + public string SqlStatement + { + get + { + return _sqlStatement; + } + set + { + __isset.sqlStatement = true; + this._sqlStatement = value; + } + } + + public Dictionary Properties + { + get + { + return _properties; + } + set + { + __isset.properties = true; + this._properties = value; + } + } + + public string ViewSchema + { + get + { + return _viewSchema; + } + set + { + __isset.viewSchema = true; + this._viewSchema = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool name; + public bool sqlStatement; + public bool properties; + public bool viewSchema; + } + + public TDBSqlTempView() + { + } + + public TDBSqlTempView DeepCopy() + { + var tmp390 = new TDBSqlTempView(); + if((Name != null) && __isset.name) + { + tmp390.Name = this.Name; + } + tmp390.__isset.name = this.__isset.name; + if((SqlStatement != null) && __isset.sqlStatement) + { + tmp390.SqlStatement = this.SqlStatement; + } + tmp390.__isset.sqlStatement = this.__isset.sqlStatement; + if((Properties != null) && __isset.properties) + { + tmp390.Properties = this.Properties.DeepCopy(); + } + tmp390.__isset.properties = this.__isset.properties; + if((ViewSchema != null) && __isset.viewSchema) + { + tmp390.ViewSchema = this.ViewSchema; + } + tmp390.__isset.viewSchema = this.__isset.viewSchema; + return tmp390; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Name = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + SqlStatement = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Map) + { + { + var _map391 = await iprot.ReadMapBeginAsync(cancellationToken); + Properties = new Dictionary(_map391.Count); + for(int _i392 = 0; _i392 < _map391.Count; ++_i392) + { + string _key393; + string _val394; + _key393 = await iprot.ReadStringAsync(cancellationToken); + _val394 = await iprot.ReadStringAsync(cancellationToken); + Properties[_key393] = _val394; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + ViewSchema = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp395 = new TStruct("TDBSqlTempView"); + await oprot.WriteStructBeginAsync(tmp395, cancellationToken); + var tmp396 = new TField(); + if((Name != null) && __isset.name) + { + tmp396.Name = "name"; + tmp396.Type = TType.String; + tmp396.ID = 1; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(Name, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + tmp396.Name = "sqlStatement"; + tmp396.Type = TType.String; + tmp396.ID = 2; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(SqlStatement, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Properties != null) && __isset.properties) + { + tmp396.Name = "properties"; + tmp396.Type = TType.Map; + tmp396.ID = 3; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Properties.Count), cancellationToken); + foreach (string _iter397 in Properties.Keys) + { + await oprot.WriteStringAsync(_iter397, cancellationToken); + await oprot.WriteStringAsync(Properties[_iter397], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ViewSchema != null) && __isset.viewSchema) + { + tmp396.Name = "viewSchema"; + tmp396.Type = TType.String; + tmp396.ID = 4; + await oprot.WriteFieldBeginAsync(tmp396, cancellationToken); + await oprot.WriteStringAsync(ViewSchema, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDBSqlTempView other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) + && ((__isset.sqlStatement == other.__isset.sqlStatement) && ((!__isset.sqlStatement) || (global::System.Object.Equals(SqlStatement, other.SqlStatement)))) + && ((__isset.properties == other.__isset.properties) && ((!__isset.properties) || (TCollections.Equals(Properties, other.Properties)))) + && ((__isset.viewSchema == other.__isset.viewSchema) && ((!__isset.viewSchema) || (global::System.Object.Equals(ViewSchema, other.ViewSchema)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Name != null) && __isset.name) + { + hashcode = (hashcode * 397) + Name.GetHashCode(); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + hashcode = (hashcode * 397) + SqlStatement.GetHashCode(); + } + if((Properties != null) && __isset.properties) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Properties); + } + if((ViewSchema != null) && __isset.viewSchema) + { + hashcode = (hashcode * 397) + ViewSchema.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp398 = new StringBuilder("TDBSqlTempView("); + int tmp399 = 0; + if((Name != null) && __isset.name) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("Name: "); + Name.ToString(tmp398); + } + if((SqlStatement != null) && __isset.sqlStatement) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("SqlStatement: "); + SqlStatement.ToString(tmp398); + } + if((Properties != null) && __isset.properties) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("Properties: "); + Properties.ToString(tmp398); + } + if((ViewSchema != null) && __isset.viewSchema) + { + if(0 < tmp399++) { tmp398.Append(", "); } + tmp398.Append("ViewSchema: "); + ViewSchema.ToString(tmp398); + } + tmp398.Append(')'); + return tmp398.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs new file mode 100644 index 0000000000..c2bd55a682 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs @@ -0,0 +1,199 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDoubleColumn : TBase + { + + public DoubleArray Values { get; set; } + + public TDoubleColumn() + { + } + + public TDoubleColumn(DoubleArray values) : this() + { + this.Values = values; + } + + public TDoubleColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list178 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list178.Count; + + buffer = new byte[length * 8]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i179 = 0; _i179 < length; ++_i179) + { + typedMemory.Span[_i179] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i179]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new DoubleArray(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp181 = new TStruct("TDoubleColumn"); + await oprot.WriteStructBeginAsync(tmp181, cancellationToken); + var tmp182 = new TField(); + if((Values != null)) + { + tmp182.Name = "values"; + tmp182.Type = TType.List; + tmp182.ID = 1; + await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Double, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + double _iter183 = Values.GetValue(i) ?? 0.0; + await oprot.WriteDoubleAsync(_iter183, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp182.Name = "nulls"; + tmp182.Type = TType.String; + tmp182.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp182, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDoubleColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp184 = new StringBuilder("TDoubleColumn("); + if((Values != null)) + { + tmp184.Append(", Values: "); + Values.ToString(tmp184); + } + tmp184.Append(')'); + return tmp184.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs new file mode 100644 index 0000000000..5a313862f5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDoubleValue : TBase + { + private double _value; + + public double Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TDoubleValue() + { + } + + public TDoubleValue DeepCopy() + { + var tmp108 = new TDoubleValue(); + if(__isset.@value) + { + tmp108.Value = this.Value; + } + tmp108.__isset.@value = this.__isset.@value; + return tmp108; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Double) + { + Value = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp109 = new TStruct("TDoubleValue"); + await oprot.WriteStructBeginAsync(tmp109, cancellationToken); + var tmp110 = new TField(); + if(__isset.@value) + { + tmp110.Name = "value"; + tmp110.Type = TType.Double; + tmp110.ID = 1; + await oprot.WriteFieldBeginAsync(tmp110, cancellationToken); + await oprot.WriteDoubleAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDoubleValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp111 = new StringBuilder("TDoubleValue("); + int tmp112 = 0; + if(__isset.@value) + { + if(0 < tmp112++) { tmp111.Append(", "); } + tmp111.Append("Value: "); + Value.ToString(tmp111); + } + tmp111.Append(')'); + return tmp111.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs new file mode 100644 index 0000000000..030fb5ec39 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs @@ -0,0 +1,388 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDownloadDataReq : TBase + { + private string _tableName; + private string _query; + private string _format; + private Dictionary _downloadOptions; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string Query + { + get + { + return _query; + } + set + { + __isset.query = true; + this._query = value; + } + } + + public string Format + { + get + { + return _format; + } + set + { + __isset.format = true; + this._format = value; + } + } + + public Dictionary DownloadOptions + { + get + { + return _downloadOptions; + } + set + { + __isset.downloadOptions = true; + this._downloadOptions = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool tableName; + public bool query; + public bool format; + public bool downloadOptions; + } + + public TDownloadDataReq() + { + } + + public TDownloadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TDownloadDataReq DeepCopy() + { + var tmp440 = new TDownloadDataReq(); + if((SessionHandle != null)) + { + tmp440.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((TableName != null) && __isset.tableName) + { + tmp440.TableName = this.TableName; + } + tmp440.__isset.tableName = this.__isset.tableName; + if((Query != null) && __isset.query) + { + tmp440.Query = this.Query; + } + tmp440.__isset.query = this.__isset.query; + if((Format != null) && __isset.format) + { + tmp440.Format = this.Format; + } + tmp440.__isset.format = this.__isset.format; + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp440.DownloadOptions = this.DownloadOptions.DeepCopy(); + } + tmp440.__isset.downloadOptions = this.__isset.downloadOptions; + return tmp440; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Query = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Format = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Map) + { + { + var _map441 = await iprot.ReadMapBeginAsync(cancellationToken); + DownloadOptions = new Dictionary(_map441.Count); + for(int _i442 = 0; _i442 < _map441.Count; ++_i442) + { + string _key443; + string _val444; + _key443 = await iprot.ReadStringAsync(cancellationToken); + _val444 = await iprot.ReadStringAsync(cancellationToken); + DownloadOptions[_key443] = _val444; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp445 = new TStruct("TDownloadDataReq"); + await oprot.WriteStructBeginAsync(tmp445, cancellationToken); + var tmp446 = new TField(); + if((SessionHandle != null)) + { + tmp446.Name = "sessionHandle"; + tmp446.Type = TType.Struct; + tmp446.ID = 1; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp446.Name = "tableName"; + tmp446.Type = TType.String; + tmp446.ID = 2; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Query != null) && __isset.query) + { + tmp446.Name = "query"; + tmp446.Type = TType.String; + tmp446.ID = 3; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(Query, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Format != null) && __isset.format) + { + tmp446.Name = "format"; + tmp446.Type = TType.String; + tmp446.ID = 4; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteStringAsync(Format, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp446.Name = "downloadOptions"; + tmp446.Type = TType.Map; + tmp446.ID = 5; + await oprot.WriteFieldBeginAsync(tmp446, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, DownloadOptions.Count), cancellationToken); + foreach (string _iter447 in DownloadOptions.Keys) + { + await oprot.WriteStringAsync(_iter447, cancellationToken); + await oprot.WriteStringAsync(DownloadOptions[_iter447], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDownloadDataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.query == other.__isset.query) && ((!__isset.query) || (global::System.Object.Equals(Query, other.Query)))) + && ((__isset.format == other.__isset.format) && ((!__isset.format) || (global::System.Object.Equals(Format, other.Format)))) + && ((__isset.downloadOptions == other.__isset.downloadOptions) && ((!__isset.downloadOptions) || (TCollections.Equals(DownloadOptions, other.DownloadOptions)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((Query != null) && __isset.query) + { + hashcode = (hashcode * 397) + Query.GetHashCode(); + } + if((Format != null) && __isset.format) + { + hashcode = (hashcode * 397) + Format.GetHashCode(); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(DownloadOptions); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp448 = new StringBuilder("TDownloadDataReq("); + if((SessionHandle != null)) + { + tmp448.Append(", SessionHandle: "); + SessionHandle.ToString(tmp448); + } + if((TableName != null) && __isset.tableName) + { + tmp448.Append(", TableName: "); + TableName.ToString(tmp448); + } + if((Query != null) && __isset.query) + { + tmp448.Append(", Query: "); + Query.ToString(tmp448); + } + if((Format != null) && __isset.format) + { + tmp448.Append(", Format: "); + Format.ToString(tmp448); + } + if((DownloadOptions != null) && __isset.downloadOptions) + { + tmp448.Append(", DownloadOptions: "); + DownloadOptions.ToString(tmp448); + } + tmp448.Append(')'); + return tmp448.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs new file mode 100644 index 0000000000..75cbf209df --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TDownloadDataResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TDownloadDataResp() + { + } + + public TDownloadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.Status = status; + this.OperationHandle = operationHandle; + } + + public TDownloadDataResp DeepCopy() + { + var tmp450 = new TDownloadDataResp(); + if((Status != null)) + { + tmp450.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null)) + { + tmp450.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp450; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp451 = new TStruct("TDownloadDataResp"); + await oprot.WriteStructBeginAsync(tmp451, cancellationToken); + var tmp452 = new TField(); + if((Status != null)) + { + tmp452.Name = "status"; + tmp452.Type = TType.Struct; + tmp452.ID = 1; + await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null)) + { + tmp452.Name = "operationHandle"; + tmp452.Type = TType.Struct; + tmp452.ID = 2; + await oprot.WriteFieldBeginAsync(tmp452, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TDownloadDataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp453 = new StringBuilder("TDownloadDataResp("); + if((Status != null)) + { + tmp453.Append(", Status: "); + Status.ToString(tmp453); + } + if((OperationHandle != null)) + { + tmp453.Append(", OperationHandle: "); + OperationHandle.ToString(tmp453); + } + tmp453.Append(')'); + return tmp453.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs new file mode 100644 index 0000000000..b6e5795e83 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs @@ -0,0 +1,1124 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExecuteStatementReq : TBase + { + private Dictionary _confOverlay; + private bool _runAsync; + private long _queryTimeout; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _canReadArrowResult; + private bool _canDownloadResult; + private bool _canDecompressLZ4Result; + private long _maxBytesPerFile; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes _useArrowNativeTypes; + private long _resultRowLimit; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + private bool _rejectHighCostQueries; + private double _estimatedCost; + private short _executionVersion; + private string _requestValidation; + private int _resultPersistenceMode; + private bool _trimArrowBatchesToLimit; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string Statement { get; set; } + + public Dictionary ConfOverlay + { + get + { + return _confOverlay; + } + set + { + __isset.confOverlay = true; + this._confOverlay = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public long QueryTimeout + { + get + { + return _queryTimeout; + } + set + { + __isset.queryTimeout = true; + this._queryTimeout = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool CanReadArrowResult + { + get + { + return _canReadArrowResult; + } + set + { + __isset.canReadArrowResult = true; + this._canReadArrowResult = value; + } + } + + public bool CanDownloadResult + { + get + { + return _canDownloadResult; + } + set + { + __isset.canDownloadResult = true; + this._canDownloadResult = value; + } + } + + public bool CanDecompressLZ4Result + { + get + { + return _canDecompressLZ4Result; + } + set + { + __isset.canDecompressLZ4Result = true; + this._canDecompressLZ4Result = value; + } + } + + public long MaxBytesPerFile + { + get + { + return _maxBytesPerFile; + } + set + { + __isset.maxBytesPerFile = true; + this._maxBytesPerFile = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes UseArrowNativeTypes + { + get + { + return _useArrowNativeTypes; + } + set + { + __isset.useArrowNativeTypes = true; + this._useArrowNativeTypes = value; + } + } + + public long ResultRowLimit + { + get + { + return _resultRowLimit; + } + set + { + __isset.resultRowLimit = true; + this._resultRowLimit = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + public bool RejectHighCostQueries + { + get + { + return _rejectHighCostQueries; + } + set + { + __isset.rejectHighCostQueries = true; + this._rejectHighCostQueries = value; + } + } + + public double EstimatedCost + { + get + { + return _estimatedCost; + } + set + { + __isset.estimatedCost = true; + this._estimatedCost = value; + } + } + + public short ExecutionVersion + { + get + { + return _executionVersion; + } + set + { + __isset.executionVersion = true; + this._executionVersion = value; + } + } + + public string RequestValidation + { + get + { + return _requestValidation; + } + set + { + __isset.requestValidation = true; + this._requestValidation = value; + } + } + + public int ResultPersistenceMode + { + get + { + return _resultPersistenceMode; + } + set + { + __isset.resultPersistenceMode = true; + this._resultPersistenceMode = value; + } + } + + public bool TrimArrowBatchesToLimit + { + get + { + return _trimArrowBatchesToLimit; + } + set + { + __isset.trimArrowBatchesToLimit = true; + this._trimArrowBatchesToLimit = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool confOverlay; + public bool runAsync; + public bool queryTimeout; + public bool getDirectResults; + public bool canReadArrowResult; + public bool canDownloadResult; + public bool canDecompressLZ4Result; + public bool maxBytesPerFile; + public bool useArrowNativeTypes; + public bool resultRowLimit; + public bool operationId; + public bool sessionConf; + public bool rejectHighCostQueries; + public bool estimatedCost; + public bool executionVersion; + public bool requestValidation; + public bool resultPersistenceMode; + public bool trimArrowBatchesToLimit; + } + + public TExecuteStatementReq() + { + this._runAsync = false; + this.__isset.runAsync = true; + this._queryTimeout = 0; + this.__isset.queryTimeout = true; + } + + public TExecuteStatementReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string statement) : this() + { + this.SessionHandle = sessionHandle; + this.Statement = statement; + } + + public TExecuteStatementReq DeepCopy() + { + var tmp357 = new TExecuteStatementReq(); + if((SessionHandle != null)) + { + tmp357.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Statement != null)) + { + tmp357.Statement = this.Statement; + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp357.ConfOverlay = this.ConfOverlay.DeepCopy(); + } + tmp357.__isset.confOverlay = this.__isset.confOverlay; + if(__isset.runAsync) + { + tmp357.RunAsync = this.RunAsync; + } + tmp357.__isset.runAsync = this.__isset.runAsync; + if(__isset.queryTimeout) + { + tmp357.QueryTimeout = this.QueryTimeout; + } + tmp357.__isset.queryTimeout = this.__isset.queryTimeout; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp357.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp357.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.canReadArrowResult) + { + tmp357.CanReadArrowResult = this.CanReadArrowResult; + } + tmp357.__isset.canReadArrowResult = this.__isset.canReadArrowResult; + if(__isset.canDownloadResult) + { + tmp357.CanDownloadResult = this.CanDownloadResult; + } + tmp357.__isset.canDownloadResult = this.__isset.canDownloadResult; + if(__isset.canDecompressLZ4Result) + { + tmp357.CanDecompressLZ4Result = this.CanDecompressLZ4Result; + } + tmp357.__isset.canDecompressLZ4Result = this.__isset.canDecompressLZ4Result; + if(__isset.maxBytesPerFile) + { + tmp357.MaxBytesPerFile = this.MaxBytesPerFile; + } + tmp357.__isset.maxBytesPerFile = this.__isset.maxBytesPerFile; + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp357.UseArrowNativeTypes = (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes)this.UseArrowNativeTypes.DeepCopy(); + } + tmp357.__isset.useArrowNativeTypes = this.__isset.useArrowNativeTypes; + if(__isset.resultRowLimit) + { + tmp357.ResultRowLimit = this.ResultRowLimit; + } + tmp357.__isset.resultRowLimit = this.__isset.resultRowLimit; + if((OperationId != null) && __isset.operationId) + { + tmp357.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp357.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp357.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp357.__isset.sessionConf = this.__isset.sessionConf; + if(__isset.rejectHighCostQueries) + { + tmp357.RejectHighCostQueries = this.RejectHighCostQueries; + } + tmp357.__isset.rejectHighCostQueries = this.__isset.rejectHighCostQueries; + if(__isset.estimatedCost) + { + tmp357.EstimatedCost = this.EstimatedCost; + } + tmp357.__isset.estimatedCost = this.__isset.estimatedCost; + if(__isset.executionVersion) + { + tmp357.ExecutionVersion = this.ExecutionVersion; + } + tmp357.__isset.executionVersion = this.__isset.executionVersion; + if((RequestValidation != null) && __isset.requestValidation) + { + tmp357.RequestValidation = this.RequestValidation; + } + tmp357.__isset.requestValidation = this.__isset.requestValidation; + if(__isset.resultPersistenceMode) + { + tmp357.ResultPersistenceMode = this.ResultPersistenceMode; + } + tmp357.__isset.resultPersistenceMode = this.__isset.resultPersistenceMode; + if(__isset.trimArrowBatchesToLimit) + { + tmp357.TrimArrowBatchesToLimit = this.TrimArrowBatchesToLimit; + } + tmp357.__isset.trimArrowBatchesToLimit = this.__isset.trimArrowBatchesToLimit; + return tmp357; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_statement = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Statement = await iprot.ReadStringAsync(cancellationToken); + isset_statement = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Map) + { + { + var _map358 = await iprot.ReadMapBeginAsync(cancellationToken); + ConfOverlay = new Dictionary(_map358.Count); + for(int _i359 = 0; _i359 < _map358.Count; ++_i359) + { + string _key360; + string _val361; + _key360 = await iprot.ReadStringAsync(cancellationToken); + _val361 = await iprot.ReadStringAsync(cancellationToken); + ConfOverlay[_key360] = _val361; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + QueryTimeout = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + CanReadArrowResult = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Bool) + { + CanDownloadResult = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Bool) + { + CanDecompressLZ4Result = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.I64) + { + MaxBytesPerFile = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1286: + if (field.Type == TType.Struct) + { + UseArrowNativeTypes = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes(); + await UseArrowNativeTypes.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1287: + if (field.Type == TType.I64) + { + ResultRowLimit = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.Bool) + { + RejectHighCostQueries = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.Double) + { + EstimatedCost = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3333: + if (field.Type == TType.I16) + { + ExecutionVersion = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3334: + if (field.Type == TType.String) + { + RequestValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3335: + if (field.Type == TType.I32) + { + ResultPersistenceMode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3336: + if (field.Type == TType.Bool) + { + TrimArrowBatchesToLimit = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_statement) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp362 = new TStruct("TExecuteStatementReq"); + await oprot.WriteStructBeginAsync(tmp362, cancellationToken); + var tmp363 = new TField(); + if((SessionHandle != null)) + { + tmp363.Name = "sessionHandle"; + tmp363.Type = TType.Struct; + tmp363.ID = 1; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Statement != null)) + { + tmp363.Name = "statement"; + tmp363.Type = TType.String; + tmp363.ID = 2; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteStringAsync(Statement, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp363.Name = "confOverlay"; + tmp363.Type = TType.Map; + tmp363.ID = 3; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConfOverlay.Count), cancellationToken); + foreach (string _iter364 in ConfOverlay.Keys) + { + await oprot.WriteStringAsync(_iter364, cancellationToken); + await oprot.WriteStringAsync(ConfOverlay[_iter364], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp363.Name = "runAsync"; + tmp363.Type = TType.Bool; + tmp363.ID = 4; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.queryTimeout) + { + tmp363.Name = "queryTimeout"; + tmp363.Type = TType.I64; + tmp363.ID = 5; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(QueryTimeout, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp363.Name = "getDirectResults"; + tmp363.Type = TType.Struct; + tmp363.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canReadArrowResult) + { + tmp363.Name = "canReadArrowResult"; + tmp363.Type = TType.Bool; + tmp363.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanReadArrowResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canDownloadResult) + { + tmp363.Name = "canDownloadResult"; + tmp363.Type = TType.Bool; + tmp363.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanDownloadResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canDecompressLZ4Result) + { + tmp363.Name = "canDecompressLZ4Result"; + tmp363.Type = TType.Bool; + tmp363.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(CanDecompressLZ4Result, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxBytesPerFile) + { + tmp363.Name = "maxBytesPerFile"; + tmp363.Type = TType.I64; + tmp363.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(MaxBytesPerFile, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp363.Name = "useArrowNativeTypes"; + tmp363.Type = TType.Struct; + tmp363.ID = 1286; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await UseArrowNativeTypes.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultRowLimit) + { + tmp363.Name = "resultRowLimit"; + tmp363.Type = TType.I64; + tmp363.ID = 1287; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI64Async(ResultRowLimit, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp363.Name = "operationId"; + tmp363.Type = TType.Struct; + tmp363.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp363.Name = "sessionConf"; + tmp363.Type = TType.Struct; + tmp363.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.rejectHighCostQueries) + { + tmp363.Name = "rejectHighCostQueries"; + tmp363.Type = TType.Bool; + tmp363.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(RejectHighCostQueries, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.estimatedCost) + { + tmp363.Name = "estimatedCost"; + tmp363.Type = TType.Double; + tmp363.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteDoubleAsync(EstimatedCost, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.executionVersion) + { + tmp363.Name = "executionVersion"; + tmp363.Type = TType.I16; + tmp363.ID = 3333; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI16Async(ExecutionVersion, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((RequestValidation != null) && __isset.requestValidation) + { + tmp363.Name = "requestValidation"; + tmp363.Type = TType.String; + tmp363.ID = 3334; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteStringAsync(RequestValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultPersistenceMode) + { + tmp363.Name = "resultPersistenceMode"; + tmp363.Type = TType.I32; + tmp363.ID = 3335; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteI32Async(ResultPersistenceMode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.trimArrowBatchesToLimit) + { + tmp363.Name = "trimArrowBatchesToLimit"; + tmp363.Type = TType.Bool; + tmp363.ID = 3336; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(TrimArrowBatchesToLimit, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExecuteStatementReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(Statement, other.Statement) + && ((__isset.confOverlay == other.__isset.confOverlay) && ((!__isset.confOverlay) || (TCollections.Equals(ConfOverlay, other.ConfOverlay)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.queryTimeout == other.__isset.queryTimeout) && ((!__isset.queryTimeout) || (global::System.Object.Equals(QueryTimeout, other.QueryTimeout)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.canReadArrowResult == other.__isset.canReadArrowResult) && ((!__isset.canReadArrowResult) || (global::System.Object.Equals(CanReadArrowResult, other.CanReadArrowResult)))) + && ((__isset.canDownloadResult == other.__isset.canDownloadResult) && ((!__isset.canDownloadResult) || (global::System.Object.Equals(CanDownloadResult, other.CanDownloadResult)))) + && ((__isset.canDecompressLZ4Result == other.__isset.canDecompressLZ4Result) && ((!__isset.canDecompressLZ4Result) || (global::System.Object.Equals(CanDecompressLZ4Result, other.CanDecompressLZ4Result)))) + && ((__isset.maxBytesPerFile == other.__isset.maxBytesPerFile) && ((!__isset.maxBytesPerFile) || (global::System.Object.Equals(MaxBytesPerFile, other.MaxBytesPerFile)))) + && ((__isset.useArrowNativeTypes == other.__isset.useArrowNativeTypes) && ((!__isset.useArrowNativeTypes) || (global::System.Object.Equals(UseArrowNativeTypes, other.UseArrowNativeTypes)))) + && ((__isset.resultRowLimit == other.__isset.resultRowLimit) && ((!__isset.resultRowLimit) || (global::System.Object.Equals(ResultRowLimit, other.ResultRowLimit)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) + && ((__isset.rejectHighCostQueries == other.__isset.rejectHighCostQueries) && ((!__isset.rejectHighCostQueries) || (global::System.Object.Equals(RejectHighCostQueries, other.RejectHighCostQueries)))) + && ((__isset.estimatedCost == other.__isset.estimatedCost) && ((!__isset.estimatedCost) || (global::System.Object.Equals(EstimatedCost, other.EstimatedCost)))) + && ((__isset.executionVersion == other.__isset.executionVersion) && ((!__isset.executionVersion) || (global::System.Object.Equals(ExecutionVersion, other.ExecutionVersion)))) + && ((__isset.requestValidation == other.__isset.requestValidation) && ((!__isset.requestValidation) || (global::System.Object.Equals(RequestValidation, other.RequestValidation)))) + && ((__isset.resultPersistenceMode == other.__isset.resultPersistenceMode) && ((!__isset.resultPersistenceMode) || (global::System.Object.Equals(ResultPersistenceMode, other.ResultPersistenceMode)))) + && ((__isset.trimArrowBatchesToLimit == other.__isset.trimArrowBatchesToLimit) && ((!__isset.trimArrowBatchesToLimit) || (global::System.Object.Equals(TrimArrowBatchesToLimit, other.TrimArrowBatchesToLimit)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Statement != null)) + { + hashcode = (hashcode * 397) + Statement.GetHashCode(); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ConfOverlay); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if(__isset.queryTimeout) + { + hashcode = (hashcode * 397) + QueryTimeout.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.canReadArrowResult) + { + hashcode = (hashcode * 397) + CanReadArrowResult.GetHashCode(); + } + if(__isset.canDownloadResult) + { + hashcode = (hashcode * 397) + CanDownloadResult.GetHashCode(); + } + if(__isset.canDecompressLZ4Result) + { + hashcode = (hashcode * 397) + CanDecompressLZ4Result.GetHashCode(); + } + if(__isset.maxBytesPerFile) + { + hashcode = (hashcode * 397) + MaxBytesPerFile.GetHashCode(); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + hashcode = (hashcode * 397) + UseArrowNativeTypes.GetHashCode(); + } + if(__isset.resultRowLimit) + { + hashcode = (hashcode * 397) + ResultRowLimit.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + if(__isset.rejectHighCostQueries) + { + hashcode = (hashcode * 397) + RejectHighCostQueries.GetHashCode(); + } + if(__isset.estimatedCost) + { + hashcode = (hashcode * 397) + EstimatedCost.GetHashCode(); + } + if(__isset.executionVersion) + { + hashcode = (hashcode * 397) + ExecutionVersion.GetHashCode(); + } + if((RequestValidation != null) && __isset.requestValidation) + { + hashcode = (hashcode * 397) + RequestValidation.GetHashCode(); + } + if(__isset.resultPersistenceMode) + { + hashcode = (hashcode * 397) + ResultPersistenceMode.GetHashCode(); + } + if(__isset.trimArrowBatchesToLimit) + { + hashcode = (hashcode * 397) + TrimArrowBatchesToLimit.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp365 = new StringBuilder("TExecuteStatementReq("); + if((SessionHandle != null)) + { + tmp365.Append(", SessionHandle: "); + SessionHandle.ToString(tmp365); + } + if((Statement != null)) + { + tmp365.Append(", Statement: "); + Statement.ToString(tmp365); + } + if((ConfOverlay != null) && __isset.confOverlay) + { + tmp365.Append(", ConfOverlay: "); + ConfOverlay.ToString(tmp365); + } + if(__isset.runAsync) + { + tmp365.Append(", RunAsync: "); + RunAsync.ToString(tmp365); + } + if(__isset.queryTimeout) + { + tmp365.Append(", QueryTimeout: "); + QueryTimeout.ToString(tmp365); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp365.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp365); + } + if(__isset.canReadArrowResult) + { + tmp365.Append(", CanReadArrowResult: "); + CanReadArrowResult.ToString(tmp365); + } + if(__isset.canDownloadResult) + { + tmp365.Append(", CanDownloadResult: "); + CanDownloadResult.ToString(tmp365); + } + if(__isset.canDecompressLZ4Result) + { + tmp365.Append(", CanDecompressLZ4Result: "); + CanDecompressLZ4Result.ToString(tmp365); + } + if(__isset.maxBytesPerFile) + { + tmp365.Append(", MaxBytesPerFile: "); + MaxBytesPerFile.ToString(tmp365); + } + if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + { + tmp365.Append(", UseArrowNativeTypes: "); + UseArrowNativeTypes.ToString(tmp365); + } + if(__isset.resultRowLimit) + { + tmp365.Append(", ResultRowLimit: "); + ResultRowLimit.ToString(tmp365); + } + if((OperationId != null) && __isset.operationId) + { + tmp365.Append(", OperationId: "); + OperationId.ToString(tmp365); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp365.Append(", SessionConf: "); + SessionConf.ToString(tmp365); + } + if(__isset.rejectHighCostQueries) + { + tmp365.Append(", RejectHighCostQueries: "); + RejectHighCostQueries.ToString(tmp365); + } + if(__isset.estimatedCost) + { + tmp365.Append(", EstimatedCost: "); + EstimatedCost.ToString(tmp365); + } + if(__isset.executionVersion) + { + tmp365.Append(", ExecutionVersion: "); + ExecutionVersion.ToString(tmp365); + } + if((RequestValidation != null) && __isset.requestValidation) + { + tmp365.Append(", RequestValidation: "); + RequestValidation.ToString(tmp365); + } + if(__isset.resultPersistenceMode) + { + tmp365.Append(", ResultPersistenceMode: "); + ResultPersistenceMode.ToString(tmp365); + } + if(__isset.trimArrowBatchesToLimit) + { + tmp365.Append(", TrimArrowBatchesToLimit: "); + TrimArrowBatchesToLimit.ToString(tmp365); + } + tmp365.Append(')'); + return tmp365.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs new file mode 100644 index 0000000000..013e725bb5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs @@ -0,0 +1,569 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExecuteStatementResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + private bool _executionRejected; + private double _maxClusterCapacity; + private double _queryCost; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + private double _currentClusterLoad; + private int _idempotencyType; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + public bool ExecutionRejected + { + get + { + return _executionRejected; + } + set + { + __isset.executionRejected = true; + this._executionRejected = value; + } + } + + public double MaxClusterCapacity + { + get + { + return _maxClusterCapacity; + } + set + { + __isset.maxClusterCapacity = true; + this._maxClusterCapacity = value; + } + } + + public double QueryCost + { + get + { + return _queryCost; + } + set + { + __isset.queryCost = true; + this._queryCost = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + public double CurrentClusterLoad + { + get + { + return _currentClusterLoad; + } + set + { + __isset.currentClusterLoad = true; + this._currentClusterLoad = value; + } + } + + public int IdempotencyType + { + get + { + return _idempotencyType; + } + set + { + __isset.idempotencyType = true; + this._idempotencyType = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + public bool executionRejected; + public bool maxClusterCapacity; + public bool queryCost; + public bool sessionConf; + public bool currentClusterLoad; + public bool idempotencyType; + } + + public TExecuteStatementResp() + { + } + + public TExecuteStatementResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TExecuteStatementResp DeepCopy() + { + var tmp415 = new TExecuteStatementResp(); + if((Status != null)) + { + tmp415.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp415.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp415.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp415.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp415.__isset.directResults = this.__isset.directResults; + if(__isset.executionRejected) + { + tmp415.ExecutionRejected = this.ExecutionRejected; + } + tmp415.__isset.executionRejected = this.__isset.executionRejected; + if(__isset.maxClusterCapacity) + { + tmp415.MaxClusterCapacity = this.MaxClusterCapacity; + } + tmp415.__isset.maxClusterCapacity = this.__isset.maxClusterCapacity; + if(__isset.queryCost) + { + tmp415.QueryCost = this.QueryCost; + } + tmp415.__isset.queryCost = this.__isset.queryCost; + if((SessionConf != null) && __isset.sessionConf) + { + tmp415.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp415.__isset.sessionConf = this.__isset.sessionConf; + if(__isset.currentClusterLoad) + { + tmp415.CurrentClusterLoad = this.CurrentClusterLoad; + } + tmp415.__isset.currentClusterLoad = this.__isset.currentClusterLoad; + if(__isset.idempotencyType) + { + tmp415.IdempotencyType = this.IdempotencyType; + } + tmp415.__isset.idempotencyType = this.__isset.idempotencyType; + return tmp415; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Bool) + { + ExecutionRejected = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Double) + { + MaxClusterCapacity = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.Double) + { + QueryCost = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3333: + if (field.Type == TType.Double) + { + CurrentClusterLoad = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3334: + if (field.Type == TType.I32) + { + IdempotencyType = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp416 = new TStruct("TExecuteStatementResp"); + await oprot.WriteStructBeginAsync(tmp416, cancellationToken); + var tmp417 = new TField(); + if((Status != null)) + { + tmp417.Name = "status"; + tmp417.Type = TType.Struct; + tmp417.ID = 1; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp417.Name = "operationHandle"; + tmp417.Type = TType.Struct; + tmp417.ID = 2; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp417.Name = "directResults"; + tmp417.Type = TType.Struct; + tmp417.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.executionRejected) + { + tmp417.Name = "executionRejected"; + tmp417.Type = TType.Bool; + tmp417.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteBoolAsync(ExecutionRejected, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxClusterCapacity) + { + tmp417.Name = "maxClusterCapacity"; + tmp417.Type = TType.Double; + tmp417.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(MaxClusterCapacity, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.queryCost) + { + tmp417.Name = "queryCost"; + tmp417.Type = TType.Double; + tmp417.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(QueryCost, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp417.Name = "sessionConf"; + tmp417.Type = TType.Struct; + tmp417.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.currentClusterLoad) + { + tmp417.Name = "currentClusterLoad"; + tmp417.Type = TType.Double; + tmp417.ID = 3333; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteDoubleAsync(CurrentClusterLoad, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.idempotencyType) + { + tmp417.Name = "idempotencyType"; + tmp417.Type = TType.I32; + tmp417.ID = 3334; + await oprot.WriteFieldBeginAsync(tmp417, cancellationToken); + await oprot.WriteI32Async(IdempotencyType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExecuteStatementResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))) + && ((__isset.executionRejected == other.__isset.executionRejected) && ((!__isset.executionRejected) || (global::System.Object.Equals(ExecutionRejected, other.ExecutionRejected)))) + && ((__isset.maxClusterCapacity == other.__isset.maxClusterCapacity) && ((!__isset.maxClusterCapacity) || (global::System.Object.Equals(MaxClusterCapacity, other.MaxClusterCapacity)))) + && ((__isset.queryCost == other.__isset.queryCost) && ((!__isset.queryCost) || (global::System.Object.Equals(QueryCost, other.QueryCost)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))) + && ((__isset.currentClusterLoad == other.__isset.currentClusterLoad) && ((!__isset.currentClusterLoad) || (global::System.Object.Equals(CurrentClusterLoad, other.CurrentClusterLoad)))) + && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + if(__isset.executionRejected) + { + hashcode = (hashcode * 397) + ExecutionRejected.GetHashCode(); + } + if(__isset.maxClusterCapacity) + { + hashcode = (hashcode * 397) + MaxClusterCapacity.GetHashCode(); + } + if(__isset.queryCost) + { + hashcode = (hashcode * 397) + QueryCost.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + if(__isset.currentClusterLoad) + { + hashcode = (hashcode * 397) + CurrentClusterLoad.GetHashCode(); + } + if(__isset.idempotencyType) + { + hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp418 = new StringBuilder("TExecuteStatementResp("); + if((Status != null)) + { + tmp418.Append(", Status: "); + Status.ToString(tmp418); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp418.Append(", OperationHandle: "); + OperationHandle.ToString(tmp418); + } + if((DirectResults != null) && __isset.directResults) + { + tmp418.Append(", DirectResults: "); + DirectResults.ToString(tmp418); + } + if(__isset.executionRejected) + { + tmp418.Append(", ExecutionRejected: "); + ExecutionRejected.ToString(tmp418); + } + if(__isset.maxClusterCapacity) + { + tmp418.Append(", MaxClusterCapacity: "); + MaxClusterCapacity.ToString(tmp418); + } + if(__isset.queryCost) + { + tmp418.Append(", QueryCost: "); + QueryCost.ToString(tmp418); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp418.Append(", SessionConf: "); + SessionConf.ToString(tmp418); + } + if(__isset.currentClusterLoad) + { + tmp418.Append(", CurrentClusterLoad: "); + CurrentClusterLoad.ToString(tmp418); + } + if(__isset.idempotencyType) + { + tmp418.Append(", IdempotencyType: "); + IdempotencyType.ToString(tmp418); + } + tmp418.Append(')'); + return tmp418.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs new file mode 100644 index 0000000000..a497b63a84 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs @@ -0,0 +1,728 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TExpressionInfo : TBase + { + private string _className; + private string _usage; + private string _name; + private string _extended; + private string _db; + private string _arguments; + private string _examples; + private string _note; + private string _group; + private string _since; + private string _deprecated; + private string _source; + + public string ClassName + { + get + { + return _className; + } + set + { + __isset.className = true; + this._className = value; + } + } + + public string Usage + { + get + { + return _usage; + } + set + { + __isset.usage = true; + this._usage = value; + } + } + + public string Name + { + get + { + return _name; + } + set + { + __isset.name = true; + this._name = value; + } + } + + public string Extended + { + get + { + return _extended; + } + set + { + __isset.extended = true; + this._extended = value; + } + } + + public string Db + { + get + { + return _db; + } + set + { + __isset.db = true; + this._db = value; + } + } + + public string Arguments + { + get + { + return _arguments; + } + set + { + __isset.arguments = true; + this._arguments = value; + } + } + + public string Examples + { + get + { + return _examples; + } + set + { + __isset.examples = true; + this._examples = value; + } + } + + public string Note + { + get + { + return _note; + } + set + { + __isset.note = true; + this._note = value; + } + } + + public string Group + { + get + { + return _group; + } + set + { + __isset.@group = true; + this._group = value; + } + } + + public string Since + { + get + { + return _since; + } + set + { + __isset.since = true; + this._since = value; + } + } + + public string Deprecated + { + get + { + return _deprecated; + } + set + { + __isset.deprecated = true; + this._deprecated = value; + } + } + + public string Source + { + get + { + return _source; + } + set + { + __isset.source = true; + this._source = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool className; + public bool usage; + public bool name; + public bool extended; + public bool db; + public bool arguments; + public bool examples; + public bool note; + public bool @group; + public bool since; + public bool deprecated; + public bool source; + } + + public TExpressionInfo() + { + } + + public TExpressionInfo DeepCopy() + { + var tmp410 = new TExpressionInfo(); + if((ClassName != null) && __isset.className) + { + tmp410.ClassName = this.ClassName; + } + tmp410.__isset.className = this.__isset.className; + if((Usage != null) && __isset.usage) + { + tmp410.Usage = this.Usage; + } + tmp410.__isset.usage = this.__isset.usage; + if((Name != null) && __isset.name) + { + tmp410.Name = this.Name; + } + tmp410.__isset.name = this.__isset.name; + if((Extended != null) && __isset.extended) + { + tmp410.Extended = this.Extended; + } + tmp410.__isset.extended = this.__isset.extended; + if((Db != null) && __isset.db) + { + tmp410.Db = this.Db; + } + tmp410.__isset.db = this.__isset.db; + if((Arguments != null) && __isset.arguments) + { + tmp410.Arguments = this.Arguments; + } + tmp410.__isset.arguments = this.__isset.arguments; + if((Examples != null) && __isset.examples) + { + tmp410.Examples = this.Examples; + } + tmp410.__isset.examples = this.__isset.examples; + if((Note != null) && __isset.note) + { + tmp410.Note = this.Note; + } + tmp410.__isset.note = this.__isset.note; + if((Group != null) && __isset.@group) + { + tmp410.Group = this.Group; + } + tmp410.__isset.@group = this.__isset.@group; + if((Since != null) && __isset.since) + { + tmp410.Since = this.Since; + } + tmp410.__isset.since = this.__isset.since; + if((Deprecated != null) && __isset.deprecated) + { + tmp410.Deprecated = this.Deprecated; + } + tmp410.__isset.deprecated = this.__isset.deprecated; + if((Source != null) && __isset.source) + { + tmp410.Source = this.Source; + } + tmp410.__isset.source = this.__isset.source; + return tmp410; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + ClassName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Usage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Name = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Extended = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + Db = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + Arguments = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.String) + { + Examples = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.String) + { + Note = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 9: + if (field.Type == TType.String) + { + Group = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 10: + if (field.Type == TType.String) + { + Since = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 11: + if (field.Type == TType.String) + { + Deprecated = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 12: + if (field.Type == TType.String) + { + Source = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp411 = new TStruct("TExpressionInfo"); + await oprot.WriteStructBeginAsync(tmp411, cancellationToken); + var tmp412 = new TField(); + if((ClassName != null) && __isset.className) + { + tmp412.Name = "className"; + tmp412.Type = TType.String; + tmp412.ID = 1; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(ClassName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Usage != null) && __isset.usage) + { + tmp412.Name = "usage"; + tmp412.Type = TType.String; + tmp412.ID = 2; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Usage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Name != null) && __isset.name) + { + tmp412.Name = "name"; + tmp412.Type = TType.String; + tmp412.ID = 3; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Name, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Extended != null) && __isset.extended) + { + tmp412.Name = "extended"; + tmp412.Type = TType.String; + tmp412.ID = 4; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Extended, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Db != null) && __isset.db) + { + tmp412.Name = "db"; + tmp412.Type = TType.String; + tmp412.ID = 5; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Db, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Arguments != null) && __isset.arguments) + { + tmp412.Name = "arguments"; + tmp412.Type = TType.String; + tmp412.ID = 6; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Arguments, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Examples != null) && __isset.examples) + { + tmp412.Name = "examples"; + tmp412.Type = TType.String; + tmp412.ID = 7; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Examples, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Note != null) && __isset.note) + { + tmp412.Name = "note"; + tmp412.Type = TType.String; + tmp412.ID = 8; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Note, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Group != null) && __isset.@group) + { + tmp412.Name = "group"; + tmp412.Type = TType.String; + tmp412.ID = 9; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Group, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Since != null) && __isset.since) + { + tmp412.Name = "since"; + tmp412.Type = TType.String; + tmp412.ID = 10; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Since, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Deprecated != null) && __isset.deprecated) + { + tmp412.Name = "deprecated"; + tmp412.Type = TType.String; + tmp412.ID = 11; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Deprecated, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Source != null) && __isset.source) + { + tmp412.Name = "source"; + tmp412.Type = TType.String; + tmp412.ID = 12; + await oprot.WriteFieldBeginAsync(tmp412, cancellationToken); + await oprot.WriteStringAsync(Source, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TExpressionInfo other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.className == other.__isset.className) && ((!__isset.className) || (global::System.Object.Equals(ClassName, other.ClassName)))) + && ((__isset.usage == other.__isset.usage) && ((!__isset.usage) || (global::System.Object.Equals(Usage, other.Usage)))) + && ((__isset.name == other.__isset.name) && ((!__isset.name) || (global::System.Object.Equals(Name, other.Name)))) + && ((__isset.extended == other.__isset.extended) && ((!__isset.extended) || (global::System.Object.Equals(Extended, other.Extended)))) + && ((__isset.db == other.__isset.db) && ((!__isset.db) || (global::System.Object.Equals(Db, other.Db)))) + && ((__isset.arguments == other.__isset.arguments) && ((!__isset.arguments) || (global::System.Object.Equals(Arguments, other.Arguments)))) + && ((__isset.examples == other.__isset.examples) && ((!__isset.examples) || (global::System.Object.Equals(Examples, other.Examples)))) + && ((__isset.note == other.__isset.note) && ((!__isset.note) || (global::System.Object.Equals(Note, other.Note)))) + && ((__isset.@group == other.__isset.@group) && ((!__isset.@group) || (global::System.Object.Equals(Group, other.Group)))) + && ((__isset.since == other.__isset.since) && ((!__isset.since) || (global::System.Object.Equals(Since, other.Since)))) + && ((__isset.deprecated == other.__isset.deprecated) && ((!__isset.deprecated) || (global::System.Object.Equals(Deprecated, other.Deprecated)))) + && ((__isset.source == other.__isset.source) && ((!__isset.source) || (global::System.Object.Equals(Source, other.Source)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ClassName != null) && __isset.className) + { + hashcode = (hashcode * 397) + ClassName.GetHashCode(); + } + if((Usage != null) && __isset.usage) + { + hashcode = (hashcode * 397) + Usage.GetHashCode(); + } + if((Name != null) && __isset.name) + { + hashcode = (hashcode * 397) + Name.GetHashCode(); + } + if((Extended != null) && __isset.extended) + { + hashcode = (hashcode * 397) + Extended.GetHashCode(); + } + if((Db != null) && __isset.db) + { + hashcode = (hashcode * 397) + Db.GetHashCode(); + } + if((Arguments != null) && __isset.arguments) + { + hashcode = (hashcode * 397) + Arguments.GetHashCode(); + } + if((Examples != null) && __isset.examples) + { + hashcode = (hashcode * 397) + Examples.GetHashCode(); + } + if((Note != null) && __isset.note) + { + hashcode = (hashcode * 397) + Note.GetHashCode(); + } + if((Group != null) && __isset.@group) + { + hashcode = (hashcode * 397) + Group.GetHashCode(); + } + if((Since != null) && __isset.since) + { + hashcode = (hashcode * 397) + Since.GetHashCode(); + } + if((Deprecated != null) && __isset.deprecated) + { + hashcode = (hashcode * 397) + Deprecated.GetHashCode(); + } + if((Source != null) && __isset.source) + { + hashcode = (hashcode * 397) + Source.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp413 = new StringBuilder("TExpressionInfo("); + int tmp414 = 0; + if((ClassName != null) && __isset.className) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("ClassName: "); + ClassName.ToString(tmp413); + } + if((Usage != null) && __isset.usage) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Usage: "); + Usage.ToString(tmp413); + } + if((Name != null) && __isset.name) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Name: "); + Name.ToString(tmp413); + } + if((Extended != null) && __isset.extended) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Extended: "); + Extended.ToString(tmp413); + } + if((Db != null) && __isset.db) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Db: "); + Db.ToString(tmp413); + } + if((Arguments != null) && __isset.arguments) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Arguments: "); + Arguments.ToString(tmp413); + } + if((Examples != null) && __isset.examples) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Examples: "); + Examples.ToString(tmp413); + } + if((Note != null) && __isset.note) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Note: "); + Note.ToString(tmp413); + } + if((Group != null) && __isset.@group) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Group: "); + Group.ToString(tmp413); + } + if((Since != null) && __isset.since) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Since: "); + Since.ToString(tmp413); + } + if((Deprecated != null) && __isset.deprecated) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Deprecated: "); + Deprecated.ToString(tmp413); + } + if((Source != null) && __isset.source) + { + if(0 < tmp414++) { tmp413.Append(", "); } + tmp413.Append("Source: "); + Source.ToString(tmp413); + } + tmp413.Append(')'); + return tmp413.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs new file mode 100644 index 0000000000..76764ffc7d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchOrientation.cs @@ -0,0 +1,26 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TFetchOrientation + { + FETCH_NEXT = 0, + FETCH_PRIOR = 1, + FETCH_RELATIVE = 2, + FETCH_ABSOLUTE = 3, + FETCH_FIRST = 4, + FETCH_LAST = 5, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs new file mode 100644 index 0000000000..e5de4d6e54 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs @@ -0,0 +1,437 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TFetchResultsReq : TBase + { + private short _fetchType; + private long _maxBytes; + private long _startRowOffset; + private bool _includeResultSetMetadata; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation Orientation { get; set; } + + public long MaxRows { get; set; } + + public short FetchType + { + get + { + return _fetchType; + } + set + { + __isset.fetchType = true; + this._fetchType = value; + } + } + + public long MaxBytes + { + get + { + return _maxBytes; + } + set + { + __isset.maxBytes = true; + this._maxBytes = value; + } + } + + public long StartRowOffset + { + get + { + return _startRowOffset; + } + set + { + __isset.startRowOffset = true; + this._startRowOffset = value; + } + } + + public bool IncludeResultSetMetadata + { + get + { + return _includeResultSetMetadata; + } + set + { + __isset.includeResultSetMetadata = true; + this._includeResultSetMetadata = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool fetchType; + public bool maxBytes; + public bool startRowOffset; + public bool includeResultSetMetadata; + } + + public TFetchResultsReq() + { + this.Orientation = global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation.FETCH_NEXT; + this._fetchType = 0; + this.__isset.fetchType = true; + } + + public TFetchResultsReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle, global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation orientation, long maxRows) : this() + { + this.OperationHandle = operationHandle; + this.Orientation = orientation; + this.MaxRows = maxRows; + } + + public TFetchResultsReq DeepCopy() + { + var tmp588 = new TFetchResultsReq(); + if((OperationHandle != null)) + { + tmp588.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp588.Orientation = this.Orientation; + tmp588.MaxRows = this.MaxRows; + if(__isset.fetchType) + { + tmp588.FetchType = this.FetchType; + } + tmp588.__isset.fetchType = this.__isset.fetchType; + if(__isset.maxBytes) + { + tmp588.MaxBytes = this.MaxBytes; + } + tmp588.__isset.maxBytes = this.__isset.maxBytes; + if(__isset.startRowOffset) + { + tmp588.StartRowOffset = this.StartRowOffset; + } + tmp588.__isset.startRowOffset = this.__isset.startRowOffset; + if(__isset.includeResultSetMetadata) + { + tmp588.IncludeResultSetMetadata = this.IncludeResultSetMetadata; + } + tmp588.__isset.includeResultSetMetadata = this.__isset.includeResultSetMetadata; + return tmp588; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + bool isset_orientation = false; + bool isset_maxRows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + Orientation = (global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation)await iprot.ReadI32Async(cancellationToken); + isset_orientation = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + MaxRows = await iprot.ReadI64Async(cancellationToken); + isset_maxRows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I16) + { + FetchType = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.I64) + { + MaxBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Bool) + { + IncludeResultSetMetadata = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_orientation) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_maxRows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp589 = new TStruct("TFetchResultsReq"); + await oprot.WriteStructBeginAsync(tmp589, cancellationToken); + var tmp590 = new TField(); + if((OperationHandle != null)) + { + tmp590.Name = "operationHandle"; + tmp590.Type = TType.Struct; + tmp590.ID = 1; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp590.Name = "orientation"; + tmp590.Type = TType.I32; + tmp590.ID = 2; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI32Async((int)Orientation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp590.Name = "maxRows"; + tmp590.Type = TType.I64; + tmp590.ID = 3; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(MaxRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.fetchType) + { + tmp590.Name = "fetchType"; + tmp590.Type = TType.I16; + tmp590.ID = 4; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI16Async(FetchType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.maxBytes) + { + tmp590.Name = "maxBytes"; + tmp590.Type = TType.I64; + tmp590.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(MaxBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.startRowOffset) + { + tmp590.Name = "startRowOffset"; + tmp590.Type = TType.I64; + tmp590.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.includeResultSetMetadata) + { + tmp590.Name = "includeResultSetMetadata"; + tmp590.Type = TType.Bool; + tmp590.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); + await oprot.WriteBoolAsync(IncludeResultSetMetadata, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TFetchResultsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && global::System.Object.Equals(Orientation, other.Orientation) + && global::System.Object.Equals(MaxRows, other.MaxRows) + && ((__isset.fetchType == other.__isset.fetchType) && ((!__isset.fetchType) || (global::System.Object.Equals(FetchType, other.FetchType)))) + && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))) + && ((__isset.startRowOffset == other.__isset.startRowOffset) && ((!__isset.startRowOffset) || (global::System.Object.Equals(StartRowOffset, other.StartRowOffset)))) + && ((__isset.includeResultSetMetadata == other.__isset.includeResultSetMetadata) && ((!__isset.includeResultSetMetadata) || (global::System.Object.Equals(IncludeResultSetMetadata, other.IncludeResultSetMetadata)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + hashcode = (hashcode * 397) + Orientation.GetHashCode(); + hashcode = (hashcode * 397) + MaxRows.GetHashCode(); + if(__isset.fetchType) + { + hashcode = (hashcode * 397) + FetchType.GetHashCode(); + } + if(__isset.maxBytes) + { + hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); + } + if(__isset.startRowOffset) + { + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + } + if(__isset.includeResultSetMetadata) + { + hashcode = (hashcode * 397) + IncludeResultSetMetadata.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp591 = new StringBuilder("TFetchResultsReq("); + if((OperationHandle != null)) + { + tmp591.Append(", OperationHandle: "); + OperationHandle.ToString(tmp591); + } + tmp591.Append(", Orientation: "); + Orientation.ToString(tmp591); + tmp591.Append(", MaxRows: "); + MaxRows.ToString(tmp591); + if(__isset.fetchType) + { + tmp591.Append(", FetchType: "); + FetchType.ToString(tmp591); + } + if(__isset.maxBytes) + { + tmp591.Append(", MaxBytes: "); + MaxBytes.ToString(tmp591); + } + if(__isset.startRowOffset) + { + tmp591.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp591); + } + if(__isset.includeResultSetMetadata) + { + tmp591.Append(", IncludeResultSetMetadata: "); + IncludeResultSetMetadata.ToString(tmp591); + } + tmp591.Append(')'); + return tmp591.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs new file mode 100644 index 0000000000..c83622ec12 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs @@ -0,0 +1,372 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TFetchResultsResp : TBase + { + private bool _hasMoreRows; + private global::Apache.Hive.Service.Rpc.Thrift.TRowSet _results; + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; + private string _responseValidation; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public bool HasMoreRows + { + get + { + return _hasMoreRows; + } + set + { + __isset.hasMoreRows = true; + this._hasMoreRows = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TRowSet Results + { + get + { + return _results; + } + set + { + __isset.results = true; + this._results = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata + { + get + { + return _resultSetMetadata; + } + set + { + __isset.resultSetMetadata = true; + this._resultSetMetadata = value; + } + } + + public string ResponseValidation + { + get + { + return _responseValidation; + } + set + { + __isset.responseValidation = true; + this._responseValidation = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool hasMoreRows; + public bool results; + public bool resultSetMetadata; + public bool responseValidation; + } + + public TFetchResultsResp() + { + } + + public TFetchResultsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TFetchResultsResp DeepCopy() + { + var tmp593 = new TFetchResultsResp(); + if((Status != null)) + { + tmp593.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if(__isset.hasMoreRows) + { + tmp593.HasMoreRows = this.HasMoreRows; + } + tmp593.__isset.hasMoreRows = this.__isset.hasMoreRows; + if((Results != null) && __isset.results) + { + tmp593.Results = (global::Apache.Hive.Service.Rpc.Thrift.TRowSet)this.Results.DeepCopy(); + } + tmp593.__isset.results = this.__isset.results; + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp593.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); + } + tmp593.__isset.resultSetMetadata = this.__isset.resultSetMetadata; + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp593.ResponseValidation = this.ResponseValidation; + } + tmp593.__isset.responseValidation = this.__isset.responseValidation; + return tmp593; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + HasMoreRows = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + Results = new global::Apache.Hive.Service.Rpc.Thrift.TRowSet(); + await Results.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await ResultSetMetadata.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.String) + { + ResponseValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp594 = new TStruct("TFetchResultsResp"); + await oprot.WriteStructBeginAsync(tmp594, cancellationToken); + var tmp595 = new TField(); + if((Status != null)) + { + tmp595.Name = "status"; + tmp595.Type = TType.Struct; + tmp595.ID = 1; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.hasMoreRows) + { + tmp595.Name = "hasMoreRows"; + tmp595.Type = TType.Bool; + tmp595.ID = 2; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await oprot.WriteBoolAsync(HasMoreRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Results != null) && __isset.results) + { + tmp595.Name = "results"; + tmp595.Type = TType.Struct; + tmp595.ID = 3; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await Results.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp595.Name = "resultSetMetadata"; + tmp595.Type = TType.Struct; + tmp595.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await ResultSetMetadata.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp595.Name = "responseValidation"; + tmp595.Type = TType.String; + tmp595.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp595, cancellationToken); + await oprot.WriteStringAsync(ResponseValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TFetchResultsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.hasMoreRows == other.__isset.hasMoreRows) && ((!__isset.hasMoreRows) || (global::System.Object.Equals(HasMoreRows, other.HasMoreRows)))) + && ((__isset.results == other.__isset.results) && ((!__isset.results) || (global::System.Object.Equals(Results, other.Results)))) + && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) + && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if(__isset.hasMoreRows) + { + hashcode = (hashcode * 397) + HasMoreRows.GetHashCode(); + } + if((Results != null) && __isset.results) + { + hashcode = (hashcode * 397) + Results.GetHashCode(); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp596 = new StringBuilder("TFetchResultsResp("); + if((Status != null)) + { + tmp596.Append(", Status: "); + Status.ToString(tmp596); + } + if(__isset.hasMoreRows) + { + tmp596.Append(", HasMoreRows: "); + HasMoreRows.ToString(tmp596); + } + if((Results != null) && __isset.results) + { + tmp596.Append(", Results: "); + Results.ToString(tmp596); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp596.Append(", ResultSetMetadata: "); + ResultSetMetadata.ToString(tmp596); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp596.Append(", ResponseValidation: "); + ResponseValidation.ToString(tmp596); + } + tmp596.Append(')'); + return tmp596.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs new file mode 100644 index 0000000000..d18838d501 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCatalogsReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetCatalogsReq() + { + } + + public TGetCatalogsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetCatalogsReq DeepCopy() + { + var tmp455 = new TGetCatalogsReq(); + if((SessionHandle != null)) + { + tmp455.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp455.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp455.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp455.RunAsync = this.RunAsync; + } + tmp455.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp455.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp455.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp455.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp455.__isset.sessionConf = this.__isset.sessionConf; + return tmp455; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp456 = new TStruct("TGetCatalogsReq"); + await oprot.WriteStructBeginAsync(tmp456, cancellationToken); + var tmp457 = new TField(); + if((SessionHandle != null)) + { + tmp457.Name = "sessionHandle"; + tmp457.Type = TType.Struct; + tmp457.ID = 1; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp457.Name = "getDirectResults"; + tmp457.Type = TType.Struct; + tmp457.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp457.Name = "runAsync"; + tmp457.Type = TType.Bool; + tmp457.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp457.Name = "operationId"; + tmp457.Type = TType.Struct; + tmp457.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp457.Name = "sessionConf"; + tmp457.Type = TType.Struct; + tmp457.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp457, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCatalogsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp458 = new StringBuilder("TGetCatalogsReq("); + if((SessionHandle != null)) + { + tmp458.Append(", SessionHandle: "); + SessionHandle.ToString(tmp458); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp458.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp458); + } + if(__isset.runAsync) + { + tmp458.Append(", RunAsync: "); + RunAsync.ToString(tmp458); + } + if((OperationId != null) && __isset.operationId) + { + tmp458.Append(", OperationId: "); + OperationId.ToString(tmp458); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp458.Append(", SessionConf: "); + SessionConf.ToString(tmp458); + } + tmp458.Append(')'); + return tmp458.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs new file mode 100644 index 0000000000..052d126d41 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCatalogsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetCatalogsResp() + { + } + + public TGetCatalogsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetCatalogsResp DeepCopy() + { + var tmp460 = new TGetCatalogsResp(); + if((Status != null)) + { + tmp460.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp460.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp460.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp460.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp460.__isset.directResults = this.__isset.directResults; + return tmp460; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp461 = new TStruct("TGetCatalogsResp"); + await oprot.WriteStructBeginAsync(tmp461, cancellationToken); + var tmp462 = new TField(); + if((Status != null)) + { + tmp462.Name = "status"; + tmp462.Type = TType.Struct; + tmp462.ID = 1; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp462.Name = "operationHandle"; + tmp462.Type = TType.Struct; + tmp462.ID = 2; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp462.Name = "directResults"; + tmp462.Type = TType.Struct; + tmp462.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp462, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCatalogsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp463 = new StringBuilder("TGetCatalogsResp("); + if((Status != null)) + { + tmp463.Append(", Status: "); + Status.ToString(tmp463); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp463.Append(", OperationHandle: "); + OperationHandle.ToString(tmp463); + } + if((DirectResults != null) && __isset.directResults) + { + tmp463.Append(", DirectResults: "); + DirectResults.ToString(tmp463); + } + tmp463.Append(')'); + return tmp463.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs new file mode 100644 index 0000000000..6146aa1353 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs @@ -0,0 +1,569 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetColumnsReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private string _columnName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string ColumnName + { + get + { + return _columnName; + } + set + { + __isset.columnName = true; + this._columnName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool columnName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetColumnsReq() + { + } + + public TGetColumnsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetColumnsReq DeepCopy() + { + var tmp499 = new TGetColumnsReq(); + if((SessionHandle != null)) + { + tmp499.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp499.CatalogName = this.CatalogName; + } + tmp499.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp499.SchemaName = this.SchemaName; + } + tmp499.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp499.TableName = this.TableName; + } + tmp499.__isset.tableName = this.__isset.tableName; + if((ColumnName != null) && __isset.columnName) + { + tmp499.ColumnName = this.ColumnName; + } + tmp499.__isset.columnName = this.__isset.columnName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp499.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp499.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp499.RunAsync = this.RunAsync; + } + tmp499.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp499.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp499.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp499.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp499.__isset.sessionConf = this.__isset.sessionConf; + return tmp499; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ColumnName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp500 = new TStruct("TGetColumnsReq"); + await oprot.WriteStructBeginAsync(tmp500, cancellationToken); + var tmp501 = new TField(); + if((SessionHandle != null)) + { + tmp501.Name = "sessionHandle"; + tmp501.Type = TType.Struct; + tmp501.ID = 1; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp501.Name = "catalogName"; + tmp501.Type = TType.String; + tmp501.ID = 2; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp501.Name = "schemaName"; + tmp501.Type = TType.String; + tmp501.ID = 3; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp501.Name = "tableName"; + tmp501.Type = TType.String; + tmp501.ID = 4; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ColumnName != null) && __isset.columnName) + { + tmp501.Name = "columnName"; + tmp501.Type = TType.String; + tmp501.ID = 5; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteStringAsync(ColumnName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp501.Name = "getDirectResults"; + tmp501.Type = TType.Struct; + tmp501.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp501.Name = "runAsync"; + tmp501.Type = TType.Bool; + tmp501.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp501.Name = "operationId"; + tmp501.Type = TType.Struct; + tmp501.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp501.Name = "sessionConf"; + tmp501.Type = TType.Struct; + tmp501.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp501, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetColumnsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.columnName == other.__isset.columnName) && ((!__isset.columnName) || (global::System.Object.Equals(ColumnName, other.ColumnName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((ColumnName != null) && __isset.columnName) + { + hashcode = (hashcode * 397) + ColumnName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp502 = new StringBuilder("TGetColumnsReq("); + if((SessionHandle != null)) + { + tmp502.Append(", SessionHandle: "); + SessionHandle.ToString(tmp502); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp502.Append(", CatalogName: "); + CatalogName.ToString(tmp502); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp502.Append(", SchemaName: "); + SchemaName.ToString(tmp502); + } + if((TableName != null) && __isset.tableName) + { + tmp502.Append(", TableName: "); + TableName.ToString(tmp502); + } + if((ColumnName != null) && __isset.columnName) + { + tmp502.Append(", ColumnName: "); + ColumnName.ToString(tmp502); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp502.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp502); + } + if(__isset.runAsync) + { + tmp502.Append(", RunAsync: "); + RunAsync.ToString(tmp502); + } + if((OperationId != null) && __isset.operationId) + { + tmp502.Append(", OperationId: "); + OperationId.ToString(tmp502); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp502.Append(", SessionConf: "); + SessionConf.ToString(tmp502); + } + tmp502.Append(')'); + return tmp502.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs new file mode 100644 index 0000000000..13495fcbc2 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetColumnsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetColumnsResp() + { + } + + public TGetColumnsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetColumnsResp DeepCopy() + { + var tmp504 = new TGetColumnsResp(); + if((Status != null)) + { + tmp504.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp504.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp504.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp504.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp504.__isset.directResults = this.__isset.directResults; + return tmp504; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp505 = new TStruct("TGetColumnsResp"); + await oprot.WriteStructBeginAsync(tmp505, cancellationToken); + var tmp506 = new TField(); + if((Status != null)) + { + tmp506.Name = "status"; + tmp506.Type = TType.Struct; + tmp506.ID = 1; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp506.Name = "operationHandle"; + tmp506.Type = TType.Struct; + tmp506.ID = 2; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp506.Name = "directResults"; + tmp506.Type = TType.Struct; + tmp506.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp506, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetColumnsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp507 = new StringBuilder("TGetColumnsResp("); + if((Status != null)) + { + tmp507.Append(", Status: "); + Status.ToString(tmp507); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp507.Append(", OperationHandle: "); + OperationHandle.ToString(tmp507); + } + if((DirectResults != null) && __isset.directResults) + { + tmp507.Append(", DirectResults: "); + DirectResults.ToString(tmp507); + } + tmp507.Append(')'); + return tmp507.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs new file mode 100644 index 0000000000..bb5b5f268b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs @@ -0,0 +1,667 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCrossReferenceReq : TBase + { + private string _parentCatalogName; + private string _parentSchemaName; + private string _parentTableName; + private string _foreignCatalogName; + private string _foreignSchemaName; + private string _foreignTableName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string ParentCatalogName + { + get + { + return _parentCatalogName; + } + set + { + __isset.parentCatalogName = true; + this._parentCatalogName = value; + } + } + + public string ParentSchemaName + { + get + { + return _parentSchemaName; + } + set + { + __isset.parentSchemaName = true; + this._parentSchemaName = value; + } + } + + public string ParentTableName + { + get + { + return _parentTableName; + } + set + { + __isset.parentTableName = true; + this._parentTableName = value; + } + } + + public string ForeignCatalogName + { + get + { + return _foreignCatalogName; + } + set + { + __isset.foreignCatalogName = true; + this._foreignCatalogName = value; + } + } + + public string ForeignSchemaName + { + get + { + return _foreignSchemaName; + } + set + { + __isset.foreignSchemaName = true; + this._foreignSchemaName = value; + } + } + + public string ForeignTableName + { + get + { + return _foreignTableName; + } + set + { + __isset.foreignTableName = true; + this._foreignTableName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool parentCatalogName; + public bool parentSchemaName; + public bool parentTableName; + public bool foreignCatalogName; + public bool foreignSchemaName; + public bool foreignTableName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetCrossReferenceReq() + { + } + + public TGetCrossReferenceReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetCrossReferenceReq DeepCopy() + { + var tmp529 = new TGetCrossReferenceReq(); + if((SessionHandle != null)) + { + tmp529.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp529.ParentCatalogName = this.ParentCatalogName; + } + tmp529.__isset.parentCatalogName = this.__isset.parentCatalogName; + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp529.ParentSchemaName = this.ParentSchemaName; + } + tmp529.__isset.parentSchemaName = this.__isset.parentSchemaName; + if((ParentTableName != null) && __isset.parentTableName) + { + tmp529.ParentTableName = this.ParentTableName; + } + tmp529.__isset.parentTableName = this.__isset.parentTableName; + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp529.ForeignCatalogName = this.ForeignCatalogName; + } + tmp529.__isset.foreignCatalogName = this.__isset.foreignCatalogName; + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp529.ForeignSchemaName = this.ForeignSchemaName; + } + tmp529.__isset.foreignSchemaName = this.__isset.foreignSchemaName; + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp529.ForeignTableName = this.ForeignTableName; + } + tmp529.__isset.foreignTableName = this.__isset.foreignTableName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp529.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp529.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp529.RunAsync = this.RunAsync; + } + tmp529.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp529.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp529.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp529.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp529.__isset.sessionConf = this.__isset.sessionConf; + return tmp529; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + ParentCatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + ParentSchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + ParentTableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ForeignCatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + ForeignSchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.String) + { + ForeignTableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp530 = new TStruct("TGetCrossReferenceReq"); + await oprot.WriteStructBeginAsync(tmp530, cancellationToken); + var tmp531 = new TField(); + if((SessionHandle != null)) + { + tmp531.Name = "sessionHandle"; + tmp531.Type = TType.Struct; + tmp531.ID = 1; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp531.Name = "parentCatalogName"; + tmp531.Type = TType.String; + tmp531.ID = 2; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentCatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp531.Name = "parentSchemaName"; + tmp531.Type = TType.String; + tmp531.ID = 3; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentSchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ParentTableName != null) && __isset.parentTableName) + { + tmp531.Name = "parentTableName"; + tmp531.Type = TType.String; + tmp531.ID = 4; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ParentTableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp531.Name = "foreignCatalogName"; + tmp531.Type = TType.String; + tmp531.ID = 5; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignCatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp531.Name = "foreignSchemaName"; + tmp531.Type = TType.String; + tmp531.ID = 6; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignSchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp531.Name = "foreignTableName"; + tmp531.Type = TType.String; + tmp531.ID = 7; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteStringAsync(ForeignTableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp531.Name = "getDirectResults"; + tmp531.Type = TType.Struct; + tmp531.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp531.Name = "runAsync"; + tmp531.Type = TType.Bool; + tmp531.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp531.Name = "operationId"; + tmp531.Type = TType.Struct; + tmp531.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp531.Name = "sessionConf"; + tmp531.Type = TType.Struct; + tmp531.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp531, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCrossReferenceReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.parentCatalogName == other.__isset.parentCatalogName) && ((!__isset.parentCatalogName) || (global::System.Object.Equals(ParentCatalogName, other.ParentCatalogName)))) + && ((__isset.parentSchemaName == other.__isset.parentSchemaName) && ((!__isset.parentSchemaName) || (global::System.Object.Equals(ParentSchemaName, other.ParentSchemaName)))) + && ((__isset.parentTableName == other.__isset.parentTableName) && ((!__isset.parentTableName) || (global::System.Object.Equals(ParentTableName, other.ParentTableName)))) + && ((__isset.foreignCatalogName == other.__isset.foreignCatalogName) && ((!__isset.foreignCatalogName) || (global::System.Object.Equals(ForeignCatalogName, other.ForeignCatalogName)))) + && ((__isset.foreignSchemaName == other.__isset.foreignSchemaName) && ((!__isset.foreignSchemaName) || (global::System.Object.Equals(ForeignSchemaName, other.ForeignSchemaName)))) + && ((__isset.foreignTableName == other.__isset.foreignTableName) && ((!__isset.foreignTableName) || (global::System.Object.Equals(ForeignTableName, other.ForeignTableName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + hashcode = (hashcode * 397) + ParentCatalogName.GetHashCode(); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + hashcode = (hashcode * 397) + ParentSchemaName.GetHashCode(); + } + if((ParentTableName != null) && __isset.parentTableName) + { + hashcode = (hashcode * 397) + ParentTableName.GetHashCode(); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + hashcode = (hashcode * 397) + ForeignCatalogName.GetHashCode(); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + hashcode = (hashcode * 397) + ForeignSchemaName.GetHashCode(); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + hashcode = (hashcode * 397) + ForeignTableName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp532 = new StringBuilder("TGetCrossReferenceReq("); + if((SessionHandle != null)) + { + tmp532.Append(", SessionHandle: "); + SessionHandle.ToString(tmp532); + } + if((ParentCatalogName != null) && __isset.parentCatalogName) + { + tmp532.Append(", ParentCatalogName: "); + ParentCatalogName.ToString(tmp532); + } + if((ParentSchemaName != null) && __isset.parentSchemaName) + { + tmp532.Append(", ParentSchemaName: "); + ParentSchemaName.ToString(tmp532); + } + if((ParentTableName != null) && __isset.parentTableName) + { + tmp532.Append(", ParentTableName: "); + ParentTableName.ToString(tmp532); + } + if((ForeignCatalogName != null) && __isset.foreignCatalogName) + { + tmp532.Append(", ForeignCatalogName: "); + ForeignCatalogName.ToString(tmp532); + } + if((ForeignSchemaName != null) && __isset.foreignSchemaName) + { + tmp532.Append(", ForeignSchemaName: "); + ForeignSchemaName.ToString(tmp532); + } + if((ForeignTableName != null) && __isset.foreignTableName) + { + tmp532.Append(", ForeignTableName: "); + ForeignTableName.ToString(tmp532); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp532.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp532); + } + if(__isset.runAsync) + { + tmp532.Append(", RunAsync: "); + RunAsync.ToString(tmp532); + } + if((OperationId != null) && __isset.operationId) + { + tmp532.Append(", OperationId: "); + OperationId.ToString(tmp532); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp532.Append(", SessionConf: "); + SessionConf.ToString(tmp532); + } + tmp532.Append(')'); + return tmp532.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs new file mode 100644 index 0000000000..18950f75e6 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetCrossReferenceResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetCrossReferenceResp() + { + } + + public TGetCrossReferenceResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetCrossReferenceResp DeepCopy() + { + var tmp534 = new TGetCrossReferenceResp(); + if((Status != null)) + { + tmp534.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp534.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp534.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp534.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp534.__isset.directResults = this.__isset.directResults; + return tmp534; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp535 = new TStruct("TGetCrossReferenceResp"); + await oprot.WriteStructBeginAsync(tmp535, cancellationToken); + var tmp536 = new TField(); + if((Status != null)) + { + tmp536.Name = "status"; + tmp536.Type = TType.Struct; + tmp536.ID = 1; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp536.Name = "operationHandle"; + tmp536.Type = TType.Struct; + tmp536.ID = 2; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp536.Name = "directResults"; + tmp536.Type = TType.Struct; + tmp536.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp536, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetCrossReferenceResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp537 = new StringBuilder("TGetCrossReferenceResp("); + if((Status != null)) + { + tmp537.Append(", Status: "); + Status.ToString(tmp537); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp537.Append(", OperationHandle: "); + OperationHandle.ToString(tmp537); + } + if((DirectResults != null) && __isset.directResults) + { + tmp537.Append(", DirectResults: "); + DirectResults.ToString(tmp537); + } + tmp537.Append(')'); + return tmp537.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs new file mode 100644 index 0000000000..e064af21f0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs @@ -0,0 +1,252 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string Owner { get; set; } + + public string Renewer { get; set; } + + public TGetDelegationTokenReq() + { + } + + public TGetDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string owner, string renewer) : this() + { + this.SessionHandle = sessionHandle; + this.Owner = owner; + this.Renewer = renewer; + } + + public TGetDelegationTokenReq DeepCopy() + { + var tmp598 = new TGetDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp598.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Owner != null)) + { + tmp598.Owner = this.Owner; + } + if((Renewer != null)) + { + tmp598.Renewer = this.Renewer; + } + return tmp598; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_owner = false; + bool isset_renewer = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Owner = await iprot.ReadStringAsync(cancellationToken); + isset_owner = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Renewer = await iprot.ReadStringAsync(cancellationToken); + isset_renewer = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_owner) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_renewer) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp599 = new TStruct("TGetDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp599, cancellationToken); + var tmp600 = new TField(); + if((SessionHandle != null)) + { + tmp600.Name = "sessionHandle"; + tmp600.Type = TType.Struct; + tmp600.ID = 1; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Owner != null)) + { + tmp600.Name = "owner"; + tmp600.Type = TType.String; + tmp600.ID = 2; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await oprot.WriteStringAsync(Owner, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Renewer != null)) + { + tmp600.Name = "renewer"; + tmp600.Type = TType.String; + tmp600.ID = 3; + await oprot.WriteFieldBeginAsync(tmp600, cancellationToken); + await oprot.WriteStringAsync(Renewer, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(Owner, other.Owner) + && global::System.Object.Equals(Renewer, other.Renewer); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Owner != null)) + { + hashcode = (hashcode * 397) + Owner.GetHashCode(); + } + if((Renewer != null)) + { + hashcode = (hashcode * 397) + Renewer.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp601 = new StringBuilder("TGetDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp601.Append(", SessionHandle: "); + SessionHandle.ToString(tmp601); + } + if((Owner != null)) + { + tmp601.Append(", Owner: "); + Owner.ToString(tmp601); + } + if((Renewer != null)) + { + tmp601.Append(", Renewer: "); + Renewer.ToString(tmp601); + } + tmp601.Append(')'); + return tmp601.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs new file mode 100644 index 0000000000..bc4e4cbd61 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetDelegationTokenResp : TBase + { + private string _delegationToken; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public string DelegationToken + { + get + { + return _delegationToken; + } + set + { + __isset.delegationToken = true; + this._delegationToken = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool delegationToken; + } + + public TGetDelegationTokenResp() + { + } + + public TGetDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetDelegationTokenResp DeepCopy() + { + var tmp603 = new TGetDelegationTokenResp(); + if((Status != null)) + { + tmp603.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp603.DelegationToken = this.DelegationToken; + } + tmp603.__isset.delegationToken = this.__isset.delegationToken; + return tmp603; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp604 = new TStruct("TGetDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp604, cancellationToken); + var tmp605 = new TField(); + if((Status != null)) + { + tmp605.Name = "status"; + tmp605.Type = TType.Struct; + tmp605.ID = 1; + await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp605.Name = "delegationToken"; + tmp605.Type = TType.String; + tmp605.ID = 2; + await oprot.WriteFieldBeginAsync(tmp605, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.delegationToken == other.__isset.delegationToken) && ((!__isset.delegationToken) || (global::System.Object.Equals(DelegationToken, other.DelegationToken)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((DelegationToken != null) && __isset.delegationToken) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp606 = new StringBuilder("TGetDelegationTokenResp("); + if((Status != null)) + { + tmp606.Append(", Status: "); + Status.ToString(tmp606); + } + if((DelegationToken != null) && __isset.delegationToken) + { + tmp606.Append(", DelegationToken: "); + DelegationToken.ToString(tmp606); + } + tmp606.Append(')'); + return tmp606.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs new file mode 100644 index 0000000000..192bdae204 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs @@ -0,0 +1,513 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetFunctionsReq : TBase + { + private string _catalogName; + private string _schemaName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string FunctionName { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetFunctionsReq() + { + } + + public TGetFunctionsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string functionName) : this() + { + this.SessionHandle = sessionHandle; + this.FunctionName = functionName; + } + + public TGetFunctionsReq DeepCopy() + { + var tmp509 = new TGetFunctionsReq(); + if((SessionHandle != null)) + { + tmp509.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp509.CatalogName = this.CatalogName; + } + tmp509.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp509.SchemaName = this.SchemaName; + } + tmp509.__isset.schemaName = this.__isset.schemaName; + if((FunctionName != null)) + { + tmp509.FunctionName = this.FunctionName; + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp509.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp509.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp509.RunAsync = this.RunAsync; + } + tmp509.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp509.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp509.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp509.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp509.__isset.sessionConf = this.__isset.sessionConf; + return tmp509; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_functionName = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + FunctionName = await iprot.ReadStringAsync(cancellationToken); + isset_functionName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_functionName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp510 = new TStruct("TGetFunctionsReq"); + await oprot.WriteStructBeginAsync(tmp510, cancellationToken); + var tmp511 = new TField(); + if((SessionHandle != null)) + { + tmp511.Name = "sessionHandle"; + tmp511.Type = TType.Struct; + tmp511.ID = 1; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp511.Name = "catalogName"; + tmp511.Type = TType.String; + tmp511.ID = 2; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp511.Name = "schemaName"; + tmp511.Type = TType.String; + tmp511.ID = 3; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((FunctionName != null)) + { + tmp511.Name = "functionName"; + tmp511.Type = TType.String; + tmp511.ID = 4; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteStringAsync(FunctionName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp511.Name = "getDirectResults"; + tmp511.Type = TType.Struct; + tmp511.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp511.Name = "runAsync"; + tmp511.Type = TType.Bool; + tmp511.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp511.Name = "operationId"; + tmp511.Type = TType.Struct; + tmp511.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp511.Name = "sessionConf"; + tmp511.Type = TType.Struct; + tmp511.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp511, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetFunctionsReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && global::System.Object.Equals(FunctionName, other.FunctionName) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((FunctionName != null)) + { + hashcode = (hashcode * 397) + FunctionName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp512 = new StringBuilder("TGetFunctionsReq("); + if((SessionHandle != null)) + { + tmp512.Append(", SessionHandle: "); + SessionHandle.ToString(tmp512); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp512.Append(", CatalogName: "); + CatalogName.ToString(tmp512); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp512.Append(", SchemaName: "); + SchemaName.ToString(tmp512); + } + if((FunctionName != null)) + { + tmp512.Append(", FunctionName: "); + FunctionName.ToString(tmp512); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp512.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp512); + } + if(__isset.runAsync) + { + tmp512.Append(", RunAsync: "); + RunAsync.ToString(tmp512); + } + if((OperationId != null) && __isset.operationId) + { + tmp512.Append(", OperationId: "); + OperationId.ToString(tmp512); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp512.Append(", SessionConf: "); + SessionConf.ToString(tmp512); + } + tmp512.Append(')'); + return tmp512.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs new file mode 100644 index 0000000000..21fdead24f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetFunctionsResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetFunctionsResp() + { + } + + public TGetFunctionsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetFunctionsResp DeepCopy() + { + var tmp514 = new TGetFunctionsResp(); + if((Status != null)) + { + tmp514.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp514.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp514.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp514.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp514.__isset.directResults = this.__isset.directResults; + return tmp514; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp515 = new TStruct("TGetFunctionsResp"); + await oprot.WriteStructBeginAsync(tmp515, cancellationToken); + var tmp516 = new TField(); + if((Status != null)) + { + tmp516.Name = "status"; + tmp516.Type = TType.Struct; + tmp516.ID = 1; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp516.Name = "operationHandle"; + tmp516.Type = TType.Struct; + tmp516.ID = 2; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp516.Name = "directResults"; + tmp516.Type = TType.Struct; + tmp516.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp516, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetFunctionsResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp517 = new StringBuilder("TGetFunctionsResp("); + if((Status != null)) + { + tmp517.Append(", Status: "); + Status.ToString(tmp517); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp517.Append(", OperationHandle: "); + OperationHandle.ToString(tmp517); + } + if((DirectResults != null) && __isset.directResults) + { + tmp517.Append(", DirectResults: "); + DirectResults.ToString(tmp517); + } + tmp517.Append(')'); + return tmp517.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs new file mode 100644 index 0000000000..8efeb5f5ff --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs @@ -0,0 +1,202 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType InfoType { get; set; } + + public TGetInfoReq() + { + } + + public TGetInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType infoType) : this() + { + this.SessionHandle = sessionHandle; + this.InfoType = infoType; + } + + public TGetInfoReq DeepCopy() + { + var tmp347 = new TGetInfoReq(); + if((SessionHandle != null)) + { + tmp347.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + tmp347.InfoType = this.InfoType; + return tmp347; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_infoType = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + InfoType = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType)await iprot.ReadI32Async(cancellationToken); + isset_infoType = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_infoType) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp348 = new TStruct("TGetInfoReq"); + await oprot.WriteStructBeginAsync(tmp348, cancellationToken); + var tmp349 = new TField(); + if((SessionHandle != null)) + { + tmp349.Name = "sessionHandle"; + tmp349.Type = TType.Struct; + tmp349.ID = 1; + await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp349.Name = "infoType"; + tmp349.Type = TType.I32; + tmp349.ID = 2; + await oprot.WriteFieldBeginAsync(tmp349, cancellationToken); + await oprot.WriteI32Async((int)InfoType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(InfoType, other.InfoType); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + hashcode = (hashcode * 397) + InfoType.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp350 = new StringBuilder("TGetInfoReq("); + if((SessionHandle != null)) + { + tmp350.Append(", SessionHandle: "); + SessionHandle.ToString(tmp350); + } + tmp350.Append(", InfoType: "); + InfoType.ToString(tmp350); + tmp350.Append(')'); + return tmp350.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs new file mode 100644 index 0000000000..dc3d5e8cb3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue InfoValue { get; set; } + + public TGetInfoResp() + { + } + + public TGetInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue infoValue) : this() + { + this.Status = status; + this.InfoValue = infoValue; + } + + public TGetInfoResp DeepCopy() + { + var tmp352 = new TGetInfoResp(); + if((Status != null)) + { + tmp352.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((InfoValue != null)) + { + tmp352.InfoValue = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue)this.InfoValue.DeepCopy(); + } + return tmp352; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_infoValue = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + InfoValue = new global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue(); + await InfoValue.ReadAsync(iprot, cancellationToken); + isset_infoValue = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_infoValue) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp353 = new TStruct("TGetInfoResp"); + await oprot.WriteStructBeginAsync(tmp353, cancellationToken); + var tmp354 = new TField(); + if((Status != null)) + { + tmp354.Name = "status"; + tmp354.Type = TType.Struct; + tmp354.ID = 1; + await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InfoValue != null)) + { + tmp354.Name = "infoValue"; + tmp354.Type = TType.Struct; + tmp354.ID = 2; + await oprot.WriteFieldBeginAsync(tmp354, cancellationToken); + await InfoValue.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(InfoValue, other.InfoValue); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((InfoValue != null)) + { + hashcode = (hashcode * 397) + InfoValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp355 = new StringBuilder("TGetInfoResp("); + if((Status != null)) + { + tmp355.Append(", Status: "); + Status.ToString(tmp355); + } + if((InfoValue != null)) + { + tmp355.Append(", InfoValue: "); + InfoValue.ToString(tmp355); + } + tmp355.Append(')'); + return tmp355.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs new file mode 100644 index 0000000000..59b5ae27fa --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoType.cs @@ -0,0 +1,68 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TGetInfoType + { + CLI_MAX_DRIVER_CONNECTIONS = 0, + CLI_MAX_CONCURRENT_ACTIVITIES = 1, + CLI_DATA_SOURCE_NAME = 2, + CLI_FETCH_DIRECTION = 8, + CLI_SERVER_NAME = 13, + CLI_SEARCH_PATTERN_ESCAPE = 14, + CLI_DBMS_NAME = 17, + CLI_DBMS_VER = 18, + CLI_ACCESSIBLE_TABLES = 19, + CLI_ACCESSIBLE_PROCEDURES = 20, + CLI_CURSOR_COMMIT_BEHAVIOR = 23, + CLI_DATA_SOURCE_READ_ONLY = 25, + CLI_DEFAULT_TXN_ISOLATION = 26, + CLI_IDENTIFIER_CASE = 28, + CLI_IDENTIFIER_QUOTE_CHAR = 29, + CLI_MAX_COLUMN_NAME_LEN = 30, + CLI_MAX_CURSOR_NAME_LEN = 31, + CLI_MAX_SCHEMA_NAME_LEN = 32, + CLI_MAX_CATALOG_NAME_LEN = 34, + CLI_MAX_TABLE_NAME_LEN = 35, + CLI_SCROLL_CONCURRENCY = 43, + CLI_TXN_CAPABLE = 46, + CLI_USER_NAME = 47, + CLI_TXN_ISOLATION_OPTION = 72, + CLI_INTEGRITY = 73, + CLI_GETDATA_EXTENSIONS = 81, + CLI_NULL_COLLATION = 85, + CLI_ALTER_TABLE = 86, + CLI_ORDER_BY_COLUMNS_IN_SELECT = 90, + CLI_SPECIAL_CHARACTERS = 94, + CLI_MAX_COLUMNS_IN_GROUP_BY = 97, + CLI_MAX_COLUMNS_IN_INDEX = 98, + CLI_MAX_COLUMNS_IN_ORDER_BY = 99, + CLI_MAX_COLUMNS_IN_SELECT = 100, + CLI_MAX_COLUMNS_IN_TABLE = 101, + CLI_MAX_INDEX_SIZE = 102, + CLI_MAX_ROW_SIZE = 104, + CLI_MAX_STATEMENT_LEN = 105, + CLI_MAX_TABLES_IN_SELECT = 106, + CLI_MAX_USER_NAME_LEN = 107, + CLI_OJ_CAPABILITIES = 115, + CLI_XOPEN_CLI_YEAR = 10000, + CLI_CURSOR_SENSITIVITY = 10001, + CLI_DESCRIBE_PARAMETER = 10002, + CLI_CATALOG_NAME = 10003, + CLI_COLLATION_SEQ = 10004, + CLI_MAX_IDENTIFIER_LEN = 10005, + CLI_ODBC_KEYWORDS = 10006, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs new file mode 100644 index 0000000000..16d80393da --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs @@ -0,0 +1,428 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetInfoValue : TBase + { + private string _stringValue; + private short _smallIntValue; + private int _integerBitmask; + private int _integerFlag; + private int _binaryValue; + private long _lenValue; + + public string StringValue + { + get + { + return _stringValue; + } + set + { + __isset.stringValue = true; + this._stringValue = value; + } + } + + public short SmallIntValue + { + get + { + return _smallIntValue; + } + set + { + __isset.smallIntValue = true; + this._smallIntValue = value; + } + } + + public int IntegerBitmask + { + get + { + return _integerBitmask; + } + set + { + __isset.integerBitmask = true; + this._integerBitmask = value; + } + } + + public int IntegerFlag + { + get + { + return _integerFlag; + } + set + { + __isset.integerFlag = true; + this._integerFlag = value; + } + } + + public int BinaryValue + { + get + { + return _binaryValue; + } + set + { + __isset.binaryValue = true; + this._binaryValue = value; + } + } + + public long LenValue + { + get + { + return _lenValue; + } + set + { + __isset.lenValue = true; + this._lenValue = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool stringValue; + public bool smallIntValue; + public bool integerBitmask; + public bool integerFlag; + public bool binaryValue; + public bool lenValue; + } + + public TGetInfoValue() + { + } + + public TGetInfoValue DeepCopy() + { + var tmp342 = new TGetInfoValue(); + if((StringValue != null) && __isset.stringValue) + { + tmp342.StringValue = this.StringValue; + } + tmp342.__isset.stringValue = this.__isset.stringValue; + if(__isset.smallIntValue) + { + tmp342.SmallIntValue = this.SmallIntValue; + } + tmp342.__isset.smallIntValue = this.__isset.smallIntValue; + if(__isset.integerBitmask) + { + tmp342.IntegerBitmask = this.IntegerBitmask; + } + tmp342.__isset.integerBitmask = this.__isset.integerBitmask; + if(__isset.integerFlag) + { + tmp342.IntegerFlag = this.IntegerFlag; + } + tmp342.__isset.integerFlag = this.__isset.integerFlag; + if(__isset.binaryValue) + { + tmp342.BinaryValue = this.BinaryValue; + } + tmp342.__isset.binaryValue = this.__isset.binaryValue; + if(__isset.lenValue) + { + tmp342.LenValue = this.LenValue; + } + tmp342.__isset.lenValue = this.__isset.lenValue; + return tmp342; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + StringValue = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I16) + { + SmallIntValue = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I32) + { + IntegerBitmask = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + IntegerFlag = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I32) + { + BinaryValue = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.I64) + { + LenValue = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp343 = new TStruct("TGetInfoValue"); + await oprot.WriteStructBeginAsync(tmp343, cancellationToken); + var tmp344 = new TField(); + if((StringValue != null) && __isset.stringValue) + { + tmp344.Name = "stringValue"; + tmp344.Type = TType.String; + tmp344.ID = 1; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteStringAsync(StringValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.smallIntValue) + { + tmp344.Name = "smallIntValue"; + tmp344.Type = TType.I16; + tmp344.ID = 2; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI16Async(SmallIntValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.integerBitmask) + { + tmp344.Name = "integerBitmask"; + tmp344.Type = TType.I32; + tmp344.ID = 3; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(IntegerBitmask, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.integerFlag) + { + tmp344.Name = "integerFlag"; + tmp344.Type = TType.I32; + tmp344.ID = 4; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(IntegerFlag, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.binaryValue) + { + tmp344.Name = "binaryValue"; + tmp344.Type = TType.I32; + tmp344.ID = 5; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI32Async(BinaryValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.lenValue) + { + tmp344.Name = "lenValue"; + tmp344.Type = TType.I64; + tmp344.ID = 6; + await oprot.WriteFieldBeginAsync(tmp344, cancellationToken); + await oprot.WriteI64Async(LenValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetInfoValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))) + && ((__isset.smallIntValue == other.__isset.smallIntValue) && ((!__isset.smallIntValue) || (global::System.Object.Equals(SmallIntValue, other.SmallIntValue)))) + && ((__isset.integerBitmask == other.__isset.integerBitmask) && ((!__isset.integerBitmask) || (global::System.Object.Equals(IntegerBitmask, other.IntegerBitmask)))) + && ((__isset.integerFlag == other.__isset.integerFlag) && ((!__isset.integerFlag) || (global::System.Object.Equals(IntegerFlag, other.IntegerFlag)))) + && ((__isset.binaryValue == other.__isset.binaryValue) && ((!__isset.binaryValue) || (global::System.Object.Equals(BinaryValue, other.BinaryValue)))) + && ((__isset.lenValue == other.__isset.lenValue) && ((!__isset.lenValue) || (global::System.Object.Equals(LenValue, other.LenValue)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((StringValue != null) && __isset.stringValue) + { + hashcode = (hashcode * 397) + StringValue.GetHashCode(); + } + if(__isset.smallIntValue) + { + hashcode = (hashcode * 397) + SmallIntValue.GetHashCode(); + } + if(__isset.integerBitmask) + { + hashcode = (hashcode * 397) + IntegerBitmask.GetHashCode(); + } + if(__isset.integerFlag) + { + hashcode = (hashcode * 397) + IntegerFlag.GetHashCode(); + } + if(__isset.binaryValue) + { + hashcode = (hashcode * 397) + BinaryValue.GetHashCode(); + } + if(__isset.lenValue) + { + hashcode = (hashcode * 397) + LenValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp345 = new StringBuilder("TGetInfoValue("); + int tmp346 = 0; + if((StringValue != null) && __isset.stringValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("StringValue: "); + StringValue.ToString(tmp345); + } + if(__isset.smallIntValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("SmallIntValue: "); + SmallIntValue.ToString(tmp345); + } + if(__isset.integerBitmask) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("IntegerBitmask: "); + IntegerBitmask.ToString(tmp345); + } + if(__isset.integerFlag) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("IntegerFlag: "); + IntegerFlag.ToString(tmp345); + } + if(__isset.binaryValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("BinaryValue: "); + BinaryValue.ToString(tmp345); + } + if(__isset.lenValue) + { + if(0 < tmp346++) { tmp345.Append(", "); } + tmp345.Append("LenValue: "); + LenValue.ToString(tmp345); + } + tmp345.Append(')'); + return tmp345.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs new file mode 100644 index 0000000000..edb8bb89e0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetOperationStatusReq : TBase + { + private bool _getProgressUpdate; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public bool GetProgressUpdate + { + get + { + return _getProgressUpdate; + } + set + { + __isset.getProgressUpdate = true; + this._getProgressUpdate = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getProgressUpdate; + } + + public TGetOperationStatusReq() + { + } + + public TGetOperationStatusReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetOperationStatusReq DeepCopy() + { + var tmp539 = new TGetOperationStatusReq(); + if((OperationHandle != null)) + { + tmp539.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + if(__isset.getProgressUpdate) + { + tmp539.GetProgressUpdate = this.GetProgressUpdate; + } + tmp539.__isset.getProgressUpdate = this.__isset.getProgressUpdate; + return tmp539; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + GetProgressUpdate = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp540 = new TStruct("TGetOperationStatusReq"); + await oprot.WriteStructBeginAsync(tmp540, cancellationToken); + var tmp541 = new TField(); + if((OperationHandle != null)) + { + tmp541.Name = "operationHandle"; + tmp541.Type = TType.Struct; + tmp541.ID = 1; + await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.getProgressUpdate) + { + tmp541.Name = "getProgressUpdate"; + tmp541.Type = TType.Bool; + tmp541.ID = 2; + await oprot.WriteFieldBeginAsync(tmp541, cancellationToken); + await oprot.WriteBoolAsync(GetProgressUpdate, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetOperationStatusReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && ((__isset.getProgressUpdate == other.__isset.getProgressUpdate) && ((!__isset.getProgressUpdate) || (global::System.Object.Equals(GetProgressUpdate, other.GetProgressUpdate)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if(__isset.getProgressUpdate) + { + hashcode = (hashcode * 397) + GetProgressUpdate.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp542 = new StringBuilder("TGetOperationStatusReq("); + if((OperationHandle != null)) + { + tmp542.Append(", OperationHandle: "); + OperationHandle.ToString(tmp542); + } + if(__isset.getProgressUpdate) + { + tmp542.Append(", GetProgressUpdate: "); + GetProgressUpdate.ToString(tmp542); + } + tmp542.Append(')'); + return tmp542.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs new file mode 100644 index 0000000000..dd024f750b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs @@ -0,0 +1,963 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetOperationStatusResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationState _operationState; + private string _sqlState; + private int _errorCode; + private string _errorMessage; + private string _taskStatus; + private long _operationStarted; + private long _operationCompleted; + private bool _hasResultSet; + private global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp _progressUpdateResponse; + private long _numModifiedRows; + private string _displayMessage; + private string _diagnosticInfo; + private string _responseValidation; + private int _idempotencyType; + private long _statementTimeout; + private int _statementTimeoutLevel; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TOperationState OperationState + { + get + { + return _operationState; + } + set + { + __isset.operationState = true; + this._operationState = value; + } + } + + public string SqlState + { + get + { + return _sqlState; + } + set + { + __isset.sqlState = true; + this._sqlState = value; + } + } + + public int ErrorCode + { + get + { + return _errorCode; + } + set + { + __isset.errorCode = true; + this._errorCode = value; + } + } + + public string ErrorMessage + { + get + { + return _errorMessage; + } + set + { + __isset.errorMessage = true; + this._errorMessage = value; + } + } + + public string TaskStatus + { + get + { + return _taskStatus; + } + set + { + __isset.taskStatus = true; + this._taskStatus = value; + } + } + + public long OperationStarted + { + get + { + return _operationStarted; + } + set + { + __isset.operationStarted = true; + this._operationStarted = value; + } + } + + public long OperationCompleted + { + get + { + return _operationCompleted; + } + set + { + __isset.operationCompleted = true; + this._operationCompleted = value; + } + } + + public bool HasResultSet + { + get + { + return _hasResultSet; + } + set + { + __isset.hasResultSet = true; + this._hasResultSet = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp ProgressUpdateResponse + { + get + { + return _progressUpdateResponse; + } + set + { + __isset.progressUpdateResponse = true; + this._progressUpdateResponse = value; + } + } + + public long NumModifiedRows + { + get + { + return _numModifiedRows; + } + set + { + __isset.numModifiedRows = true; + this._numModifiedRows = value; + } + } + + public string DisplayMessage + { + get + { + return _displayMessage; + } + set + { + __isset.displayMessage = true; + this._displayMessage = value; + } + } + + public string DiagnosticInfo + { + get + { + return _diagnosticInfo; + } + set + { + __isset.diagnosticInfo = true; + this._diagnosticInfo = value; + } + } + + public string ResponseValidation + { + get + { + return _responseValidation; + } + set + { + __isset.responseValidation = true; + this._responseValidation = value; + } + } + + public int IdempotencyType + { + get + { + return _idempotencyType; + } + set + { + __isset.idempotencyType = true; + this._idempotencyType = value; + } + } + + public long StatementTimeout + { + get + { + return _statementTimeout; + } + set + { + __isset.statementTimeout = true; + this._statementTimeout = value; + } + } + + public int StatementTimeoutLevel + { + get + { + return _statementTimeoutLevel; + } + set + { + __isset.statementTimeoutLevel = true; + this._statementTimeoutLevel = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationState; + public bool sqlState; + public bool errorCode; + public bool errorMessage; + public bool taskStatus; + public bool operationStarted; + public bool operationCompleted; + public bool hasResultSet; + public bool progressUpdateResponse; + public bool numModifiedRows; + public bool displayMessage; + public bool diagnosticInfo; + public bool responseValidation; + public bool idempotencyType; + public bool statementTimeout; + public bool statementTimeoutLevel; + } + + public TGetOperationStatusResp() + { + } + + public TGetOperationStatusResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetOperationStatusResp DeepCopy() + { + var tmp544 = new TGetOperationStatusResp(); + if((Status != null)) + { + tmp544.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if(__isset.operationState) + { + tmp544.OperationState = this.OperationState; + } + tmp544.__isset.operationState = this.__isset.operationState; + if((SqlState != null) && __isset.sqlState) + { + tmp544.SqlState = this.SqlState; + } + tmp544.__isset.sqlState = this.__isset.sqlState; + if(__isset.errorCode) + { + tmp544.ErrorCode = this.ErrorCode; + } + tmp544.__isset.errorCode = this.__isset.errorCode; + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp544.ErrorMessage = this.ErrorMessage; + } + tmp544.__isset.errorMessage = this.__isset.errorMessage; + if((TaskStatus != null) && __isset.taskStatus) + { + tmp544.TaskStatus = this.TaskStatus; + } + tmp544.__isset.taskStatus = this.__isset.taskStatus; + if(__isset.operationStarted) + { + tmp544.OperationStarted = this.OperationStarted; + } + tmp544.__isset.operationStarted = this.__isset.operationStarted; + if(__isset.operationCompleted) + { + tmp544.OperationCompleted = this.OperationCompleted; + } + tmp544.__isset.operationCompleted = this.__isset.operationCompleted; + if(__isset.hasResultSet) + { + tmp544.HasResultSet = this.HasResultSet; + } + tmp544.__isset.hasResultSet = this.__isset.hasResultSet; + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp544.ProgressUpdateResponse = (global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp)this.ProgressUpdateResponse.DeepCopy(); + } + tmp544.__isset.progressUpdateResponse = this.__isset.progressUpdateResponse; + if(__isset.numModifiedRows) + { + tmp544.NumModifiedRows = this.NumModifiedRows; + } + tmp544.__isset.numModifiedRows = this.__isset.numModifiedRows; + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp544.DisplayMessage = this.DisplayMessage; + } + tmp544.__isset.displayMessage = this.__isset.displayMessage; + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp544.DiagnosticInfo = this.DiagnosticInfo; + } + tmp544.__isset.diagnosticInfo = this.__isset.diagnosticInfo; + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp544.ResponseValidation = this.ResponseValidation; + } + tmp544.__isset.responseValidation = this.__isset.responseValidation; + if(__isset.idempotencyType) + { + tmp544.IdempotencyType = this.IdempotencyType; + } + tmp544.__isset.idempotencyType = this.__isset.idempotencyType; + if(__isset.statementTimeout) + { + tmp544.StatementTimeout = this.StatementTimeout; + } + tmp544.__isset.statementTimeout = this.__isset.statementTimeout; + if(__isset.statementTimeoutLevel) + { + tmp544.StatementTimeoutLevel = this.StatementTimeoutLevel; + } + tmp544.__isset.statementTimeoutLevel = this.__isset.statementTimeoutLevel; + return tmp544; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + OperationState = (global::Apache.Hive.Service.Rpc.Thrift.TOperationState)await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SqlState = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + ErrorCode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ErrorMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.String) + { + TaskStatus = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 7: + if (field.Type == TType.I64) + { + OperationStarted = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 8: + if (field.Type == TType.I64) + { + OperationCompleted = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 9: + if (field.Type == TType.Bool) + { + HasResultSet = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 10: + if (field.Type == TType.Struct) + { + ProgressUpdateResponse = new global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp(); + await ProgressUpdateResponse.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 11: + if (field.Type == TType.I64) + { + NumModifiedRows = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.String) + { + DisplayMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.String) + { + DiagnosticInfo = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.String) + { + ResponseValidation = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.I32) + { + IdempotencyType = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.I64) + { + StatementTimeout = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.I32) + { + StatementTimeoutLevel = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp545 = new TStruct("TGetOperationStatusResp"); + await oprot.WriteStructBeginAsync(tmp545, cancellationToken); + var tmp546 = new TField(); + if((Status != null)) + { + tmp546.Name = "status"; + tmp546.Type = TType.Struct; + tmp546.ID = 1; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationState) + { + tmp546.Name = "operationState"; + tmp546.Type = TType.I32; + tmp546.ID = 2; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async((int)OperationState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlState != null) && __isset.sqlState) + { + tmp546.Name = "sqlState"; + tmp546.Type = TType.String; + tmp546.ID = 3; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(SqlState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.errorCode) + { + tmp546.Name = "errorCode"; + tmp546.Type = TType.I32; + tmp546.ID = 4; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(ErrorCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp546.Name = "errorMessage"; + tmp546.Type = TType.String; + tmp546.ID = 5; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(ErrorMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TaskStatus != null) && __isset.taskStatus) + { + tmp546.Name = "taskStatus"; + tmp546.Type = TType.String; + tmp546.ID = 6; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(TaskStatus, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationStarted) + { + tmp546.Name = "operationStarted"; + tmp546.Type = TType.I64; + tmp546.ID = 7; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(OperationStarted, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.operationCompleted) + { + tmp546.Name = "operationCompleted"; + tmp546.Type = TType.I64; + tmp546.ID = 8; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(OperationCompleted, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.hasResultSet) + { + tmp546.Name = "hasResultSet"; + tmp546.Type = TType.Bool; + tmp546.ID = 9; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteBoolAsync(HasResultSet, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp546.Name = "progressUpdateResponse"; + tmp546.Type = TType.Struct; + tmp546.ID = 10; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await ProgressUpdateResponse.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.numModifiedRows) + { + tmp546.Name = "numModifiedRows"; + tmp546.Type = TType.I64; + tmp546.ID = 11; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(NumModifiedRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp546.Name = "displayMessage"; + tmp546.Type = TType.String; + tmp546.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(DisplayMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp546.Name = "diagnosticInfo"; + tmp546.Type = TType.String; + tmp546.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(DiagnosticInfo, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp546.Name = "responseValidation"; + tmp546.Type = TType.String; + tmp546.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteStringAsync(ResponseValidation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.idempotencyType) + { + tmp546.Name = "idempotencyType"; + tmp546.Type = TType.I32; + tmp546.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(IdempotencyType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.statementTimeout) + { + tmp546.Name = "statementTimeout"; + tmp546.Type = TType.I64; + tmp546.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI64Async(StatementTimeout, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.statementTimeoutLevel) + { + tmp546.Name = "statementTimeoutLevel"; + tmp546.Type = TType.I32; + tmp546.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp546, cancellationToken); + await oprot.WriteI32Async(StatementTimeoutLevel, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetOperationStatusResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationState == other.__isset.operationState) && ((!__isset.operationState) || (global::System.Object.Equals(OperationState, other.OperationState)))) + && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) + && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) + && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))) + && ((__isset.taskStatus == other.__isset.taskStatus) && ((!__isset.taskStatus) || (global::System.Object.Equals(TaskStatus, other.TaskStatus)))) + && ((__isset.operationStarted == other.__isset.operationStarted) && ((!__isset.operationStarted) || (global::System.Object.Equals(OperationStarted, other.OperationStarted)))) + && ((__isset.operationCompleted == other.__isset.operationCompleted) && ((!__isset.operationCompleted) || (global::System.Object.Equals(OperationCompleted, other.OperationCompleted)))) + && ((__isset.hasResultSet == other.__isset.hasResultSet) && ((!__isset.hasResultSet) || (global::System.Object.Equals(HasResultSet, other.HasResultSet)))) + && ((__isset.progressUpdateResponse == other.__isset.progressUpdateResponse) && ((!__isset.progressUpdateResponse) || (global::System.Object.Equals(ProgressUpdateResponse, other.ProgressUpdateResponse)))) + && ((__isset.numModifiedRows == other.__isset.numModifiedRows) && ((!__isset.numModifiedRows) || (global::System.Object.Equals(NumModifiedRows, other.NumModifiedRows)))) + && ((__isset.displayMessage == other.__isset.displayMessage) && ((!__isset.displayMessage) || (global::System.Object.Equals(DisplayMessage, other.DisplayMessage)))) + && ((__isset.diagnosticInfo == other.__isset.diagnosticInfo) && ((!__isset.diagnosticInfo) || (global::System.Object.Equals(DiagnosticInfo, other.DiagnosticInfo)))) + && ((__isset.responseValidation == other.__isset.responseValidation) && ((!__isset.responseValidation) || (global::System.Object.Equals(ResponseValidation, other.ResponseValidation)))) + && ((__isset.idempotencyType == other.__isset.idempotencyType) && ((!__isset.idempotencyType) || (global::System.Object.Equals(IdempotencyType, other.IdempotencyType)))) + && ((__isset.statementTimeout == other.__isset.statementTimeout) && ((!__isset.statementTimeout) || (global::System.Object.Equals(StatementTimeout, other.StatementTimeout)))) + && ((__isset.statementTimeoutLevel == other.__isset.statementTimeoutLevel) && ((!__isset.statementTimeoutLevel) || (global::System.Object.Equals(StatementTimeoutLevel, other.StatementTimeoutLevel)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if(__isset.operationState) + { + hashcode = (hashcode * 397) + OperationState.GetHashCode(); + } + if((SqlState != null) && __isset.sqlState) + { + hashcode = (hashcode * 397) + SqlState.GetHashCode(); + } + if(__isset.errorCode) + { + hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); + } + if((TaskStatus != null) && __isset.taskStatus) + { + hashcode = (hashcode * 397) + TaskStatus.GetHashCode(); + } + if(__isset.operationStarted) + { + hashcode = (hashcode * 397) + OperationStarted.GetHashCode(); + } + if(__isset.operationCompleted) + { + hashcode = (hashcode * 397) + OperationCompleted.GetHashCode(); + } + if(__isset.hasResultSet) + { + hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + hashcode = (hashcode * 397) + ProgressUpdateResponse.GetHashCode(); + } + if(__isset.numModifiedRows) + { + hashcode = (hashcode * 397) + NumModifiedRows.GetHashCode(); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + hashcode = (hashcode * 397) + DisplayMessage.GetHashCode(); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + hashcode = (hashcode * 397) + DiagnosticInfo.GetHashCode(); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); + } + if(__isset.idempotencyType) + { + hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); + } + if(__isset.statementTimeout) + { + hashcode = (hashcode * 397) + StatementTimeout.GetHashCode(); + } + if(__isset.statementTimeoutLevel) + { + hashcode = (hashcode * 397) + StatementTimeoutLevel.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp547 = new StringBuilder("TGetOperationStatusResp("); + if((Status != null)) + { + tmp547.Append(", Status: "); + Status.ToString(tmp547); + } + if(__isset.operationState) + { + tmp547.Append(", OperationState: "); + OperationState.ToString(tmp547); + } + if((SqlState != null) && __isset.sqlState) + { + tmp547.Append(", SqlState: "); + SqlState.ToString(tmp547); + } + if(__isset.errorCode) + { + tmp547.Append(", ErrorCode: "); + ErrorCode.ToString(tmp547); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp547.Append(", ErrorMessage: "); + ErrorMessage.ToString(tmp547); + } + if((TaskStatus != null) && __isset.taskStatus) + { + tmp547.Append(", TaskStatus: "); + TaskStatus.ToString(tmp547); + } + if(__isset.operationStarted) + { + tmp547.Append(", OperationStarted: "); + OperationStarted.ToString(tmp547); + } + if(__isset.operationCompleted) + { + tmp547.Append(", OperationCompleted: "); + OperationCompleted.ToString(tmp547); + } + if(__isset.hasResultSet) + { + tmp547.Append(", HasResultSet: "); + HasResultSet.ToString(tmp547); + } + if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + { + tmp547.Append(", ProgressUpdateResponse: "); + ProgressUpdateResponse.ToString(tmp547); + } + if(__isset.numModifiedRows) + { + tmp547.Append(", NumModifiedRows: "); + NumModifiedRows.ToString(tmp547); + } + if((DisplayMessage != null) && __isset.displayMessage) + { + tmp547.Append(", DisplayMessage: "); + DisplayMessage.ToString(tmp547); + } + if((DiagnosticInfo != null) && __isset.diagnosticInfo) + { + tmp547.Append(", DiagnosticInfo: "); + DiagnosticInfo.ToString(tmp547); + } + if((ResponseValidation != null) && __isset.responseValidation) + { + tmp547.Append(", ResponseValidation: "); + ResponseValidation.ToString(tmp547); + } + if(__isset.idempotencyType) + { + tmp547.Append(", IdempotencyType: "); + IdempotencyType.ToString(tmp547); + } + if(__isset.statementTimeout) + { + tmp547.Append(", StatementTimeout: "); + StatementTimeout.ToString(tmp547); + } + if(__isset.statementTimeoutLevel) + { + tmp547.Append(", StatementTimeoutLevel: "); + StatementTimeoutLevel.ToString(tmp547); + } + tmp547.Append(')'); + return tmp547.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs new file mode 100644 index 0000000000..fefa1fede2 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs @@ -0,0 +1,520 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetPrimaryKeysReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetPrimaryKeysReq() + { + } + + public TGetPrimaryKeysReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetPrimaryKeysReq DeepCopy() + { + var tmp519 = new TGetPrimaryKeysReq(); + if((SessionHandle != null)) + { + tmp519.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp519.CatalogName = this.CatalogName; + } + tmp519.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp519.SchemaName = this.SchemaName; + } + tmp519.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp519.TableName = this.TableName; + } + tmp519.__isset.tableName = this.__isset.tableName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp519.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp519.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp519.RunAsync = this.RunAsync; + } + tmp519.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp519.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp519.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp519.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp519.__isset.sessionConf = this.__isset.sessionConf; + return tmp519; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp520 = new TStruct("TGetPrimaryKeysReq"); + await oprot.WriteStructBeginAsync(tmp520, cancellationToken); + var tmp521 = new TField(); + if((SessionHandle != null)) + { + tmp521.Name = "sessionHandle"; + tmp521.Type = TType.Struct; + tmp521.ID = 1; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp521.Name = "catalogName"; + tmp521.Type = TType.String; + tmp521.ID = 2; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp521.Name = "schemaName"; + tmp521.Type = TType.String; + tmp521.ID = 3; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp521.Name = "tableName"; + tmp521.Type = TType.String; + tmp521.ID = 4; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp521.Name = "getDirectResults"; + tmp521.Type = TType.Struct; + tmp521.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp521.Name = "runAsync"; + tmp521.Type = TType.Bool; + tmp521.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp521.Name = "operationId"; + tmp521.Type = TType.Struct; + tmp521.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp521.Name = "sessionConf"; + tmp521.Type = TType.Struct; + tmp521.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp521, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetPrimaryKeysReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp522 = new StringBuilder("TGetPrimaryKeysReq("); + if((SessionHandle != null)) + { + tmp522.Append(", SessionHandle: "); + SessionHandle.ToString(tmp522); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp522.Append(", CatalogName: "); + CatalogName.ToString(tmp522); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp522.Append(", SchemaName: "); + SchemaName.ToString(tmp522); + } + if((TableName != null) && __isset.tableName) + { + tmp522.Append(", TableName: "); + TableName.ToString(tmp522); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp522.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp522); + } + if(__isset.runAsync) + { + tmp522.Append(", RunAsync: "); + RunAsync.ToString(tmp522); + } + if((OperationId != null) && __isset.operationId) + { + tmp522.Append(", OperationId: "); + OperationId.ToString(tmp522); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp522.Append(", SessionConf: "); + SessionConf.ToString(tmp522); + } + tmp522.Append(')'); + return tmp522.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs new file mode 100644 index 0000000000..7071e690e6 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetPrimaryKeysResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetPrimaryKeysResp() + { + } + + public TGetPrimaryKeysResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetPrimaryKeysResp DeepCopy() + { + var tmp524 = new TGetPrimaryKeysResp(); + if((Status != null)) + { + tmp524.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp524.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp524.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp524.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp524.__isset.directResults = this.__isset.directResults; + return tmp524; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp525 = new TStruct("TGetPrimaryKeysResp"); + await oprot.WriteStructBeginAsync(tmp525, cancellationToken); + var tmp526 = new TField(); + if((Status != null)) + { + tmp526.Name = "status"; + tmp526.Type = TType.Struct; + tmp526.ID = 1; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp526.Name = "operationHandle"; + tmp526.Type = TType.Struct; + tmp526.ID = 2; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp526.Name = "directResults"; + tmp526.Type = TType.Struct; + tmp526.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp526, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetPrimaryKeysResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp527 = new StringBuilder("TGetPrimaryKeysResp("); + if((Status != null)) + { + tmp527.Append(", Status: "); + Status.ToString(tmp527); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp527.Append(", OperationHandle: "); + OperationHandle.ToString(tmp527); + } + if((DirectResults != null) && __isset.directResults) + { + tmp527.Append(", DirectResults: "); + DirectResults.ToString(tmp527); + } + tmp527.Append(')'); + return tmp527.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs new file mode 100644 index 0000000000..c11d9b5b07 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetQueryIdReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TGetQueryIdReq() + { + } + + public TGetQueryIdReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetQueryIdReq DeepCopy() + { + var tmp645 = new TGetQueryIdReq(); + if((OperationHandle != null)) + { + tmp645.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp645; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp646 = new TStruct("TGetQueryIdReq"); + await oprot.WriteStructBeginAsync(tmp646, cancellationToken); + var tmp647 = new TField(); + if((OperationHandle != null)) + { + tmp647.Name = "operationHandle"; + tmp647.Type = TType.Struct; + tmp647.ID = 1; + await oprot.WriteFieldBeginAsync(tmp647, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetQueryIdReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp648 = new StringBuilder("TGetQueryIdReq("); + if((OperationHandle != null)) + { + tmp648.Append(", OperationHandle: "); + OperationHandle.ToString(tmp648); + } + tmp648.Append(')'); + return tmp648.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs new file mode 100644 index 0000000000..d0144f3418 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs @@ -0,0 +1,167 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetQueryIdResp : TBase + { + + public string QueryId { get; set; } + + public TGetQueryIdResp() + { + } + + public TGetQueryIdResp(string queryId) : this() + { + this.QueryId = queryId; + } + + public TGetQueryIdResp DeepCopy() + { + var tmp650 = new TGetQueryIdResp(); + if((QueryId != null)) + { + tmp650.QueryId = this.QueryId; + } + return tmp650; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_queryId = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + QueryId = await iprot.ReadStringAsync(cancellationToken); + isset_queryId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_queryId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp651 = new TStruct("TGetQueryIdResp"); + await oprot.WriteStructBeginAsync(tmp651, cancellationToken); + var tmp652 = new TField(); + if((QueryId != null)) + { + tmp652.Name = "queryId"; + tmp652.Type = TType.String; + tmp652.ID = 1; + await oprot.WriteFieldBeginAsync(tmp652, cancellationToken); + await oprot.WriteStringAsync(QueryId, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetQueryIdResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(QueryId, other.QueryId); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((QueryId != null)) + { + hashcode = (hashcode * 397) + QueryId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp653 = new StringBuilder("TGetQueryIdResp("); + if((QueryId != null)) + { + tmp653.Append(", QueryId: "); + QueryId.ToString(tmp653); + } + tmp653.Append(')'); + return tmp653.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs new file mode 100644 index 0000000000..375c3efb8a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs @@ -0,0 +1,223 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetResultSetMetadataReq : TBase + { + private bool _includeCloudResultFiles; + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public bool IncludeCloudResultFiles + { + get + { + return _includeCloudResultFiles; + } + set + { + __isset.includeCloudResultFiles = true; + this._includeCloudResultFiles = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool includeCloudResultFiles; + } + + public TGetResultSetMetadataReq() + { + } + + public TGetResultSetMetadataReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.OperationHandle = operationHandle; + } + + public TGetResultSetMetadataReq DeepCopy() + { + var tmp569 = new TGetResultSetMetadataReq(); + if((OperationHandle != null)) + { + tmp569.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + if(__isset.includeCloudResultFiles) + { + tmp569.IncludeCloudResultFiles = this.IncludeCloudResultFiles; + } + tmp569.__isset.includeCloudResultFiles = this.__isset.includeCloudResultFiles; + return tmp569; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Bool) + { + IncludeCloudResultFiles = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp570 = new TStruct("TGetResultSetMetadataReq"); + await oprot.WriteStructBeginAsync(tmp570, cancellationToken); + var tmp571 = new TField(); + if((OperationHandle != null)) + { + tmp571.Name = "operationHandle"; + tmp571.Type = TType.Struct; + tmp571.ID = 1; + await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.includeCloudResultFiles) + { + tmp571.Name = "includeCloudResultFiles"; + tmp571.Type = TType.Bool; + tmp571.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp571, cancellationToken); + await oprot.WriteBoolAsync(IncludeCloudResultFiles, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetResultSetMetadataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationHandle, other.OperationHandle) + && ((__isset.includeCloudResultFiles == other.__isset.includeCloudResultFiles) && ((!__isset.includeCloudResultFiles) || (global::System.Object.Equals(IncludeCloudResultFiles, other.IncludeCloudResultFiles)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if(__isset.includeCloudResultFiles) + { + hashcode = (hashcode * 397) + IncludeCloudResultFiles.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp572 = new StringBuilder("TGetResultSetMetadataReq("); + if((OperationHandle != null)) + { + tmp572.Append(", OperationHandle: "); + OperationHandle.ToString(tmp572); + } + if(__isset.includeCloudResultFiles) + { + tmp572.Append(", IncludeCloudResultFiles: "); + IncludeCloudResultFiles.ToString(tmp572); + } + tmp572.Append(')'); + return tmp572.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs new file mode 100644 index 0000000000..9833c26834 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs @@ -0,0 +1,779 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetResultSetMetadataResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TTableSchema _schema; + private int _resultFormat; + private bool _lz4Compressed; + private string _arrowSchema; + private int _cacheLookupResult; + private long _uncompressedBytes; + private long _compressedBytes; + private bool _isStagingOperation; + private int _reasonForNoCloudFetch; + private List _resultFiles; + private string _manifestFile; + private string _manifestFileFormat; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTableSchema Schema + { + get + { + return _schema; + } + set + { + __isset.schema = true; + this._schema = value; + } + } + + public int ResultFormat + { + get + { + return _resultFormat; + } + set + { + __isset.resultFormat = true; + this._resultFormat = value; + } + } + + public bool Lz4Compressed + { + get + { + return _lz4Compressed; + } + set + { + __isset.lz4Compressed = true; + this._lz4Compressed = value; + } + } + + public string ArrowSchema + { + get + { + return _arrowSchema; + } + set + { + __isset.arrowSchema = true; + this._arrowSchema = value; + } + } + + public int CacheLookupResult + { + get + { + return _cacheLookupResult; + } + set + { + __isset.cacheLookupResult = true; + this._cacheLookupResult = value; + } + } + + public long UncompressedBytes + { + get + { + return _uncompressedBytes; + } + set + { + __isset.uncompressedBytes = true; + this._uncompressedBytes = value; + } + } + + public long CompressedBytes + { + get + { + return _compressedBytes; + } + set + { + __isset.compressedBytes = true; + this._compressedBytes = value; + } + } + + public bool IsStagingOperation + { + get + { + return _isStagingOperation; + } + set + { + __isset.isStagingOperation = true; + this._isStagingOperation = value; + } + } + + public int ReasonForNoCloudFetch + { + get + { + return _reasonForNoCloudFetch; + } + set + { + __isset.reasonForNoCloudFetch = true; + this._reasonForNoCloudFetch = value; + } + } + + public List ResultFiles + { + get + { + return _resultFiles; + } + set + { + __isset.resultFiles = true; + this._resultFiles = value; + } + } + + public string ManifestFile + { + get + { + return _manifestFile; + } + set + { + __isset.manifestFile = true; + this._manifestFile = value; + } + } + + public string ManifestFileFormat + { + get + { + return _manifestFileFormat; + } + set + { + __isset.manifestFileFormat = true; + this._manifestFileFormat = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool schema; + public bool resultFormat; + public bool lz4Compressed; + public bool arrowSchema; + public bool cacheLookupResult; + public bool uncompressedBytes; + public bool compressedBytes; + public bool isStagingOperation; + public bool reasonForNoCloudFetch; + public bool resultFiles; + public bool manifestFile; + public bool manifestFileFormat; + } + + public TGetResultSetMetadataResp() + { + } + + public TGetResultSetMetadataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetResultSetMetadataResp DeepCopy() + { + var tmp574 = new TGetResultSetMetadataResp(); + if((Status != null)) + { + tmp574.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((Schema != null) && __isset.schema) + { + tmp574.Schema = (global::Apache.Hive.Service.Rpc.Thrift.TTableSchema)this.Schema.DeepCopy(); + } + tmp574.__isset.schema = this.__isset.schema; + if(__isset.resultFormat) + { + tmp574.ResultFormat = this.ResultFormat; + } + tmp574.__isset.resultFormat = this.__isset.resultFormat; + if(__isset.lz4Compressed) + { + tmp574.Lz4Compressed = this.Lz4Compressed; + } + tmp574.__isset.lz4Compressed = this.__isset.lz4Compressed; + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp574.ArrowSchema = this.ArrowSchema; + } + tmp574.__isset.arrowSchema = this.__isset.arrowSchema; + if(__isset.cacheLookupResult) + { + tmp574.CacheLookupResult = this.CacheLookupResult; + } + tmp574.__isset.cacheLookupResult = this.__isset.cacheLookupResult; + if(__isset.uncompressedBytes) + { + tmp574.UncompressedBytes = this.UncompressedBytes; + } + tmp574.__isset.uncompressedBytes = this.__isset.uncompressedBytes; + if(__isset.compressedBytes) + { + tmp574.CompressedBytes = this.CompressedBytes; + } + tmp574.__isset.compressedBytes = this.__isset.compressedBytes; + if(__isset.isStagingOperation) + { + tmp574.IsStagingOperation = this.IsStagingOperation; + } + tmp574.__isset.isStagingOperation = this.__isset.isStagingOperation; + if(__isset.reasonForNoCloudFetch) + { + tmp574.ReasonForNoCloudFetch = this.ReasonForNoCloudFetch; + } + tmp574.__isset.reasonForNoCloudFetch = this.__isset.reasonForNoCloudFetch; + if((ResultFiles != null) && __isset.resultFiles) + { + tmp574.ResultFiles = this.ResultFiles.DeepCopy(); + } + tmp574.__isset.resultFiles = this.__isset.resultFiles; + if((ManifestFile != null) && __isset.manifestFile) + { + tmp574.ManifestFile = this.ManifestFile; + } + tmp574.__isset.manifestFile = this.__isset.manifestFile; + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp574.ManifestFileFormat = this.ManifestFileFormat; + } + tmp574.__isset.manifestFileFormat = this.__isset.manifestFileFormat; + return tmp574; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + Schema = new global::Apache.Hive.Service.Rpc.Thrift.TTableSchema(); + await Schema.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.I32) + { + ResultFormat = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + Lz4Compressed = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.String) + { + ArrowSchema = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.I32) + { + CacheLookupResult = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.I64) + { + UncompressedBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1286: + if (field.Type == TType.I64) + { + CompressedBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1287: + if (field.Type == TType.Bool) + { + IsStagingOperation = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.I32) + { + ReasonForNoCloudFetch = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.List) + { + { + var _list575 = await iprot.ReadListBeginAsync(cancellationToken); + ResultFiles = new List(_list575.Count); + for(int _i576 = 0; _i576 < _list575.Count; ++_i576) + { + global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _elem577; + _elem577 = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile(); + await _elem577.ReadAsync(iprot, cancellationToken); + ResultFiles.Add(_elem577); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3331: + if (field.Type == TType.String) + { + ManifestFile = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3332: + if (field.Type == TType.String) + { + ManifestFileFormat = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp578 = new TStruct("TGetResultSetMetadataResp"); + await oprot.WriteStructBeginAsync(tmp578, cancellationToken); + var tmp579 = new TField(); + if((Status != null)) + { + tmp579.Name = "status"; + tmp579.Type = TType.Struct; + tmp579.ID = 1; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Schema != null) && __isset.schema) + { + tmp579.Name = "schema"; + tmp579.Type = TType.Struct; + tmp579.ID = 2; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await Schema.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.resultFormat) + { + tmp579.Name = "resultFormat"; + tmp579.Type = TType.I32; + tmp579.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(ResultFormat, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.lz4Compressed) + { + tmp579.Name = "lz4Compressed"; + tmp579.Type = TType.Bool; + tmp579.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteBoolAsync(Lz4Compressed, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp579.Name = "arrowSchema"; + tmp579.Type = TType.String; + tmp579.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ArrowSchema, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.cacheLookupResult) + { + tmp579.Name = "cacheLookupResult"; + tmp579.Type = TType.I32; + tmp579.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(CacheLookupResult, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.uncompressedBytes) + { + tmp579.Name = "uncompressedBytes"; + tmp579.Type = TType.I64; + tmp579.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI64Async(UncompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.compressedBytes) + { + tmp579.Name = "compressedBytes"; + tmp579.Type = TType.I64; + tmp579.ID = 1286; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI64Async(CompressedBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.isStagingOperation) + { + tmp579.Name = "isStagingOperation"; + tmp579.Type = TType.Bool; + tmp579.ID = 1287; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteBoolAsync(IsStagingOperation, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.reasonForNoCloudFetch) + { + tmp579.Name = "reasonForNoCloudFetch"; + tmp579.Type = TType.I32; + tmp579.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteI32Async(ReasonForNoCloudFetch, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultFiles != null) && __isset.resultFiles) + { + tmp579.Name = "resultFiles"; + tmp579.Type = TType.List; + tmp579.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultFiles.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlCloudResultFile _iter580 in ResultFiles) + { + await _iter580.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ManifestFile != null) && __isset.manifestFile) + { + tmp579.Name = "manifestFile"; + tmp579.Type = TType.String; + tmp579.ID = 3331; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ManifestFile, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp579.Name = "manifestFileFormat"; + tmp579.Type = TType.String; + tmp579.ID = 3332; + await oprot.WriteFieldBeginAsync(tmp579, cancellationToken); + await oprot.WriteStringAsync(ManifestFileFormat, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetResultSetMetadataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.schema == other.__isset.schema) && ((!__isset.schema) || (global::System.Object.Equals(Schema, other.Schema)))) + && ((__isset.resultFormat == other.__isset.resultFormat) && ((!__isset.resultFormat) || (global::System.Object.Equals(ResultFormat, other.ResultFormat)))) + && ((__isset.lz4Compressed == other.__isset.lz4Compressed) && ((!__isset.lz4Compressed) || (global::System.Object.Equals(Lz4Compressed, other.Lz4Compressed)))) + && ((__isset.arrowSchema == other.__isset.arrowSchema) && ((!__isset.arrowSchema) || (global::System.Object.Equals(ArrowSchema, other.ArrowSchema)))) + && ((__isset.cacheLookupResult == other.__isset.cacheLookupResult) && ((!__isset.cacheLookupResult) || (global::System.Object.Equals(CacheLookupResult, other.CacheLookupResult)))) + && ((__isset.uncompressedBytes == other.__isset.uncompressedBytes) && ((!__isset.uncompressedBytes) || (global::System.Object.Equals(UncompressedBytes, other.UncompressedBytes)))) + && ((__isset.compressedBytes == other.__isset.compressedBytes) && ((!__isset.compressedBytes) || (global::System.Object.Equals(CompressedBytes, other.CompressedBytes)))) + && ((__isset.isStagingOperation == other.__isset.isStagingOperation) && ((!__isset.isStagingOperation) || (global::System.Object.Equals(IsStagingOperation, other.IsStagingOperation)))) + && ((__isset.reasonForNoCloudFetch == other.__isset.reasonForNoCloudFetch) && ((!__isset.reasonForNoCloudFetch) || (global::System.Object.Equals(ReasonForNoCloudFetch, other.ReasonForNoCloudFetch)))) + && ((__isset.resultFiles == other.__isset.resultFiles) && ((!__isset.resultFiles) || (TCollections.Equals(ResultFiles, other.ResultFiles)))) + && ((__isset.manifestFile == other.__isset.manifestFile) && ((!__isset.manifestFile) || (global::System.Object.Equals(ManifestFile, other.ManifestFile)))) + && ((__isset.manifestFileFormat == other.__isset.manifestFileFormat) && ((!__isset.manifestFileFormat) || (global::System.Object.Equals(ManifestFileFormat, other.ManifestFileFormat)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((Schema != null) && __isset.schema) + { + hashcode = (hashcode * 397) + Schema.GetHashCode(); + } + if(__isset.resultFormat) + { + hashcode = (hashcode * 397) + ResultFormat.GetHashCode(); + } + if(__isset.lz4Compressed) + { + hashcode = (hashcode * 397) + Lz4Compressed.GetHashCode(); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + hashcode = (hashcode * 397) + ArrowSchema.GetHashCode(); + } + if(__isset.cacheLookupResult) + { + hashcode = (hashcode * 397) + CacheLookupResult.GetHashCode(); + } + if(__isset.uncompressedBytes) + { + hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); + } + if(__isset.compressedBytes) + { + hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); + } + if(__isset.isStagingOperation) + { + hashcode = (hashcode * 397) + IsStagingOperation.GetHashCode(); + } + if(__isset.reasonForNoCloudFetch) + { + hashcode = (hashcode * 397) + ReasonForNoCloudFetch.GetHashCode(); + } + if((ResultFiles != null) && __isset.resultFiles) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultFiles); + } + if((ManifestFile != null) && __isset.manifestFile) + { + hashcode = (hashcode * 397) + ManifestFile.GetHashCode(); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + hashcode = (hashcode * 397) + ManifestFileFormat.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp581 = new StringBuilder("TGetResultSetMetadataResp("); + if((Status != null)) + { + tmp581.Append(", Status: "); + Status.ToString(tmp581); + } + if((Schema != null) && __isset.schema) + { + tmp581.Append(", Schema: "); + Schema.ToString(tmp581); + } + if(__isset.resultFormat) + { + tmp581.Append(", ResultFormat: "); + ResultFormat.ToString(tmp581); + } + if(__isset.lz4Compressed) + { + tmp581.Append(", Lz4Compressed: "); + Lz4Compressed.ToString(tmp581); + } + if((ArrowSchema != null) && __isset.arrowSchema) + { + tmp581.Append(", ArrowSchema: "); + ArrowSchema.ToString(tmp581); + } + if(__isset.cacheLookupResult) + { + tmp581.Append(", CacheLookupResult: "); + CacheLookupResult.ToString(tmp581); + } + if(__isset.uncompressedBytes) + { + tmp581.Append(", UncompressedBytes: "); + UncompressedBytes.ToString(tmp581); + } + if(__isset.compressedBytes) + { + tmp581.Append(", CompressedBytes: "); + CompressedBytes.ToString(tmp581); + } + if(__isset.isStagingOperation) + { + tmp581.Append(", IsStagingOperation: "); + IsStagingOperation.ToString(tmp581); + } + if(__isset.reasonForNoCloudFetch) + { + tmp581.Append(", ReasonForNoCloudFetch: "); + ReasonForNoCloudFetch.ToString(tmp581); + } + if((ResultFiles != null) && __isset.resultFiles) + { + tmp581.Append(", ResultFiles: "); + ResultFiles.ToString(tmp581); + } + if((ManifestFile != null) && __isset.manifestFile) + { + tmp581.Append(", ManifestFile: "); + ManifestFile.ToString(tmp581); + } + if((ManifestFileFormat != null) && __isset.manifestFileFormat) + { + tmp581.Append(", ManifestFileFormat: "); + ManifestFileFormat.ToString(tmp581); + } + tmp581.Append(')'); + return tmp581.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs new file mode 100644 index 0000000000..742b50bca1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs @@ -0,0 +1,471 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetSchemasReq : TBase + { + private string _catalogName; + private string _schemaName; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetSchemasReq() + { + } + + public TGetSchemasReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetSchemasReq DeepCopy() + { + var tmp465 = new TGetSchemasReq(); + if((SessionHandle != null)) + { + tmp465.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp465.CatalogName = this.CatalogName; + } + tmp465.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp465.SchemaName = this.SchemaName; + } + tmp465.__isset.schemaName = this.__isset.schemaName; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp465.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp465.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp465.RunAsync = this.RunAsync; + } + tmp465.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp465.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp465.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp465.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp465.__isset.sessionConf = this.__isset.sessionConf; + return tmp465; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp466 = new TStruct("TGetSchemasReq"); + await oprot.WriteStructBeginAsync(tmp466, cancellationToken); + var tmp467 = new TField(); + if((SessionHandle != null)) + { + tmp467.Name = "sessionHandle"; + tmp467.Type = TType.Struct; + tmp467.ID = 1; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp467.Name = "catalogName"; + tmp467.Type = TType.String; + tmp467.ID = 2; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp467.Name = "schemaName"; + tmp467.Type = TType.String; + tmp467.ID = 3; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp467.Name = "getDirectResults"; + tmp467.Type = TType.Struct; + tmp467.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp467.Name = "runAsync"; + tmp467.Type = TType.Bool; + tmp467.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp467.Name = "operationId"; + tmp467.Type = TType.Struct; + tmp467.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp467.Name = "sessionConf"; + tmp467.Type = TType.Struct; + tmp467.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp467, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetSchemasReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp468 = new StringBuilder("TGetSchemasReq("); + if((SessionHandle != null)) + { + tmp468.Append(", SessionHandle: "); + SessionHandle.ToString(tmp468); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp468.Append(", CatalogName: "); + CatalogName.ToString(tmp468); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp468.Append(", SchemaName: "); + SchemaName.ToString(tmp468); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp468.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp468); + } + if(__isset.runAsync) + { + tmp468.Append(", RunAsync: "); + RunAsync.ToString(tmp468); + } + if((OperationId != null) && __isset.operationId) + { + tmp468.Append(", OperationId: "); + OperationId.ToString(tmp468); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp468.Append(", SessionConf: "); + SessionConf.ToString(tmp468); + } + tmp468.Append(')'); + return tmp468.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs new file mode 100644 index 0000000000..66e4a9d7ce --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetSchemasResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetSchemasResp() + { + } + + public TGetSchemasResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetSchemasResp DeepCopy() + { + var tmp470 = new TGetSchemasResp(); + if((Status != null)) + { + tmp470.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp470.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp470.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp470.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp470.__isset.directResults = this.__isset.directResults; + return tmp470; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp471 = new TStruct("TGetSchemasResp"); + await oprot.WriteStructBeginAsync(tmp471, cancellationToken); + var tmp472 = new TField(); + if((Status != null)) + { + tmp472.Name = "status"; + tmp472.Type = TType.Struct; + tmp472.ID = 1; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp472.Name = "operationHandle"; + tmp472.Type = TType.Struct; + tmp472.ID = 2; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp472.Name = "directResults"; + tmp472.Type = TType.Struct; + tmp472.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp472, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetSchemasResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp473 = new StringBuilder("TGetSchemasResp("); + if((Status != null)) + { + tmp473.Append(", Status: "); + Status.ToString(tmp473); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp473.Append(", OperationHandle: "); + OperationHandle.ToString(tmp473); + } + if((DirectResults != null) && __isset.directResults) + { + tmp473.Append(", DirectResults: "); + DirectResults.ToString(tmp473); + } + tmp473.Append(')'); + return tmp473.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs new file mode 100644 index 0000000000..3a72f4065f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTableTypesReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTableTypesReq() + { + } + + public TGetTableTypesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTableTypesReq DeepCopy() + { + var tmp489 = new TGetTableTypesReq(); + if((SessionHandle != null)) + { + tmp489.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp489.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp489.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp489.RunAsync = this.RunAsync; + } + tmp489.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp489.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp489.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp489.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp489.__isset.sessionConf = this.__isset.sessionConf; + return tmp489; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp490 = new TStruct("TGetTableTypesReq"); + await oprot.WriteStructBeginAsync(tmp490, cancellationToken); + var tmp491 = new TField(); + if((SessionHandle != null)) + { + tmp491.Name = "sessionHandle"; + tmp491.Type = TType.Struct; + tmp491.ID = 1; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp491.Name = "getDirectResults"; + tmp491.Type = TType.Struct; + tmp491.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp491.Name = "runAsync"; + tmp491.Type = TType.Bool; + tmp491.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp491.Name = "operationId"; + tmp491.Type = TType.Struct; + tmp491.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp491.Name = "sessionConf"; + tmp491.Type = TType.Struct; + tmp491.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp491, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTableTypesReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp492 = new StringBuilder("TGetTableTypesReq("); + if((SessionHandle != null)) + { + tmp492.Append(", SessionHandle: "); + SessionHandle.ToString(tmp492); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp492.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp492); + } + if(__isset.runAsync) + { + tmp492.Append(", RunAsync: "); + RunAsync.ToString(tmp492); + } + if((OperationId != null) && __isset.operationId) + { + tmp492.Append(", OperationId: "); + OperationId.ToString(tmp492); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp492.Append(", SessionConf: "); + SessionConf.ToString(tmp492); + } + tmp492.Append(')'); + return tmp492.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs new file mode 100644 index 0000000000..2dbd3ad16f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTableTypesResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTableTypesResp() + { + } + + public TGetTableTypesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTableTypesResp DeepCopy() + { + var tmp494 = new TGetTableTypesResp(); + if((Status != null)) + { + tmp494.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp494.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp494.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp494.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp494.__isset.directResults = this.__isset.directResults; + return tmp494; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp495 = new TStruct("TGetTableTypesResp"); + await oprot.WriteStructBeginAsync(tmp495, cancellationToken); + var tmp496 = new TField(); + if((Status != null)) + { + tmp496.Name = "status"; + tmp496.Type = TType.Struct; + tmp496.ID = 1; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp496.Name = "operationHandle"; + tmp496.Type = TType.Struct; + tmp496.ID = 2; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp496.Name = "directResults"; + tmp496.Type = TType.Struct; + tmp496.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp496, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTableTypesResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp497 = new StringBuilder("TGetTableTypesResp("); + if((Status != null)) + { + tmp497.Append(", Status: "); + Status.ToString(tmp497); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp497.Append(", OperationHandle: "); + OperationHandle.ToString(tmp497); + } + if((DirectResults != null) && __isset.directResults) + { + tmp497.Append(", DirectResults: "); + DirectResults.ToString(tmp497); + } + tmp497.Append(')'); + return tmp497.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs new file mode 100644 index 0000000000..4e60863e00 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs @@ -0,0 +1,584 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTablesReq : TBase + { + private string _catalogName; + private string _schemaName; + private string _tableName; + private List _tableTypes; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public List TableTypes + { + get + { + return _tableTypes; + } + set + { + __isset.tableTypes = true; + this._tableTypes = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + public bool tableName; + public bool tableTypes; + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTablesReq() + { + } + + public TGetTablesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTablesReq DeepCopy() + { + var tmp475 = new TGetTablesReq(); + if((SessionHandle != null)) + { + tmp475.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp475.CatalogName = this.CatalogName; + } + tmp475.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp475.SchemaName = this.SchemaName; + } + tmp475.__isset.schemaName = this.__isset.schemaName; + if((TableName != null) && __isset.tableName) + { + tmp475.TableName = this.TableName; + } + tmp475.__isset.tableName = this.__isset.tableName; + if((TableTypes != null) && __isset.tableTypes) + { + tmp475.TableTypes = this.TableTypes.DeepCopy(); + } + tmp475.__isset.tableTypes = this.__isset.tableTypes; + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp475.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp475.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp475.RunAsync = this.RunAsync; + } + tmp475.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp475.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp475.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp475.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp475.__isset.sessionConf = this.__isset.sessionConf; + return tmp475; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.List) + { + { + var _list476 = await iprot.ReadListBeginAsync(cancellationToken); + TableTypes = new List(_list476.Count); + for(int _i477 = 0; _i477 < _list476.Count; ++_i477) + { + string _elem478; + _elem478 = await iprot.ReadStringAsync(cancellationToken); + TableTypes.Add(_elem478); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp479 = new TStruct("TGetTablesReq"); + await oprot.WriteStructBeginAsync(tmp479, cancellationToken); + var tmp480 = new TField(); + if((SessionHandle != null)) + { + tmp480.Name = "sessionHandle"; + tmp480.Type = TType.Struct; + tmp480.ID = 1; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp480.Name = "catalogName"; + tmp480.Type = TType.String; + tmp480.ID = 2; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp480.Name = "schemaName"; + tmp480.Type = TType.String; + tmp480.ID = 3; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp480.Name = "tableName"; + tmp480.Type = TType.String; + tmp480.ID = 4; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableTypes != null) && __isset.tableTypes) + { + tmp480.Name = "tableTypes"; + tmp480.Type = TType.List; + tmp480.ID = 5; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, TableTypes.Count), cancellationToken); + foreach (string _iter481 in TableTypes) + { + await oprot.WriteStringAsync(_iter481, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp480.Name = "getDirectResults"; + tmp480.Type = TType.Struct; + tmp480.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp480.Name = "runAsync"; + tmp480.Type = TType.Bool; + tmp480.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp480.Name = "operationId"; + tmp480.Type = TType.Struct; + tmp480.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp480.Name = "sessionConf"; + tmp480.Type = TType.Struct; + tmp480.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp480, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTablesReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.tableTypes == other.__isset.tableTypes) && ((!__isset.tableTypes) || (TCollections.Equals(TableTypes, other.TableTypes)))) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((TableTypes != null) && __isset.tableTypes) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(TableTypes); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp482 = new StringBuilder("TGetTablesReq("); + if((SessionHandle != null)) + { + tmp482.Append(", SessionHandle: "); + SessionHandle.ToString(tmp482); + } + if((CatalogName != null) && __isset.catalogName) + { + tmp482.Append(", CatalogName: "); + CatalogName.ToString(tmp482); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp482.Append(", SchemaName: "); + SchemaName.ToString(tmp482); + } + if((TableName != null) && __isset.tableName) + { + tmp482.Append(", TableName: "); + TableName.ToString(tmp482); + } + if((TableTypes != null) && __isset.tableTypes) + { + tmp482.Append(", TableTypes: "); + TableTypes.ToString(tmp482); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp482.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp482); + } + if(__isset.runAsync) + { + tmp482.Append(", RunAsync: "); + RunAsync.ToString(tmp482); + } + if((OperationId != null) && __isset.operationId) + { + tmp482.Append(", OperationId: "); + OperationId.ToString(tmp482); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp482.Append(", SessionConf: "); + SessionConf.ToString(tmp482); + } + tmp482.Append(')'); + return tmp482.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs new file mode 100644 index 0000000000..628d3f5d42 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTablesResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTablesResp() + { + } + + public TGetTablesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTablesResp DeepCopy() + { + var tmp484 = new TGetTablesResp(); + if((Status != null)) + { + tmp484.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp484.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp484.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp484.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp484.__isset.directResults = this.__isset.directResults; + return tmp484; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp485 = new TStruct("TGetTablesResp"); + await oprot.WriteStructBeginAsync(tmp485, cancellationToken); + var tmp486 = new TField(); + if((Status != null)) + { + tmp486.Name = "status"; + tmp486.Type = TType.Struct; + tmp486.ID = 1; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp486.Name = "operationHandle"; + tmp486.Type = TType.Struct; + tmp486.ID = 2; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp486.Name = "directResults"; + tmp486.Type = TType.Struct; + tmp486.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp486, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTablesResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp487 = new StringBuilder("TGetTablesResp("); + if((Status != null)) + { + tmp487.Append(", Status: "); + Status.ToString(tmp487); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp487.Append(", OperationHandle: "); + OperationHandle.ToString(tmp487); + } + if((DirectResults != null) && __isset.directResults) + { + tmp487.Append(", DirectResults: "); + DirectResults.ToString(tmp487); + } + tmp487.Append(')'); + return tmp487.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs new file mode 100644 index 0000000000..75893e6468 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs @@ -0,0 +1,373 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTypeInfoReq : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults _getDirectResults; + private bool _runAsync; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _operationId; + private global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf _sessionConf; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults GetDirectResults + { + get + { + return _getDirectResults; + } + set + { + __isset.getDirectResults = true; + this._getDirectResults = value; + } + } + + public bool RunAsync + { + get + { + return _runAsync; + } + set + { + __isset.runAsync = true; + this._runAsync = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId + { + get + { + return _operationId; + } + set + { + __isset.operationId = true; + this._operationId = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf SessionConf + { + get + { + return _sessionConf; + } + set + { + __isset.sessionConf = true; + this._sessionConf = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool getDirectResults; + public bool runAsync; + public bool operationId; + public bool sessionConf; + } + + public TGetTypeInfoReq() + { + } + + public TGetTypeInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TGetTypeInfoReq DeepCopy() + { + var tmp420 = new TGetTypeInfoReq(); + if((SessionHandle != null)) + { + tmp420.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp420.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); + } + tmp420.__isset.getDirectResults = this.__isset.getDirectResults; + if(__isset.runAsync) + { + tmp420.RunAsync = this.RunAsync; + } + tmp420.__isset.runAsync = this.__isset.runAsync; + if((OperationId != null) && __isset.operationId) + { + tmp420.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp420.__isset.operationId = this.__isset.operationId; + if((SessionConf != null) && __isset.sessionConf) + { + tmp420.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); + } + tmp420.__isset.sessionConf = this.__isset.sessionConf; + return tmp420; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + GetDirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults(); + await GetDirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.Bool) + { + RunAsync = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3330: + if (field.Type == TType.Struct) + { + SessionConf = new global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf(); + await SessionConf.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp421 = new TStruct("TGetTypeInfoReq"); + await oprot.WriteStructBeginAsync(tmp421, cancellationToken); + var tmp422 = new TField(); + if((SessionHandle != null)) + { + tmp422.Name = "sessionHandle"; + tmp422.Type = TType.Struct; + tmp422.ID = 1; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp422.Name = "getDirectResults"; + tmp422.Type = TType.Struct; + tmp422.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await GetDirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.runAsync) + { + tmp422.Name = "runAsync"; + tmp422.Type = TType.Bool; + tmp422.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await oprot.WriteBoolAsync(RunAsync, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationId != null) && __isset.operationId) + { + tmp422.Name = "operationId"; + tmp422.Type = TType.Struct; + tmp422.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp422.Name = "sessionConf"; + tmp422.Type = TType.Struct; + tmp422.ID = 3330; + await oprot.WriteFieldBeginAsync(tmp422, cancellationToken); + await SessionConf.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTypeInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.getDirectResults == other.__isset.getDirectResults) && ((!__isset.getDirectResults) || (global::System.Object.Equals(GetDirectResults, other.GetDirectResults)))) + && ((__isset.runAsync == other.__isset.runAsync) && ((!__isset.runAsync) || (global::System.Object.Equals(RunAsync, other.RunAsync)))) + && ((__isset.operationId == other.__isset.operationId) && ((!__isset.operationId) || (global::System.Object.Equals(OperationId, other.OperationId)))) + && ((__isset.sessionConf == other.__isset.sessionConf) && ((!__isset.sessionConf) || (global::System.Object.Equals(SessionConf, other.SessionConf)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); + } + if(__isset.runAsync) + { + hashcode = (hashcode * 397) + RunAsync.GetHashCode(); + } + if((OperationId != null) && __isset.operationId) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + if((SessionConf != null) && __isset.sessionConf) + { + hashcode = (hashcode * 397) + SessionConf.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp423 = new StringBuilder("TGetTypeInfoReq("); + if((SessionHandle != null)) + { + tmp423.Append(", SessionHandle: "); + SessionHandle.ToString(tmp423); + } + if((GetDirectResults != null) && __isset.getDirectResults) + { + tmp423.Append(", GetDirectResults: "); + GetDirectResults.ToString(tmp423); + } + if(__isset.runAsync) + { + tmp423.Append(", RunAsync: "); + RunAsync.ToString(tmp423); + } + if((OperationId != null) && __isset.operationId) + { + tmp423.Append(", OperationId: "); + OperationId.ToString(tmp423); + } + if((SessionConf != null) && __isset.sessionConf) + { + tmp423.Append(", SessionConf: "); + SessionConf.ToString(tmp423); + } + tmp423.Append(')'); + return tmp423.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs new file mode 100644 index 0000000000..c5cbb2ad8c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs @@ -0,0 +1,274 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TGetTypeInfoResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle _operationHandle; + private global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults _directResults; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle + { + get + { + return _operationHandle; + } + set + { + __isset.operationHandle = true; + this._operationHandle = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults DirectResults + { + get + { + return _directResults; + } + set + { + __isset.directResults = true; + this._directResults = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationHandle; + public bool directResults; + } + + public TGetTypeInfoResp() + { + } + + public TGetTypeInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TGetTypeInfoResp DeepCopy() + { + var tmp425 = new TGetTypeInfoResp(); + if((Status != null)) + { + tmp425.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp425.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + tmp425.__isset.operationHandle = this.__isset.operationHandle; + if((DirectResults != null) && __isset.directResults) + { + tmp425.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); + } + tmp425.__isset.directResults = this.__isset.directResults; + return tmp425; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.Struct) + { + DirectResults = new global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults(); + await DirectResults.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp426 = new TStruct("TGetTypeInfoResp"); + await oprot.WriteStructBeginAsync(tmp426, cancellationToken); + var tmp427 = new TField(); + if((Status != null)) + { + tmp427.Name = "status"; + tmp427.Type = TType.Struct; + tmp427.ID = 1; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp427.Name = "operationHandle"; + tmp427.Type = TType.Struct; + tmp427.ID = 2; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DirectResults != null) && __isset.directResults) + { + tmp427.Name = "directResults"; + tmp427.Type = TType.Struct; + tmp427.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp427, cancellationToken); + await DirectResults.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TGetTypeInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && ((__isset.operationHandle == other.__isset.operationHandle) && ((!__isset.operationHandle) || (global::System.Object.Equals(OperationHandle, other.OperationHandle)))) + && ((__isset.directResults == other.__isset.directResults) && ((!__isset.directResults) || (global::System.Object.Equals(DirectResults, other.DirectResults)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null) && __isset.operationHandle) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + if((DirectResults != null) && __isset.directResults) + { + hashcode = (hashcode * 397) + DirectResults.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp428 = new StringBuilder("TGetTypeInfoResp("); + if((Status != null)) + { + tmp428.Append(", Status: "); + Status.ToString(tmp428); + } + if((OperationHandle != null) && __isset.operationHandle) + { + tmp428.Append(", OperationHandle: "); + OperationHandle.ToString(tmp428); + } + if((DirectResults != null) && __isset.directResults) + { + tmp428.Append(", DirectResults: "); + DirectResults.ToString(tmp428); + } + tmp428.Append(')'); + return tmp428.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs new file mode 100644 index 0000000000..e8167d0184 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs @@ -0,0 +1,209 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class THandleIdentifier : TBase + { + + public byte[] Guid { get; set; } + + public byte[] Secret { get; set; } + + public THandleIdentifier() + { + } + + public THandleIdentifier(byte[] guid, byte[] secret) : this() + { + this.Guid = guid; + this.Secret = secret; + } + + public THandleIdentifier DeepCopy() + { + var tmp264 = new THandleIdentifier(); + if((Guid != null)) + { + tmp264.Guid = this.Guid.ToArray(); + } + if((Secret != null)) + { + tmp264.Secret = this.Secret.ToArray(); + } + return tmp264; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_guid = false; + bool isset_secret = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Guid = await iprot.ReadBinaryAsync(cancellationToken); + isset_guid = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Secret = await iprot.ReadBinaryAsync(cancellationToken); + isset_secret = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_guid) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_secret) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp265 = new TStruct("THandleIdentifier"); + await oprot.WriteStructBeginAsync(tmp265, cancellationToken); + var tmp266 = new TField(); + if((Guid != null)) + { + tmp266.Name = "guid"; + tmp266.Type = TType.String; + tmp266.ID = 1; + await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); + await oprot.WriteBinaryAsync(Guid, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Secret != null)) + { + tmp266.Name = "secret"; + tmp266.Type = TType.String; + tmp266.ID = 2; + await oprot.WriteFieldBeginAsync(tmp266, cancellationToken); + await oprot.WriteBinaryAsync(Secret, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is THandleIdentifier other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Guid, other.Guid) + && TCollections.Equals(Secret, other.Secret); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Guid != null)) + { + hashcode = (hashcode * 397) + Guid.GetHashCode(); + } + if((Secret != null)) + { + hashcode = (hashcode * 397) + Secret.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp267 = new StringBuilder("THandleIdentifier("); + if((Guid != null)) + { + tmp267.Append(", Guid: "); + Guid.ToString(tmp267); + } + if((Secret != null)) + { + tmp267.Append(", Secret: "); + Secret.ToString(tmp267); + } + tmp267.Append(')'); + return tmp267.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs new file mode 100644 index 0000000000..9685a7f700 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs @@ -0,0 +1,200 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI16Column : TBase + { + + public Int16Array Values { get; set; } + + public TI16Column() + { + } + + public TI16Column(Int16Array values) : this() + { + this.Values = values; + } + + public TI16Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list151 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list151.Count; + + buffer = new byte[length * 2]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i152 = 0; _i152 < length; ++_i152) + { + typedMemory.Span[_i152] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i152]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int16Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp154 = new TStruct("TI16Column"); + await oprot.WriteStructBeginAsync(tmp154, cancellationToken); + var tmp155 = new TField(); + if((Values != null)) + { + tmp155.Name = "values"; + tmp155.Type = TType.List; + tmp155.ID = 1; + await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I16, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + short _iter156 = Values.GetValue(i) ?? (short)0; + await oprot.WriteI16Async(_iter156, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp155.Name = "nulls"; + tmp155.Type = TType.String; + tmp155.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp155, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI16Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp157 = new StringBuilder("TI16Column("); + if((Values != null)) + { + tmp157.Append(", Values: "); + Values.ToString(tmp157); + } + tmp157.Append(')'); + return tmp157.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs new file mode 100644 index 0000000000..9f31d83683 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI16Value : TBase + { + private short _value; + + public short Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI16Value() + { + } + + public TI16Value DeepCopy() + { + var tmp93 = new TI16Value(); + if(__isset.@value) + { + tmp93.Value = this.Value; + } + tmp93.__isset.@value = this.__isset.@value; + return tmp93; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I16) + { + Value = await iprot.ReadI16Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp94 = new TStruct("TI16Value"); + await oprot.WriteStructBeginAsync(tmp94, cancellationToken); + var tmp95 = new TField(); + if(__isset.@value) + { + tmp95.Name = "value"; + tmp95.Type = TType.I16; + tmp95.ID = 1; + await oprot.WriteFieldBeginAsync(tmp95, cancellationToken); + await oprot.WriteI16Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI16Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp96 = new StringBuilder("TI16Value("); + int tmp97 = 0; + if(__isset.@value) + { + if(0 < tmp97++) { tmp96.Append(", "); } + tmp96.Append("Value: "); + Value.ToString(tmp96); + } + tmp96.Append(')'); + return tmp96.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs new file mode 100644 index 0000000000..a5fe557bf7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -0,0 +1,199 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI32Column : TBase + { + + public Int32Array Values { get; set; } + + public TI32Column() + { + } + + public TI32Column(Int32Array values) : this() + { + this.Values = values; + } + + public TI32Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list160 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list160.Count; + buffer = new byte[length * 4]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i161 = 0; _i161 < length; ++_i161) + { + typedMemory.Span[_i161] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i161]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int32Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp163 = new TStruct("TI32Column"); + await oprot.WriteStructBeginAsync(tmp163, cancellationToken); + var tmp164 = new TField(); + if((Values != null)) + { + tmp164.Name = "values"; + tmp164.Type = TType.List; + tmp164.ID = 1; + await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + int _iter165 = Values.GetValue(i) ?? 0; + await oprot.WriteI32Async(_iter165, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp164.Name = "nulls"; + tmp164.Type = TType.String; + tmp164.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp164, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI32Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp166 = new StringBuilder("TI32Column("); + if((Values != null)) + { + tmp166.Append(", Values: "); + Values.ToString(tmp166); + } + tmp166.Append(')'); + return tmp166.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs new file mode 100644 index 0000000000..40bb1ac89d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI32Value : TBase + { + private int _value; + + public int Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI32Value() + { + } + + public TI32Value DeepCopy() + { + var tmp98 = new TI32Value(); + if(__isset.@value) + { + tmp98.Value = this.Value; + } + tmp98.__isset.@value = this.__isset.@value; + return tmp98; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Value = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp99 = new TStruct("TI32Value"); + await oprot.WriteStructBeginAsync(tmp99, cancellationToken); + var tmp100 = new TField(); + if(__isset.@value) + { + tmp100.Name = "value"; + tmp100.Type = TType.I32; + tmp100.ID = 1; + await oprot.WriteFieldBeginAsync(tmp100, cancellationToken); + await oprot.WriteI32Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI32Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp101 = new StringBuilder("TI32Value("); + int tmp102 = 0; + if(__isset.@value) + { + if(0 < tmp102++) { tmp101.Append(", "); } + tmp101.Append("Value: "); + Value.ToString(tmp101); + } + tmp101.Append(')'); + return tmp101.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs new file mode 100644 index 0000000000..9629336635 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs @@ -0,0 +1,200 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.Buffers.Binary; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI64Column : TBase + { + + public Int64Array Values { get; set; } + + public TI64Column() + { + } + + public TI64Column(Int64Array values) : this() + { + this.Values = values; + } + + public TI64Column DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + byte[] nulls = null; + byte[] buffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list169 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list169.Count; + + buffer = new byte[length * 8]; + var memory = buffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length); + iprot.Transport.CheckReadBytesAvailable(buffer.Length); + await transport.ReadExactlyAsync(memory, cancellationToken); + for (int _i170 = 0; _i170 < length; ++_i170) + { + typedMemory.Span[_i170] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i170]); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new Int64Array(new ArrowBuffer(buffer), new ArrowBuffer(nulls), length, BitUtility.CountBits(nulls), 0); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp172 = new TStruct("TI64Column"); + await oprot.WriteStructBeginAsync(tmp172, cancellationToken); + var tmp173 = new TField(); + if((Values != null)) + { + tmp173.Name = "values"; + tmp173.Type = TType.List; + tmp173.ID = 1; + await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I64, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + long _iter174 = Values.GetValue(i) ?? 0; + await oprot.WriteI64Async(_iter174, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp173.Name = "nulls"; + tmp173.Type = TType.String; + tmp173.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp173, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI64Column other)) return false; + if (ReferenceEquals(this, other)) return true; + throw new NotImplementedException(); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public override string ToString() + { + var tmp175 = new StringBuilder("TI64Column("); + if((Values != null)) + { + tmp175.Append(", Values: "); + Values.ToString(tmp175); + } + tmp175.Append(')'); + return tmp175.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs new file mode 100644 index 0000000000..c823fce883 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TI64Value : TBase + { + private long _value; + + public long Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TI64Value() + { + } + + public TI64Value DeepCopy() + { + var tmp103 = new TI64Value(); + if(__isset.@value) + { + tmp103.Value = this.Value; + } + tmp103.__isset.@value = this.__isset.@value; + return tmp103; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + Value = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp104 = new TStruct("TI64Value"); + await oprot.WriteStructBeginAsync(tmp104, cancellationToken); + var tmp105 = new TField(); + if(__isset.@value) + { + tmp105.Name = "value"; + tmp105.Type = TType.I64; + tmp105.ID = 1; + await oprot.WriteFieldBeginAsync(tmp105, cancellationToken); + await oprot.WriteI64Async(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TI64Value other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp106 = new StringBuilder("TI64Value("); + int tmp107 = 0; + if(__isset.@value) + { + if(0 < tmp107++) { tmp106.Append(", "); } + tmp106.Append("Value: "); + Value.ToString(tmp106); + } + tmp106.Append(')'); + return tmp106.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs new file mode 100644 index 0000000000..70bbb3be4b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TJobExecutionStatus.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TJobExecutionStatus + { + IN_PROGRESS = 0, + COMPLETE = 1, + NOT_AVAILABLE = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs new file mode 100644 index 0000000000..ae68167ad8 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TMapTypeEntry : TBase + { + + public int KeyTypePtr { get; set; } + + public int ValueTypePtr { get; set; } + + public TMapTypeEntry() + { + } + + public TMapTypeEntry(int keyTypePtr, int valueTypePtr) : this() + { + this.KeyTypePtr = keyTypePtr; + this.ValueTypePtr = valueTypePtr; + } + + public TMapTypeEntry DeepCopy() + { + var tmp25 = new TMapTypeEntry(); + tmp25.KeyTypePtr = this.KeyTypePtr; + tmp25.ValueTypePtr = this.ValueTypePtr; + return tmp25; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_keyTypePtr = false; + bool isset_valueTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + KeyTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_keyTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + ValueTypePtr = await iprot.ReadI32Async(cancellationToken); + isset_valueTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_keyTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_valueTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp26 = new TStruct("TMapTypeEntry"); + await oprot.WriteStructBeginAsync(tmp26, cancellationToken); + var tmp27 = new TField(); + tmp27.Name = "keyTypePtr"; + tmp27.Type = TType.I32; + tmp27.ID = 1; + await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); + await oprot.WriteI32Async(KeyTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp27.Name = "valueTypePtr"; + tmp27.Type = TType.I32; + tmp27.ID = 2; + await oprot.WriteFieldBeginAsync(tmp27, cancellationToken); + await oprot.WriteI32Async(ValueTypePtr, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TMapTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(KeyTypePtr, other.KeyTypePtr) + && global::System.Object.Equals(ValueTypePtr, other.ValueTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + KeyTypePtr.GetHashCode(); + hashcode = (hashcode * 397) + ValueTypePtr.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp28 = new StringBuilder("TMapTypeEntry("); + tmp28.Append(", KeyTypePtr: "); + KeyTypePtr.ToString(tmp28); + tmp28.Append(", ValueTypePtr: "); + ValueTypePtr.ToString(tmp28); + tmp28.Append(')'); + return tmp28.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs new file mode 100644 index 0000000000..2aeae8012d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs @@ -0,0 +1,228 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TNamespace : TBase + { + private string _catalogName; + private string _schemaName; + + public string CatalogName + { + get + { + return _catalogName; + } + set + { + __isset.catalogName = true; + this._catalogName = value; + } + } + + public string SchemaName + { + get + { + return _schemaName; + } + set + { + __isset.schemaName = true; + this._schemaName = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool catalogName; + public bool schemaName; + } + + public TNamespace() + { + } + + public TNamespace DeepCopy() + { + var tmp298 = new TNamespace(); + if((CatalogName != null) && __isset.catalogName) + { + tmp298.CatalogName = this.CatalogName; + } + tmp298.__isset.catalogName = this.__isset.catalogName; + if((SchemaName != null) && __isset.schemaName) + { + tmp298.SchemaName = this.SchemaName; + } + tmp298.__isset.schemaName = this.__isset.schemaName; + return tmp298; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + CatalogName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + SchemaName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp299 = new TStruct("TNamespace"); + await oprot.WriteStructBeginAsync(tmp299, cancellationToken); + var tmp300 = new TField(); + if((CatalogName != null) && __isset.catalogName) + { + tmp300.Name = "catalogName"; + tmp300.Type = TType.String; + tmp300.ID = 1; + await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); + await oprot.WriteStringAsync(CatalogName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SchemaName != null) && __isset.schemaName) + { + tmp300.Name = "schemaName"; + tmp300.Type = TType.String; + tmp300.ID = 2; + await oprot.WriteFieldBeginAsync(tmp300, cancellationToken); + await oprot.WriteStringAsync(SchemaName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TNamespace other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.catalogName == other.__isset.catalogName) && ((!__isset.catalogName) || (global::System.Object.Equals(CatalogName, other.CatalogName)))) + && ((__isset.schemaName == other.__isset.schemaName) && ((!__isset.schemaName) || (global::System.Object.Equals(SchemaName, other.SchemaName)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((CatalogName != null) && __isset.catalogName) + { + hashcode = (hashcode * 397) + CatalogName.GetHashCode(); + } + if((SchemaName != null) && __isset.schemaName) + { + hashcode = (hashcode * 397) + SchemaName.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp301 = new StringBuilder("TNamespace("); + int tmp302 = 0; + if((CatalogName != null) && __isset.catalogName) + { + if(0 < tmp302++) { tmp301.Append(", "); } + tmp301.Append("CatalogName: "); + CatalogName.ToString(tmp301); + } + if((SchemaName != null) && __isset.schemaName) + { + if(0 < tmp302++) { tmp301.Append(", "); } + tmp301.Append("SchemaName: "); + SchemaName.ToString(tmp301); + } + tmp301.Append(')'); + return tmp301.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs new file mode 100644 index 0000000000..4986a43910 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs @@ -0,0 +1,660 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOpenSessionReq : TBase + { + private string _username; + private string _password; + private Dictionary _configuration; + private List _getInfos; + private long _client_protocol_i64; + private Dictionary _connectionProperties; + private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; + private bool _canUseMultipleCatalogs; + private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _sessionId; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion Client_protocol { get; set; } + + public string Username + { + get + { + return _username; + } + set + { + __isset.username = true; + this._username = value; + } + } + + public string Password + { + get + { + return _password; + } + set + { + __isset.password = true; + this._password = value; + } + } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + public List GetInfos + { + get + { + return _getInfos; + } + set + { + __isset.getInfos = true; + this._getInfos = value; + } + } + + public long Client_protocol_i64 + { + get + { + return _client_protocol_i64; + } + set + { + __isset.client_protocol_i64 = true; + this._client_protocol_i64 = value; + } + } + + public Dictionary ConnectionProperties + { + get + { + return _connectionProperties; + } + set + { + __isset.connectionProperties = true; + this._connectionProperties = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace + { + get + { + return _initialNamespace; + } + set + { + __isset.initialNamespace = true; + this._initialNamespace = value; + } + } + + public bool CanUseMultipleCatalogs + { + get + { + return _canUseMultipleCatalogs; + } + set + { + __isset.canUseMultipleCatalogs = true; + this._canUseMultipleCatalogs = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId + { + get + { + return _sessionId; + } + set + { + __isset.sessionId = true; + this._sessionId = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool username; + public bool password; + public bool configuration; + public bool getInfos; + public bool client_protocol_i64; + public bool connectionProperties; + public bool initialNamespace; + public bool canUseMultipleCatalogs; + public bool sessionId; + } + + public TOpenSessionReq() + { + this.Client_protocol = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; + } + + public TOpenSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion client_protocol) : this() + { + this.Client_protocol = client_protocol; + } + + public TOpenSessionReq DeepCopy() + { + var tmp279 = new TOpenSessionReq(); + tmp279.Client_protocol = this.Client_protocol; + if((Username != null) && __isset.username) + { + tmp279.Username = this.Username; + } + tmp279.__isset.username = this.__isset.username; + if((Password != null) && __isset.password) + { + tmp279.Password = this.Password; + } + tmp279.__isset.password = this.__isset.password; + if((Configuration != null) && __isset.configuration) + { + tmp279.Configuration = this.Configuration.DeepCopy(); + } + tmp279.__isset.configuration = this.__isset.configuration; + if((GetInfos != null) && __isset.getInfos) + { + tmp279.GetInfos = this.GetInfos.DeepCopy(); + } + tmp279.__isset.getInfos = this.__isset.getInfos; + if(__isset.client_protocol_i64) + { + tmp279.Client_protocol_i64 = this.Client_protocol_i64; + } + tmp279.__isset.client_protocol_i64 = this.__isset.client_protocol_i64; + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp279.ConnectionProperties = this.ConnectionProperties.DeepCopy(); + } + tmp279.__isset.connectionProperties = this.__isset.connectionProperties; + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp279.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); + } + tmp279.__isset.initialNamespace = this.__isset.initialNamespace; + if(__isset.canUseMultipleCatalogs) + { + tmp279.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; + } + tmp279.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; + if((SessionId != null) && __isset.sessionId) + { + tmp279.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); + } + tmp279.__isset.sessionId = this.__isset.sessionId; + return tmp279; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_client_protocol = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Client_protocol = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); + isset_client_protocol = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + Username = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Password = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Map) + { + { + var _map280 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map280.Count); + for(int _i281 = 0; _i281 < _map280.Count; ++_i281) + { + string _key282; + string _val283; + _key282 = await iprot.ReadStringAsync(cancellationToken); + _val283 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key282] = _val283; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list284 = await iprot.ReadListBeginAsync(cancellationToken); + GetInfos = new List(_list284.Count); + for(int _i285 = 0; _i285 < _list284.Count; ++_i285) + { + int _elem286; + _elem286 = await iprot.ReadI32Async(cancellationToken); + GetInfos.Add(_elem286); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.I64) + { + Client_protocol_i64 = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1283: + if (field.Type == TType.Map) + { + { + var _map287 = await iprot.ReadMapBeginAsync(cancellationToken); + ConnectionProperties = new Dictionary(_map287.Count); + for(int _i288 = 0; _i288 < _map287.Count; ++_i288) + { + string _key289; + string _val290; + _key289 = await iprot.ReadStringAsync(cancellationToken); + _val290 = await iprot.ReadStringAsync(cancellationToken); + ConnectionProperties[_key289] = _val290; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Struct) + { + InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); + await InitialNamespace.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.Bool) + { + CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3329: + if (field.Type == TType.Struct) + { + SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await SessionId.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_client_protocol) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp291 = new TStruct("TOpenSessionReq"); + await oprot.WriteStructBeginAsync(tmp291, cancellationToken); + var tmp292 = new TField(); + tmp292.Name = "client_protocol"; + tmp292.Type = TType.I32; + tmp292.ID = 1; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteI32Async((int)Client_protocol, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Username != null) && __isset.username) + { + tmp292.Name = "username"; + tmp292.Type = TType.String; + tmp292.ID = 2; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteStringAsync(Username, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Password != null) && __isset.password) + { + tmp292.Name = "password"; + tmp292.Type = TType.String; + tmp292.ID = 3; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteStringAsync(Password, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp292.Name = "configuration"; + tmp292.Type = TType.Map; + tmp292.ID = 4; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter293 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter293, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter293], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp292.Name = "getInfos"; + tmp292.Type = TType.List; + tmp292.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); + foreach (int _iter294 in GetInfos) + { + await oprot.WriteI32Async(_iter294, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.client_protocol_i64) + { + tmp292.Name = "client_protocol_i64"; + tmp292.Type = TType.I64; + tmp292.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteI64Async(Client_protocol_i64, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp292.Name = "connectionProperties"; + tmp292.Type = TType.Map; + tmp292.ID = 1283; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, ConnectionProperties.Count), cancellationToken); + foreach (string _iter295 in ConnectionProperties.Keys) + { + await oprot.WriteStringAsync(_iter295, cancellationToken); + await oprot.WriteStringAsync(ConnectionProperties[_iter295], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp292.Name = "initialNamespace"; + tmp292.Type = TType.Struct; + tmp292.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await InitialNamespace.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canUseMultipleCatalogs) + { + tmp292.Name = "canUseMultipleCatalogs"; + tmp292.Type = TType.Bool; + tmp292.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SessionId != null) && __isset.sessionId) + { + tmp292.Name = "sessionId"; + tmp292.Type = TType.Struct; + tmp292.ID = 3329; + await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); + await SessionId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOpenSessionReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Client_protocol, other.Client_protocol) + && ((__isset.username == other.__isset.username) && ((!__isset.username) || (global::System.Object.Equals(Username, other.Username)))) + && ((__isset.password == other.__isset.password) && ((!__isset.password) || (global::System.Object.Equals(Password, other.Password)))) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) + && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))) + && ((__isset.client_protocol_i64 == other.__isset.client_protocol_i64) && ((!__isset.client_protocol_i64) || (global::System.Object.Equals(Client_protocol_i64, other.Client_protocol_i64)))) + && ((__isset.connectionProperties == other.__isset.connectionProperties) && ((!__isset.connectionProperties) || (TCollections.Equals(ConnectionProperties, other.ConnectionProperties)))) + && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) + && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) + && ((__isset.sessionId == other.__isset.sessionId) && ((!__isset.sessionId) || (global::System.Object.Equals(SessionId, other.SessionId)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + Client_protocol.GetHashCode(); + if((Username != null) && __isset.username) + { + hashcode = (hashcode * 397) + Username.GetHashCode(); + } + if((Password != null) && __isset.password) + { + hashcode = (hashcode * 397) + Password.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + if((GetInfos != null) && __isset.getInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); + } + if(__isset.client_protocol_i64) + { + hashcode = (hashcode * 397) + Client_protocol_i64.GetHashCode(); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ConnectionProperties); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); + } + if(__isset.canUseMultipleCatalogs) + { + hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); + } + if((SessionId != null) && __isset.sessionId) + { + hashcode = (hashcode * 397) + SessionId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp296 = new StringBuilder("TOpenSessionReq("); + tmp296.Append(", Client_protocol: "); + Client_protocol.ToString(tmp296); + if((Username != null) && __isset.username) + { + tmp296.Append(", Username: "); + Username.ToString(tmp296); + } + if((Password != null) && __isset.password) + { + tmp296.Append(", Password: "); + Password.ToString(tmp296); + } + if((Configuration != null) && __isset.configuration) + { + tmp296.Append(", Configuration: "); + Configuration.ToString(tmp296); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp296.Append(", GetInfos: "); + GetInfos.ToString(tmp296); + } + if(__isset.client_protocol_i64) + { + tmp296.Append(", Client_protocol_i64: "); + Client_protocol_i64.ToString(tmp296); + } + if((ConnectionProperties != null) && __isset.connectionProperties) + { + tmp296.Append(", ConnectionProperties: "); + ConnectionProperties.ToString(tmp296); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp296.Append(", InitialNamespace: "); + InitialNamespace.ToString(tmp296); + } + if(__isset.canUseMultipleCatalogs) + { + tmp296.Append(", CanUseMultipleCatalogs: "); + CanUseMultipleCatalogs.ToString(tmp296); + } + if((SessionId != null) && __isset.sessionId) + { + tmp296.Append(", SessionId: "); + SessionId.ToString(tmp296); + } + tmp296.Append(')'); + return tmp296.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs new file mode 100644 index 0000000000..1f87d016b8 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs @@ -0,0 +1,489 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOpenSessionResp : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle _sessionHandle; + private Dictionary _configuration; + private global::Apache.Hive.Service.Rpc.Thrift.TNamespace _initialNamespace; + private bool _canUseMultipleCatalogs; + private List _getInfos; + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion ServerProtocolVersion { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle + { + get + { + return _sessionHandle; + } + set + { + __isset.sessionHandle = true; + this._sessionHandle = value; + } + } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TNamespace InitialNamespace + { + get + { + return _initialNamespace; + } + set + { + __isset.initialNamespace = true; + this._initialNamespace = value; + } + } + + public bool CanUseMultipleCatalogs + { + get + { + return _canUseMultipleCatalogs; + } + set + { + __isset.canUseMultipleCatalogs = true; + this._canUseMultipleCatalogs = value; + } + } + + public List GetInfos + { + get + { + return _getInfos; + } + set + { + __isset.getInfos = true; + this._getInfos = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool sessionHandle; + public bool configuration; + public bool initialNamespace; + public bool canUseMultipleCatalogs; + public bool getInfos; + } + + public TOpenSessionResp() + { + this.ServerProtocolVersion = global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10; + } + + public TOpenSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion serverProtocolVersion) : this() + { + this.Status = status; + this.ServerProtocolVersion = serverProtocolVersion; + } + + public TOpenSessionResp DeepCopy() + { + var tmp303 = new TOpenSessionResp(); + if((Status != null)) + { + tmp303.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + tmp303.ServerProtocolVersion = this.ServerProtocolVersion; + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp303.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + tmp303.__isset.sessionHandle = this.__isset.sessionHandle; + if((Configuration != null) && __isset.configuration) + { + tmp303.Configuration = this.Configuration.DeepCopy(); + } + tmp303.__isset.configuration = this.__isset.configuration; + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp303.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); + } + tmp303.__isset.initialNamespace = this.__isset.initialNamespace; + if(__isset.canUseMultipleCatalogs) + { + tmp303.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; + } + tmp303.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; + if((GetInfos != null) && __isset.getInfos) + { + tmp303.GetInfos = this.GetInfos.DeepCopy(); + } + tmp303.__isset.getInfos = this.__isset.getInfos; + return tmp303; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_serverProtocolVersion = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + ServerProtocolVersion = (global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion)await iprot.ReadI32Async(cancellationToken); + isset_serverProtocolVersion = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Map) + { + { + var _map304 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map304.Count); + for(int _i305 = 0; _i305 < _map304.Count; ++_i305) + { + string _key306; + string _val307; + _key306 = await iprot.ReadStringAsync(cancellationToken); + _val307 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key306] = _val307; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1284: + if (field.Type == TType.Struct) + { + InitialNamespace = new global::Apache.Hive.Service.Rpc.Thrift.TNamespace(); + await InitialNamespace.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1285: + if (field.Type == TType.Bool) + { + CanUseMultipleCatalogs = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list308 = await iprot.ReadListBeginAsync(cancellationToken); + GetInfos = new List(_list308.Count); + for(int _i309 = 0; _i309 < _list308.Count; ++_i309) + { + int _elem310; + _elem310 = await iprot.ReadI32Async(cancellationToken); + GetInfos.Add(_elem310); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_serverProtocolVersion) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp311 = new TStruct("TOpenSessionResp"); + await oprot.WriteStructBeginAsync(tmp311, cancellationToken); + var tmp312 = new TField(); + if((Status != null)) + { + tmp312.Name = "status"; + tmp312.Type = TType.Struct; + tmp312.ID = 1; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp312.Name = "serverProtocolVersion"; + tmp312.Type = TType.I32; + tmp312.ID = 2; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteI32Async((int)ServerProtocolVersion, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp312.Name = "sessionHandle"; + tmp312.Type = TType.Struct; + tmp312.ID = 3; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp312.Name = "configuration"; + tmp312.Type = TType.Map; + tmp312.ID = 4; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter313 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter313, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter313], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp312.Name = "getInfos"; + tmp312.Type = TType.List; + tmp312.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.I32, GetInfos.Count), cancellationToken); + foreach (int _iter314 in GetInfos) + { + await oprot.WriteI32Async(_iter314, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp312.Name = "initialNamespace"; + tmp312.Type = TType.Struct; + tmp312.ID = 1284; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await InitialNamespace.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.canUseMultipleCatalogs) + { + tmp312.Name = "canUseMultipleCatalogs"; + tmp312.Type = TType.Bool; + tmp312.ID = 1285; + await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); + await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOpenSessionResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(ServerProtocolVersion, other.ServerProtocolVersion) + && ((__isset.sessionHandle == other.__isset.sessionHandle) && ((!__isset.sessionHandle) || (global::System.Object.Equals(SessionHandle, other.SessionHandle)))) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))) + && ((__isset.initialNamespace == other.__isset.initialNamespace) && ((!__isset.initialNamespace) || (global::System.Object.Equals(InitialNamespace, other.InitialNamespace)))) + && ((__isset.canUseMultipleCatalogs == other.__isset.canUseMultipleCatalogs) && ((!__isset.canUseMultipleCatalogs) || (global::System.Object.Equals(CanUseMultipleCatalogs, other.CanUseMultipleCatalogs)))) + && ((__isset.getInfos == other.__isset.getInfos) && ((!__isset.getInfos) || (TCollections.Equals(GetInfos, other.GetInfos)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + hashcode = (hashcode * 397) + ServerProtocolVersion.GetHashCode(); + if((SessionHandle != null) && __isset.sessionHandle) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); + } + if(__isset.canUseMultipleCatalogs) + { + hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); + } + if((GetInfos != null) && __isset.getInfos) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp315 = new StringBuilder("TOpenSessionResp("); + if((Status != null)) + { + tmp315.Append(", Status: "); + Status.ToString(tmp315); + } + tmp315.Append(", ServerProtocolVersion: "); + ServerProtocolVersion.ToString(tmp315); + if((SessionHandle != null) && __isset.sessionHandle) + { + tmp315.Append(", SessionHandle: "); + SessionHandle.ToString(tmp315); + } + if((Configuration != null) && __isset.configuration) + { + tmp315.Append(", Configuration: "); + Configuration.ToString(tmp315); + } + if((InitialNamespace != null) && __isset.initialNamespace) + { + tmp315.Append(", InitialNamespace: "); + InitialNamespace.ToString(tmp315); + } + if(__isset.canUseMultipleCatalogs) + { + tmp315.Append(", CanUseMultipleCatalogs: "); + CanUseMultipleCatalogs.ToString(tmp315); + } + if((GetInfos != null) && __isset.getInfos) + { + tmp315.Append(", GetInfos: "); + GetInfos.ToString(tmp315); + } + tmp315.Append(')'); + return tmp315.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs new file mode 100644 index 0000000000..f260602229 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TOperationHandle : TBase + { + private double _modifiedRowCount; + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TOperationType OperationType { get; set; } + + public bool HasResultSet { get; set; } + + public double ModifiedRowCount + { + get + { + return _modifiedRowCount; + } + set + { + __isset.modifiedRowCount = true; + this._modifiedRowCount = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool modifiedRowCount; + } + + public TOperationHandle() + { + } + + public TOperationHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier operationId, global::Apache.Hive.Service.Rpc.Thrift.TOperationType operationType, bool hasResultSet) : this() + { + this.OperationId = operationId; + this.OperationType = operationType; + this.HasResultSet = hasResultSet; + } + + public TOperationHandle DeepCopy() + { + var tmp274 = new TOperationHandle(); + if((OperationId != null)) + { + tmp274.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); + } + tmp274.OperationType = this.OperationType; + tmp274.HasResultSet = this.HasResultSet; + if(__isset.modifiedRowCount) + { + tmp274.ModifiedRowCount = this.ModifiedRowCount; + } + tmp274.__isset.modifiedRowCount = this.__isset.modifiedRowCount; + return tmp274; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_operationId = false; + bool isset_operationType = false; + bool isset_hasResultSet = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await OperationId.ReadAsync(iprot, cancellationToken); + isset_operationId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I32) + { + OperationType = (global::Apache.Hive.Service.Rpc.Thrift.TOperationType)await iprot.ReadI32Async(cancellationToken); + isset_operationType = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Bool) + { + HasResultSet = await iprot.ReadBoolAsync(cancellationToken); + isset_hasResultSet = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Double) + { + ModifiedRowCount = await iprot.ReadDoubleAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_operationId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationType) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_hasResultSet) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp275 = new TStruct("TOperationHandle"); + await oprot.WriteStructBeginAsync(tmp275, cancellationToken); + var tmp276 = new TField(); + if((OperationId != null)) + { + tmp276.Name = "operationId"; + tmp276.Type = TType.Struct; + tmp276.ID = 1; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await OperationId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp276.Name = "operationType"; + tmp276.Type = TType.I32; + tmp276.ID = 2; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteI32Async((int)OperationType, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp276.Name = "hasResultSet"; + tmp276.Type = TType.Bool; + tmp276.ID = 3; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteBoolAsync(HasResultSet, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.modifiedRowCount) + { + tmp276.Name = "modifiedRowCount"; + tmp276.Type = TType.Double; + tmp276.ID = 4; + await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); + await oprot.WriteDoubleAsync(ModifiedRowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TOperationHandle other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(OperationId, other.OperationId) + && global::System.Object.Equals(OperationType, other.OperationType) + && global::System.Object.Equals(HasResultSet, other.HasResultSet) + && ((__isset.modifiedRowCount == other.__isset.modifiedRowCount) && ((!__isset.modifiedRowCount) || (global::System.Object.Equals(ModifiedRowCount, other.ModifiedRowCount)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationId != null)) + { + hashcode = (hashcode * 397) + OperationId.GetHashCode(); + } + hashcode = (hashcode * 397) + OperationType.GetHashCode(); + hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); + if(__isset.modifiedRowCount) + { + hashcode = (hashcode * 397) + ModifiedRowCount.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp277 = new StringBuilder("TOperationHandle("); + if((OperationId != null)) + { + tmp277.Append(", OperationId: "); + OperationId.ToString(tmp277); + } + tmp277.Append(", OperationType: "); + OperationType.ToString(tmp277); + tmp277.Append(", HasResultSet: "); + HasResultSet.ToString(tmp277); + if(__isset.modifiedRowCount) + { + tmp277.Append(", ModifiedRowCount: "); + ModifiedRowCount.ToString(tmp277); + } + tmp277.Append(')'); + return tmp277.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs new file mode 100644 index 0000000000..8050cd527b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationIdempotencyType.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationIdempotencyType + { + UNKNOWN = 0, + NON_IDEMPOTENT = 1, + IDEMPOTENT = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs new file mode 100644 index 0000000000..2969546b3b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationState.cs @@ -0,0 +1,29 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationState + { + INITIALIZED_STATE = 0, + RUNNING_STATE = 1, + FINISHED_STATE = 2, + CANCELED_STATE = 3, + CLOSED_STATE = 4, + ERROR_STATE = 5, + UKNOWN_STATE = 6, + PENDING_STATE = 7, + TIMEDOUT_STATE = 8, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs new file mode 100644 index 0000000000..71d69f8e11 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationTimeoutLevel.cs @@ -0,0 +1,22 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationTimeoutLevel + { + CLUSTER = 0, + SESSION = 1, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs new file mode 100644 index 0000000000..35110c8306 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationType.cs @@ -0,0 +1,30 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TOperationType + { + EXECUTE_STATEMENT = 0, + GET_TYPE_INFO = 1, + GET_CATALOGS = 2, + GET_SCHEMAS = 3, + GET_TABLES = 4, + GET_TABLE_TYPES = 5, + GET_COLUMNS = 6, + GET_FUNCTIONS = 7, + UNKNOWN = 8, + PROCEDURAL_SQL = 9, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs new file mode 100644 index 0000000000..375fbf951e --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs @@ -0,0 +1,215 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TPrimitiveTypeEntry : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers _typeQualifiers; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TTypeId Type { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers TypeQualifiers + { + get + { + return _typeQualifiers; + } + set + { + __isset.typeQualifiers = true; + this._typeQualifiers = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool typeQualifiers; + } + + public TPrimitiveTypeEntry() + { + } + + public TPrimitiveTypeEntry(global::Apache.Hive.Service.Rpc.Thrift.TTypeId type) : this() + { + this.Type = type; + } + + public TPrimitiveTypeEntry DeepCopy() + { + var tmp15 = new TPrimitiveTypeEntry(); + tmp15.Type = this.Type; + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp15.TypeQualifiers = (global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers)this.TypeQualifiers.DeepCopy(); + } + tmp15.__isset.typeQualifiers = this.__isset.typeQualifiers; + return tmp15; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_type = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + Type = (global::Apache.Hive.Service.Rpc.Thrift.TTypeId)await iprot.ReadI32Async(cancellationToken); + isset_type = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + TypeQualifiers = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers(); + await TypeQualifiers.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_type) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp16 = new TStruct("TPrimitiveTypeEntry"); + await oprot.WriteStructBeginAsync(tmp16, cancellationToken); + var tmp17 = new TField(); + tmp17.Name = "type"; + tmp17.Type = TType.I32; + tmp17.ID = 1; + await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); + await oprot.WriteI32Async((int)Type, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp17.Name = "typeQualifiers"; + tmp17.Type = TType.Struct; + tmp17.ID = 2; + await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); + await TypeQualifiers.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TPrimitiveTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Type, other.Type) + && ((__isset.typeQualifiers == other.__isset.typeQualifiers) && ((!__isset.typeQualifiers) || (global::System.Object.Equals(TypeQualifiers, other.TypeQualifiers)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + Type.GetHashCode(); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + hashcode = (hashcode * 397) + TypeQualifiers.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp18 = new StringBuilder("TPrimitiveTypeEntry("); + tmp18.Append(", Type: "); + Type.ToString(tmp18); + if((TypeQualifiers != null) && __isset.typeQualifiers) + { + tmp18.Append(", TypeQualifiers: "); + TypeQualifiers.ToString(tmp18); + } + tmp18.Append(')'); + return tmp18.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs new file mode 100644 index 0000000000..249134504b --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs @@ -0,0 +1,390 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TProgressUpdateResp : TBase + { + + public List HeaderNames { get; set; } + + public List> Rows { get; set; } + + public double ProgressedPercentage { get; set; } + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus Status { get; set; } + + public string FooterSummary { get; set; } + + public long StartTime { get; set; } + + public TProgressUpdateResp() + { + } + + public TProgressUpdateResp(List headerNames, List> rows, double progressedPercentage, global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus status, string footerSummary, long startTime) : this() + { + this.HeaderNames = headerNames; + this.Rows = rows; + this.ProgressedPercentage = progressedPercentage; + this.Status = status; + this.FooterSummary = footerSummary; + this.StartTime = startTime; + } + + public TProgressUpdateResp DeepCopy() + { + var tmp628 = new TProgressUpdateResp(); + if((HeaderNames != null)) + { + tmp628.HeaderNames = this.HeaderNames.DeepCopy(); + } + if((Rows != null)) + { + tmp628.Rows = this.Rows.DeepCopy(); + } + tmp628.ProgressedPercentage = this.ProgressedPercentage; + tmp628.Status = this.Status; + if((FooterSummary != null)) + { + tmp628.FooterSummary = this.FooterSummary; + } + tmp628.StartTime = this.StartTime; + return tmp628; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_headerNames = false; + bool isset_rows = false; + bool isset_progressedPercentage = false; + bool isset_status = false; + bool isset_footerSummary = false; + bool isset_startTime = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list629 = await iprot.ReadListBeginAsync(cancellationToken); + HeaderNames = new List(_list629.Count); + for(int _i630 = 0; _i630 < _list629.Count; ++_i630) + { + string _elem631; + _elem631 = await iprot.ReadStringAsync(cancellationToken); + HeaderNames.Add(_elem631); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_headerNames = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list632 = await iprot.ReadListBeginAsync(cancellationToken); + Rows = new List>(_list632.Count); + for(int _i633 = 0; _i633 < _list632.Count; ++_i633) + { + List _elem634; + { + var _list635 = await iprot.ReadListBeginAsync(cancellationToken); + _elem634 = new List(_list635.Count); + for(int _i636 = 0; _i636 < _list635.Count; ++_i636) + { + string _elem637; + _elem637 = await iprot.ReadStringAsync(cancellationToken); + _elem634.Add(_elem637); + } + await iprot.ReadListEndAsync(cancellationToken); + } + Rows.Add(_elem634); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_rows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Double) + { + ProgressedPercentage = await iprot.ReadDoubleAsync(cancellationToken); + isset_progressedPercentage = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + Status = (global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus)await iprot.ReadI32Async(cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + FooterSummary = await iprot.ReadStringAsync(cancellationToken); + isset_footerSummary = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.I64) + { + StartTime = await iprot.ReadI64Async(cancellationToken); + isset_startTime = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_headerNames) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_progressedPercentage) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_footerSummary) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startTime) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp638 = new TStruct("TProgressUpdateResp"); + await oprot.WriteStructBeginAsync(tmp638, cancellationToken); + var tmp639 = new TField(); + if((HeaderNames != null)) + { + tmp639.Name = "headerNames"; + tmp639.Type = TType.List; + tmp639.ID = 1; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, HeaderNames.Count), cancellationToken); + foreach (string _iter640 in HeaderNames) + { + await oprot.WriteStringAsync(_iter640, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Rows != null)) + { + tmp639.Name = "rows"; + tmp639.Type = TType.List; + tmp639.ID = 2; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.List, Rows.Count), cancellationToken); + foreach (List _iter641 in Rows) + { + await oprot.WriteListBeginAsync(new TList(TType.String, _iter641.Count), cancellationToken); + foreach (string _iter642 in _iter641) + { + await oprot.WriteStringAsync(_iter642, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp639.Name = "progressedPercentage"; + tmp639.Type = TType.Double; + tmp639.ID = 3; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteDoubleAsync(ProgressedPercentage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp639.Name = "status"; + tmp639.Type = TType.I32; + tmp639.ID = 4; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteI32Async((int)Status, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((FooterSummary != null)) + { + tmp639.Name = "footerSummary"; + tmp639.Type = TType.String; + tmp639.ID = 5; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteStringAsync(FooterSummary, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp639.Name = "startTime"; + tmp639.Type = TType.I64; + tmp639.ID = 6; + await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); + await oprot.WriteI64Async(StartTime, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TProgressUpdateResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(HeaderNames, other.HeaderNames) + && TCollections.Equals(Rows, other.Rows) + && global::System.Object.Equals(ProgressedPercentage, other.ProgressedPercentage) + && global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(FooterSummary, other.FooterSummary) + && global::System.Object.Equals(StartTime, other.StartTime); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((HeaderNames != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(HeaderNames); + } + if((Rows != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); + } + hashcode = (hashcode * 397) + ProgressedPercentage.GetHashCode(); + hashcode = (hashcode * 397) + Status.GetHashCode(); + if((FooterSummary != null)) + { + hashcode = (hashcode * 397) + FooterSummary.GetHashCode(); + } + hashcode = (hashcode * 397) + StartTime.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp643 = new StringBuilder("TProgressUpdateResp("); + if((HeaderNames != null)) + { + tmp643.Append(", HeaderNames: "); + HeaderNames.ToString(tmp643); + } + if((Rows != null)) + { + tmp643.Append(", Rows: "); + Rows.ToString(tmp643); + } + tmp643.Append(", ProgressedPercentage: "); + ProgressedPercentage.ToString(tmp643); + tmp643.Append(", Status: "); + Status.ToString(tmp643); + if((FooterSummary != null)) + { + tmp643.Append(", FooterSummary: "); + FooterSummary.ToString(tmp643); + } + tmp643.Append(", StartTime: "); + StartTime.ToString(tmp643); + tmp643.Append(')'); + return tmp643.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs new file mode 100644 index 0000000000..02a5f4db11 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProtocolVersion.cs @@ -0,0 +1,38 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TProtocolVersion + { + HIVE_CLI_SERVICE_PROTOCOL_V1 = 0, + HIVE_CLI_SERVICE_PROTOCOL_V2 = 1, + HIVE_CLI_SERVICE_PROTOCOL_V3 = 2, + HIVE_CLI_SERVICE_PROTOCOL_V4 = 3, + HIVE_CLI_SERVICE_PROTOCOL_V5 = 4, + HIVE_CLI_SERVICE_PROTOCOL_V6 = 5, + HIVE_CLI_SERVICE_PROTOCOL_V7 = 6, + HIVE_CLI_SERVICE_PROTOCOL_V8 = 7, + HIVE_CLI_SERVICE_PROTOCOL_V9 = 8, + HIVE_CLI_SERVICE_PROTOCOL_V10 = 9, + HIVE_CLI_SERVICE_PROTOCOL_V11 = 10, + SPARK_CLI_SERVICE_PROTOCOL_V1 = 42241, + SPARK_CLI_SERVICE_PROTOCOL_V2 = 42242, + SPARK_CLI_SERVICE_PROTOCOL_V3 = 42243, + SPARK_CLI_SERVICE_PROTOCOL_V4 = 42244, + SPARK_CLI_SERVICE_PROTOCOL_V5 = 42245, + SPARK_CLI_SERVICE_PROTOCOL_V6 = 42246, + SPARK_CLI_SERVICE_PROTOCOL_V7 = 42247, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs new file mode 100644 index 0000000000..0888c6c91f --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRenewDelegationTokenReq : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string DelegationToken { get; set; } + + public TRenewDelegationTokenReq() + { + } + + public TRenewDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, string delegationToken) : this() + { + this.SessionHandle = sessionHandle; + this.DelegationToken = delegationToken; + } + + public TRenewDelegationTokenReq DeepCopy() + { + var tmp618 = new TRenewDelegationTokenReq(); + if((SessionHandle != null)) + { + tmp618.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((DelegationToken != null)) + { + tmp618.DelegationToken = this.DelegationToken; + } + return tmp618; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_delegationToken = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + DelegationToken = await iprot.ReadStringAsync(cancellationToken); + isset_delegationToken = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_delegationToken) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp619 = new TStruct("TRenewDelegationTokenReq"); + await oprot.WriteStructBeginAsync(tmp619, cancellationToken); + var tmp620 = new TField(); + if((SessionHandle != null)) + { + tmp620.Name = "sessionHandle"; + tmp620.Type = TType.Struct; + tmp620.ID = 1; + await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((DelegationToken != null)) + { + tmp620.Name = "delegationToken"; + tmp620.Type = TType.String; + tmp620.ID = 2; + await oprot.WriteFieldBeginAsync(tmp620, cancellationToken); + await oprot.WriteStringAsync(DelegationToken, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRenewDelegationTokenReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && global::System.Object.Equals(DelegationToken, other.DelegationToken); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((DelegationToken != null)) + { + hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp621 = new StringBuilder("TRenewDelegationTokenReq("); + if((SessionHandle != null)) + { + tmp621.Append(", SessionHandle: "); + SessionHandle.ToString(tmp621); + } + if((DelegationToken != null)) + { + tmp621.Append(", DelegationToken: "); + DelegationToken.ToString(tmp621); + } + tmp621.Append(')'); + return tmp621.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs new file mode 100644 index 0000000000..f62b657ea4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRenewDelegationTokenResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TRenewDelegationTokenResp() + { + } + + public TRenewDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TRenewDelegationTokenResp DeepCopy() + { + var tmp623 = new TRenewDelegationTokenResp(); + if((Status != null)) + { + tmp623.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp623; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp624 = new TStruct("TRenewDelegationTokenResp"); + await oprot.WriteStructBeginAsync(tmp624, cancellationToken); + var tmp625 = new TField(); + if((Status != null)) + { + tmp625.Name = "status"; + tmp625.Type = TType.Struct; + tmp625.ID = 1; + await oprot.WriteFieldBeginAsync(tmp625, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRenewDelegationTokenResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp626 = new StringBuilder("TRenewDelegationTokenResp("); + if((Status != null)) + { + tmp626.Append(", Status: "); + Status.ToString(tmp626); + } + tmp626.Append(')'); + return tmp626.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs new file mode 100644 index 0000000000..728620e02a --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TResultPersistenceMode.cs @@ -0,0 +1,23 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TResultPersistenceMode + { + ONLY_LARGE_RESULTS = 0, + ALL_QUERY_RESULTS = 1, + ALL_RESULTS = 2, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs new file mode 100644 index 0000000000..f04da578d7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRow : TBase + { + + public List ColVals { get; set; } + + public TRow() + { + } + + public TRow(List colVals) : this() + { + this.ColVals = colVals; + } + + public TRow DeepCopy() + { + var tmp123 = new TRow(); + if((ColVals != null)) + { + tmp123.ColVals = this.ColVals.DeepCopy(); + } + return tmp123; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_colVals = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list124 = await iprot.ReadListBeginAsync(cancellationToken); + ColVals = new List(_list124.Count); + for(int _i125 = 0; _i125 < _list124.Count; ++_i125) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _elem126; + _elem126 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnValue(); + await _elem126.ReadAsync(iprot, cancellationToken); + ColVals.Add(_elem126); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_colVals = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_colVals) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp127 = new TStruct("TRow"); + await oprot.WriteStructBeginAsync(tmp127, cancellationToken); + var tmp128 = new TField(); + if((ColVals != null)) + { + tmp128.Name = "colVals"; + tmp128.Type = TType.List; + tmp128.ID = 1; + await oprot.WriteFieldBeginAsync(tmp128, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ColVals.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnValue _iter129 in ColVals) + { + await _iter129.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRow other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(ColVals, other.ColVals); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((ColVals != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ColVals); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp130 = new StringBuilder("TRow("); + if((ColVals != null)) + { + tmp130.Append(", ColVals: "); + ColVals.ToString(tmp130); + } + tmp130.Append(')'); + return tmp130.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs new file mode 100644 index 0000000000..9b5aed6a36 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs @@ -0,0 +1,512 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TRowSet : TBase + { + private List _columns; + private byte[] _binaryColumns; + private int _columnCount; + private List _arrowBatches; + private List _resultLinks; + + public long StartRowOffset { get; set; } + + public List Rows { get; set; } + + public List Columns + { + get + { + return _columns; + } + set + { + __isset.columns = true; + this._columns = value; + } + } + + public byte[] BinaryColumns + { + get + { + return _binaryColumns; + } + set + { + __isset.binaryColumns = true; + this._binaryColumns = value; + } + } + + public int ColumnCount + { + get + { + return _columnCount; + } + set + { + __isset.columnCount = true; + this._columnCount = value; + } + } + + public List ArrowBatches + { + get + { + return _arrowBatches; + } + set + { + __isset.arrowBatches = true; + this._arrowBatches = value; + } + } + + public List ResultLinks + { + get + { + return _resultLinks; + } + set + { + __isset.resultLinks = true; + this._resultLinks = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool columns; + public bool binaryColumns; + public bool columnCount; + public bool arrowBatches; + public bool resultLinks; + } + + public TRowSet() + { + } + + public TRowSet(long startRowOffset, List rows) : this() + { + this.StartRowOffset = startRowOffset; + this.Rows = rows; + } + + public TRowSet DeepCopy() + { + var tmp209 = new TRowSet(); + tmp209.StartRowOffset = this.StartRowOffset; + if((Rows != null)) + { + tmp209.Rows = this.Rows.DeepCopy(); + } + if((Columns != null) && __isset.columns) + { + tmp209.Columns = this.Columns.DeepCopy(); + } + tmp209.__isset.columns = this.__isset.columns; + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp209.BinaryColumns = this.BinaryColumns.ToArray(); + } + tmp209.__isset.binaryColumns = this.__isset.binaryColumns; + if(__isset.columnCount) + { + tmp209.ColumnCount = this.ColumnCount; + } + tmp209.__isset.columnCount = this.__isset.columnCount; + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp209.ArrowBatches = this.ArrowBatches.DeepCopy(); + } + tmp209.__isset.arrowBatches = this.__isset.arrowBatches; + if((ResultLinks != null) && __isset.resultLinks) + { + tmp209.ResultLinks = this.ResultLinks.DeepCopy(); + } + tmp209.__isset.resultLinks = this.__isset.resultLinks; + return tmp209; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_startRowOffset = false; + bool isset_rows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list210 = await iprot.ReadListBeginAsync(cancellationToken); + Rows = new List(_list210.Count); + for(int _i211 = 0; _i211 < _list210.Count; ++_i211) + { + global::Apache.Hive.Service.Rpc.Thrift.TRow _elem212; + _elem212 = new global::Apache.Hive.Service.Rpc.Thrift.TRow(); + await _elem212.ReadAsync(iprot, cancellationToken); + Rows.Add(_elem212); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_rows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.List) + { + { + var _list213 = await iprot.ReadListBeginAsync(cancellationToken); + Columns = new List(_list213.Count); + for(int _i214 = 0; _i214 < _list213.Count; ++_i214) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumn _elem215; + _elem215 = new global::Apache.Hive.Service.Rpc.Thrift.TColumn(); + await _elem215.ReadAsync(iprot, cancellationToken); + Columns.Add(_elem215); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + BinaryColumns = await iprot.ReadBinaryAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I32) + { + ColumnCount = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1281: + if (field.Type == TType.List) + { + { + var _list216 = await iprot.ReadListBeginAsync(cancellationToken); + ArrowBatches = new List(_list216.Count); + for(int _i217 = 0; _i217 < _list216.Count; ++_i217) + { + global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _elem218; + _elem218 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch(); + await _elem218.ReadAsync(iprot, cancellationToken); + ArrowBatches.Add(_elem218); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 1282: + if (field.Type == TType.List) + { + { + var _list219 = await iprot.ReadListBeginAsync(cancellationToken); + ResultLinks = new List(_list219.Count); + for(int _i220 = 0; _i220 < _list219.Count; ++_i220) + { + global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _elem221; + _elem221 = new global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink(); + await _elem221.ReadAsync(iprot, cancellationToken); + ResultLinks.Add(_elem221); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp222 = new TStruct("TRowSet"); + await oprot.WriteStructBeginAsync(tmp222, cancellationToken); + var tmp223 = new TField(); + tmp223.Name = "startRowOffset"; + tmp223.Type = TType.I64; + tmp223.ID = 1; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((Rows != null)) + { + tmp223.Name = "rows"; + tmp223.Type = TType.List; + tmp223.ID = 2; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Rows.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TRow _iter224 in Rows) + { + await _iter224.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Columns != null) && __isset.columns) + { + tmp223.Name = "columns"; + tmp223.Type = TType.List; + tmp223.ID = 3; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumn _iter225 in Columns) + { + await _iter225.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp223.Name = "binaryColumns"; + tmp223.Type = TType.String; + tmp223.ID = 4; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteBinaryAsync(BinaryColumns, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.columnCount) + { + tmp223.Name = "columnCount"; + tmp223.Type = TType.I32; + tmp223.ID = 5; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteI32Async(ColumnCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp223.Name = "arrowBatches"; + tmp223.Type = TType.List; + tmp223.ID = 1281; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ArrowBatches.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowBatch _iter226 in ArrowBatches) + { + await _iter226.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultLinks != null) && __isset.resultLinks) + { + tmp223.Name = "resultLinks"; + tmp223.Type = TType.List; + tmp223.ID = 1282; + await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, ResultLinks.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowResultLink _iter227 in ResultLinks) + { + await _iter227.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TRowSet other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && TCollections.Equals(Rows, other.Rows) + && ((__isset.columns == other.__isset.columns) && ((!__isset.columns) || (TCollections.Equals(Columns, other.Columns)))) + && ((__isset.binaryColumns == other.__isset.binaryColumns) && ((!__isset.binaryColumns) || (TCollections.Equals(BinaryColumns, other.BinaryColumns)))) + && ((__isset.columnCount == other.__isset.columnCount) && ((!__isset.columnCount) || (global::System.Object.Equals(ColumnCount, other.ColumnCount)))) + && ((__isset.arrowBatches == other.__isset.arrowBatches) && ((!__isset.arrowBatches) || (TCollections.Equals(ArrowBatches, other.ArrowBatches)))) + && ((__isset.resultLinks == other.__isset.resultLinks) && ((!__isset.resultLinks) || (TCollections.Equals(ResultLinks, other.ResultLinks)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + if((Rows != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); + } + if((Columns != null) && __isset.columns) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + hashcode = (hashcode * 397) + BinaryColumns.GetHashCode(); + } + if(__isset.columnCount) + { + hashcode = (hashcode * 397) + ColumnCount.GetHashCode(); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ArrowBatches); + } + if((ResultLinks != null) && __isset.resultLinks) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultLinks); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp228 = new StringBuilder("TRowSet("); + tmp228.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp228); + if((Rows != null)) + { + tmp228.Append(", Rows: "); + Rows.ToString(tmp228); + } + if((Columns != null) && __isset.columns) + { + tmp228.Append(", Columns: "); + Columns.ToString(tmp228); + } + if((BinaryColumns != null) && __isset.binaryColumns) + { + tmp228.Append(", BinaryColumns: "); + BinaryColumns.ToString(tmp228); + } + if(__isset.columnCount) + { + tmp228.Append(", ColumnCount: "); + ColumnCount.ToString(tmp228); + } + if((ArrowBatches != null) && __isset.arrowBatches) + { + tmp228.Append(", ArrowBatches: "); + ArrowBatches.ToString(tmp228); + } + if((ResultLinks != null) && __isset.resultLinks) + { + tmp228.Append(", ResultLinks: "); + ResultLinks.ToString(tmp228); + } + tmp228.Append(')'); + return tmp228.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs new file mode 100644 index 0000000000..ef0e2b2cb4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSessionHandle : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier SessionId { get; set; } + + public TSessionHandle() + { + } + + public TSessionHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier sessionId) : this() + { + this.SessionId = sessionId; + } + + public TSessionHandle DeepCopy() + { + var tmp269 = new TSessionHandle(); + if((SessionId != null)) + { + tmp269.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); + } + return tmp269; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionId = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionId = new global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier(); + await SessionId.ReadAsync(iprot, cancellationToken); + isset_sessionId = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionId) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp270 = new TStruct("TSessionHandle"); + await oprot.WriteStructBeginAsync(tmp270, cancellationToken); + var tmp271 = new TField(); + if((SessionId != null)) + { + tmp271.Name = "sessionId"; + tmp271.Type = TType.Struct; + tmp271.ID = 1; + await oprot.WriteFieldBeginAsync(tmp271, cancellationToken); + await SessionId.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSessionHandle other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionId, other.SessionId); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionId != null)) + { + hashcode = (hashcode * 397) + SessionId.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp272 = new StringBuilder("TSessionHandle("); + if((SessionId != null)) + { + tmp272.Append(", SessionId: "); + SessionId.ToString(tmp272); + } + tmp272.Append(')'); + return tmp272.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs new file mode 100644 index 0000000000..15578dc770 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs @@ -0,0 +1,241 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSetClientInfoReq : TBase + { + private Dictionary _configuration; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public Dictionary Configuration + { + get + { + return _configuration; + } + set + { + __isset.configuration = true; + this._configuration = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool configuration; + } + + public TSetClientInfoReq() + { + } + + public TSetClientInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle) : this() + { + this.SessionHandle = sessionHandle; + } + + public TSetClientInfoReq DeepCopy() + { + var tmp317 = new TSetClientInfoReq(); + if((SessionHandle != null)) + { + tmp317.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((Configuration != null) && __isset.configuration) + { + tmp317.Configuration = this.Configuration.DeepCopy(); + } + tmp317.__isset.configuration = this.__isset.configuration; + return tmp317; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Map) + { + { + var _map318 = await iprot.ReadMapBeginAsync(cancellationToken); + Configuration = new Dictionary(_map318.Count); + for(int _i319 = 0; _i319 < _map318.Count; ++_i319) + { + string _key320; + string _val321; + _key320 = await iprot.ReadStringAsync(cancellationToken); + _val321 = await iprot.ReadStringAsync(cancellationToken); + Configuration[_key320] = _val321; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp322 = new TStruct("TSetClientInfoReq"); + await oprot.WriteStructBeginAsync(tmp322, cancellationToken); + var tmp323 = new TField(); + if((SessionHandle != null)) + { + tmp323.Name = "sessionHandle"; + tmp323.Type = TType.Struct; + tmp323.ID = 1; + await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Configuration != null) && __isset.configuration) + { + tmp323.Name = "configuration"; + tmp323.Type = TType.Map; + tmp323.ID = 2; + await oprot.WriteFieldBeginAsync(tmp323, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.String, Configuration.Count), cancellationToken); + foreach (string _iter324 in Configuration.Keys) + { + await oprot.WriteStringAsync(_iter324, cancellationToken); + await oprot.WriteStringAsync(Configuration[_iter324], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSetClientInfoReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.configuration == other.__isset.configuration) && ((!__isset.configuration) || (TCollections.Equals(Configuration, other.Configuration)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((Configuration != null) && __isset.configuration) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp325 = new StringBuilder("TSetClientInfoReq("); + if((SessionHandle != null)) + { + tmp325.Append(", SessionHandle: "); + SessionHandle.ToString(tmp325); + } + if((Configuration != null) && __isset.configuration) + { + tmp325.Append(", Configuration: "); + Configuration.ToString(tmp325); + } + tmp325.Append(')'); + return tmp325.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs new file mode 100644 index 0000000000..07a9f53444 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs @@ -0,0 +1,168 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSetClientInfoResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public TSetClientInfoResp() + { + } + + public TSetClientInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : this() + { + this.Status = status; + } + + public TSetClientInfoResp DeepCopy() + { + var tmp327 = new TSetClientInfoResp(); + if((Status != null)) + { + tmp327.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + return tmp327; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp328 = new TStruct("TSetClientInfoResp"); + await oprot.WriteStructBeginAsync(tmp328, cancellationToken); + var tmp329 = new TField(); + if((Status != null)) + { + tmp329.Name = "status"; + tmp329.Type = TType.Struct; + tmp329.ID = 1; + await oprot.WriteFieldBeginAsync(tmp329, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSetClientInfoResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp330 = new StringBuilder("TSetClientInfoResp("); + if((Status != null)) + { + tmp330.Append(", Status: "); + Status.ToString(tmp330); + } + tmp330.Append(')'); + return tmp330.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs new file mode 100644 index 0000000000..25690516e1 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs @@ -0,0 +1,197 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowBatch : TBase + { + + public byte[] Batch { get; set; } + + public long RowCount { get; set; } + + public TSparkArrowBatch() + { + } + + public TSparkArrowBatch(byte[] batch, long rowCount) : this() + { + this.Batch = batch; + this.RowCount = rowCount; + } + + public TSparkArrowBatch DeepCopy() + { + var tmp230 = new TSparkArrowBatch(); + if((Batch != null)) + { + tmp230.Batch = this.Batch.ToArray(); + } + tmp230.RowCount = this.RowCount; + return tmp230; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_batch = false; + bool isset_rowCount = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Batch = await iprot.ReadBinaryAsync(cancellationToken); + isset_batch = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_batch) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp231 = new TStruct("TSparkArrowBatch"); + await oprot.WriteStructBeginAsync(tmp231, cancellationToken); + var tmp232 = new TField(); + if((Batch != null)) + { + tmp232.Name = "batch"; + tmp232.Type = TType.String; + tmp232.ID = 1; + await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); + await oprot.WriteBinaryAsync(Batch, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp232.Name = "rowCount"; + tmp232.Type = TType.I64; + tmp232.ID = 2; + await oprot.WriteFieldBeginAsync(tmp232, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowBatch other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Batch, other.Batch) + && global::System.Object.Equals(RowCount, other.RowCount); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Batch != null)) + { + hashcode = (hashcode * 397) + Batch.GetHashCode(); + } + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp233 = new StringBuilder("TSparkArrowBatch("); + if((Batch != null)) + { + tmp233.Append(", Batch: "); + Batch.ToString(tmp233); + } + tmp233.Append(", RowCount: "); + RowCount.ToString(tmp233); + tmp233.Append(')'); + return tmp233.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs new file mode 100644 index 0000000000..2e45731410 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs @@ -0,0 +1,287 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowResultLink : TBase + { + + public string FileLink { get; set; } + + public long ExpiryTime { get; set; } + + public long StartRowOffset { get; set; } + + public long RowCount { get; set; } + + public long BytesNum { get; set; } + + public TSparkArrowResultLink() + { + } + + public TSparkArrowResultLink(string fileLink, long expiryTime, long startRowOffset, long rowCount, long bytesNum) : this() + { + this.FileLink = fileLink; + this.ExpiryTime = expiryTime; + this.StartRowOffset = startRowOffset; + this.RowCount = rowCount; + this.BytesNum = bytesNum; + } + + public TSparkArrowResultLink DeepCopy() + { + var tmp235 = new TSparkArrowResultLink(); + if((FileLink != null)) + { + tmp235.FileLink = this.FileLink; + } + tmp235.ExpiryTime = this.ExpiryTime; + tmp235.StartRowOffset = this.StartRowOffset; + tmp235.RowCount = this.RowCount; + tmp235.BytesNum = this.BytesNum; + return tmp235; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_fileLink = false; + bool isset_expiryTime = false; + bool isset_startRowOffset = false; + bool isset_rowCount = false; + bool isset_bytesNum = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + FileLink = await iprot.ReadStringAsync(cancellationToken); + isset_fileLink = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + ExpiryTime = await iprot.ReadI64Async(cancellationToken); + isset_expiryTime = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.I64) + { + StartRowOffset = await iprot.ReadI64Async(cancellationToken); + isset_startRowOffset = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I64) + { + RowCount = await iprot.ReadI64Async(cancellationToken); + isset_rowCount = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.I64) + { + BytesNum = await iprot.ReadI64Async(cancellationToken); + isset_bytesNum = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_fileLink) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_expiryTime) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_startRowOffset) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_rowCount) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_bytesNum) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp236 = new TStruct("TSparkArrowResultLink"); + await oprot.WriteStructBeginAsync(tmp236, cancellationToken); + var tmp237 = new TField(); + if((FileLink != null)) + { + tmp237.Name = "fileLink"; + tmp237.Type = TType.String; + tmp237.ID = 1; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteStringAsync(FileLink, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + tmp237.Name = "expiryTime"; + tmp237.Type = TType.I64; + tmp237.ID = 2; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(ExpiryTime, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "startRowOffset"; + tmp237.Type = TType.I64; + tmp237.ID = 3; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(StartRowOffset, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "rowCount"; + tmp237.Type = TType.I64; + tmp237.ID = 4; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(RowCount, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + tmp237.Name = "bytesNum"; + tmp237.Type = TType.I64; + tmp237.ID = 5; + await oprot.WriteFieldBeginAsync(tmp237, cancellationToken); + await oprot.WriteI64Async(BytesNum, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowResultLink other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(FileLink, other.FileLink) + && global::System.Object.Equals(ExpiryTime, other.ExpiryTime) + && global::System.Object.Equals(StartRowOffset, other.StartRowOffset) + && global::System.Object.Equals(RowCount, other.RowCount) + && global::System.Object.Equals(BytesNum, other.BytesNum); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((FileLink != null)) + { + hashcode = (hashcode * 397) + FileLink.GetHashCode(); + } + hashcode = (hashcode * 397) + ExpiryTime.GetHashCode(); + hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); + hashcode = (hashcode * 397) + RowCount.GetHashCode(); + hashcode = (hashcode * 397) + BytesNum.GetHashCode(); + } + return hashcode; + } + + public override string ToString() + { + var tmp238 = new StringBuilder("TSparkArrowResultLink("); + if((FileLink != null)) + { + tmp238.Append(", FileLink: "); + FileLink.ToString(tmp238); + } + tmp238.Append(", ExpiryTime: "); + ExpiryTime.ToString(tmp238); + tmp238.Append(", StartRowOffset: "); + StartRowOffset.ToString(tmp238); + tmp238.Append(", RowCount: "); + RowCount.ToString(tmp238); + tmp238.Append(", BytesNum: "); + BytesNum.ToString(tmp238); + tmp238.Append(')'); + return tmp238.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs new file mode 100644 index 0000000000..fc66ad4bd4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs @@ -0,0 +1,328 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkArrowTypes : TBase + { + private bool _timestampAsArrow; + private bool _decimalAsArrow; + private bool _complexTypesAsArrow; + private bool _intervalTypesAsArrow; + + public bool TimestampAsArrow + { + get + { + return _timestampAsArrow; + } + set + { + __isset.timestampAsArrow = true; + this._timestampAsArrow = value; + } + } + + public bool DecimalAsArrow + { + get + { + return _decimalAsArrow; + } + set + { + __isset.decimalAsArrow = true; + this._decimalAsArrow = value; + } + } + + public bool ComplexTypesAsArrow + { + get + { + return _complexTypesAsArrow; + } + set + { + __isset.complexTypesAsArrow = true; + this._complexTypesAsArrow = value; + } + } + + public bool IntervalTypesAsArrow + { + get + { + return _intervalTypesAsArrow; + } + set + { + __isset.intervalTypesAsArrow = true; + this._intervalTypesAsArrow = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool timestampAsArrow; + public bool decimalAsArrow; + public bool complexTypesAsArrow; + public bool intervalTypesAsArrow; + } + + public TSparkArrowTypes() + { + } + + public TSparkArrowTypes DeepCopy() + { + var tmp250 = new TSparkArrowTypes(); + if(__isset.timestampAsArrow) + { + tmp250.TimestampAsArrow = this.TimestampAsArrow; + } + tmp250.__isset.timestampAsArrow = this.__isset.timestampAsArrow; + if(__isset.decimalAsArrow) + { + tmp250.DecimalAsArrow = this.DecimalAsArrow; + } + tmp250.__isset.decimalAsArrow = this.__isset.decimalAsArrow; + if(__isset.complexTypesAsArrow) + { + tmp250.ComplexTypesAsArrow = this.ComplexTypesAsArrow; + } + tmp250.__isset.complexTypesAsArrow = this.__isset.complexTypesAsArrow; + if(__isset.intervalTypesAsArrow) + { + tmp250.IntervalTypesAsArrow = this.IntervalTypesAsArrow; + } + tmp250.__isset.intervalTypesAsArrow = this.__isset.intervalTypesAsArrow; + return tmp250; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Bool) + { + TimestampAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Bool) + { + DecimalAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Bool) + { + ComplexTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Bool) + { + IntervalTypesAsArrow = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp251 = new TStruct("TSparkArrowTypes"); + await oprot.WriteStructBeginAsync(tmp251, cancellationToken); + var tmp252 = new TField(); + if(__isset.timestampAsArrow) + { + tmp252.Name = "timestampAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 1; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(TimestampAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.decimalAsArrow) + { + tmp252.Name = "decimalAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 2; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(DecimalAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.complexTypesAsArrow) + { + tmp252.Name = "complexTypesAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 3; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(ComplexTypesAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.intervalTypesAsArrow) + { + tmp252.Name = "intervalTypesAsArrow"; + tmp252.Type = TType.Bool; + tmp252.ID = 4; + await oprot.WriteFieldBeginAsync(tmp252, cancellationToken); + await oprot.WriteBoolAsync(IntervalTypesAsArrow, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkArrowTypes other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.timestampAsArrow == other.__isset.timestampAsArrow) && ((!__isset.timestampAsArrow) || (global::System.Object.Equals(TimestampAsArrow, other.TimestampAsArrow)))) + && ((__isset.decimalAsArrow == other.__isset.decimalAsArrow) && ((!__isset.decimalAsArrow) || (global::System.Object.Equals(DecimalAsArrow, other.DecimalAsArrow)))) + && ((__isset.complexTypesAsArrow == other.__isset.complexTypesAsArrow) && ((!__isset.complexTypesAsArrow) || (global::System.Object.Equals(ComplexTypesAsArrow, other.ComplexTypesAsArrow)))) + && ((__isset.intervalTypesAsArrow == other.__isset.intervalTypesAsArrow) && ((!__isset.intervalTypesAsArrow) || (global::System.Object.Equals(IntervalTypesAsArrow, other.IntervalTypesAsArrow)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.timestampAsArrow) + { + hashcode = (hashcode * 397) + TimestampAsArrow.GetHashCode(); + } + if(__isset.decimalAsArrow) + { + hashcode = (hashcode * 397) + DecimalAsArrow.GetHashCode(); + } + if(__isset.complexTypesAsArrow) + { + hashcode = (hashcode * 397) + ComplexTypesAsArrow.GetHashCode(); + } + if(__isset.intervalTypesAsArrow) + { + hashcode = (hashcode * 397) + IntervalTypesAsArrow.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp253 = new StringBuilder("TSparkArrowTypes("); + int tmp254 = 0; + if(__isset.timestampAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("TimestampAsArrow: "); + TimestampAsArrow.ToString(tmp253); + } + if(__isset.decimalAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("DecimalAsArrow: "); + DecimalAsArrow.ToString(tmp253); + } + if(__isset.complexTypesAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("ComplexTypesAsArrow: "); + ComplexTypesAsArrow.ToString(tmp253); + } + if(__isset.intervalTypesAsArrow) + { + if(0 < tmp254++) { tmp253.Append(", "); } + tmp253.Append("IntervalTypesAsArrow: "); + IntervalTypesAsArrow.ToString(tmp253); + } + tmp253.Append(')'); + return tmp253.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs new file mode 100644 index 0000000000..b970f9e62d --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs @@ -0,0 +1,332 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkDirectResults : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp _operationStatus; + private global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp _resultSetMetadata; + private global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp _resultSet; + private global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp _closeOperation; + + public global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp OperationStatus + { + get + { + return _operationStatus; + } + set + { + __isset.operationStatus = true; + this._operationStatus = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp ResultSetMetadata + { + get + { + return _resultSetMetadata; + } + set + { + __isset.resultSetMetadata = true; + this._resultSetMetadata = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp ResultSet + { + get + { + return _resultSet; + } + set + { + __isset.resultSet = true; + this._resultSet = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp CloseOperation + { + get + { + return _closeOperation; + } + set + { + __isset.closeOperation = true; + this._closeOperation = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool operationStatus; + public bool resultSetMetadata; + public bool resultSet; + public bool closeOperation; + } + + public TSparkDirectResults() + { + } + + public TSparkDirectResults DeepCopy() + { + var tmp245 = new TSparkDirectResults(); + if((OperationStatus != null) && __isset.operationStatus) + { + tmp245.OperationStatus = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.OperationStatus.DeepCopy(); + } + tmp245.__isset.operationStatus = this.__isset.operationStatus; + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp245.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); + } + tmp245.__isset.resultSetMetadata = this.__isset.resultSetMetadata; + if((ResultSet != null) && __isset.resultSet) + { + tmp245.ResultSet = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.ResultSet.DeepCopy(); + } + tmp245.__isset.resultSet = this.__isset.resultSet; + if((CloseOperation != null) && __isset.closeOperation) + { + tmp245.CloseOperation = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.CloseOperation.DeepCopy(); + } + tmp245.__isset.closeOperation = this.__isset.closeOperation; + return tmp245; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + OperationStatus = new global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp(); + await OperationStatus.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ResultSetMetadata = new global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp(); + await ResultSetMetadata.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + ResultSet = new global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp(); + await ResultSet.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + CloseOperation = new global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp(); + await CloseOperation.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp246 = new TStruct("TSparkDirectResults"); + await oprot.WriteStructBeginAsync(tmp246, cancellationToken); + var tmp247 = new TField(); + if((OperationStatus != null) && __isset.operationStatus) + { + tmp247.Name = "operationStatus"; + tmp247.Type = TType.Struct; + tmp247.ID = 1; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await OperationStatus.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + tmp247.Name = "resultSetMetadata"; + tmp247.Type = TType.Struct; + tmp247.ID = 2; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await ResultSetMetadata.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ResultSet != null) && __isset.resultSet) + { + tmp247.Name = "resultSet"; + tmp247.Type = TType.Struct; + tmp247.ID = 3; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await ResultSet.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((CloseOperation != null) && __isset.closeOperation) + { + tmp247.Name = "closeOperation"; + tmp247.Type = TType.Struct; + tmp247.ID = 4; + await oprot.WriteFieldBeginAsync(tmp247, cancellationToken); + await CloseOperation.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkDirectResults other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.operationStatus == other.__isset.operationStatus) && ((!__isset.operationStatus) || (global::System.Object.Equals(OperationStatus, other.OperationStatus)))) + && ((__isset.resultSetMetadata == other.__isset.resultSetMetadata) && ((!__isset.resultSetMetadata) || (global::System.Object.Equals(ResultSetMetadata, other.ResultSetMetadata)))) + && ((__isset.resultSet == other.__isset.resultSet) && ((!__isset.resultSet) || (global::System.Object.Equals(ResultSet, other.ResultSet)))) + && ((__isset.closeOperation == other.__isset.closeOperation) && ((!__isset.closeOperation) || (global::System.Object.Equals(CloseOperation, other.CloseOperation)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((OperationStatus != null) && __isset.operationStatus) + { + hashcode = (hashcode * 397) + OperationStatus.GetHashCode(); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); + } + if((ResultSet != null) && __isset.resultSet) + { + hashcode = (hashcode * 397) + ResultSet.GetHashCode(); + } + if((CloseOperation != null) && __isset.closeOperation) + { + hashcode = (hashcode * 397) + CloseOperation.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp248 = new StringBuilder("TSparkDirectResults("); + int tmp249 = 0; + if((OperationStatus != null) && __isset.operationStatus) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("OperationStatus: "); + OperationStatus.ToString(tmp248); + } + if((ResultSetMetadata != null) && __isset.resultSetMetadata) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("ResultSetMetadata: "); + ResultSetMetadata.ToString(tmp248); + } + if((ResultSet != null) && __isset.resultSet) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("ResultSet: "); + ResultSet.ToString(tmp248); + } + if((CloseOperation != null) && __isset.closeOperation) + { + if(0 < tmp249++) { tmp248.Append(", "); } + tmp248.Append("CloseOperation: "); + CloseOperation.ToString(tmp248); + } + tmp248.Append(')'); + return tmp248.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs new file mode 100644 index 0000000000..04d3b27731 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs @@ -0,0 +1,210 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TSparkGetDirectResults : TBase + { + private long _maxBytes; + + public long MaxRows { get; set; } + + public long MaxBytes + { + get + { + return _maxBytes; + } + set + { + __isset.maxBytes = true; + this._maxBytes = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool maxBytes; + } + + public TSparkGetDirectResults() + { + } + + public TSparkGetDirectResults(long maxRows) : this() + { + this.MaxRows = maxRows; + } + + public TSparkGetDirectResults DeepCopy() + { + var tmp240 = new TSparkGetDirectResults(); + tmp240.MaxRows = this.MaxRows; + if(__isset.maxBytes) + { + tmp240.MaxBytes = this.MaxBytes; + } + tmp240.__isset.maxBytes = this.__isset.maxBytes; + return tmp240; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_maxRows = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I64) + { + MaxRows = await iprot.ReadI64Async(cancellationToken); + isset_maxRows = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.I64) + { + MaxBytes = await iprot.ReadI64Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_maxRows) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp241 = new TStruct("TSparkGetDirectResults"); + await oprot.WriteStructBeginAsync(tmp241, cancellationToken); + var tmp242 = new TField(); + tmp242.Name = "maxRows"; + tmp242.Type = TType.I64; + tmp242.ID = 1; + await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); + await oprot.WriteI64Async(MaxRows, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if(__isset.maxBytes) + { + tmp242.Name = "maxBytes"; + tmp242.Type = TType.I64; + tmp242.ID = 2; + await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); + await oprot.WriteI64Async(MaxBytes, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TSparkGetDirectResults other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(MaxRows, other.MaxRows) + && ((__isset.maxBytes == other.__isset.maxBytes) && ((!__isset.maxBytes) || (global::System.Object.Equals(MaxBytes, other.MaxBytes)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + MaxRows.GetHashCode(); + if(__isset.maxBytes) + { + hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp243 = new StringBuilder("TSparkGetDirectResults("); + tmp243.Append(", MaxRows: "); + MaxRows.ToString(tmp243); + if(__isset.maxBytes) + { + tmp243.Append(", MaxBytes: "); + MaxBytes.ToString(tmp243); + } + tmp243.Append(')'); + return tmp243.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs new file mode 100644 index 0000000000..aec77d61a5 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkRowSetType.cs @@ -0,0 +1,24 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TSparkRowSetType + { + ARROW_BASED_SET = 0, + COLUMN_BASED_SET = 1, + ROW_BASED_SET = 2, + URL_BASED_SET = 3, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs new file mode 100644 index 0000000000..9ccbb7f626 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs @@ -0,0 +1,376 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStatus : TBase + { + private List _infoMessages; + private string _sqlState; + private int _errorCode; + private string _errorMessage; + + /// + /// + /// + /// + public global::Apache.Hive.Service.Rpc.Thrift.TStatusCode StatusCode { get; set; } + + public List InfoMessages + { + get + { + return _infoMessages; + } + set + { + __isset.infoMessages = true; + this._infoMessages = value; + } + } + + public string SqlState + { + get + { + return _sqlState; + } + set + { + __isset.sqlState = true; + this._sqlState = value; + } + } + + public int ErrorCode + { + get + { + return _errorCode; + } + set + { + __isset.errorCode = true; + this._errorCode = value; + } + } + + public string ErrorMessage + { + get + { + return _errorMessage; + } + set + { + __isset.errorMessage = true; + this._errorMessage = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool infoMessages; + public bool sqlState; + public bool errorCode; + public bool errorMessage; + } + + public TStatus() + { + } + + public TStatus(global::Apache.Hive.Service.Rpc.Thrift.TStatusCode statusCode) : this() + { + this.StatusCode = statusCode; + } + + public TStatus DeepCopy() + { + var tmp255 = new TStatus(); + tmp255.StatusCode = this.StatusCode; + if((InfoMessages != null) && __isset.infoMessages) + { + tmp255.InfoMessages = this.InfoMessages.DeepCopy(); + } + tmp255.__isset.infoMessages = this.__isset.infoMessages; + if((SqlState != null) && __isset.sqlState) + { + tmp255.SqlState = this.SqlState; + } + tmp255.__isset.sqlState = this.__isset.sqlState; + if(__isset.errorCode) + { + tmp255.ErrorCode = this.ErrorCode; + } + tmp255.__isset.errorCode = this.__isset.errorCode; + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp255.ErrorMessage = this.ErrorMessage; + } + tmp255.__isset.errorMessage = this.__isset.errorMessage; + return tmp255; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_statusCode = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + StatusCode = (global::Apache.Hive.Service.Rpc.Thrift.TStatusCode)await iprot.ReadI32Async(cancellationToken); + isset_statusCode = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.List) + { + { + var _list256 = await iprot.ReadListBeginAsync(cancellationToken); + InfoMessages = new List(_list256.Count); + for(int _i257 = 0; _i257 < _list256.Count; ++_i257) + { + string _elem258; + _elem258 = await iprot.ReadStringAsync(cancellationToken); + InfoMessages.Add(_elem258); + } + await iprot.ReadListEndAsync(cancellationToken); + } + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + SqlState = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.I32) + { + ErrorCode = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.String) + { + ErrorMessage = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_statusCode) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp259 = new TStruct("TStatus"); + await oprot.WriteStructBeginAsync(tmp259, cancellationToken); + var tmp260 = new TField(); + tmp260.Name = "statusCode"; + tmp260.Type = TType.I32; + tmp260.ID = 1; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteI32Async((int)StatusCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + if((InfoMessages != null) && __isset.infoMessages) + { + tmp260.Name = "infoMessages"; + tmp260.Type = TType.List; + tmp260.ID = 2; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, InfoMessages.Count), cancellationToken); + foreach (string _iter261 in InfoMessages) + { + await oprot.WriteStringAsync(_iter261, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((SqlState != null) && __isset.sqlState) + { + tmp260.Name = "sqlState"; + tmp260.Type = TType.String; + tmp260.ID = 3; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteStringAsync(SqlState, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if(__isset.errorCode) + { + tmp260.Name = "errorCode"; + tmp260.Type = TType.I32; + tmp260.ID = 4; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteI32Async(ErrorCode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp260.Name = "errorMessage"; + tmp260.Type = TType.String; + tmp260.ID = 5; + await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); + await oprot.WriteStringAsync(ErrorMessage, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStatus other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(StatusCode, other.StatusCode) + && ((__isset.infoMessages == other.__isset.infoMessages) && ((!__isset.infoMessages) || (TCollections.Equals(InfoMessages, other.InfoMessages)))) + && ((__isset.sqlState == other.__isset.sqlState) && ((!__isset.sqlState) || (global::System.Object.Equals(SqlState, other.SqlState)))) + && ((__isset.errorCode == other.__isset.errorCode) && ((!__isset.errorCode) || (global::System.Object.Equals(ErrorCode, other.ErrorCode)))) + && ((__isset.errorMessage == other.__isset.errorMessage) && ((!__isset.errorMessage) || (global::System.Object.Equals(ErrorMessage, other.ErrorMessage)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + hashcode = (hashcode * 397) + StatusCode.GetHashCode(); + if((InfoMessages != null) && __isset.infoMessages) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(InfoMessages); + } + if((SqlState != null) && __isset.sqlState) + { + hashcode = (hashcode * 397) + SqlState.GetHashCode(); + } + if(__isset.errorCode) + { + hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp262 = new StringBuilder("TStatus("); + tmp262.Append(", StatusCode: "); + StatusCode.ToString(tmp262); + if((InfoMessages != null) && __isset.infoMessages) + { + tmp262.Append(", InfoMessages: "); + InfoMessages.ToString(tmp262); + } + if((SqlState != null) && __isset.sqlState) + { + tmp262.Append(", SqlState: "); + SqlState.ToString(tmp262); + } + if(__isset.errorCode) + { + tmp262.Append(", ErrorCode: "); + ErrorCode.ToString(tmp262); + } + if((ErrorMessage != null) && __isset.errorMessage) + { + tmp262.Append(", ErrorMessage: "); + ErrorMessage.ToString(tmp262); + } + tmp262.Append(')'); + return tmp262.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs new file mode 100644 index 0000000000..ce355fc6ad --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatusCode.cs @@ -0,0 +1,25 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TStatusCode + { + SUCCESS_STATUS = 0, + SUCCESS_WITH_INFO_STATUS = 1, + STILL_EXECUTING_STATUS = 2, + ERROR_STATUS = 3, + INVALID_HANDLE_STATUS = 4, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs new file mode 100644 index 0000000000..95fedcd776 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs @@ -0,0 +1,233 @@ +/** + * Autogenerated by Thrift Compiler (0.17.0) + * BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK + */ +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using Apache.Arrow; +using Apache.Arrow.Adbc.Drivers.Apache; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStringColumn : TBase + { + + public StringArray Values { get; set; } + + public TStringColumn() + { + } + + public TStringColumn(StringArray values) : this() + { + this.Values = values; + } + + public TStringColumn DeepCopy() + { + throw new NotImplementedException(); + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_values = false; + bool isset_nulls = false; + TField field; + + ArrowBuffer.Builder values = null; + byte[] nulls = null; + byte[] offsetBuffer = null; + Stream transport = ((IPeekableTransport)iprot.Transport).Input; + int length = -1; + byte[] preAllocatedBuffer = new byte[65536]; + + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list187 = await iprot.ReadListBeginAsync(cancellationToken); + length = _list187.Count; + + values = new ArrowBuffer.Builder(); + int offset = 0; + offsetBuffer = new byte[(length + 1) * 4]; + var memory = offsetBuffer.AsMemory(); + var typedMemory = Unsafe.As, Memory>(ref memory).Slice(0, length + 1); + + for(int _i188 = 0; _i188 < length; ++_i188) + { + typedMemory.Span[_i188] = offset; + var size = await iprot.ReadI32Async(cancellationToken); + offset += size; + + iprot.Transport.CheckReadBytesAvailable(size); + + byte[] tmp; + if (size <= preAllocatedBuffer.Length) + { + tmp = preAllocatedBuffer; + } + else + { + tmp = new byte[size]; + } + + await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); + values.Append(tmp.AsMemory(0, size).Span); + } + typedMemory.Span[length] = offset; + + await iprot.ReadListEndAsync(cancellationToken); + } + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + nulls = await iprot.ReadBinaryAsync(cancellationToken); + isset_nulls = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_nulls) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + + Values = new StringArray(length, new ArrowBuffer(offsetBuffer), values.Build(), new ArrowBuffer(nulls), BitUtility.CountBits(nulls)); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp190 = new TStruct("TStringColumn"); + await oprot.WriteStructBeginAsync(tmp190, cancellationToken); + var tmp191 = new TField(); + if((Values != null)) + { + tmp191.Name = "values"; + tmp191.Type = TType.List; + tmp191.ID = 1; + await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.String, Values.Length), cancellationToken); + for (int i = 0; i < Values.Length; i++) + { + // TODO: It would be nice to write the binary value instead but TProtocol doesn't support Spans + string _iter192 = Values.GetString(i); + await oprot.WriteStringAsync(_iter192, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + + tmp191.Name = "nulls"; + tmp191.Type = TType.String; + tmp191.ID = 2; + byte[] nulls = new byte[Values.NullBitmapBuffer.Span.Length]; + Values.NullBitmapBuffer.Span.CopyTo(nulls); + await oprot.WriteFieldBeginAsync(tmp191, cancellationToken); + await oprot.WriteBinaryAsync(nulls, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStringColumn other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Values != null)) + { + for (int i = 0; i < Values.Length; i++) + { + string thisValue = Values.GetString(i); + hashcode = (hashcode * 397) + (thisValue?.GetHashCode() ?? 0); + } + } + } + return hashcode; + } + + public override string ToString() + { + var tmp193 = new StringBuilder("TStringColumn("); + if((Values != null)) + { + tmp193.Append(", Values: "); + Values.ToString(tmp193); + } + tmp193.Append(')'); + return tmp193.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs new file mode 100644 index 0000000000..e1b7c8f6be --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs @@ -0,0 +1,178 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStringValue : TBase + { + private string _value; + + public string Value + { + get + { + return _value; + } + set + { + __isset.@value = true; + this._value = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool @value; + } + + public TStringValue() + { + } + + public TStringValue DeepCopy() + { + var tmp113 = new TStringValue(); + if((Value != null) && __isset.@value) + { + tmp113.Value = this.Value; + } + tmp113.__isset.@value = this.__isset.@value; + return tmp113; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + Value = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp114 = new TStruct("TStringValue"); + await oprot.WriteStructBeginAsync(tmp114, cancellationToken); + var tmp115 = new TField(); + if((Value != null) && __isset.@value) + { + tmp115.Name = "value"; + tmp115.Type = TType.String; + tmp115.ID = 1; + await oprot.WriteFieldBeginAsync(tmp115, cancellationToken); + await oprot.WriteStringAsync(Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStringValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.@value == other.__isset.@value) && ((!__isset.@value) || (global::System.Object.Equals(Value, other.Value)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Value != null) && __isset.@value) + { + hashcode = (hashcode * 397) + Value.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp116 = new StringBuilder("TStringValue("); + int tmp117 = 0; + if((Value != null) && __isset.@value) + { + if(0 < tmp117++) { tmp116.Append(", "); } + tmp116.Append("Value: "); + Value.ToString(tmp116); + } + tmp116.Append(')'); + return tmp116.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs new file mode 100644 index 0000000000..1ac1886691 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TStructTypeEntry : TBase + { + + public Dictionary NameToTypePtr { get; set; } + + public TStructTypeEntry() + { + } + + public TStructTypeEntry(Dictionary nameToTypePtr) : this() + { + this.NameToTypePtr = nameToTypePtr; + } + + public TStructTypeEntry DeepCopy() + { + var tmp30 = new TStructTypeEntry(); + if((NameToTypePtr != null)) + { + tmp30.NameToTypePtr = this.NameToTypePtr.DeepCopy(); + } + return tmp30; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_nameToTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map31 = await iprot.ReadMapBeginAsync(cancellationToken); + NameToTypePtr = new Dictionary(_map31.Count); + for(int _i32 = 0; _i32 < _map31.Count; ++_i32) + { + string _key33; + int _val34; + _key33 = await iprot.ReadStringAsync(cancellationToken); + _val34 = await iprot.ReadI32Async(cancellationToken); + NameToTypePtr[_key33] = _val34; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_nameToTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_nameToTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp35 = new TStruct("TStructTypeEntry"); + await oprot.WriteStructBeginAsync(tmp35, cancellationToken); + var tmp36 = new TField(); + if((NameToTypePtr != null)) + { + tmp36.Name = "nameToTypePtr"; + tmp36.Type = TType.Map; + tmp36.ID = 1; + await oprot.WriteFieldBeginAsync(tmp36, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); + foreach (string _iter37 in NameToTypePtr.Keys) + { + await oprot.WriteStringAsync(_iter37, cancellationToken); + await oprot.WriteI32Async(NameToTypePtr[_iter37], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TStructTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((NameToTypePtr != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp38 = new StringBuilder("TStructTypeEntry("); + if((NameToTypePtr != null)) + { + tmp38.Append(", NameToTypePtr: "); + NameToTypePtr.ToString(tmp38); + } + tmp38.Append(')'); + return tmp38.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs new file mode 100644 index 0000000000..7ae7d63512 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTableSchema : TBase + { + + public List Columns { get; set; } + + public TTableSchema() + { + } + + public TTableSchema(List columns) : this() + { + this.Columns = columns; + } + + public TTableSchema DeepCopy() + { + var tmp74 = new TTableSchema(); + if((Columns != null)) + { + tmp74.Columns = this.Columns.DeepCopy(); + } + return tmp74; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_columns = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list75 = await iprot.ReadListBeginAsync(cancellationToken); + Columns = new List(_list75.Count); + for(int _i76 = 0; _i76 < _list75.Count; ++_i76) + { + global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _elem77; + _elem77 = new global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc(); + await _elem77.ReadAsync(iprot, cancellationToken); + Columns.Add(_elem77); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_columns = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_columns) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp78 = new TStruct("TTableSchema"); + await oprot.WriteStructBeginAsync(tmp78, cancellationToken); + var tmp79 = new TField(); + if((Columns != null)) + { + tmp79.Name = "columns"; + tmp79.Type = TType.List; + tmp79.ID = 1; + await oprot.WriteFieldBeginAsync(tmp79, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Columns.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TColumnDesc _iter80 in Columns) + { + await _iter80.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTableSchema other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Columns, other.Columns); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Columns != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp81 = new StringBuilder("TTableSchema("); + if((Columns != null)) + { + tmp81.Append(", Columns: "); + Columns.ToString(tmp81); + } + tmp81.Append(')'); + return tmp81.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs new file mode 100644 index 0000000000..318f1e5d05 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs @@ -0,0 +1,183 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeDesc : TBase + { + + public List Types { get; set; } + + public TTypeDesc() + { + } + + public TTypeDesc(List types) : this() + { + this.Types = types; + } + + public TTypeDesc DeepCopy() + { + var tmp60 = new TTypeDesc(); + if((Types != null)) + { + tmp60.Types = this.Types.DeepCopy(); + } + return tmp60; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_types = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.List) + { + { + var _list61 = await iprot.ReadListBeginAsync(cancellationToken); + Types = new List(_list61.Count); + for(int _i62 = 0; _i62 < _list61.Count; ++_i62) + { + global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _elem63; + _elem63 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry(); + await _elem63.ReadAsync(iprot, cancellationToken); + Types.Add(_elem63); + } + await iprot.ReadListEndAsync(cancellationToken); + } + isset_types = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_types) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp64 = new TStruct("TTypeDesc"); + await oprot.WriteStructBeginAsync(tmp64, cancellationToken); + var tmp65 = new TField(); + if((Types != null)) + { + tmp65.Name = "types"; + tmp65.Type = TType.List; + tmp65.ID = 1; + await oprot.WriteFieldBeginAsync(tmp65, cancellationToken); + await oprot.WriteListBeginAsync(new TList(TType.Struct, Types.Count), cancellationToken); + foreach (global::Apache.Hive.Service.Rpc.Thrift.TTypeEntry _iter66 in Types) + { + await _iter66.WriteAsync(oprot, cancellationToken); + } + await oprot.WriteListEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeDesc other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Types, other.Types); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Types != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Types); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp67 = new StringBuilder("TTypeDesc("); + if((Types != null)) + { + tmp67.Append(", Types: "); + Types.ToString(tmp67); + } + tmp67.Append(')'); + return tmp67.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs new file mode 100644 index 0000000000..7aec87b834 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs @@ -0,0 +1,434 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeEntry : TBase + { + private global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry _primitiveEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry _arrayEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry _mapEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry _structEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry _unionEntry; + private global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry _userDefinedTypeEntry; + + public global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry PrimitiveEntry + { + get + { + return _primitiveEntry; + } + set + { + __isset.primitiveEntry = true; + this._primitiveEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry ArrayEntry + { + get + { + return _arrayEntry; + } + set + { + __isset.arrayEntry = true; + this._arrayEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry MapEntry + { + get + { + return _mapEntry; + } + set + { + __isset.mapEntry = true; + this._mapEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry StructEntry + { + get + { + return _structEntry; + } + set + { + __isset.structEntry = true; + this._structEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry UnionEntry + { + get + { + return _unionEntry; + } + set + { + __isset.unionEntry = true; + this._unionEntry = value; + } + } + + public global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry UserDefinedTypeEntry + { + get + { + return _userDefinedTypeEntry; + } + set + { + __isset.userDefinedTypeEntry = true; + this._userDefinedTypeEntry = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool primitiveEntry; + public bool arrayEntry; + public bool mapEntry; + public bool structEntry; + public bool unionEntry; + public bool userDefinedTypeEntry; + } + + public TTypeEntry() + { + } + + public TTypeEntry DeepCopy() + { + var tmp55 = new TTypeEntry(); + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + tmp55.PrimitiveEntry = (global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry)this.PrimitiveEntry.DeepCopy(); + } + tmp55.__isset.primitiveEntry = this.__isset.primitiveEntry; + if((ArrayEntry != null) && __isset.arrayEntry) + { + tmp55.ArrayEntry = (global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry)this.ArrayEntry.DeepCopy(); + } + tmp55.__isset.arrayEntry = this.__isset.arrayEntry; + if((MapEntry != null) && __isset.mapEntry) + { + tmp55.MapEntry = (global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry)this.MapEntry.DeepCopy(); + } + tmp55.__isset.mapEntry = this.__isset.mapEntry; + if((StructEntry != null) && __isset.structEntry) + { + tmp55.StructEntry = (global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry)this.StructEntry.DeepCopy(); + } + tmp55.__isset.structEntry = this.__isset.structEntry; + if((UnionEntry != null) && __isset.unionEntry) + { + tmp55.UnionEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry)this.UnionEntry.DeepCopy(); + } + tmp55.__isset.unionEntry = this.__isset.unionEntry; + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + tmp55.UserDefinedTypeEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry)this.UserDefinedTypeEntry.DeepCopy(); + } + tmp55.__isset.userDefinedTypeEntry = this.__isset.userDefinedTypeEntry; + return tmp55; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + PrimitiveEntry = new global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry(); + await PrimitiveEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + ArrayEntry = new global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry(); + await ArrayEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.Struct) + { + MapEntry = new global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry(); + await MapEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.Struct) + { + StructEntry = new global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry(); + await StructEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 5: + if (field.Type == TType.Struct) + { + UnionEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry(); + await UnionEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 6: + if (field.Type == TType.Struct) + { + UserDefinedTypeEntry = new global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry(); + await UserDefinedTypeEntry.ReadAsync(iprot, cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp56 = new TStruct("TTypeEntry"); + await oprot.WriteStructBeginAsync(tmp56, cancellationToken); + var tmp57 = new TField(); + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + tmp57.Name = "primitiveEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 1; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await PrimitiveEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + tmp57.Name = "arrayEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 2; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await ArrayEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((MapEntry != null) && __isset.mapEntry) + { + tmp57.Name = "mapEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 3; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await MapEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StructEntry != null) && __isset.structEntry) + { + tmp57.Name = "structEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 4; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await StructEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UnionEntry != null) && __isset.unionEntry) + { + tmp57.Name = "unionEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 5; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await UnionEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + tmp57.Name = "userDefinedTypeEntry"; + tmp57.Type = TType.Struct; + tmp57.ID = 6; + await oprot.WriteFieldBeginAsync(tmp57, cancellationToken); + await UserDefinedTypeEntry.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.primitiveEntry == other.__isset.primitiveEntry) && ((!__isset.primitiveEntry) || (global::System.Object.Equals(PrimitiveEntry, other.PrimitiveEntry)))) + && ((__isset.arrayEntry == other.__isset.arrayEntry) && ((!__isset.arrayEntry) || (global::System.Object.Equals(ArrayEntry, other.ArrayEntry)))) + && ((__isset.mapEntry == other.__isset.mapEntry) && ((!__isset.mapEntry) || (global::System.Object.Equals(MapEntry, other.MapEntry)))) + && ((__isset.structEntry == other.__isset.structEntry) && ((!__isset.structEntry) || (global::System.Object.Equals(StructEntry, other.StructEntry)))) + && ((__isset.unionEntry == other.__isset.unionEntry) && ((!__isset.unionEntry) || (global::System.Object.Equals(UnionEntry, other.UnionEntry)))) + && ((__isset.userDefinedTypeEntry == other.__isset.userDefinedTypeEntry) && ((!__isset.userDefinedTypeEntry) || (global::System.Object.Equals(UserDefinedTypeEntry, other.UserDefinedTypeEntry)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + hashcode = (hashcode * 397) + PrimitiveEntry.GetHashCode(); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + hashcode = (hashcode * 397) + ArrayEntry.GetHashCode(); + } + if((MapEntry != null) && __isset.mapEntry) + { + hashcode = (hashcode * 397) + MapEntry.GetHashCode(); + } + if((StructEntry != null) && __isset.structEntry) + { + hashcode = (hashcode * 397) + StructEntry.GetHashCode(); + } + if((UnionEntry != null) && __isset.unionEntry) + { + hashcode = (hashcode * 397) + UnionEntry.GetHashCode(); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + hashcode = (hashcode * 397) + UserDefinedTypeEntry.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp58 = new StringBuilder("TTypeEntry("); + int tmp59 = 0; + if((PrimitiveEntry != null) && __isset.primitiveEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("PrimitiveEntry: "); + PrimitiveEntry.ToString(tmp58); + } + if((ArrayEntry != null) && __isset.arrayEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("ArrayEntry: "); + ArrayEntry.ToString(tmp58); + } + if((MapEntry != null) && __isset.mapEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("MapEntry: "); + MapEntry.ToString(tmp58); + } + if((StructEntry != null) && __isset.structEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("StructEntry: "); + StructEntry.ToString(tmp58); + } + if((UnionEntry != null) && __isset.unionEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("UnionEntry: "); + UnionEntry.ToString(tmp58); + } + if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + { + if(0 < tmp59++) { tmp58.Append(", "); } + tmp58.Append("UserDefinedTypeEntry: "); + UserDefinedTypeEntry.ToString(tmp58); + } + tmp58.Append(')'); + return tmp58.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs new file mode 100644 index 0000000000..61f7c44efc --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeId.cs @@ -0,0 +1,43 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + public enum TTypeId + { + BOOLEAN_TYPE = 0, + TINYINT_TYPE = 1, + SMALLINT_TYPE = 2, + INT_TYPE = 3, + BIGINT_TYPE = 4, + FLOAT_TYPE = 5, + DOUBLE_TYPE = 6, + STRING_TYPE = 7, + TIMESTAMP_TYPE = 8, + BINARY_TYPE = 9, + ARRAY_TYPE = 10, + MAP_TYPE = 11, + STRUCT_TYPE = 12, + UNION_TYPE = 13, + USER_DEFINED_TYPE = 14, + DECIMAL_TYPE = 15, + NULL_TYPE = 16, + DATE_TYPE = 17, + VARCHAR_TYPE = 18, + CHAR_TYPE = 19, + INTERVAL_YEAR_MONTH_TYPE = 20, + INTERVAL_DAY_TIME_TYPE = 21, + TIMESTAMPLOCALTZ_TYPE = 22, + } +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs new file mode 100644 index 0000000000..6e0bc6da80 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs @@ -0,0 +1,228 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeQualifierValue : TBase + { + private int _i32Value; + private string _stringValue; + + public int I32Value + { + get + { + return _i32Value; + } + set + { + __isset.i32Value = true; + this._i32Value = value; + } + } + + public string StringValue + { + get + { + return _stringValue; + } + set + { + __isset.stringValue = true; + this._stringValue = value; + } + } + + + public Isset __isset; + public struct Isset + { + public bool i32Value; + public bool stringValue; + } + + public TTypeQualifierValue() + { + } + + public TTypeQualifierValue DeepCopy() + { + var tmp0 = new TTypeQualifierValue(); + if(__isset.i32Value) + { + tmp0.I32Value = this.I32Value; + } + tmp0.__isset.i32Value = this.__isset.i32Value; + if((StringValue != null) && __isset.stringValue) + { + tmp0.StringValue = this.StringValue; + } + tmp0.__isset.stringValue = this.__isset.stringValue; + return tmp0; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.I32) + { + I32Value = await iprot.ReadI32Async(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + StringValue = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp1 = new TStruct("TTypeQualifierValue"); + await oprot.WriteStructBeginAsync(tmp1, cancellationToken); + var tmp2 = new TField(); + if(__isset.i32Value) + { + tmp2.Name = "i32Value"; + tmp2.Type = TType.I32; + tmp2.ID = 1; + await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); + await oprot.WriteI32Async(I32Value, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((StringValue != null) && __isset.stringValue) + { + tmp2.Name = "stringValue"; + tmp2.Type = TType.String; + tmp2.ID = 2; + await oprot.WriteFieldBeginAsync(tmp2, cancellationToken); + await oprot.WriteStringAsync(StringValue, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeQualifierValue other)) return false; + if (ReferenceEquals(this, other)) return true; + return ((__isset.i32Value == other.__isset.i32Value) && ((!__isset.i32Value) || (global::System.Object.Equals(I32Value, other.I32Value)))) + && ((__isset.stringValue == other.__isset.stringValue) && ((!__isset.stringValue) || (global::System.Object.Equals(StringValue, other.StringValue)))); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if(__isset.i32Value) + { + hashcode = (hashcode * 397) + I32Value.GetHashCode(); + } + if((StringValue != null) && __isset.stringValue) + { + hashcode = (hashcode * 397) + StringValue.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp3 = new StringBuilder("TTypeQualifierValue("); + int tmp4 = 0; + if(__isset.i32Value) + { + if(0 < tmp4++) { tmp3.Append(", "); } + tmp3.Append("I32Value: "); + I32Value.ToString(tmp3); + } + if((StringValue != null) && __isset.stringValue) + { + if(0 < tmp4++) { tmp3.Append(", "); } + tmp3.Append("StringValue: "); + StringValue.ToString(tmp3); + } + tmp3.Append(')'); + return tmp3.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs new file mode 100644 index 0000000000..31dee30ad0 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs @@ -0,0 +1,186 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TTypeQualifiers : TBase + { + + public Dictionary Qualifiers { get; set; } + + public TTypeQualifiers() + { + } + + public TTypeQualifiers(Dictionary qualifiers) : this() + { + this.Qualifiers = qualifiers; + } + + public TTypeQualifiers DeepCopy() + { + var tmp5 = new TTypeQualifiers(); + if((Qualifiers != null)) + { + tmp5.Qualifiers = this.Qualifiers.DeepCopy(); + } + return tmp5; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_qualifiers = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map6 = await iprot.ReadMapBeginAsync(cancellationToken); + Qualifiers = new Dictionary(_map6.Count); + for(int _i7 = 0; _i7 < _map6.Count; ++_i7) + { + string _key8; + global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue _val9; + _key8 = await iprot.ReadStringAsync(cancellationToken); + _val9 = new global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifierValue(); + await _val9.ReadAsync(iprot, cancellationToken); + Qualifiers[_key8] = _val9; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_qualifiers = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_qualifiers) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp10 = new TStruct("TTypeQualifiers"); + await oprot.WriteStructBeginAsync(tmp10, cancellationToken); + var tmp11 = new TField(); + if((Qualifiers != null)) + { + tmp11.Name = "qualifiers"; + tmp11.Type = TType.Map; + tmp11.ID = 1; + await oprot.WriteFieldBeginAsync(tmp11, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.Struct, Qualifiers.Count), cancellationToken); + foreach (string _iter12 in Qualifiers.Keys) + { + await oprot.WriteStringAsync(_iter12, cancellationToken); + await Qualifiers[_iter12].WriteAsync(oprot, cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TTypeQualifiers other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(Qualifiers, other.Qualifiers); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Qualifiers != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(Qualifiers); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp13 = new StringBuilder("TTypeQualifiers("); + if((Qualifiers != null)) + { + tmp13.Append(", Qualifiers: "); + Qualifiers.ToString(tmp13); + } + tmp13.Append(')'); + return tmp13.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs new file mode 100644 index 0000000000..6c4c42d9e3 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs @@ -0,0 +1,185 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUnionTypeEntry : TBase + { + + public Dictionary NameToTypePtr { get; set; } + + public TUnionTypeEntry() + { + } + + public TUnionTypeEntry(Dictionary nameToTypePtr) : this() + { + this.NameToTypePtr = nameToTypePtr; + } + + public TUnionTypeEntry DeepCopy() + { + var tmp40 = new TUnionTypeEntry(); + if((NameToTypePtr != null)) + { + tmp40.NameToTypePtr = this.NameToTypePtr.DeepCopy(); + } + return tmp40; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_nameToTypePtr = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Map) + { + { + var _map41 = await iprot.ReadMapBeginAsync(cancellationToken); + NameToTypePtr = new Dictionary(_map41.Count); + for(int _i42 = 0; _i42 < _map41.Count; ++_i42) + { + string _key43; + int _val44; + _key43 = await iprot.ReadStringAsync(cancellationToken); + _val44 = await iprot.ReadI32Async(cancellationToken); + NameToTypePtr[_key43] = _val44; + } + await iprot.ReadMapEndAsync(cancellationToken); + } + isset_nameToTypePtr = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_nameToTypePtr) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp45 = new TStruct("TUnionTypeEntry"); + await oprot.WriteStructBeginAsync(tmp45, cancellationToken); + var tmp46 = new TField(); + if((NameToTypePtr != null)) + { + tmp46.Name = "nameToTypePtr"; + tmp46.Type = TType.Map; + tmp46.ID = 1; + await oprot.WriteFieldBeginAsync(tmp46, cancellationToken); + await oprot.WriteMapBeginAsync(new TMap(TType.String, TType.I32, NameToTypePtr.Count), cancellationToken); + foreach (string _iter47 in NameToTypePtr.Keys) + { + await oprot.WriteStringAsync(_iter47, cancellationToken); + await oprot.WriteI32Async(NameToTypePtr[_iter47], cancellationToken); + } + await oprot.WriteMapEndAsync(cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUnionTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return TCollections.Equals(NameToTypePtr, other.NameToTypePtr); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((NameToTypePtr != null)) + { + hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp48 = new StringBuilder("TUnionTypeEntry("); + if((NameToTypePtr != null)) + { + tmp48.Append(", NameToTypePtr: "); + NameToTypePtr.ToString(tmp48); + } + tmp48.Append(')'); + return tmp48.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs new file mode 100644 index 0000000000..0af51fc483 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs @@ -0,0 +1,314 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUploadDataReq : TBase + { + private string _tableName; + private string _path; + + public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } + + public string TableName + { + get + { + return _tableName; + } + set + { + __isset.tableName = true; + this._tableName = value; + } + } + + public string Path + { + get + { + return _path; + } + set + { + __isset.path = true; + this._path = value; + } + } + + public byte[] Values { get; set; } + + + public Isset __isset; + public struct Isset + { + public bool tableName; + public bool path; + } + + public TUploadDataReq() + { + } + + public TUploadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessionHandle, byte[] values) : this() + { + this.SessionHandle = sessionHandle; + this.Values = values; + } + + public TUploadDataReq DeepCopy() + { + var tmp430 = new TUploadDataReq(); + if((SessionHandle != null)) + { + tmp430.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); + } + if((TableName != null) && __isset.tableName) + { + tmp430.TableName = this.TableName; + } + tmp430.__isset.tableName = this.__isset.tableName; + if((Path != null) && __isset.path) + { + tmp430.Path = this.Path; + } + tmp430.__isset.path = this.__isset.path; + if((Values != null)) + { + tmp430.Values = this.Values.ToArray(); + } + return tmp430; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_sessionHandle = false; + bool isset_values = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + SessionHandle = new global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle(); + await SessionHandle.ReadAsync(iprot, cancellationToken); + isset_sessionHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.String) + { + TableName = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 3: + if (field.Type == TType.String) + { + Path = await iprot.ReadStringAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 4: + if (field.Type == TType.String) + { + Values = await iprot.ReadBinaryAsync(cancellationToken); + isset_values = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_sessionHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_values) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp431 = new TStruct("TUploadDataReq"); + await oprot.WriteStructBeginAsync(tmp431, cancellationToken); + var tmp432 = new TField(); + if((SessionHandle != null)) + { + tmp432.Name = "sessionHandle"; + tmp432.Type = TType.Struct; + tmp432.ID = 1; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await SessionHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((TableName != null) && __isset.tableName) + { + tmp432.Name = "tableName"; + tmp432.Type = TType.String; + tmp432.ID = 2; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteStringAsync(TableName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Path != null) && __isset.path) + { + tmp432.Name = "path"; + tmp432.Type = TType.String; + tmp432.ID = 3; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteStringAsync(Path, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((Values != null)) + { + tmp432.Name = "values"; + tmp432.Type = TType.String; + tmp432.ID = 4; + await oprot.WriteFieldBeginAsync(tmp432, cancellationToken); + await oprot.WriteBinaryAsync(Values, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUploadDataReq other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(SessionHandle, other.SessionHandle) + && ((__isset.tableName == other.__isset.tableName) && ((!__isset.tableName) || (global::System.Object.Equals(TableName, other.TableName)))) + && ((__isset.path == other.__isset.path) && ((!__isset.path) || (global::System.Object.Equals(Path, other.Path)))) + && TCollections.Equals(Values, other.Values); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((SessionHandle != null)) + { + hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); + } + if((TableName != null) && __isset.tableName) + { + hashcode = (hashcode * 397) + TableName.GetHashCode(); + } + if((Path != null) && __isset.path) + { + hashcode = (hashcode * 397) + Path.GetHashCode(); + } + if((Values != null)) + { + hashcode = (hashcode * 397) + Values.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp433 = new StringBuilder("TUploadDataReq("); + if((SessionHandle != null)) + { + tmp433.Append(", SessionHandle: "); + SessionHandle.ToString(tmp433); + } + if((TableName != null) && __isset.tableName) + { + tmp433.Append(", TableName: "); + TableName.ToString(tmp433); + } + if((Path != null) && __isset.path) + { + tmp433.Append(", Path: "); + Path.ToString(tmp433); + } + if((Values != null)) + { + tmp433.Append(", Values: "); + Values.ToString(tmp433); + } + tmp433.Append(')'); + return tmp433.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs new file mode 100644 index 0000000000..1855089d7c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs @@ -0,0 +1,211 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUploadDataResp : TBase + { + + public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } + + public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } + + public TUploadDataResp() + { + } + + public TUploadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle operationHandle) : this() + { + this.Status = status; + this.OperationHandle = operationHandle; + } + + public TUploadDataResp DeepCopy() + { + var tmp435 = new TUploadDataResp(); + if((Status != null)) + { + tmp435.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); + } + if((OperationHandle != null)) + { + tmp435.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); + } + return tmp435; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_status = false; + bool isset_operationHandle = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.Struct) + { + Status = new global::Apache.Hive.Service.Rpc.Thrift.TStatus(); + await Status.ReadAsync(iprot, cancellationToken); + isset_status = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + case 2: + if (field.Type == TType.Struct) + { + OperationHandle = new global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle(); + await OperationHandle.ReadAsync(iprot, cancellationToken); + isset_operationHandle = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_status) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + if (!isset_operationHandle) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp436 = new TStruct("TUploadDataResp"); + await oprot.WriteStructBeginAsync(tmp436, cancellationToken); + var tmp437 = new TField(); + if((Status != null)) + { + tmp437.Name = "status"; + tmp437.Type = TType.Struct; + tmp437.ID = 1; + await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); + await Status.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + if((OperationHandle != null)) + { + tmp437.Name = "operationHandle"; + tmp437.Type = TType.Struct; + tmp437.ID = 2; + await oprot.WriteFieldBeginAsync(tmp437, cancellationToken); + await OperationHandle.WriteAsync(oprot, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUploadDataResp other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(Status, other.Status) + && global::System.Object.Equals(OperationHandle, other.OperationHandle); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((Status != null)) + { + hashcode = (hashcode * 397) + Status.GetHashCode(); + } + if((OperationHandle != null)) + { + hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp438 = new StringBuilder("TUploadDataResp("); + if((Status != null)) + { + tmp438.Append(", Status: "); + Status.ToString(tmp438); + } + if((OperationHandle != null)) + { + tmp438.Append(", OperationHandle: "); + OperationHandle.ToString(tmp438); + } + tmp438.Append(')'); + return tmp438.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs new file mode 100644 index 0000000000..67a522e8c7 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs @@ -0,0 +1,167 @@ +/** + * + * Autogenerated by Thrift Compiler (0.17.0) + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Thrift; +using Thrift.Collections; +using Thrift.Protocol; +using Thrift.Protocol.Entities; +using Thrift.Protocol.Utilities; +using Thrift.Transport; +using Thrift.Transport.Client; +using Thrift.Transport.Server; +using Thrift.Processor; + + +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0017 // object init can be simplified +#pragma warning disable IDE0028 // collection init can be simplified +#pragma warning disable IDE1006 // parts of the code use IDL spelling +#pragma warning disable CA1822 // empty DeepCopy() methods still non-static +#pragma warning disable IDE0083 // pattern matching "that is not SomeType" requires net5.0 but we still support earlier versions + +namespace Apache.Hive.Service.Rpc.Thrift +{ + + public partial class TUserDefinedTypeEntry : TBase + { + + public string TypeClassName { get; set; } + + public TUserDefinedTypeEntry() + { + } + + public TUserDefinedTypeEntry(string typeClassName) : this() + { + this.TypeClassName = typeClassName; + } + + public TUserDefinedTypeEntry DeepCopy() + { + var tmp50 = new TUserDefinedTypeEntry(); + if((TypeClassName != null)) + { + tmp50.TypeClassName = this.TypeClassName; + } + return tmp50; + } + + public async global::System.Threading.Tasks.Task ReadAsync(TProtocol iprot, CancellationToken cancellationToken) + { + iprot.IncrementRecursionDepth(); + try + { + bool isset_typeClassName = false; + TField field; + await iprot.ReadStructBeginAsync(cancellationToken); + while (true) + { + field = await iprot.ReadFieldBeginAsync(cancellationToken); + if (field.Type == TType.Stop) + { + break; + } + + switch (field.ID) + { + case 1: + if (field.Type == TType.String) + { + TypeClassName = await iprot.ReadStringAsync(cancellationToken); + isset_typeClassName = true; + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; + default: + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + break; + } + + await iprot.ReadFieldEndAsync(cancellationToken); + } + + await iprot.ReadStructEndAsync(cancellationToken); + if (!isset_typeClassName) + { + throw new TProtocolException(TProtocolException.INVALID_DATA); + } + } + finally + { + iprot.DecrementRecursionDepth(); + } + } + + public async global::System.Threading.Tasks.Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken) + { + oprot.IncrementRecursionDepth(); + try + { + var tmp51 = new TStruct("TUserDefinedTypeEntry"); + await oprot.WriteStructBeginAsync(tmp51, cancellationToken); + var tmp52 = new TField(); + if((TypeClassName != null)) + { + tmp52.Name = "typeClassName"; + tmp52.Type = TType.String; + tmp52.ID = 1; + await oprot.WriteFieldBeginAsync(tmp52, cancellationToken); + await oprot.WriteStringAsync(TypeClassName, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } + await oprot.WriteFieldStopAsync(cancellationToken); + await oprot.WriteStructEndAsync(cancellationToken); + } + finally + { + oprot.DecrementRecursionDepth(); + } + } + + public override bool Equals(object that) + { + if (!(that is TUserDefinedTypeEntry other)) return false; + if (ReferenceEquals(this, other)) return true; + return global::System.Object.Equals(TypeClassName, other.TypeClassName); + } + + public override int GetHashCode() { + int hashcode = 157; + unchecked { + if((TypeClassName != null)) + { + hashcode = (hashcode * 397) + TypeClassName.GetHashCode(); + } + } + return hashcode; + } + + public override string ToString() + { + var tmp53 = new StringBuilder("TUserDefinedTypeEntry("); + if((TypeClassName != null)) + { + tmp53.Append(", TypeClassName: "); + TypeClassName.ToString(tmp53); + } + tmp53.Append(')'); + return tmp53.ToString(); + } + } + +} diff --git a/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs new file mode 100644 index 0000000000..9080dc549c --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/ThriftSocketTransport.cs @@ -0,0 +1,68 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using System.Threading; +using Thrift; +using Thrift.Transport; +using Thrift.Transport.Client; +using System.Reflection; + +namespace Apache.Arrow.Adbc.Drivers.Apache +{ + class ThriftSocketTransport : TSocketTransport, IPeekableTransport + { + public ThriftSocketTransport(string host, int port, TConfiguration config, int timeout = 0) + : base(host, port, config, timeout) + { + } + + public Stream Input { get { return this.InputStream; } } + public Stream Output { get { return this.OutputStream; } } + } + + // TODO: Experimental + class ThriftHttpTransport : THttpTransport, IPeekableTransport + { + public ThriftHttpTransport(HttpClient httpClient, TConfiguration config) + : base(httpClient, config) + { + + } + + public Stream Input + { + get + { + // not advocating for this, but it works + Stream stream = ((FieldInfo[])((TypeInfo)this.GetType().BaseType).DeclaredFields)[4].GetValue(this) as Stream; + return stream; + } + } + public Stream Output + { + get + { + Stream stream = this.GetType().BaseType.GetField("_outputStream", BindingFlags.NonPublic).GetValue(this) as Stream; + return stream; + } + } + } +} diff --git a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj new file mode 100644 index 0000000000..0c4ca36935 --- /dev/null +++ b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -0,0 +1,42 @@ + + + + net7.0 + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj new file mode 100644 index 0000000000..e526d055e2 --- /dev/null +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -0,0 +1,42 @@ + + + + net7.0 + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + diff --git a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs new file mode 100644 index 0000000000..2d419e77c1 --- /dev/null +++ b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs @@ -0,0 +1,37 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Text.Json.Serialization; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache +{ + internal class ApacheTestConfiguration : TestConfiguration + { + [JsonPropertyName("hostName")] + public string HostName { get; set; } + + [JsonPropertyName("port")] + public string Port { get; set; } + + [JsonPropertyName("token"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string Token { get; set; } + + [JsonPropertyName("path"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string Path { get; set; } + + } +} diff --git a/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs b/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs new file mode 100644 index 0000000000..ae19e22247 --- /dev/null +++ b/csharp/test/Drivers/Apache/Impala/ImpalaTests.cs @@ -0,0 +1,50 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Impala; +using Apache.Arrow.Adbc.Tests.Xunit; +using Xunit; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Impala +{ + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] + public class ImpalaTests + { + [SkippableFact, Order(1)] + public void CanDriverConnect() + { + ApacheTestConfiguration testConfiguration = Utils.GetTestConfiguration("impalaconfig.json"); + + Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "HostName", testConfiguration.HostName }, + { "Port", testConfiguration.Port }, + }; + + AdbcDatabase database = new ImpalaDriver().Open(parameters); + AdbcConnection connection = database.Connect(new Dictionary()); + AdbcStatement statement = connection.CreateStatement(); + statement.SqlQuery = testConfiguration.Query; + QueryResult queryResult = statement.ExecuteQuery(); + + //Adbc.Tests.ConnectionTests.CanDriverConnect(queryResult, testConfiguration.ExpectedResultsCount); + + } + } +} diff --git a/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json b/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json new file mode 100644 index 0000000000..550fd3a97c --- /dev/null +++ b/csharp/test/Drivers/Apache/Impala/Resources/impalaconfig.json @@ -0,0 +1,6 @@ +{ + "hostName": "", + "port": "", + "query": "", + "expectedResults": 0 +} diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs new file mode 100644 index 0000000000..6fa2507a38 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -0,0 +1,206 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using Apache.Arrow.Adbc.Tests.Metadata; +using Apache.Arrow.Adbc.Tests.Xunit; +using Apache.Arrow.Ipc; +using Xunit; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + /// + /// Class for testing the Snowflake ADBC driver connection tests. + /// + /// + /// Tests are ordered to ensure data is created for the other + /// queries to run. + /// + [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] + public class DriverTests + { + SparkTestConfiguration _testConfiguration; + + public DriverTests() + { + Skip.IfNot(Utils.CanExecuteTestConfig(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE)); + _testConfiguration = Utils.LoadTestConfiguration(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [SkippableFact, Order(1)] + public void CanExecuteUpdate() + { + + //AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + //string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); + + //List expectedResults = new List() { -1, 1, 1 }; + + //for (int i = 0; i < queries.Length; i++) + //{ + // string query = queries[i]; + // AdbcStatement statement = adbcConnection.CreateStatement(); + // statement.SqlQuery = query; + + // UpdateResult updateResult = statement.ExecuteUpdate(); + + // Assert.Equal(expectedResults[i], updateResult.AffectedRows); + //} + } + + /// + /// Validates if the driver can call GetInfo. + /// + [SkippableFact, Order(2)] + public void CanGetInfo() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream stream = adbcConnection.GetInfo(new List() { AdbcInfoCode.DriverName, AdbcInfoCode.DriverVersion, AdbcInfoCode.VendorName }); + + RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; + UInt32Array infoNameArray = (UInt32Array)recordBatch.Column("info_name"); + + List expectedValues = new List() { "DriverName", "DriverVersion", "VendorName" }; + + for (int i = 0; i < infoNameArray.Length; i++) + { + AdbcInfoCode value = (AdbcInfoCode)infoNameArray.GetValue(i); + DenseUnionArray valueArray = (DenseUnionArray)recordBatch.Column("info_value"); + + Assert.Contains(value.ToString(), expectedValues); + + StringArray stringArray = (StringArray)valueArray.Fields[0]; + Console.WriteLine($"{value}={stringArray.GetString(i)}"); + } + } + + /// + /// Validates if the driver can call GetObjects. + /// + [SkippableFact, Order(3)] + public void CanGetObjects() + { + // need to add the database + string catalogName = _testConfiguration.Metadata.Catalog; + string schemaName = _testConfiguration.Metadata.Schema; + string tableName = _testConfiguration.Metadata.Table; + string columnName = null; + + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream stream = adbcConnection.GetObjects( + depth: AdbcConnection.GetObjectsDepth.All, + catalogPattern: catalogName, + dbSchemaPattern: schemaName, + tableNamePattern: tableName, + tableTypes: new List { "BASE TABLE", "VIEW" }, + columnNamePattern: columnName); + + RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result; + + List catalogs = GetObjectsParser.ParseCatalog(recordBatch, catalogName, schemaName); + + List columns = catalogs + .Select(s => s.DbSchemas) + .FirstOrDefault() + .Select(t => t.Tables) + .FirstOrDefault() + .Select(c => c.Columns) + .FirstOrDefault(); + + Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, columns.Count); + } + + /// + /// Validates if the driver can call GetTableSchema. + /// + [SkippableFact, Order(4)] + public void CanGetTableSchema() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + string catalogName = _testConfiguration.Metadata.Catalog; + string schemaName = _testConfiguration.Metadata.Schema; + string tableName = _testConfiguration.Metadata.Table; + + Schema schema = adbcConnection.GetTableSchema(catalogName, schemaName, tableName); + + int numberOfFields = schema.FieldsList.Count; + + Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, numberOfFields); + } + + /// + /// Validates if the driver can call GetTableTypes. + /// + [SkippableFact, Order(5)] + public void CanGetTableTypes() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + IArrowArrayStream arrowArrayStream = adbcConnection.GetTableTypes(); + + RecordBatch recordBatch = arrowArrayStream.ReadNextRecordBatchAsync().Result; + + StringArray stringArray = (StringArray)recordBatch.Column("table_type"); + + List known_types = new List + { + "BASE TABLE", "VIEW" + }; + + int results = 0; + + for (int i = 0; i < stringArray.Length; i++) + { + string value = stringArray.GetString(i); + + if (known_types.Contains(value)) + { + results++; + } + } + + Assert.Equal(known_types.Count, results); + } + + /// + /// Validates if the driver can connect to a live server and + /// parse the results. + /// + [SkippableFact, Order(6)] + public void CanExecuteQuery() + { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + + AdbcStatement statement = adbcConnection.CreateStatement(); + statement.SqlQuery = _testConfiguration.Query; + + QueryResult queryResult = statement.ExecuteQuery(); + + Tests.DriverTests.CanExecuteQuery(queryResult, _testConfiguration.ExpectedResultsCount); + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json new file mode 100644 index 0000000000..fb76fa164c --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/Resources/sparkconfig.json @@ -0,0 +1,13 @@ +{ + "hostName": "", + "path": "", + "token": "", + "query": "", + "expectedResults": 0, + "metadata": { + "catalog": "", + "schema": "", + "table": "", + "expectedColumnCount": 0 + } +} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs new file mode 100644 index 0000000000..c73134dd85 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs @@ -0,0 +1,26 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Text.Json.Serialization; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + internal class SparkTestConfiguration : ApacheTestConfiguration + { + + } +} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs new file mode 100644 index 0000000000..06d1812279 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs @@ -0,0 +1,109 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Spark; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + internal class SparkTestingUtils + { + internal const string SPARK_TEST_CONFIG_VARIABLE = "SPARK_TEST_CONFIG_FILE"; + + /// + /// Gets a the Spark ADBC driver with settings from the . + /// + /// + /// + /// + internal static AdbcConnection GetSparkAdbcConnection( + SparkTestConfiguration testConfiguration + ) + { + Dictionary parameters = GetSparkParameters(testConfiguration); + AdbcDatabase database = new SparkDriver().Open(parameters); + AdbcConnection connection = database.Connect(new Dictionary()); + + return connection; + } + + /// + /// Gets the parameters for connecting to Spark. + /// + /// + /// + internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) + { + Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase); + + // TODO: make these parameters that are passed in + + if (!string.IsNullOrEmpty(testConfiguration.HostName)) + { + parameters.Add("HostName", testConfiguration.HostName); + } + + if (!string.IsNullOrEmpty(testConfiguration.Path)) + { + parameters.Add("Path", testConfiguration.Path); + } + + if (!string.IsNullOrEmpty(testConfiguration.Token)) + { + parameters.Add("Token", testConfiguration.Token); + } + + return parameters; + } + + ///// + ///// Parses the queries from resources/SparkData.sql + ///// + ///// + //internal static string[] GetQueries(SparkTestConfiguration testConfiguration) + //{ + // // get past the license header + // StringBuilder content = new StringBuilder(); + + // string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; + + // string[] sql = File.ReadAllLines("resources/SparkData.sql"); + + // foreach (string line in sql) + // { + // if (!line.TrimStart().StartsWith("--")) + // { + // if (line.Contains(placeholder)) + // { + // string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); + + // content.AppendLine(modifiedLine); + // } + // else + // { + // content.AppendLine(line); + // } + // } + // } + + // string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); + + // return queries; + //} + } +} From 84b39b60e5f2e3946b73d2a0b8c8ea5d6815ceae Mon Sep 17 00:00:00 2001 From: Gopal Lal Date: Fri, 15 Mar 2024 12:07:45 +0530 Subject: [PATCH 17/61] initial skeleton for cloud fetch --- .../Drivers/Apache/Spark/SparkStatement.cs | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 4df66f2778..60fa8d1f28 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Apache.Arrow.Adbc.Drivers.Apache.Hive2; @@ -34,6 +35,7 @@ internal SparkStatement(SparkConnection connection) protected override void SetStatementProperties(TExecuteStatementReq statement) { + statement.CanReadArrowResult = true; statement.CanDownloadResult = true; statement.ConfOverlay = SparkConnection.timestampConfig; @@ -126,4 +128,75 @@ public void Dispose() } } } + + internal class ChunkDownloader + { + private Dictionary chunks; + + int currentChunk = 0; + HttpClient client; + + public ChunkDownloader(Dictionary> links) + { + this.links = links; + this.client = new HttpClient(); + } + + void initialize() + { + int workerThreads, completionPortThreads; + ThreadPool.GetMinThreads(out workerThreads, out completionPortThreads); + ThreadPool.SetMinThreads(5, completionPortThreads); + ThreadPool.SetMaxThreads(10, completionPortThreads); + foreach (KeyValuePair chunk in chunks) + { + ThreadPool.QueueUserWorkItem(async _ => + { + try + { + await chunk.Value.downloadData(this.client); + } + catch (Exception e) + { + Console.WriteLine(e); + } + }); + + } + + } + + + } + + public class Chunk + { + int chunkId; + string chunkUrl; + Dictionary headers; + public bool isDownloaded = false; + public bool isFailed = false; + public IArrowReader reader; + + public Chunk(int chunkId, string chunkUrl, Dictionary headers) + { + this.chunkId = chunkId; + this.chunkUrl = chunkUrl; + this.headers = headers; + this.reader = null; + } + + public async Task downloadData(HttpClient client) + { + var request = new HttpRequestMessage(HttpMethod.Get, chunkUrl); + foreach (KeyValuePair pair in headers) + { + request.Headers.Add(pair.Key, pair.Value); + } + HttpResponseMessage response = await client.SendAsync(request); + this.reader = new ArrowStreamReader(response.Content.ReadAsStream()); + isDownloaded = true; + + } + } } From 6d566b389f934b1818877267ecd0c461468d3665 Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Fri, 15 Mar 2024 14:22:20 +0530 Subject: [PATCH 18/61] add fetch results and batch traversing for cloud fetch --- .../Drivers/Apache/Spark/SparkStatement.cs | 89 ++++++++++++++++++- 1 file changed, 86 insertions(+), 3 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 60fa8d1f28..38542f679f 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -55,7 +55,13 @@ public override QueryResult ExecuteQuery() Schema schema = GetSchema(); - return new QueryResult(-1, new SparkReader(this, schema)); + return new QueryResult(-1, new CloudFetchReader(this, schema)); + } + + public List getChunkLinks() + { + TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); + return this.connection.client.GetResultSetMetadata(request).Result.ResultFiles; } public override UpdateResult ExecuteUpdate() @@ -127,15 +133,87 @@ public void Dispose() { } } + + + sealed class CloudFetchReader : IArrowArrayStream + { + SparkStatement statement; + Schema schema; + ChunkDownloader chunkDownloader; + List batches; + int index; + IArrowReader reader; + + public CloudFetchReader(SparkStatement statement, Schema schema) + { + this.statement = statement; + this.schema = schema; + TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 500000); + TFetchResultsResp response = this.statement.connection.client.FetchResults(request, cancellationToken: default).Result; + this.chunkDownloader = new ChunkDownloader(response.Results.ResultLinks); + } + + public Schema Schema { get { return schema; } } + + public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) + { + while (true) + { + if (this.reader != null) + { + RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + if (next != null) + { + return next; + } + this.reader = null; + if (this.chunkDownloader.chunks[this.chunkDownloader.currentChunkIndex] == null) + { + this.statement = null; + } + } + + if (this.statement == null) + { + return null; + } + + if (this.reader == null) + { + var currentChunk = this.chunkDownloader.chunks[this.chunkDownloader.currentChunkIndex]; + while (!currentChunk.isDownloaded) + { + Thread.Sleep(500); + } + this.chunkDownloader.currentChunkIndex++; + this.reader = currentChunk.reader; + } + } + } + + public void Dispose() + { + } + } } internal class ChunkDownloader { - private Dictionary chunks; + public Dictionary chunks; - int currentChunk = 0; + public int currentChunkIndex = 0; HttpClient client; + public ChunkDownloader(List links) + { + this.chunks = new Dictionary(); + for (int i = 0; i < links.Count; i++) + { + var currentChunk = new Chunk(i, links[i].FileLink); + this.chunks.Add(i, currentChunk); + } + } + public ChunkDownloader(Dictionary> links) { this.links = links; @@ -178,6 +256,11 @@ public class Chunk public bool isFailed = false; public IArrowReader reader; + public Chunk(int chunkId, string chunkUrl) : this(chunkId, chunkUrl, new Dictionary()) + { + + } + public Chunk(int chunkId, string chunkUrl, Dictionary headers) { this.chunkId = chunkId; From 9579fdbfa1a15ab282a34b8a7ff7bcef1fbee662 Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Fri, 15 Mar 2024 14:26:25 +0530 Subject: [PATCH 19/61] cleanup --- csharp/src/Drivers/Apache/Spark/SparkStatement.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 38542f679f..f34abafc4a 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -140,8 +140,6 @@ sealed class CloudFetchReader : IArrowArrayStream SparkStatement statement; Schema schema; ChunkDownloader chunkDownloader; - List batches; - int index; IArrowReader reader; public CloudFetchReader(SparkStatement statement, Schema schema) @@ -216,7 +214,7 @@ public ChunkDownloader(List links) public ChunkDownloader(Dictionary> links) { - this.links = links; + //this.links = links; this.client = new HttpClient(); } From 4051089ddfec2b8f09b71f3a7ef8d400d1feec56 Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Fri, 15 Mar 2024 14:26:42 +0530 Subject: [PATCH 20/61] cleanup --- csharp/src/Drivers/Apache/Spark/SparkStatement.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index f34abafc4a..1503c5977a 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -58,12 +58,6 @@ public override QueryResult ExecuteQuery() return new QueryResult(-1, new CloudFetchReader(this, schema)); } - public List getChunkLinks() - { - TGetResultSetMetadataReq request = new TGetResultSetMetadataReq(this.operationHandle); - return this.connection.client.GetResultSetMetadata(request).Result.ResultFiles; - } - public override UpdateResult ExecuteUpdate() { throw new NotImplementedException(); From 6b46336ae215b4c8ccc857d740da3aa5faf9371d Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Fri, 15 Mar 2024 15:21:19 +0530 Subject: [PATCH 21/61] init httpclient --- csharp/src/Drivers/Apache/Spark/SparkStatement.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 1503c5977a..e1d6b3ec0f 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -204,6 +204,7 @@ public ChunkDownloader(List links) var currentChunk = new Chunk(i, links[i].FileLink); this.chunks.Add(i, currentChunk); } + this.client = new HttpClient(); } public ChunkDownloader(Dictionary> links) From d5bdb768b9901913fa3fc35ae38d671b7f6816e4 Mon Sep 17 00:00:00 2001 From: Jade Wang <111902719+jadewang-db@users.noreply.github.com> Date: Sat, 16 Mar 2024 05:16:17 +0000 Subject: [PATCH 22/61] First working integration --- .../Drivers/Apache/Spark/SparkConnection.cs | 21 ++- .../Drivers/Apache/Spark/SparkStatement.cs | 7 +- .../Service/Rpc/Thrift/TBinaryColumn.cs | 5 +- .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 1 + .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 1 + .../Service/Rpc/Thrift/TDoubleColumn.cs | 1 + .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 1 + .../Service/Rpc/Thrift/TStringColumn.cs | 8 +- .../Drivers/Apache/Thrift/StreamExtensions.cs | 125 ++++++++++++++++++ ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 79 ++++++----- 12 files changed, 205 insertions(+), 52 deletions(-) create mode 100644 csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 49929e7b6f..923bcd9bbd 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; @@ -33,6 +32,9 @@ using Thrift.Protocol; using Thrift.Transport.Client; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; +using System.Diagnostics; + namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkConnection : HiveServer2Connection @@ -70,9 +72,16 @@ internal SparkConnection(IReadOnlyDictionary properties) protected override TProtocol CreateProtocol() { - string hostName = properties["HostName"]; - string path = properties["Path"]; - string token = properties["Token"]; + Trace.TraceError($"create protocol with {properties.Count} properties."); + + foreach(var property in properties.Keys) + { + Trace.TraceError($"key = {property} value = {properties[property]}"); + } + + string hostName = properties["hostname"]; + string path = properties["path"]; + string token = properties["token"]; string uri = "https://" + hostName + "/" + path; @@ -109,6 +118,7 @@ public override AdbcStatement CreateStatement() public override void Dispose() { + /* if (this.client != null) { TCloseSessionReq r6 = new TCloseSessionReq(this.sessionHandle); @@ -120,6 +130,7 @@ public override void Dispose() this.transport = null; this.client = null; } + */ } public override IArrowArrayStream GetInfo(List codes) @@ -299,6 +310,8 @@ private static IReadOnlyList ConvertSpanToReadOnlyList(Int32Array span) public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) { + Trace.TraceError($"getting objects with depth={depth.ToString()}, catalog = {catalogPattern}, dbschema = {dbSchemaPattern}, tablename = {tableNamePattern}"); + Dictionary>> catalogMap = new Dictionary>>(); if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) { diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index e1d6b3ec0f..69ac4a8284 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -55,7 +55,8 @@ public override QueryResult ExecuteQuery() Schema schema = GetSchema(); - return new QueryResult(-1, new CloudFetchReader(this, schema)); + return new QueryResult(-1, new SparkReader(this, schema)); + //return new QueryResult(-1, new CloudFetchReader(this, schema)); } public override UpdateResult ExecuteUpdate() @@ -65,7 +66,7 @@ public override UpdateResult ExecuteUpdate() public override object GetValue(IArrowArray arrowArray, int index) { - throw new NotSupportedException(); + return base.GetValue(arrowArray, index); } sealed class SparkReader : IArrowArrayStream @@ -270,7 +271,7 @@ public async Task downloadData(HttpClient client) request.Headers.Add(pair.Key, pair.Value); } HttpResponseMessage response = await client.SendAsync(request); - this.reader = new ArrowStreamReader(response.Content.ReadAsStream()); + this.reader = new ArrowStreamReader(response.Content.ReadAsStreamAsync().Result); isDownloaded = true; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs index 5aee28cf97..7b475d08e5 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs @@ -9,6 +9,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Apache.Arrow.Types; using Thrift.Collections; using Thrift.Protocol; @@ -87,7 +88,8 @@ public TBinaryColumn DeepCopy() for(int _i197 = 0; _i197 < length; ++_i197) { - typedMemory.Span[_i197] = offset; + //typedMemory.Span[_i197] = offset; + StreamExtensions.WriteInt32LittleEndian(offset, memory.Span, _i197 * 4); var size = await iprot.ReadI32Async(cancellationToken); offset += size; @@ -107,6 +109,7 @@ public TBinaryColumn DeepCopy() values.Append(tmp.AsMemory(0, size).Span); } typedMemory.Span[length] = offset; + StreamExtensions.WriteInt32LittleEndian(offset, memory.Span, length * 4); await iprot.ReadListEndAsync(cancellationToken); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs index 6d284c0f31..19259f295f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs @@ -8,6 +8,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs index ce579c37a7..95cf304763 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs @@ -10,6 +10,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs index c2bd55a682..0d13168e62 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs @@ -10,6 +10,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs index 9685a7f700..82a18b4adb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs @@ -10,6 +10,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; @@ -83,7 +84,8 @@ public TI16Column DeepCopy() await transport.ReadExactlyAsync(memory, cancellationToken); for (int _i152 = 0; _i152 < length; ++_i152) { - typedMemory.Span[_i152] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i152]); + //typedMemory.Span[_i152] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i152]); + StreamExtensions.ReverseEndiannessInt16(memory.Span, _i152 * 2); } await iprot.ReadListEndAsync(cancellationToken); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs index a5fe557bf7..6ed8a426dd 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -10,6 +10,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; @@ -82,7 +83,8 @@ public TI32Column DeepCopy() await transport.ReadExactlyAsync(memory, cancellationToken); for (int _i161 = 0; _i161 < length; ++_i161) { - typedMemory.Span[_i161] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i161]); + //typedMemory.Span[_i161] = BinaryPrimitives.ReverseEndianness(typedMemory.Span[_i161]); + StreamExtensions.ReverseEndianI32AtOffset(memory.Span, _i161 * 4); } await iprot.ReadListEndAsync(cancellationToken); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs index 9629336635..dc9ec7023a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs @@ -10,6 +10,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Protocol; using Thrift.Protocol.Entities; using Thrift.Protocol.Utilities; diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs index 95fedcd776..fc4b390fdc 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs @@ -9,6 +9,7 @@ using System.Threading; using Apache.Arrow; using Apache.Arrow.Adbc.Drivers.Apache; +using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using Thrift.Collections; using Thrift.Protocol; using Thrift.Protocol.Entities; @@ -86,7 +87,9 @@ public TStringColumn DeepCopy() for(int _i188 = 0; _i188 < length; ++_i188) { - typedMemory.Span[_i188] = offset; + //typedMemory.Span[_i188] = offset; + StreamExtensions.WriteInt32LittleEndian(offset, memory.Span, _i188 * 4); + var size = await iprot.ReadI32Async(cancellationToken); offset += size; @@ -105,7 +108,8 @@ public TStringColumn DeepCopy() await transport.ReadExactlyAsync(tmp.AsMemory(0, size), cancellationToken); values.Append(tmp.AsMemory(0, size).Span); } - typedMemory.Span[length] = offset; + //typedMemory.Span[length] = offset; + StreamExtensions.WriteInt32LittleEndian(offset, memory.Span, length * 4); await iprot.ReadListEndAsync(cancellationToken); } diff --git a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs new file mode 100644 index 0000000000..7df72609b4 --- /dev/null +++ b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System.Runtime.InteropServices; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Thrift +{ + public static class StreamExtensions + { + public static void WriteInt32LittleEndian(int value, Span buffer, int offset) + { + if (buffer == null) + throw new ArgumentNullException(nameof(buffer)); + + if (offset < 0 || offset > buffer.Length - sizeof(int)) + throw new ArgumentOutOfRangeException(nameof(offset), "Offset is outside the bounds of the buffer."); + + // Ensure the buffer is large enough to hold an int starting from the offset + if (buffer.Length < offset + sizeof(int)) + throw new ArgumentException("Buffer too small to write an Int32 at the specified offset."); + + // Write the integer in little-endian format + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + buffer[offset + 2] = (byte)(value >> 16); + buffer[offset + 3] = (byte)(value >> 24); + } + + public static void ReverseEndianI32AtOffset(Span buffer, int offset) + { + // Check if the buffer is large enough to contain an i32 at the given offset + if (offset < 0 || buffer.Length < offset + sizeof(int)) + throw new ArgumentException("Buffer is too small or offset is out of bounds."); + + // Swap the bytes to reverse the endianness of the i32 + // buffer[offset] and buffer[offset + 3] + // buffer[offset + 1] and buffer[offset + 2] + byte temp; + + temp = buffer[offset]; + buffer[offset] = buffer[offset + 3]; + buffer[offset + 3] = temp; + + temp = buffer[offset + 1]; + buffer[offset + 1] = buffer[offset + 2]; + buffer[offset + 2] = temp; + } + public static void ReverseEndiannessInt16(Span buffer, int offset) + { + if (buffer == null) + throw new ArgumentNullException(nameof(buffer)); + + if (offset < 0 || offset > buffer.Length - sizeof(short)) + throw new ArgumentOutOfRangeException(nameof(offset), "Offset is outside the bounds of the buffer."); + + // Swap the bytes to reverse the endianness of a 16-bit integer + (buffer[offset], buffer[offset + 1]) = (buffer[offset + 1], buffer[offset]); + } + + public static TValue? GetValueOrDefault(this IReadOnlyDictionary dictionary, TKey key, TValue? defaultValue = default) + { + if (dictionary == null) throw new ArgumentNullException(nameof(dictionary)); + + return dictionary.TryGetValue(key, out TValue value) ? value : defaultValue; + } + + public static async Task ReadExactlyAsync(this Stream stream, Memory memory, CancellationToken cancellationToken = default) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + // Try to get the underlying array from the Memory + if (!MemoryMarshal.TryGetArray(memory, out ArraySegment arraySegment)) + { + throw new InvalidOperationException("The provided Memory does not have an accessible underlying array."); + } + + int totalBytesRead = 0; + int count = memory.Length; + + while (totalBytesRead < count) + { + int bytesRead = await stream.ReadAsync(arraySegment.Array, arraySegment.Offset + totalBytesRead, count - totalBytesRead, cancellationToken).ConfigureAwait(false); + + if (bytesRead == 0) + { + // End of the stream reached before reading the desired amount + return totalBytesRead == 0; + } + + totalBytesRead += bytesRead; + } + + return true; + } + + public static async Task ReadExactlyAsync(this Stream stream, byte[] buffer, int offset, int count, CancellationToken cancellationToken = default) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + if (offset < 0 || offset >= buffer.Length) throw new ArgumentOutOfRangeException(nameof(offset)); + if (count < 0 || (count + offset) > buffer.Length) throw new ArgumentOutOfRangeException(nameof(count)); + + int bytesReadTotal = 0; + + while (bytesReadTotal < count) + { + int bytesRead = await stream.ReadAsync(buffer, offset + bytesReadTotal, count - bytesReadTotal, cancellationToken).ConfigureAwait(false); + + // If ReadAsync returns 0, it means the end of the stream has been reached + if (bytesRead == 0) + { + // If we haven't read any bytes at all, it's okay (might be at the end of the stream) + // But if we've read some bytes and then hit the end of the stream, it's unexpected + return bytesReadTotal == 0; + } + + bytesReadTotal += bytesRead; + } + + return true; + } + } +} diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index e526d055e2..5e01375fd3 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -1,42 +1,41 @@ - - - - net7.0 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - + + + + net472 + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + - - - + + + From 609238a3b35d391db66e6b65031fec03afc37aae Mon Sep 17 00:00:00 2001 From: David Li Date: Fri, 15 Mar 2024 13:35:50 -0400 Subject: [PATCH 23/61] ci: work around ASAN issue (#1618) Fixes #1617. --- .github/workflows/integration.yml | 16 ++++++++++++++ .github/workflows/native-unix.yml | 32 ++++++++++++++++++++++++++++ .github/workflows/nightly-verify.yml | 6 ++++++ .github/workflows/verify.yml | 5 +++++ 4 files changed, 59 insertions(+) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index ba7d7cb0c7..d34f721070 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -78,6 +78,10 @@ jobs: run: | mamba install -c conda-forge \ --file ci/conda_env_cpp.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + run: | + sudo sysctl vm.mmap_rnd_bits=28 - name: Build DuckDB Integration Tests shell: bash -l {0} env: @@ -135,6 +139,10 @@ jobs: check-latest: true cache: true cache-dependency-path: go/adbc/go.sum + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + run: | + sudo sysctl vm.mmap_rnd_bits=28 - name: Start SQLite server and Dremio shell: bash -l {0} run: | @@ -202,6 +210,10 @@ jobs: --file ci/conda_env_cpp.txt \ --file ci/conda_env_python.txt pip install pytest-error-for-skips + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + run: | + sudo sysctl vm.mmap_rnd_bits=28 - name: Build PostgreSQL Driver shell: bash -l {0} env: @@ -315,6 +327,10 @@ jobs: mamba install -c conda-forge \ --file ci/conda_env_cpp.txt \ --file ci/conda_env_python.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + run: | + sudo sysctl vm.mmap_rnd_bits=28 - uses: actions/setup-go@v5 with: go-version: 1.19.13 diff --git a/.github/workflows/native-unix.yml b/.github/workflows/native-unix.yml index 22ac5c4a91..052fcce8a2 100644 --- a/.github/workflows/native-unix.yml +++ b/.github/workflows/native-unix.yml @@ -167,6 +167,11 @@ jobs: run: | mamba install -c conda-forge \ --file ci/conda_env_cpp.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 - name: Build shell: bash -l {0} @@ -269,6 +274,11 @@ jobs: 'arrow-c-glib>=10.0.1' \ --file ci/conda_env_cpp.txt \ --file ci/conda_env_glib.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 - uses: actions/download-artifact@v3 with: @@ -306,6 +316,12 @@ jobs: check-latest: true cache: true cache-dependency-path: go/adbc/go.sum + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 + - name: Install staticcheck run: go install honnef.co/go/tools/cmd/staticcheck@v0.3.3 - name: Go Build @@ -354,6 +370,12 @@ jobs: miniforge-version: latest use-only-tar-bz2: false use-mamba: true + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 + - name: Install Dependencies shell: bash -l {0} run: | @@ -439,6 +461,11 @@ jobs: python=${{ matrix.python }} \ --file ci/conda_env_cpp.txt \ --file ci/conda_env_python.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 - uses: actions/setup-go@v5 with: go-version: 1.19.13 @@ -547,6 +574,11 @@ jobs: python=${{ matrix.python }} \ --file ci/conda_env_docs.txt \ --file ci/conda_env_python.txt + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 - uses: actions/download-artifact@v3 with: name: driver-manager-${{ matrix.os }} diff --git a/.github/workflows/nightly-verify.yml b/.github/workflows/nightly-verify.yml index 812a028b26..fb0cf30a60 100644 --- a/.github/workflows/nightly-verify.yml +++ b/.github/workflows/nightly-verify.yml @@ -135,6 +135,12 @@ jobs: miniforge-version: latest use-mamba: true + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 + - name: Verify if: matrix.os != 'windows-latest' env: diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index eef1ab155b..7ca61e4dd7 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -85,6 +85,11 @@ jobs: miniforge-variant: Mambaforge miniforge-version: latest use-mamba: true + - name: Work around ASAN issue (GH-1617) + shell: bash -l {0} + if: matrix.os == 'ubuntu-latest' + run: | + sudo sysctl vm.mmap_rnd_bits=28 - name: Verify if: matrix.os != 'windows-latest' env: From 9ae24cf797dc5152806a1e6189b2a7df9f53a7ab Mon Sep 17 00:00:00 2001 From: Jade Wang <111902719+jadewang-db@users.noreply.github.com> Date: Mon, 18 Mar 2024 03:46:29 +0000 Subject: [PATCH 24/61] Update SparkConnection.cs --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 923bcd9bbd..2e3e2e1386 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -81,7 +81,12 @@ protected override TProtocol CreateProtocol() string hostName = properties["hostname"]; string path = properties["path"]; - string token = properties["token"]; + string token; + + if (properties.ContainsKey("token")) + token = properties["token"]; + else + token = properties["password"]; string uri = "https://" + hostName + "/" + path; From 5038c9c1e61ec16ed3de4e71ad3b4a6afbda8f39 Mon Sep 17 00:00:00 2001 From: vikrantpuppala Date: Mon, 18 Mar 2024 15:40:19 +0530 Subject: [PATCH 25/61] Make changes for cloud fetch --- .../Drivers/Apache/Spark/SparkStatement.cs | 8 +-- .../Rpc/Thrift/TExecuteStatementReq.cs | 52 ++++++++++++++++++- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 69ac4a8284..741cb136e0 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -35,7 +35,9 @@ internal SparkStatement(SparkConnection connection) protected override void SetStatementProperties(TExecuteStatementReq statement) { - + statement.EnforceResultPersistenceMode = true; + statement.ResultPersistenceMode = 2; + statement.CanReadArrowResult = true; statement.CanDownloadResult = true; statement.ConfOverlay = SparkConnection.timestampConfig; @@ -52,7 +54,6 @@ public override QueryResult ExecuteQuery() { ExecuteStatement(); PollForResponse(); - Schema schema = GetSchema(); return new QueryResult(-1, new SparkReader(this, schema)); @@ -160,7 +161,7 @@ public async ValueTask ReadNextRecordBatchAsync(CancellationToken c return next; } this.reader = null; - if (this.chunkDownloader.chunks[this.chunkDownloader.currentChunkIndex] == null) + if (this.chunkDownloader.currentChunkIndex >= this.chunkDownloader.chunks.Count) { this.statement = null; } @@ -206,6 +207,7 @@ public ChunkDownloader(List links) this.chunks.Add(i, currentChunk); } this.client = new HttpClient(); + initialize(); } public ChunkDownloader(Dictionary> links) diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs index b6e5795e83..0625b20bcd 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs @@ -54,6 +54,7 @@ public partial class TExecuteStatementReq : TBase private string _requestValidation; private int _resultPersistenceMode; private bool _trimArrowBatchesToLimit; + private bool _enforceResultPersistenceMode; public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } @@ -85,6 +86,20 @@ public bool RunAsync } } + + public bool EnforceResultPersistenceMode + { + get + { + return _enforceResultPersistenceMode; + } + set + { + __isset.enforceResultPersistenceMode = true; + this._enforceResultPersistenceMode = value; + } + } + public long QueryTimeout { get @@ -315,6 +330,7 @@ public struct Isset public bool requestValidation; public bool resultPersistenceMode; public bool trimArrowBatchesToLimit; + public bool enforceResultPersistenceMode; } public TExecuteStatementReq() @@ -432,6 +448,11 @@ public TExecuteStatementReq DeepCopy() tmp357.TrimArrowBatchesToLimit = this.TrimArrowBatchesToLimit; } tmp357.__isset.trimArrowBatchesToLimit = this.__isset.trimArrowBatchesToLimit; + if(__isset.enforceResultPersistenceMode) + { + tmp357.EnforceResultPersistenceMode = this.EnforceResultPersistenceMode; + } + tmp357.__isset.enforceResultPersistenceMode = this.__isset.enforceResultPersistenceMode; return tmp357; } @@ -673,6 +694,16 @@ public TExecuteStatementReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; + case 3344: + if (field.Type == TType.Bool) + { + EnforceResultPersistenceMode = await iprot.ReadBoolAsync(cancellationToken); + } + else + { + await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); + } + break; default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; @@ -891,6 +922,15 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(TrimArrowBatchesToLimit, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } + if(__isset.enforceResultPersistenceMode) + { + tmp363.Name = "enforceResultPersistenceMode"; + tmp363.Type = TType.Bool; + tmp363.ID = 3344; + await oprot.WriteFieldBeginAsync(tmp363, cancellationToken); + await oprot.WriteBoolAsync(EnforceResultPersistenceMode, cancellationToken); + await oprot.WriteFieldEndAsync(cancellationToken); + } await oprot.WriteFieldStopAsync(cancellationToken); await oprot.WriteStructEndAsync(cancellationToken); } @@ -923,7 +963,8 @@ public override bool Equals(object that) && ((__isset.executionVersion == other.__isset.executionVersion) && ((!__isset.executionVersion) || (global::System.Object.Equals(ExecutionVersion, other.ExecutionVersion)))) && ((__isset.requestValidation == other.__isset.requestValidation) && ((!__isset.requestValidation) || (global::System.Object.Equals(RequestValidation, other.RequestValidation)))) && ((__isset.resultPersistenceMode == other.__isset.resultPersistenceMode) && ((!__isset.resultPersistenceMode) || (global::System.Object.Equals(ResultPersistenceMode, other.ResultPersistenceMode)))) - && ((__isset.trimArrowBatchesToLimit == other.__isset.trimArrowBatchesToLimit) && ((!__isset.trimArrowBatchesToLimit) || (global::System.Object.Equals(TrimArrowBatchesToLimit, other.TrimArrowBatchesToLimit)))); + && ((__isset.trimArrowBatchesToLimit == other.__isset.trimArrowBatchesToLimit) && ((!__isset.trimArrowBatchesToLimit) || (global::System.Object.Equals(TrimArrowBatchesToLimit, other.TrimArrowBatchesToLimit)))) + && ((__isset.enforceResultPersistenceMode == other.__isset.enforceResultPersistenceMode) && ((!__isset.enforceResultPersistenceMode) || (global::System.Object.Equals(EnforceResultPersistenceMode, other.EnforceResultPersistenceMode)))); } public override int GetHashCode() { @@ -997,6 +1038,10 @@ public override int GetHashCode() { { hashcode = (hashcode * 397) + ExecutionVersion.GetHashCode(); } + if(__isset.enforceResultPersistenceMode) + { + hashcode = (hashcode * 397) + EnforceResultPersistenceMode.GetHashCode(); + } if((RequestValidation != null) && __isset.requestValidation) { hashcode = (hashcode * 397) + RequestValidation.GetHashCode(); @@ -1091,6 +1136,11 @@ public override string ToString() tmp365.Append(", RejectHighCostQueries: "); RejectHighCostQueries.ToString(tmp365); } + if(__isset.enforceResultPersistenceMode) + { + tmp365.Append(", EnforceResultPersistenceMode: "); + EnforceResultPersistenceMode.ToString(tmp365); + } if(__isset.estimatedCost) { tmp365.Append(", EstimatedCost: "); From df422aab96985cf212007821b4a314edbf514ffa Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 10:04:18 -0700 Subject: [PATCH 26/61] Implements ExecuteUpdate. --- .../Drivers/Apache/Spark/SparkConnection.cs | 3 +- .../Drivers/Apache/Spark/SparkStatement.cs | 56 +++++++++++++++-- ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 7 ++- .../test/Drivers/Apache/Spark/DriverTests.cs | 31 +++++----- .../Apache/Spark/Resources/SparkData.sql | 56 +++++++++++++++++ .../Drivers/Apache/Spark/SparkTestingUtils.cs | 62 +++++++++---------- 6 files changed, 161 insertions(+), 54 deletions(-) create mode 100644 csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 2e3e2e1386..13a031eac2 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -365,7 +365,8 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal { string catalog = catalogList[i]; string schemaDb = schemaList[i]; - catalogMap.GetValueOrDefault(catalog).Add(schemaDb, new Dictionary()); + // It seems Spark sometimes returns empty string for catalog on some schema (temporary tables). + catalogMap.GetValueOrDefault(catalog)?.Add(schemaDb, new Dictionary()); } } diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 741cb136e0..19675597e6 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -28,6 +28,9 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkStatement : HiveServer2Statement { + private const string NumberOfAffectedRowsColumnName = "num_affected_rows"; + private const string NumberOfInsertedRowsColumnName = "num_inserted_rows"; + internal SparkStatement(SparkConnection connection) : base(connection) { @@ -35,7 +38,7 @@ internal SparkStatement(SparkConnection connection) protected override void SetStatementProperties(TExecuteStatementReq statement) { - statement.EnforceResultPersistenceMode = true; + statement.EnforceResultPersistenceMode = false; statement.ResultPersistenceMode = 2; statement.CanReadArrowResult = true; @@ -62,7 +65,51 @@ public override QueryResult ExecuteQuery() public override UpdateResult ExecuteUpdate() { - throw new NotImplementedException(); + + QueryResult queryResult = ExecuteQuery(); + using IArrowArrayStream stream = queryResult.Stream; + + // Check if the affected/inserted rows columns are returned in the result. + List columnsToCheck = new(); + Field affectedRowsField = stream.Schema.GetFieldByName(NumberOfAffectedRowsColumnName); + if (affectedRowsField != null) + { + if (affectedRowsField.DataType.TypeId != Types.ArrowTypeId.Int64) + { + throw new AdbcException($"Unexpected data type for column: '{NumberOfAffectedRowsColumnName}'", new ArgumentException(NumberOfAffectedRowsColumnName)); + } + columnsToCheck.Add(NumberOfAffectedRowsColumnName); + } + + Field insertedRowsField = stream.Schema.GetFieldByName(NumberOfInsertedRowsColumnName); + if (insertedRowsField != null) + { + if (insertedRowsField.DataType.TypeId != Types.ArrowTypeId.Int64) + { + throw new AdbcException($"Unexpected data type for column: '{NumberOfInsertedRowsColumnName}'", new ArgumentException(NumberOfInsertedRowsColumnName)); + } + columnsToCheck.Add(NumberOfInsertedRowsColumnName); + } + + // If no altered rows, i.e. DDC statements, then -1 is the default. + long affectedRows = -1; + while (true) + { + using RecordBatch nextBatch = stream.ReadNextRecordBatchAsync().Result; + if (nextBatch == null) { break; } + foreach (var columnName in columnsToCheck) + { + Int64Array numOfModifiedArray = (Int64Array)nextBatch.Column(columnName); + // Note: should only have one item, but iterate for completeness + for (int i = 0; i < numOfModifiedArray.Length; i++) + { + affectedRows += numOfModifiedArray.GetValue(i).GetValueOrDefault(0); + } + + } + } + + return new UpdateResult(affectedRows); } public override object GetValue(IArrowArray arrowArray, int index) @@ -235,7 +282,7 @@ void initialize() Console.WriteLine(e); } }); - + } } @@ -254,7 +301,7 @@ public class Chunk public Chunk(int chunkId, string chunkUrl) : this(chunkId, chunkUrl, new Dictionary()) { - + } public Chunk(int chunkId, string chunkUrl, Dictionary headers) @@ -275,7 +322,6 @@ public async Task downloadData(HttpClient client) HttpResponseMessage response = await client.SendAsync(request); this.reader = new ArrowStreamReader(response.Content.ReadAsStreamAsync().Result); isDownloaded = true; - } } } diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index 5e01375fd3..747c2fd05b 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -1,7 +1,7 @@ - + - net472 + net7.0 @@ -32,6 +32,9 @@ PreserveNewest + + PreserveNewest + diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs index 6fa2507a38..49403e6277 100644 --- a/csharp/test/Drivers/Apache/Spark/DriverTests.cs +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -44,29 +44,32 @@ public DriverTests() } /// - /// Validates if the driver can connect to a live server and - /// parse the results. + /// Validates if the driver can execute update statements. /// [SkippableFact, Order(1)] public void CanExecuteUpdate() { + AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - //AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); - - //string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); + string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); - //List expectedResults = new List() { -1, 1, 1 }; + List expectedResults = new() { + -1, // DROP TABLE + -1, // CREATE TABLE + 1, // INSERT + 1 // INSERT + }; - //for (int i = 0; i < queries.Length; i++) - //{ - // string query = queries[i]; - // AdbcStatement statement = adbcConnection.CreateStatement(); - // statement.SqlQuery = query; + for (int i = 0; i < queries.Length; i++) + { + string query = queries[i]; + AdbcStatement statement = adbcConnection.CreateStatement(); + statement.SqlQuery = query; - // UpdateResult updateResult = statement.ExecuteUpdate(); + UpdateResult updateResult = statement.ExecuteUpdate(); - // Assert.Equal(expectedResults[i], updateResult.AffectedRows); - //} + Assert.Equal(expectedResults[i], updateResult.AffectedRows); + } } /// diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql new file mode 100644 index 0000000000..192c27ff74 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -0,0 +1,56 @@ +DROP TABLE IF EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}; + +CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id LONG, + number DOUBLE, + decimal NUMERIC(38, 9), + is_active BOOLEAN, + name STRING, + data BINARY, + date DATE, + timestamp TIMESTAMP_NTZ, + timestamp_local TIMESTAMP_LTZ, + numbers ARRAY, + person STRUCT < + name STRING, + age LONG + > +); + +INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id, number, decimal, + is_active, + name, data, + date, timestamp, timestamp_local, + numbers, + person +) +VALUES ( + 1, 1.23, 4.56, + TRUE, + 'John Doe', + -- hex-encoded value `abc123` + X'616263313233', + '2023-09-08', '2023-09-08 12:34:56', '2023-09-08 12:34:56+00:00', + ARRAY(1, 2, 3), + STRUCT('John Doe', 30) +); + +INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id, number, decimal, + is_active, + name, data, + date, timestamp, timestamp_local, + numbers, + person +) +VALUES ( + 2, 1.7976931348623157e+308, 9.99999999999999999999999999999999E+28BD, + FALSE, + 'Jane Doe', + -- hex-encoded `def456` + X'646566343536', + '2023-09-09', '2023-09-09 13:45:57', '2023-09-09 13:45:57+00:00', + ARRAY(4, 5, 6), + STRUCT('Jane Doe', 40) +); diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs index 06d1812279..53a37d3ded 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs @@ -17,6 +17,9 @@ using System; using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; using Apache.Arrow.Adbc.Drivers.Apache.Spark; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark @@ -47,7 +50,7 @@ SparkTestConfiguration testConfiguration /// /// /// - internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) + internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) { Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -71,39 +74,34 @@ internal static Dictionary GetSparkParameters(SparkTestConfigurat return parameters; } - ///// - ///// Parses the queries from resources/SparkData.sql - ///// - ///// - //internal static string[] GetQueries(SparkTestConfiguration testConfiguration) - //{ - // // get past the license header - // StringBuilder content = new StringBuilder(); - - // string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; - - // string[] sql = File.ReadAllLines("resources/SparkData.sql"); - - // foreach (string line in sql) - // { - // if (!line.TrimStart().StartsWith("--")) - // { - // if (line.Contains(placeholder)) - // { - // string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); + /// + /// Parses the queries from resources/SparkData.sql + /// + /// + internal static string[] GetQueries(SparkTestConfiguration testConfiguration) + { + const string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; + string[] sql = File.ReadAllLines("Spark/Resources/SparkData.sql"); - // content.AppendLine(modifiedLine); - // } - // else - // { - // content.AppendLine(line); - // } - // } - // } + StringBuilder content = new StringBuilder(); + foreach (string line in sql) + { + if (line.TrimStart().StartsWith("--")) { continue; } + if (line.Contains(placeholder)) + { + // TODO: Try 3-level name + string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); + content.AppendLine(modifiedLine); + } + else + { + content.AppendLine(line); + } + } - // string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); + string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); - // return queries; - //} + return queries; + } } } From 36eaba2503a7eb5a6581ada3fe750c41e7d7882e Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 10:26:26 -0700 Subject: [PATCH 27/61] Correct line endings --- .../Apache/Spark/Resources/SparkData.sql | 112 +++++++++--------- .../Drivers/Apache/Spark/SparkTestingUtils.cs | 20 ++-- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql index 192c27ff74..442d8d5553 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -1,56 +1,56 @@ -DROP TABLE IF EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}; - -CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id LONG, - number DOUBLE, - decimal NUMERIC(38, 9), - is_active BOOLEAN, - name STRING, - data BINARY, - date DATE, - timestamp TIMESTAMP_NTZ, - timestamp_local TIMESTAMP_LTZ, - numbers ARRAY, - person STRUCT < - name STRING, - age LONG - > -); - -INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id, number, decimal, - is_active, - name, data, - date, timestamp, timestamp_local, - numbers, - person -) -VALUES ( - 1, 1.23, 4.56, - TRUE, - 'John Doe', - -- hex-encoded value `abc123` - X'616263313233', - '2023-09-08', '2023-09-08 12:34:56', '2023-09-08 12:34:56+00:00', - ARRAY(1, 2, 3), - STRUCT('John Doe', 30) -); - -INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id, number, decimal, - is_active, - name, data, - date, timestamp, timestamp_local, - numbers, - person -) -VALUES ( - 2, 1.7976931348623157e+308, 9.99999999999999999999999999999999E+28BD, - FALSE, - 'Jane Doe', - -- hex-encoded `def456` - X'646566343536', - '2023-09-09', '2023-09-09 13:45:57', '2023-09-09 13:45:57+00:00', - ARRAY(4, 5, 6), - STRUCT('Jane Doe', 40) -); +DROP TABLE IF EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}; + +CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id LONG, + number DOUBLE, + decimal NUMERIC(38, 9), + is_active BOOLEAN, + name STRING, + data BINARY, + date DATE, + timestamp TIMESTAMP_NTZ, + timestamp_local TIMESTAMP_LTZ, + numbers ARRAY, + person STRUCT < + name STRING, + age LONG + > +); + +INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id, number, decimal, + is_active, + name, data, + date, timestamp, timestamp_local, + numbers, + person +) +VALUES ( + 1, 1.23, 4.56, + TRUE, + 'John Doe', + -- hex-encoded value `abc123` + X'616263313233', + '2023-09-08', '2023-09-08 12:34:56', '2023-09-08 12:34:56+00:00', + ARRAY(1, 2, 3), + STRUCT('John Doe', 30) +); + +INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id, number, decimal, + is_active, + name, data, + date, timestamp, timestamp_local, + numbers, + person +) +VALUES ( + 2, 1.7976931348623157e+308, 9.99999999999999999999999999999999E+28BD, + FALSE, + 'Jane Doe', + -- hex-encoded `def456` + X'646566343536', + '2023-09-09', '2023-09-09 13:45:57', '2023-09-09 13:45:57+00:00', + ARRAY(4, 5, 6), + STRUCT('Jane Doe', 40) +); diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs index 53a37d3ded..ade41a107c 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs @@ -86,16 +86,16 @@ internal static string[] GetQueries(SparkTestConfiguration testConfiguration) StringBuilder content = new StringBuilder(); foreach (string line in sql) { - if (line.TrimStart().StartsWith("--")) { continue; } - if (line.Contains(placeholder)) - { - // TODO: Try 3-level name - string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); - content.AppendLine(modifiedLine); - } - else - { - content.AppendLine(line); + if (line.TrimStart().StartsWith("--")) { continue; } + if (line.Contains(placeholder)) + { + // TODO: Try 3-level name + string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); + content.AppendLine(modifiedLine); + } + else + { + content.AppendLine(line); } } From c419b858a64886aeb744dfd3e5e15d727b0aa576 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 10:33:53 -0700 Subject: [PATCH 28/61] Correct line endings and add licenses --- .../Drivers/Apache/Thrift/StreamExtensions.cs | 19 +++- ...che.Arrow.Adbc.Tests.Drivers.Apache.csproj | 88 +++++++++---------- .../Apache/Spark/Resources/SparkData.sql | 16 ++++ 3 files changed, 78 insertions(+), 45 deletions(-) diff --git a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs index 7df72609b4..3bb035c8e4 100644 --- a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs +++ b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs @@ -1,4 +1,21 @@ -using System; +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index 747c2fd05b..77f1066fa5 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -1,44 +1,44 @@ - - - - net7.0 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - - - - + + + + net7.0 + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql index 442d8d5553..173c08447a 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -1,3 +1,19 @@ + + -- Licensed to the Apache Software Foundation (ASF) under one or more + -- contributor license agreements. See the NOTICE file distributed with + -- this work for additional information regarding copyright ownership. + -- The ASF licenses this file to You under the Apache License, Version 2.0 + -- (the "License"); you may not use this file except in compliance with + -- the License. You may obtain a copy of the License at + + -- http://www.apache.org/licenses/LICENSE-2.0 + + -- Unless required by applicable law or agreed to in writing, software + -- distributed under the License is distributed on an "AS IS" BASIS, + -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + -- See the License for the specific language governing permissions and + -- limitations under the License. + DROP TABLE IF EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}; CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( From d34c5ba995d1115d145e979fa8d93d479ee4d66d Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 12:18:30 -0700 Subject: [PATCH 29/61] Correct affected rows behaviour. Add DELETE statement. --- .../Drivers/Apache/Spark/SparkStatement.cs | 43 +++++-------------- .../test/Drivers/Apache/Spark/DriverTests.cs | 4 +- .../Apache/Spark/Resources/SparkData.sql | 22 ++++++++++ 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 19675597e6..2b3aca4020 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -28,9 +28,6 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkStatement : HiveServer2Statement { - private const string NumberOfAffectedRowsColumnName = "num_affected_rows"; - private const string NumberOfInsertedRowsColumnName = "num_inserted_rows"; - internal SparkStatement(SparkConnection connection) : base(connection) { @@ -65,51 +62,33 @@ public override QueryResult ExecuteQuery() public override UpdateResult ExecuteUpdate() { + const string NumberOfAffectedRowsColumnName = "num_affected_rows"; QueryResult queryResult = ExecuteQuery(); using IArrowArrayStream stream = queryResult.Stream; - // Check if the affected/inserted rows columns are returned in the result. - List columnsToCheck = new(); + // Check if the affected rows columns are returned in the result. Field affectedRowsField = stream.Schema.GetFieldByName(NumberOfAffectedRowsColumnName); - if (affectedRowsField != null) + if (affectedRowsField != null && affectedRowsField.DataType.TypeId != Types.ArrowTypeId.Int64) { - if (affectedRowsField.DataType.TypeId != Types.ArrowTypeId.Int64) - { - throw new AdbcException($"Unexpected data type for column: '{NumberOfAffectedRowsColumnName}'", new ArgumentException(NumberOfAffectedRowsColumnName)); - } - columnsToCheck.Add(NumberOfAffectedRowsColumnName); + throw new AdbcException($"Unexpected data type for column: '{NumberOfAffectedRowsColumnName}'", new ArgumentException(NumberOfAffectedRowsColumnName)); } - Field insertedRowsField = stream.Schema.GetFieldByName(NumberOfInsertedRowsColumnName); - if (insertedRowsField != null) - { - if (insertedRowsField.DataType.TypeId != Types.ArrowTypeId.Int64) - { - throw new AdbcException($"Unexpected data type for column: '{NumberOfInsertedRowsColumnName}'", new ArgumentException(NumberOfInsertedRowsColumnName)); - } - columnsToCheck.Add(NumberOfInsertedRowsColumnName); - } - - // If no altered rows, i.e. DDC statements, then -1 is the default. - long affectedRows = -1; + long affectedRows = 0; while (true) { using RecordBatch nextBatch = stream.ReadNextRecordBatchAsync().Result; if (nextBatch == null) { break; } - foreach (var columnName in columnsToCheck) + Int64Array numOfModifiedArray = (Int64Array)nextBatch.Column(NumberOfAffectedRowsColumnName); + // Note: should only have one item, but iterate for completeness + for (int i = 0; i < numOfModifiedArray.Length; i++) { - Int64Array numOfModifiedArray = (Int64Array)nextBatch.Column(columnName); - // Note: should only have one item, but iterate for completeness - for (int i = 0; i < numOfModifiedArray.Length; i++) - { - affectedRows += numOfModifiedArray.GetValue(i).GetValueOrDefault(0); - } - + affectedRows += numOfModifiedArray.GetValue(i).GetValueOrDefault(0); } } - return new UpdateResult(affectedRows); + // If no altered rows, i.e. DDC statements, then -1 is the default. + return new UpdateResult(affectedRows == 0 ? -1 : affectedRows); } public override object GetValue(IArrowArray arrowArray, int index) diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs index 49403e6277..c1879e783f 100644 --- a/csharp/test/Drivers/Apache/Spark/DriverTests.cs +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -57,7 +57,9 @@ public void CanExecuteUpdate() -1, // DROP TABLE -1, // CREATE TABLE 1, // INSERT - 1 // INSERT + 1, // INSERT + 1, // INSERT + 1, // DELETE }; for (int i = 0; i < queries.Length; i++) diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql index 173c08447a..a06703ba14 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -70,3 +70,25 @@ VALUES ( ARRAY(4, 5, 6), STRUCT('Jane Doe', 40) ); + +INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( + id, number, decimal, + is_active, + name, data, + date, timestamp, timestamp_local, + numbers, + person +) +VALUES ( + 3, -1.7976931348623157e+308, -9.99999999999999999999999999999999E+28BD, + FALSE, + 'Jack Doe', + -- hex-encoded `def456` + X'646566343536', + '1556-01-02', '1970-01-01 00:00:00', '9999-12-31 23:59:59+00:00', + ARRAY(7, 8, 9), + STRUCT('Jack Doe', 50) +); + +DELETE FROM {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} + WHERE id = 3; From ad7030416b718035bb1fef6a9a8e49534bbc29d2 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 12:37:23 -0700 Subject: [PATCH 30/61] Added more data types and UPDATE statement. --- .../test/Drivers/Apache/Spark/DriverTests.cs | 1 + .../Apache/Spark/Resources/SparkData.sql | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs index c1879e783f..7c8d31ff41 100644 --- a/csharp/test/Drivers/Apache/Spark/DriverTests.cs +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -59,6 +59,7 @@ public void CanExecuteUpdate() 1, // INSERT 1, // INSERT 1, // INSERT + 1, // UPDATE 1, // DELETE }; diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql index a06703ba14..7ac0084dde 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -18,6 +18,10 @@ DROP TABLE IF EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}; CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( id LONG, + byte BYTE, + short SHORT, + integer INT, + float FLOAT, number DOUBLE, decimal NUMERIC(38, 9), is_active BOOLEAN, @@ -34,7 +38,8 @@ CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id, number, decimal, + id, + byte, short, integer, float, number, decimal, is_active, name, data, date, timestamp, timestamp_local, @@ -42,7 +47,8 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( person ) VALUES ( - 1, 1.23, 4.56, + 1, + 2, 3, 4, 7.89, 1.23, 4.56, TRUE, 'John Doe', -- hex-encoded value `abc123` @@ -53,7 +59,8 @@ VALUES ( ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id, number, decimal, + id, + byte, short, integer, float, number, decimal, is_active, name, data, date, timestamp, timestamp_local, @@ -61,7 +68,8 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( person ) VALUES ( - 2, 1.7976931348623157e+308, 9.99999999999999999999999999999999E+28BD, + 2, + 127, 32767, 2147483647, 3.4028234663852886e+38, 1.7976931348623157e+308, 9.99999999999999999999999999999999E+28BD, FALSE, 'Jane Doe', -- hex-encoded `def456` @@ -72,7 +80,8 @@ VALUES ( ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( - id, number, decimal, + id, + byte, short, integer, float, number, decimal, is_active, name, data, date, timestamp, timestamp_local, @@ -80,7 +89,8 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( person ) VALUES ( - 3, -1.7976931348623157e+308, -9.99999999999999999999999999999999E+28BD, + 3, + -128, -32768, -2147483648, -3.4028234663852886e+38, -1.7976931348623157e+308, -9.99999999999999999999999999999999E+28BD, FALSE, 'Jack Doe', -- hex-encoded `def456` @@ -90,5 +100,9 @@ VALUES ( STRUCT('Jack Doe', 50) ); +UPDATE {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} + SET short = 0 + WHERE id = 3; + DELETE FROM {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} WHERE id = 3; From 9e2f5a00e6a896c67525b52e398cb996240eec8f Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 20 Mar 2024 13:47:47 -0700 Subject: [PATCH 31/61] Removed empty lines. --- csharp/src/Drivers/Apache/Spark/SparkStatement.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 2b3aca4020..342fbbeb02 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -261,12 +261,8 @@ void initialize() Console.WriteLine(e); } }); - } - } - - } public class Chunk @@ -280,7 +276,6 @@ public class Chunk public Chunk(int chunkId, string chunkUrl) : this(chunkId, chunkUrl, new Dictionary()) { - } public Chunk(int chunkId, string chunkUrl, Dictionary headers) From 295694ca764f2efd069a6b44e61c53839859ba9e Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 11:03:07 -0700 Subject: [PATCH 32/61] Revert frameworks to new472;net6.0. --- .../src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj | 2 +- .../Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj index ebd30f6134..3c72dfb666 100644 --- a/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj +++ b/csharp/src/Drivers/Apache/Apache.Arrow.Adbc.Drivers.Apache.csproj @@ -1,7 +1,7 @@ - net7.0 + net472;net6.0 diff --git a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj index 77f1066fa5..d748c371dc 100644 --- a/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ b/csharp/test/Drivers/Apache/Apache.Arrow.Adbc.Tests.Drivers.Apache.csproj @@ -1,7 +1,7 @@ - net7.0 + net472;net6.0 From 2e4dbd169d4e2963b216d56822047674a49e49ec Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 12:43:22 -0700 Subject: [PATCH 33/61] Fixed trailing spaces and removed unused file. --- .../Service/Rpc/Thrift/TArrayTypeEntry.cs | 2 +- .../Service/Rpc/Thrift/TBinaryColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TBoolValue.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TByteValue.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TCLIService.cs | 300 +++++++++--------- .../Rpc/Thrift/TCancelDelegationTokenReq.cs | 2 +- .../Rpc/Thrift/TCancelDelegationTokenResp.cs | 2 +- .../Service/Rpc/Thrift/TCancelOperationReq.cs | 2 +- .../Rpc/Thrift/TCancelOperationResp.cs | 2 +- .../Service/Rpc/Thrift/TCloseOperationReq.cs | 2 +- .../Service/Rpc/Thrift/TCloseOperationResp.cs | 2 +- .../Service/Rpc/Thrift/TCloseSessionReq.cs | 2 +- .../Service/Rpc/Thrift/TCloseSessionResp.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TColumnDesc.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TColumnValue.cs | 2 +- .../Rpc/Thrift/TDBSqlCloudResultFile.cs | 2 +- .../Service/Rpc/Thrift/TDBSqlConfValue.cs | 2 +- .../Rpc/Thrift/TDBSqlSessionCapabilities.cs | 2 +- .../Service/Rpc/Thrift/TDBSqlSessionConf.cs | 2 +- .../Service/Rpc/Thrift/TDBSqlTempView.cs | 2 +- .../Service/Rpc/Thrift/TDoubleColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TDoubleValue.cs | 2 +- .../Service/Rpc/Thrift/TDownloadDataReq.cs | 2 +- .../Service/Rpc/Thrift/TDownloadDataResp.cs | 2 +- .../Rpc/Thrift/TExecuteStatementReq.cs | 2 +- .../Rpc/Thrift/TExecuteStatementResp.cs | 2 +- .../Service/Rpc/Thrift/TExpressionInfo.cs | 2 +- .../Service/Rpc/Thrift/TFetchResultsReq.cs | 4 +- .../Service/Rpc/Thrift/TFetchResultsResp.cs | 2 +- .../Service/Rpc/Thrift/TGetCatalogsReq.cs | 2 +- .../Service/Rpc/Thrift/TGetCatalogsResp.cs | 2 +- .../Service/Rpc/Thrift/TGetColumnsReq.cs | 2 +- .../Service/Rpc/Thrift/TGetColumnsResp.cs | 2 +- .../Rpc/Thrift/TGetCrossReferenceReq.cs | 2 +- .../Rpc/Thrift/TGetCrossReferenceResp.cs | 2 +- .../Rpc/Thrift/TGetDelegationTokenReq.cs | 2 +- .../Rpc/Thrift/TGetDelegationTokenResp.cs | 2 +- .../Service/Rpc/Thrift/TGetFunctionsReq.cs | 2 +- .../Service/Rpc/Thrift/TGetFunctionsResp.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TGetInfoReq.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TGetInfoResp.cs | 2 +- .../Service/Rpc/Thrift/TGetInfoValue.cs | 2 +- .../Rpc/Thrift/TGetOperationStatusReq.cs | 2 +- .../Rpc/Thrift/TGetOperationStatusResp.cs | 4 +- .../Service/Rpc/Thrift/TGetPrimaryKeysReq.cs | 2 +- .../Service/Rpc/Thrift/TGetPrimaryKeysResp.cs | 2 +- .../Service/Rpc/Thrift/TGetQueryIdReq.cs | 2 +- .../Service/Rpc/Thrift/TGetQueryIdResp.cs | 2 +- .../Rpc/Thrift/TGetResultSetMetadataReq.cs | 2 +- .../Rpc/Thrift/TGetResultSetMetadataResp.cs | 2 +- .../Service/Rpc/Thrift/TGetSchemasReq.cs | 2 +- .../Service/Rpc/Thrift/TGetSchemasResp.cs | 2 +- .../Service/Rpc/Thrift/TGetTableTypesReq.cs | 2 +- .../Service/Rpc/Thrift/TGetTableTypesResp.cs | 2 +- .../Service/Rpc/Thrift/TGetTablesReq.cs | 2 +- .../Service/Rpc/Thrift/TGetTablesResp.cs | 2 +- .../Service/Rpc/Thrift/TGetTypeInfoReq.cs | 2 +- .../Service/Rpc/Thrift/TGetTypeInfoResp.cs | 2 +- .../Service/Rpc/Thrift/THandleIdentifier.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI16Value.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI32Value.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TI64Value.cs | 2 +- .../Service/Rpc/Thrift/TMapTypeEntry.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TNamespace.cs | 2 +- .../Service/Rpc/Thrift/TOpenSessionReq.cs | 4 +- .../Service/Rpc/Thrift/TOpenSessionResp.cs | 4 +- .../Service/Rpc/Thrift/TOperationHandle.cs | 4 +- .../Service/Rpc/Thrift/TPrimitiveTypeEntry.cs | 4 +- .../Service/Rpc/Thrift/TProgressUpdateResp.cs | 4 +- .../Rpc/Thrift/TRenewDelegationTokenReq.cs | 2 +- .../Rpc/Thrift/TRenewDelegationTokenResp.cs | 2 +- .../Apache/Thrift/Service/Rpc/Thrift/TRow.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TRowSet.cs | 2 +- .../Service/Rpc/Thrift/TSessionHandle.cs | 2 +- .../Service/Rpc/Thrift/TSetClientInfoReq.cs | 2 +- .../Service/Rpc/Thrift/TSetClientInfoResp.cs | 2 +- .../Service/Rpc/Thrift/TSparkArrowBatch.cs | 2 +- .../Rpc/Thrift/TSparkArrowResultLink.cs | 2 +- .../Service/Rpc/Thrift/TSparkArrowTypes.cs | 2 +- .../Service/Rpc/Thrift/TSparkDirectResults.cs | 2 +- .../Rpc/Thrift/TSparkGetDirectResults.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TStatus.cs | 4 +- .../Service/Rpc/Thrift/TStringColumn.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TStringValue.cs | 2 +- .../Service/Rpc/Thrift/TStructTypeEntry.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TTableSchema.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TTypeDesc.cs | 2 +- .../Thrift/Service/Rpc/Thrift/TTypeEntry.cs | 2 +- .../Service/Rpc/Thrift/TTypeQualifierValue.cs | 2 +- .../Service/Rpc/Thrift/TTypeQualifiers.cs | 2 +- .../Service/Rpc/Thrift/TUnionTypeEntry.cs | 2 +- .../Service/Rpc/Thrift/TUploadDataReq.cs | 2 +- .../Service/Rpc/Thrift/TUploadDataResp.cs | 2 +- .../Rpc/Thrift/TUserDefinedTypeEntry.cs | 2 +- databricks.md | 3 - 101 files changed, 258 insertions(+), 261 deletions(-) delete mode 100644 databricks.md diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs index ce59bb03fe..bd4f36f36f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TArrayTypeEntry.cs @@ -84,7 +84,7 @@ public TArrayTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs index 7b475d08e5..f63e1add0b 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs @@ -131,7 +131,7 @@ public TBinaryColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs index 19259f295f..49771c0498 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs @@ -104,7 +104,7 @@ public TBoolColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs index ed39088e5c..2cde7a2dd7 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs @@ -100,7 +100,7 @@ public TBoolValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs index 95cf304763..56ac220a76 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs @@ -102,7 +102,7 @@ public TByteColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs index d9b15e8ee1..0d82196ecb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs @@ -100,7 +100,7 @@ public TByteValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs index a62f77f790..e127e49201 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs @@ -109,11 +109,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_OpenSession(global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Call, SeqId), cancellationToken); - + var tmp655 = new InternalStructs.OpenSession_args() { Req = req, }; - + await tmp655.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -121,7 +121,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_OpenSession(CancellationToken cancellationToken = default) { - + var tmp656 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp656.Type == TMessageType.Exception) { @@ -149,11 +149,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_CloseSession(global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Call, SeqId), cancellationToken); - + var tmp659 = new InternalStructs.CloseSession_args() { Req = req, }; - + await tmp659.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -161,7 +161,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_CloseSession(CancellationToken cancellationToken = default) { - + var tmp660 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp660.Type == TMessageType.Exception) { @@ -189,11 +189,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Call, SeqId), cancellationToken); - + var tmp663 = new InternalStructs.GetInfo_args() { Req = req, }; - + await tmp663.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -201,7 +201,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetInfo(CancellationToken cancellationToken = default) { - + var tmp664 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp664.Type == TMessageType.Exception) { @@ -229,11 +229,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_ExecuteStatement(global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Call, SeqId), cancellationToken); - + var tmp667 = new InternalStructs.ExecuteStatement_args() { Req = req, }; - + await tmp667.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -241,7 +241,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_ExecuteStatement(CancellationToken cancellationToken = default) { - + var tmp668 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp668.Type == TMessageType.Exception) { @@ -269,11 +269,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetTypeInfo(global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Call, SeqId), cancellationToken); - + var tmp671 = new InternalStructs.GetTypeInfo_args() { Req = req, }; - + await tmp671.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -281,7 +281,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetTypeInfo(CancellationToken cancellationToken = default) { - + var tmp672 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp672.Type == TMessageType.Exception) { @@ -309,11 +309,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetCatalogs(global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Call, SeqId), cancellationToken); - + var tmp675 = new InternalStructs.GetCatalogs_args() { Req = req, }; - + await tmp675.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -321,7 +321,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetCatalogs(CancellationToken cancellationToken = default) { - + var tmp676 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp676.Type == TMessageType.Exception) { @@ -349,11 +349,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetSchemas(global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Call, SeqId), cancellationToken); - + var tmp679 = new InternalStructs.GetSchemas_args() { Req = req, }; - + await tmp679.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -361,7 +361,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetSchemas(CancellationToken cancellationToken = default) { - + var tmp680 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp680.Type == TMessageType.Exception) { @@ -389,11 +389,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetTables(global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Call, SeqId), cancellationToken); - + var tmp683 = new InternalStructs.GetTables_args() { Req = req, }; - + await tmp683.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -401,7 +401,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetTables(CancellationToken cancellationToken = default) { - + var tmp684 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp684.Type == TMessageType.Exception) { @@ -429,11 +429,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetTableTypes(global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Call, SeqId), cancellationToken); - + var tmp687 = new InternalStructs.GetTableTypes_args() { Req = req, }; - + await tmp687.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -441,7 +441,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetTableTypes(CancellationToken cancellationToken = default) { - + var tmp688 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp688.Type == TMessageType.Exception) { @@ -469,11 +469,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetColumns(global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Call, SeqId), cancellationToken); - + var tmp691 = new InternalStructs.GetColumns_args() { Req = req, }; - + await tmp691.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -481,7 +481,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetColumns(CancellationToken cancellationToken = default) { - + var tmp692 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp692.Type == TMessageType.Exception) { @@ -509,11 +509,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetFunctions(global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Call, SeqId), cancellationToken); - + var tmp695 = new InternalStructs.GetFunctions_args() { Req = req, }; - + await tmp695.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -521,7 +521,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetFunctions(CancellationToken cancellationToken = default) { - + var tmp696 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp696.Type == TMessageType.Exception) { @@ -549,11 +549,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetPrimaryKeys(global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Call, SeqId), cancellationToken); - + var tmp699 = new InternalStructs.GetPrimaryKeys_args() { Req = req, }; - + await tmp699.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -561,7 +561,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetPrimaryKeys(CancellationToken cancellationToken = default) { - + var tmp700 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp700.Type == TMessageType.Exception) { @@ -589,11 +589,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetCrossReference(global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Call, SeqId), cancellationToken); - + var tmp703 = new InternalStructs.GetCrossReference_args() { Req = req, }; - + await tmp703.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -601,7 +601,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetCrossReference(CancellationToken cancellationToken = default) { - + var tmp704 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp704.Type == TMessageType.Exception) { @@ -629,11 +629,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetOperationStatus(global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Call, SeqId), cancellationToken); - + var tmp707 = new InternalStructs.GetOperationStatus_args() { Req = req, }; - + await tmp707.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -641,7 +641,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetOperationStatus(CancellationToken cancellationToken = default) { - + var tmp708 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp708.Type == TMessageType.Exception) { @@ -669,11 +669,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_CancelOperation(global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Call, SeqId), cancellationToken); - + var tmp711 = new InternalStructs.CancelOperation_args() { Req = req, }; - + await tmp711.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -681,7 +681,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_CancelOperation(CancellationToken cancellationToken = default) { - + var tmp712 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp712.Type == TMessageType.Exception) { @@ -709,11 +709,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_CloseOperation(global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Call, SeqId), cancellationToken); - + var tmp715 = new InternalStructs.CloseOperation_args() { Req = req, }; - + await tmp715.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -721,7 +721,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_CloseOperation(CancellationToken cancellationToken = default) { - + var tmp716 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp716.Type == TMessageType.Exception) { @@ -749,11 +749,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetResultSetMetadata(global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Call, SeqId), cancellationToken); - + var tmp719 = new InternalStructs.GetResultSetMetadata_args() { Req = req, }; - + await tmp719.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -761,7 +761,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetResultSetMetadata(CancellationToken cancellationToken = default) { - + var tmp720 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp720.Type == TMessageType.Exception) { @@ -789,11 +789,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_FetchResults(global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Call, SeqId), cancellationToken); - + var tmp723 = new InternalStructs.FetchResults_args() { Req = req, }; - + await tmp723.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -801,7 +801,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_FetchResults(CancellationToken cancellationToken = default) { - + var tmp724 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp724.Type == TMessageType.Exception) { @@ -829,11 +829,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Call, SeqId), cancellationToken); - + var tmp727 = new InternalStructs.GetDelegationToken_args() { Req = req, }; - + await tmp727.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -841,7 +841,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetDelegationToken(CancellationToken cancellationToken = default) { - + var tmp728 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp728.Type == TMessageType.Exception) { @@ -869,11 +869,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_CancelDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Call, SeqId), cancellationToken); - + var tmp731 = new InternalStructs.CancelDelegationToken_args() { Req = req, }; - + await tmp731.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -881,7 +881,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_CancelDelegationToken(CancellationToken cancellationToken = default) { - + var tmp732 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp732.Type == TMessageType.Exception) { @@ -909,11 +909,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_RenewDelegationToken(global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Call, SeqId), cancellationToken); - + var tmp735 = new InternalStructs.RenewDelegationToken_args() { Req = req, }; - + await tmp735.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -921,7 +921,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_RenewDelegationToken(CancellationToken cancellationToken = default) { - + var tmp736 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp736.Type == TMessageType.Exception) { @@ -949,11 +949,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_GetQueryId(global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Call, SeqId), cancellationToken); - + var tmp739 = new InternalStructs.GetQueryId_args() { Req = req, }; - + await tmp739.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -961,7 +961,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_GetQueryId(CancellationToken cancellationToken = default) { - + var tmp740 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp740.Type == TMessageType.Exception) { @@ -989,11 +989,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_SetClientInfo(global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Call, SeqId), cancellationToken); - + var tmp743 = new InternalStructs.SetClientInfo_args() { Req = req, }; - + await tmp743.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -1001,7 +1001,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_SetClientInfo(CancellationToken cancellationToken = default) { - + var tmp744 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp744.Type == TMessageType.Exception) { @@ -1029,11 +1029,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_UploadData(global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Call, SeqId), cancellationToken); - + var tmp747 = new InternalStructs.UploadData_args() { Req = req, }; - + await tmp747.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -1041,7 +1041,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_UploadData(CancellationToken cancellationToken = default) { - + var tmp748 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp748.Type == TMessageType.Exception) { @@ -1069,11 +1069,11 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task send_DownloadData(global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq req, CancellationToken cancellationToken = default) { await OutputProtocol.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Call, SeqId), cancellationToken); - + var tmp751 = new InternalStructs.DownloadData_args() { Req = req, }; - + await tmp751.WriteAsync(OutputProtocol, cancellationToken); await OutputProtocol.WriteMessageEndAsync(cancellationToken); await OutputProtocol.Transport.FlushAsync(cancellationToken); @@ -1081,7 +1081,7 @@ public Client(TProtocol inputProtocol, TProtocol outputProtocol) : base(inputPro public async global::System.Threading.Tasks.Task recv_DownloadData(CancellationToken cancellationToken = default) { - + var tmp752 = await InputProtocol.ReadMessageBeginAsync(cancellationToken); if (tmp752.Type == TMessageType.Exception) { @@ -1186,7 +1186,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp756.Success = await _iAsync.OpenSession(tmp755.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("OpenSession", TMessageType.Reply, seqid), cancellationToken); await tmp756.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1217,7 +1217,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp761.Success = await _iAsync.CloseSession(tmp760.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseSession", TMessageType.Reply, seqid), cancellationToken); await tmp761.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1248,7 +1248,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp766.Success = await _iAsync.GetInfo(tmp765.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetInfo", TMessageType.Reply, seqid), cancellationToken); await tmp766.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1279,7 +1279,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp771.Success = await _iAsync.ExecuteStatement(tmp770.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("ExecuteStatement", TMessageType.Reply, seqid), cancellationToken); await tmp771.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1310,7 +1310,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp776.Success = await _iAsync.GetTypeInfo(tmp775.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTypeInfo", TMessageType.Reply, seqid), cancellationToken); await tmp776.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1341,7 +1341,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp781.Success = await _iAsync.GetCatalogs(tmp780.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCatalogs", TMessageType.Reply, seqid), cancellationToken); await tmp781.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1372,7 +1372,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp786.Success = await _iAsync.GetSchemas(tmp785.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetSchemas", TMessageType.Reply, seqid), cancellationToken); await tmp786.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1403,7 +1403,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp791.Success = await _iAsync.GetTables(tmp790.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTables", TMessageType.Reply, seqid), cancellationToken); await tmp791.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1434,7 +1434,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp796.Success = await _iAsync.GetTableTypes(tmp795.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetTableTypes", TMessageType.Reply, seqid), cancellationToken); await tmp796.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1465,7 +1465,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp801.Success = await _iAsync.GetColumns(tmp800.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetColumns", TMessageType.Reply, seqid), cancellationToken); await tmp801.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1496,7 +1496,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp806.Success = await _iAsync.GetFunctions(tmp805.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetFunctions", TMessageType.Reply, seqid), cancellationToken); await tmp806.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1527,7 +1527,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp811.Success = await _iAsync.GetPrimaryKeys(tmp810.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetPrimaryKeys", TMessageType.Reply, seqid), cancellationToken); await tmp811.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1558,7 +1558,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp816.Success = await _iAsync.GetCrossReference(tmp815.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetCrossReference", TMessageType.Reply, seqid), cancellationToken); await tmp816.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1589,7 +1589,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp821.Success = await _iAsync.GetOperationStatus(tmp820.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetOperationStatus", TMessageType.Reply, seqid), cancellationToken); await tmp821.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1620,7 +1620,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp826.Success = await _iAsync.CancelOperation(tmp825.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelOperation", TMessageType.Reply, seqid), cancellationToken); await tmp826.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1651,7 +1651,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp831.Success = await _iAsync.CloseOperation(tmp830.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CloseOperation", TMessageType.Reply, seqid), cancellationToken); await tmp831.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1682,7 +1682,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp836.Success = await _iAsync.GetResultSetMetadata(tmp835.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetResultSetMetadata", TMessageType.Reply, seqid), cancellationToken); await tmp836.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1713,7 +1713,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp841.Success = await _iAsync.FetchResults(tmp840.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("FetchResults", TMessageType.Reply, seqid), cancellationToken); await tmp841.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1744,7 +1744,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp846.Success = await _iAsync.GetDelegationToken(tmp845.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetDelegationToken", TMessageType.Reply, seqid), cancellationToken); await tmp846.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1775,7 +1775,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp851.Success = await _iAsync.CancelDelegationToken(tmp850.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("CancelDelegationToken", TMessageType.Reply, seqid), cancellationToken); await tmp851.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1806,7 +1806,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp856.Success = await _iAsync.RenewDelegationToken(tmp855.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("RenewDelegationToken", TMessageType.Reply, seqid), cancellationToken); await tmp856.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1837,7 +1837,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp861.Success = await _iAsync.GetQueryId(tmp860.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("GetQueryId", TMessageType.Reply, seqid), cancellationToken); await tmp861.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1868,7 +1868,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp866.Success = await _iAsync.SetClientInfo(tmp865.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("SetClientInfo", TMessageType.Reply, seqid), cancellationToken); await tmp866.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1899,7 +1899,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp871.Success = await _iAsync.UploadData(tmp870.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("UploadData", TMessageType.Reply, seqid), cancellationToken); await tmp871.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -1930,7 +1930,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat try { tmp876.Success = await _iAsync.DownloadData(tmp875.Req, cancellationToken); - await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Reply, seqid), cancellationToken); + await oprot.WriteMessageBeginAsync(new TMessage("DownloadData", TMessageType.Reply, seqid), cancellationToken); await tmp876.WriteAsync(oprot, cancellationToken); } catch (TTransportException) @@ -2024,7 +2024,7 @@ public OpenSession_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2167,7 +2167,7 @@ public OpenSession_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2314,7 +2314,7 @@ public CloseSession_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2457,7 +2457,7 @@ public CloseSession_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2604,7 +2604,7 @@ public GetInfo_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2747,7 +2747,7 @@ public GetInfo_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -2894,7 +2894,7 @@ public ExecuteStatement_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3037,7 +3037,7 @@ public ExecuteStatement_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3184,7 +3184,7 @@ public GetTypeInfo_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3327,7 +3327,7 @@ public GetTypeInfo_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3474,7 +3474,7 @@ public GetCatalogs_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3617,7 +3617,7 @@ public GetCatalogs_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3764,7 +3764,7 @@ public GetSchemas_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -3907,7 +3907,7 @@ public GetSchemas_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4054,7 +4054,7 @@ public GetTables_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4197,7 +4197,7 @@ public GetTables_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4344,7 +4344,7 @@ public GetTableTypes_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4487,7 +4487,7 @@ public GetTableTypes_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4634,7 +4634,7 @@ public GetColumns_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4777,7 +4777,7 @@ public GetColumns_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -4924,7 +4924,7 @@ public GetFunctions_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5067,7 +5067,7 @@ public GetFunctions_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5214,7 +5214,7 @@ public GetPrimaryKeys_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5357,7 +5357,7 @@ public GetPrimaryKeys_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5504,7 +5504,7 @@ public GetCrossReference_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5647,7 +5647,7 @@ public GetCrossReference_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5794,7 +5794,7 @@ public GetOperationStatus_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -5937,7 +5937,7 @@ public GetOperationStatus_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6084,7 +6084,7 @@ public CancelOperation_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6227,7 +6227,7 @@ public CancelOperation_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6374,7 +6374,7 @@ public CloseOperation_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6517,7 +6517,7 @@ public CloseOperation_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6664,7 +6664,7 @@ public GetResultSetMetadata_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6807,7 +6807,7 @@ public GetResultSetMetadata_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -6954,7 +6954,7 @@ public FetchResults_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7097,7 +7097,7 @@ public FetchResults_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7244,7 +7244,7 @@ public GetDelegationToken_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7387,7 +7387,7 @@ public GetDelegationToken_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7534,7 +7534,7 @@ public CancelDelegationToken_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7677,7 +7677,7 @@ public CancelDelegationToken_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7824,7 +7824,7 @@ public RenewDelegationToken_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -7967,7 +7967,7 @@ public RenewDelegationToken_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8114,7 +8114,7 @@ public GetQueryId_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8257,7 +8257,7 @@ public GetQueryId_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8404,7 +8404,7 @@ public SetClientInfo_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8547,7 +8547,7 @@ public SetClientInfo_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8694,7 +8694,7 @@ public UploadData_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8837,7 +8837,7 @@ public UploadData_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -8984,7 +8984,7 @@ public DownloadData_args DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } @@ -9127,7 +9127,7 @@ public DownloadData_result DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs index a5fb396318..8ea1262598 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs @@ -107,7 +107,7 @@ public TCancelDelegationTokenReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs index 441914745c..7dbc286a64 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs @@ -88,7 +88,7 @@ public TCancelDelegationTokenResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs index 578ea6b882..2578237158 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs @@ -88,7 +88,7 @@ public TCancelOperationReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs index 4a76a9a56a..1453183e67 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs @@ -88,7 +88,7 @@ public TCancelOperationResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs index dfa4947412..43502e1c88 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs @@ -88,7 +88,7 @@ public TCloseOperationReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs index 56d2a25f52..afa06b73d8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs @@ -88,7 +88,7 @@ public TCloseOperationResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs index 2b0d50c4df..61b56ddb6c 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs @@ -88,7 +88,7 @@ public TCloseSessionReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs index 27667a4bbd..2e658308d3 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs @@ -88,7 +88,7 @@ public TCloseSessionResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs index 59126847b5..05a149e84d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs @@ -318,7 +318,7 @@ public TColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs index 9c27cbeb1d..d91567355f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs @@ -159,7 +159,7 @@ public TColumnDesc DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs index 012db5de92..bf90d7ad23 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs @@ -287,7 +287,7 @@ public TColumnValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs index eae1a362ec..7648e6b4f6 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs @@ -151,7 +151,7 @@ public TDBSqlCloudResultFile DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs index 9249cec0c9..70f37de648 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs @@ -100,7 +100,7 @@ public TDBSqlConfValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs index 50d2d295e0..8011f356f4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs @@ -100,7 +100,7 @@ public TDBSqlSessionCapabilities DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs index 35ee4d908e..ead076cab9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs @@ -328,7 +328,7 @@ public TDBSqlSessionConf DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs index f542caf0b5..668dff029f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs @@ -202,7 +202,7 @@ public TDBSqlTempView DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs index 0d13168e62..1dc52c6780 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs @@ -105,7 +105,7 @@ public TDoubleColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs index 5a313862f5..facb3ac850 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs @@ -100,7 +100,7 @@ public TDoubleValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs index 030fb5ec39..3078d0fe29 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs @@ -226,7 +226,7 @@ public TDownloadDataReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs index 75cbf209df..fba252a007 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs @@ -108,7 +108,7 @@ public TDownloadDataResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs index 0625b20bcd..59423278df 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs @@ -704,7 +704,7 @@ public TExecuteStatementReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs index 013e725bb5..7bbecb5570 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs @@ -337,7 +337,7 @@ public TExecuteStatementResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs index a497b63a84..1db7477da0 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs @@ -430,7 +430,7 @@ public TExpressionInfo DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs index e5de4d6e54..aa93df99bf 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs @@ -44,7 +44,7 @@ public partial class TFetchResultsReq : TBase public global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle OperationHandle { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TFetchOrientation Orientation { get; set; } @@ -253,7 +253,7 @@ public TFetchResultsReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs index c83622ec12..660102054f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs @@ -216,7 +216,7 @@ public TFetchResultsResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs index d18838d501..c515061b57 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs @@ -217,7 +217,7 @@ public TGetCatalogsReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs index 052d126d41..466e876389 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs @@ -156,7 +156,7 @@ public TGetCatalogsResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs index 6146aa1353..658aebebe4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs @@ -337,7 +337,7 @@ public TGetColumnsReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs index 13495fcbc2..fac909709e 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs @@ -156,7 +156,7 @@ public TGetColumnsResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs index bb5b5f268b..a4dd2c81db 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs @@ -397,7 +397,7 @@ public TGetCrossReferenceReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs index 18950f75e6..c7ae201a6c 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs @@ -156,7 +156,7 @@ public TGetCrossReferenceResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs index e064af21f0..237897967e 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs @@ -126,7 +126,7 @@ public TGetDelegationTokenReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs index bc4e4cbd61..c4b87dcd02 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs @@ -124,7 +124,7 @@ public TGetDelegationTokenResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs index 192bdae204..9bd190c95f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs @@ -296,7 +296,7 @@ public TGetFunctionsReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs index 21fdead24f..fd959ac3eb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs @@ -156,7 +156,7 @@ public TGetFunctionsResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs index 8efeb5f5ff..4a2155dd58 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs @@ -40,7 +40,7 @@ public partial class TGetInfoReq : TBase public global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle SessionHandle { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TGetInfoType InfoType { get; set; } @@ -108,7 +108,7 @@ public TGetInfoReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs index dc3d5e8cb3..60ad815241 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs @@ -108,7 +108,7 @@ public TGetInfoResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs index 16d80393da..4a963e6dc8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs @@ -250,7 +250,7 @@ public TGetInfoValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs index edb8bb89e0..d8b84fd0f0 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs @@ -124,7 +124,7 @@ public TGetOperationStatusReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs index dd024f750b..a5428ec158 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs @@ -56,7 +56,7 @@ public partial class TGetOperationStatusResp : TBase public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TOperationState OperationState @@ -579,7 +579,7 @@ public TGetOperationStatusResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs index fefa1fede2..12da95c69a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs @@ -307,7 +307,7 @@ public TGetPrimaryKeysReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs index 7071e690e6..4496a53eb8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs @@ -156,7 +156,7 @@ public TGetPrimaryKeysResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs index c11d9b5b07..060dd12a55 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs @@ -88,7 +88,7 @@ public TGetQueryIdReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs index d0144f3418..26a6ffc8a4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs @@ -87,7 +87,7 @@ public TGetQueryIdResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs index 375c3efb8a..a282e6c36e 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs @@ -124,7 +124,7 @@ public TGetResultSetMetadataReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs index 9833c26834..77713bc107 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs @@ -466,7 +466,7 @@ public TGetResultSetMetadataResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs index 742b50bca1..e40ca8a53d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs @@ -277,7 +277,7 @@ public TGetSchemasReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs index 66e4a9d7ce..ad04ba44ca 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs @@ -156,7 +156,7 @@ public TGetSchemasResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs index 3a72f4065f..7f62194bdc 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs @@ -217,7 +217,7 @@ public TGetTableTypesReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs index 2dbd3ad16f..bbba42719d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs @@ -156,7 +156,7 @@ public TGetTableTypesResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs index 4e60863e00..9db95f6045 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs @@ -347,7 +347,7 @@ public TGetTablesReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs index 628d3f5d42..96ebe70b80 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs @@ -156,7 +156,7 @@ public TGetTablesResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs index 75893e6468..8bfdf058a1 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs @@ -217,7 +217,7 @@ public TGetTypeInfoReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs index c5cbb2ad8c..f614b34650 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs @@ -156,7 +156,7 @@ public TGetTypeInfoResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs index e8167d0184..9a00231a75 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs @@ -106,7 +106,7 @@ public THandleIdentifier DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs index 82a18b4adb..b1b2fb8266 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs @@ -107,7 +107,7 @@ public TI16Column DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs index 9f31d83683..b3b7589c80 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs @@ -100,7 +100,7 @@ public TI16Value DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs index 6ed8a426dd..6d8e164a38 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -106,7 +106,7 @@ public TI32Column DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs index 40bb1ac89d..1db14fb210 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs @@ -100,7 +100,7 @@ public TI32Value DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs index dc9ec7023a..317b9bd0ec 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs @@ -106,7 +106,7 @@ public TI64Column DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs index c823fce883..f260b158ca 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs @@ -100,7 +100,7 @@ public TI64Value DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs index ae68167ad8..8f459f3fca 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TMapTypeEntry.cs @@ -100,7 +100,7 @@ public TMapTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs index 2aeae8012d..42d7897915 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs @@ -130,7 +130,7 @@ public TNamespace DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs index 4986a43910..6201be76ad 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs @@ -47,7 +47,7 @@ public partial class TOpenSessionReq : TBase private global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier _sessionId; /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion Client_protocol { get; set; } @@ -401,7 +401,7 @@ public TOpenSessionReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs index 1f87d016b8..e896a16c3c 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs @@ -45,7 +45,7 @@ public partial class TOpenSessionResp : TBase public global::Apache.Hive.Service.Rpc.Thrift.TStatus Status { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TProtocolVersion ServerProtocolVersion { get; set; } @@ -289,7 +289,7 @@ public TOpenSessionResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs index f260602229..88c4303182 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs @@ -41,7 +41,7 @@ public partial class TOperationHandle : TBase public global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier OperationId { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TOperationType OperationType { get; set; } @@ -160,7 +160,7 @@ public TOperationHandle DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs index 375fbf951e..c18d19b275 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs @@ -39,7 +39,7 @@ public partial class TPrimitiveTypeEntry : TBase private global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers _typeQualifiers; /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TTypeId Type { get; set; } @@ -125,7 +125,7 @@ public TPrimitiveTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs index 249134504b..0c5f06d942 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs @@ -44,7 +44,7 @@ public partial class TProgressUpdateResp : TBase public double ProgressedPercentage { get; set; } /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TJobExecutionStatus Status { get; set; } @@ -207,7 +207,7 @@ public TProgressUpdateResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs index 0888c6c91f..24aaf8dcab 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs @@ -107,7 +107,7 @@ public TRenewDelegationTokenReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs index f62b657ea4..f7026f7bf3 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs @@ -88,7 +88,7 @@ public TRenewDelegationTokenResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs index f04da578d7..80f250f656 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs @@ -98,7 +98,7 @@ public TRow DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs index 9b5aed6a36..d95fb94142 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs @@ -303,7 +303,7 @@ public TRowSet DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs index ef0e2b2cb4..061220e2e9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs @@ -88,7 +88,7 @@ public TSessionHandle DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs index 15578dc770..18ede5a12a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs @@ -136,7 +136,7 @@ public TSetClientInfoReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs index 07a9f53444..52f62c640c 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs @@ -88,7 +88,7 @@ public TSetClientInfoResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs index 25690516e1..7d8d187f1b 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs @@ -103,7 +103,7 @@ public TSparkArrowBatch DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs index 2e45731410..702909e013 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs @@ -151,7 +151,7 @@ public TSparkArrowResultLink DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs index fc66ad4bd4..081b30d771 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs @@ -190,7 +190,7 @@ public TSparkArrowTypes DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs index b970f9e62d..bc9aad2e9f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs @@ -194,7 +194,7 @@ public TSparkDirectResults DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs index 04d3b27731..3dd323b4de 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs @@ -120,7 +120,7 @@ public TSparkGetDirectResults DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs index 9ccbb7f626..5c1ce5b906 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs @@ -42,7 +42,7 @@ public partial class TStatus : TBase private string _errorMessage; /// - /// + /// /// /// public global::Apache.Hive.Service.Rpc.Thrift.TStatusCode StatusCode { get; set; } @@ -224,7 +224,7 @@ public TStatus DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs index fc4b390fdc..8ee8d9fa5f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs @@ -131,7 +131,7 @@ public TStringColumn DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs index e1b7c8f6be..a6234b6636 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs @@ -100,7 +100,7 @@ public TStringValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs index 1ac1886691..d29202695b 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs @@ -99,7 +99,7 @@ public TStructTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs index 7ae7d63512..b37fe3e090 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs @@ -98,7 +98,7 @@ public TTableSchema DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs index 318f1e5d05..ccffa40f79 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs @@ -98,7 +98,7 @@ public TTypeDesc DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs index 7aec87b834..e10c4b89e9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs @@ -256,7 +256,7 @@ public TTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs index 6e0bc6da80..8f43b59d13 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs @@ -130,7 +130,7 @@ public TTypeQualifierValue DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs index 31dee30ad0..0eb8f11326 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs @@ -100,7 +100,7 @@ public TTypeQualifiers DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs index 6c4c42d9e3..68e387fc04 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUnionTypeEntry.cs @@ -99,7 +99,7 @@ public TUnionTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs index 0af51fc483..602d173843 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs @@ -173,7 +173,7 @@ public TUploadDataReq DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs index 1855089d7c..19bcd47397 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs @@ -108,7 +108,7 @@ public TUploadDataResp DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs index 67a522e8c7..893a5a0c41 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs @@ -87,7 +87,7 @@ public TUserDefinedTypeEntry DeepCopy() await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); } break; - default: + default: await TProtocolUtil.SkipAsync(iprot, field.Type, cancellationToken); break; } diff --git a/databricks.md b/databricks.md deleted file mode 100644 index 785b947fc4..0000000000 --- a/databricks.md +++ /dev/null @@ -1,3 +0,0 @@ -# Databricks ADBC Driver Hackathon (2024) - -tl;dr: demoonstrate connecting Power BI to Databricks using ADBC driver in import mode and direct query mode (optional). \ No newline at end of file From 515c4c2ca3c5fae8b625ecba936e2a18f2a0df6f Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 12:46:42 -0700 Subject: [PATCH 34/61] Fixed line ending. --- .vs/VSWorkspaceState.json | 2 +- .vs/arrow-adbc/v17/DocumentLayout.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index ff583ff94e..9458e5e452 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -4,4 +4,4 @@ ], "SelectedNode": "\\Apache.Arrow.Adbc.sln", "PreviewInSolutionExplorer": false -} \ No newline at end of file +} diff --git a/.vs/arrow-adbc/v17/DocumentLayout.json b/.vs/arrow-adbc/v17/DocumentLayout.json index c88b2bf087..03a3535a95 100644 --- a/.vs/arrow-adbc/v17/DocumentLayout.json +++ b/.vs/arrow-adbc/v17/DocumentLayout.json @@ -20,4 +20,4 @@ ] } ] -} \ No newline at end of file +} From 7fda295320f6772b387e19761c0d696b7a37ceae Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 13:45:04 -0700 Subject: [PATCH 35/61] Resolve warning with `#nullable` annotation warning. --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 3 ++- csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 13a031eac2..26fb42b2f3 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -35,6 +35,7 @@ using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using System.Diagnostics; +#nullable enable namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkConnection : HiveServer2Connection @@ -65,7 +66,7 @@ public SparkConnection() : this(null) } - internal SparkConnection(IReadOnlyDictionary properties) + internal SparkConnection(IReadOnlyDictionary? properties) : base(properties) { } diff --git a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs index 3bb035c8e4..9013079720 100644 --- a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs +++ b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs @@ -22,6 +22,7 @@ using System.Threading; using System.Runtime.InteropServices; +#nullable enable namespace Apache.Arrow.Adbc.Drivers.Apache.Thrift { public static class StreamExtensions From 20f6059f30763a47aa815117081dc2e5bfd0ab26 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 13:51:19 -0700 Subject: [PATCH 36/61] Remove '#nullable' annotation. --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 3 --- csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs | 1 - 2 files changed, 4 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 26fb42b2f3..05f224bb34 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; @@ -30,12 +29,10 @@ using Apache.Hive.Service.Rpc.Thrift; using Thrift; using Thrift.Protocol; -using Thrift.Transport.Client; using Apache.Arrow.Adbc.Drivers.Apache.Thrift; using System.Diagnostics; -#nullable enable namespace Apache.Arrow.Adbc.Drivers.Apache.Spark { public class SparkConnection : HiveServer2Connection diff --git a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs index 9013079720..3bb035c8e4 100644 --- a/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs +++ b/csharp/src/Drivers/Apache/Thrift/StreamExtensions.cs @@ -22,7 +22,6 @@ using System.Threading; using System.Runtime.InteropServices; -#nullable enable namespace Apache.Arrow.Adbc.Drivers.Apache.Thrift { public static class StreamExtensions From dce233ab70b1f3962c4f121ae25d9c71dd4d0f39 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 13:53:21 -0700 Subject: [PATCH 37/61] Removed unnecessary modification. --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 05f224bb34..1da1085396 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -63,7 +63,7 @@ public SparkConnection() : this(null) } - internal SparkConnection(IReadOnlyDictionary? properties) + internal SparkConnection(IReadOnlyDictionary properties) : base(properties) { } From 865cdb8a3b7df2411462d562c17a03ab4f4d16d4 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 21 Mar 2024 14:06:59 -0700 Subject: [PATCH 38/61] Some style reformatting. --- .../Drivers/Apache/Spark/SparkStatement.cs | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 342fbbeb02..5d9c8ed69c 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -35,6 +35,7 @@ internal SparkStatement(SparkConnection connection) protected override void SetStatementProperties(TExecuteStatementReq statement) { + // TODO: Ensure this is set dynamically depending on server capabilities. statement.EnforceResultPersistenceMode = false; statement.ResultPersistenceMode = 2; @@ -56,6 +57,7 @@ public override QueryResult ExecuteQuery() PollForResponse(); Schema schema = GetSchema(); + // TODO: Ensure this is set dynamically based on server capabilities return new QueryResult(-1, new SparkReader(this, schema)); //return new QueryResult(-1, new CloudFetchReader(this, schema)); } @@ -159,54 +161,54 @@ public void Dispose() sealed class CloudFetchReader : IArrowArrayStream { - SparkStatement statement; - Schema schema; - ChunkDownloader chunkDownloader; - IArrowReader reader; + SparkStatement _statement; + Schema _schema; + ChunkDownloader _chunkDownloader; + IArrowReader _reader; public CloudFetchReader(SparkStatement statement, Schema schema) { - this.statement = statement; - this.schema = schema; - TFetchResultsReq request = new TFetchResultsReq(this.statement.operationHandle, TFetchOrientation.FETCH_NEXT, 500000); - TFetchResultsResp response = this.statement.connection.client.FetchResults(request, cancellationToken: default).Result; - this.chunkDownloader = new ChunkDownloader(response.Results.ResultLinks); + _statement = statement; + _schema = schema; + TFetchResultsReq request = new TFetchResultsReq(_statement.operationHandle, TFetchOrientation.FETCH_NEXT, 500000); + TFetchResultsResp response = this._statement.connection.client.FetchResults(request, cancellationToken: default).Result; + _chunkDownloader = new ChunkDownloader(response.Results.ResultLinks); } - public Schema Schema { get { return schema; } } + public Schema Schema { get { return _schema; } } public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) { while (true) { - if (this.reader != null) + if (_reader != null) { - RecordBatch next = await this.reader.ReadNextRecordBatchAsync(cancellationToken); + RecordBatch next = await _reader.ReadNextRecordBatchAsync(cancellationToken); if (next != null) { return next; } - this.reader = null; - if (this.chunkDownloader.currentChunkIndex >= this.chunkDownloader.chunks.Count) + _reader = null; + if (_chunkDownloader.currentChunkIndex >= _chunkDownloader.chunks.Count) { - this.statement = null; + _statement = null; } } - if (this.statement == null) + if (_statement == null) { return null; } - if (this.reader == null) + if (_reader == null) { - var currentChunk = this.chunkDownloader.chunks[this.chunkDownloader.currentChunkIndex]; + var currentChunk = _chunkDownloader.chunks[_chunkDownloader.currentChunkIndex]; while (!currentChunk.isDownloaded) { - Thread.Sleep(500); + await Task.Delay(500, cancellationToken); } - this.chunkDownloader.currentChunkIndex++; - this.reader = currentChunk.reader; + _chunkDownloader.currentChunkIndex++; + _reader = currentChunk.reader; } } } From c0101baf15b2960e62a3ec9fc0da0ea383e307a3 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 3 Apr 2024 09:49:35 -0700 Subject: [PATCH 39/61] Correct SparkConnection.GetTableSchema to use native column type identifiers (based on JDBC Types constants). --- .../Drivers/Apache/Spark/SparkConnection.cs | 61 ++++++++++++++++++- .../Apache/Spark/Resources/SparkData.sql | 55 ++++++++++++----- 2 files changed, 98 insertions(+), 18 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 1da1085396..bc501f44c7 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -58,6 +58,50 @@ public class SparkConnection : HiveServer2Connection { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } }; + private static Dictionary s_ColumnTypeToArrowTypeMap; + + static SparkConnection() + { + s_ColumnTypeToArrowTypeMap = new() { + { ColumnTypeId.BOOLEAN_TYPE, BooleanType.Default }, + { ColumnTypeId.TINYINT_TYPE, Int8Type.Default }, + { ColumnTypeId.SMALLINT_TYPE, Int16Type.Default }, + { ColumnTypeId.INT_TYPE, Int32Type.Default }, + { ColumnTypeId.BIGINT_TYPE, Int64Type.Default }, + { ColumnTypeId.FLOAT_TYPE, FloatType.Default }, + { ColumnTypeId.DOUBLE_TYPE, DoubleType.Default }, + { ColumnTypeId.STRING_TYPE, StringType.Default }, + { ColumnTypeId.TIMESTAMP_TYPE, new TimestampType(TimeUnit.Microsecond, (string)null) }, + { ColumnTypeId.BINARY_TYPE, BinaryType.Default }, + { ColumnTypeId.ARRAY_TYPE, StringType.Default }, + { ColumnTypeId.MAP_TYPE, StringType.Default }, + { ColumnTypeId.STRUCT_TYPE, StringType.Default }, + { ColumnTypeId.DECIMAL_TYPE, StringType.Default }, + { ColumnTypeId.DATE_TYPE, Date32Type.Default }, + { ColumnTypeId.CHAR_TYPE, StringType.Default }, + }; + } + + public enum ColumnTypeId + { + BOOLEAN_TYPE = 16, + TINYINT_TYPE = -6, + SMALLINT_TYPE = 5, + INT_TYPE = 4, + BIGINT_TYPE = -5, + FLOAT_TYPE = 6, + DOUBLE_TYPE = 8, + STRING_TYPE = 12, + TIMESTAMP_TYPE = 93, + BINARY_TYPE = -2, + ARRAY_TYPE = 2003, + MAP_TYPE = 2000, + STRUCT_TYPE = 2002, + DECIMAL_TYPE = 3, + DATE_TYPE = 91, + CHAR_TYPE = 1, + } + public SparkConnection() : this(null) { @@ -72,7 +116,7 @@ protected override TProtocol CreateProtocol() { Trace.TraceError($"create protocol with {properties.Count} properties."); - foreach(var property in properties.Keys) + foreach (var property in properties.Keys) { Trace.TraceError($"key = {property} value = {properties[property]}"); } @@ -289,8 +333,10 @@ public override Schema GetTableSchema(string catalog, string dbSchema, string ta Field[] fields = new Field[rowCount]; for (int i = 0; i < rowCount; i++) { - fields[i] = new Field(columns[3].StringVal.Values.GetString(i), - SchemaParser.GetArrowType((TTypeId)columns[4].I32Val.Values.GetValue(i)), + string columnName = columns[3].StringVal.Values.GetString(i); + int? columnType = columns[4].I32Val.Values.GetValue(i); + fields[i] = new Field(columnName, + SparkConnection.GetArrowType((ColumnTypeId)columnType), nullable: true /* ??? */); } return new Schema(fields, null); @@ -468,6 +514,15 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); } + private static IArrowType GetArrowType(ColumnTypeId columnTypeId) + { + if (!s_ColumnTypeToArrowTypeMap.TryGetValue(columnTypeId, out IArrowType arrowType)) + { + throw new NotImplementedException($"Unsupported column type id: {columnTypeId}"); + } + return arrowType; + } + private StructArray GetDbSchemas( GetObjectsDepth depth, Dictionary> schemaMap) diff --git a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql index 7ac0084dde..908ffbb930 100644 --- a/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql +++ b/csharp/test/Drivers/Apache/Spark/Resources/SparkData.sql @@ -28,13 +28,20 @@ CREATE TABLE IF NOT EXISTS {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( name STRING, data BINARY, date DATE, - timestamp TIMESTAMP_NTZ, - timestamp_local TIMESTAMP_LTZ, + timestamp TIMESTAMP, + timestamp_ntz TIMESTAMP_NTZ, + timestamp_ltz TIMESTAMP_LTZ, numbers ARRAY, person STRUCT < name STRING, age LONG - > + >, + map MAP < + INT, + STRING + >, + varchar VARCHAR(255), + char CHAR(10) ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( @@ -42,9 +49,12 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( byte, short, integer, float, number, decimal, is_active, name, data, - date, timestamp, timestamp_local, + date, timestamp, timestamp_ntz, timestamp_ltz, numbers, - person + person, + map, + varchar, + char ) VALUES ( 1, @@ -53,9 +63,12 @@ VALUES ( 'John Doe', -- hex-encoded value `abc123` X'616263313233', - '2023-09-08', '2023-09-08 12:34:56', '2023-09-08 12:34:56+00:00', + '2023-09-08', '2023-09-08 12:34:56', '2023-09-08 12:34:56', '2023-09-08 12:34:56+00:00', ARRAY(1, 2, 3), - STRUCT('John Doe', 30) + STRUCT('John Doe', 30), + MAP(1, 'John Doe'), + 'John Doe', + 'John Doe' ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( @@ -63,9 +76,12 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( byte, short, integer, float, number, decimal, is_active, name, data, - date, timestamp, timestamp_local, + date, timestamp, timestamp_ntz, timestamp_ltz, numbers, - person + person, + map, + varchar, + char ) VALUES ( 2, @@ -74,9 +90,12 @@ VALUES ( 'Jane Doe', -- hex-encoded `def456` X'646566343536', - '2023-09-09', '2023-09-09 13:45:57', '2023-09-09 13:45:57+00:00', + '2023-09-09', '2023-09-09 13:45:57', '2023-09-09 13:45:57', '2023-09-09 13:45:57+00:00', ARRAY(4, 5, 6), - STRUCT('Jane Doe', 40) + STRUCT('Jane Doe', 40), + MAP(1, 'John Doe'), + 'Jane Doe', + 'Jane Doe' ); INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( @@ -84,9 +103,12 @@ INSERT INTO {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} ( byte, short, integer, float, number, decimal, is_active, name, data, - date, timestamp, timestamp_local, + date, timestamp, timestamp_ntz, timestamp_ltz, numbers, - person + person, + map, + varchar, + char ) VALUES ( 3, @@ -95,9 +117,12 @@ VALUES ( 'Jack Doe', -- hex-encoded `def456` X'646566343536', - '1556-01-02', '1970-01-01 00:00:00', '9999-12-31 23:59:59+00:00', + '1556-01-02', '1970-01-01 00:00:00', '1970-01-01 00:00:00', '9999-12-31 23:59:59+00:00', ARRAY(7, 8, 9), - STRUCT('Jack Doe', 50) + STRUCT('Jack Doe', 50), + MAP(1, 'John Doe'), + 'Jack Doe', + 'Jack Doe' ); UPDATE {ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE} From d5fb1904ced9c1e5da49e95a6f50d18d954c8525 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 3 Apr 2024 14:55:30 -0700 Subject: [PATCH 40/61] Some formatting/style improvements. --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index bc501f44c7..729e05c6c9 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -58,11 +58,7 @@ public class SparkConnection : HiveServer2Connection { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } }; - private static Dictionary s_ColumnTypeToArrowTypeMap; - - static SparkConnection() - { - s_ColumnTypeToArrowTypeMap = new() { + private static readonly IReadOnlyDictionary s_columnTypeToArrowTypeMap = new Dictionary() { { ColumnTypeId.BOOLEAN_TYPE, BooleanType.Default }, { ColumnTypeId.TINYINT_TYPE, Int8Type.Default }, { ColumnTypeId.SMALLINT_TYPE, Int16Type.Default }, @@ -80,9 +76,8 @@ static SparkConnection() { ColumnTypeId.DATE_TYPE, Date32Type.Default }, { ColumnTypeId.CHAR_TYPE, StringType.Default }, }; - } - public enum ColumnTypeId + private enum ColumnTypeId { BOOLEAN_TYPE = 16, TINYINT_TYPE = -6, @@ -516,7 +511,7 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal private static IArrowType GetArrowType(ColumnTypeId columnTypeId) { - if (!s_ColumnTypeToArrowTypeMap.TryGetValue(columnTypeId, out IArrowType arrowType)) + if (!s_columnTypeToArrowTypeMap.TryGetValue(columnTypeId, out IArrowType arrowType)) { throw new NotImplementedException($"Unsupported column type id: {columnTypeId}"); } From c511876807c6c8da2cc7b626a4eebdc48f2dc371 Mon Sep 17 00:00:00 2001 From: David Coe Date: Thu, 4 Apr 2024 12:31:02 -0400 Subject: [PATCH 41/61] prep for check in --- csharp/src/Client/SchemaConverter.cs | 6 +- .../Service/Rpc/Thrift/TBinaryColumn.cs | 6 +- .../Thrift/Service/Rpc/Thrift/TBoolColumn.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TBoolValue.cs | 10 +- .../Thrift/Service/Rpc/Thrift/TByteColumn.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TByteValue.cs | 10 +- .../Thrift/Service/Rpc/Thrift/TCLIService.cs | 550 +++++++++--------- .../Rpc/Thrift/TCancelDelegationTokenReq.cs | 16 +- .../Rpc/Thrift/TCancelDelegationTokenResp.cs | 8 +- .../Service/Rpc/Thrift/TCancelOperationReq.cs | 8 +- .../Rpc/Thrift/TCancelOperationResp.cs | 8 +- .../Service/Rpc/Thrift/TCloseOperationReq.cs | 8 +- .../Service/Rpc/Thrift/TCloseOperationResp.cs | 8 +- .../Service/Rpc/Thrift/TCloseSessionReq.cs | 8 +- .../Service/Rpc/Thrift/TCloseSessionResp.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TColumn.cs | 80 +-- .../Thrift/Service/Rpc/Thrift/TColumnDesc.cs | 24 +- .../Thrift/Service/Rpc/Thrift/TColumnValue.cs | 70 +-- .../Rpc/Thrift/TDBSqlCloudResultFile.cs | 8 +- .../Service/Rpc/Thrift/TDBSqlConfValue.cs | 10 +- .../Rpc/Thrift/TDBSqlSessionCapabilities.cs | 10 +- .../Service/Rpc/Thrift/TDBSqlSessionConf.cs | 70 +-- .../Service/Rpc/Thrift/TDBSqlTempView.cs | 40 +- .../Service/Rpc/Thrift/TDoubleColumn.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TDoubleValue.cs | 10 +- .../Service/Rpc/Thrift/TDownloadDataReq.cs | 40 +- .../Service/Rpc/Thrift/TDownloadDataResp.cs | 16 +- .../Rpc/Thrift/TExecuteStatementReq.cs | 168 +++--- .../Rpc/Thrift/TExecuteStatementResp.cs | 72 +-- .../Service/Rpc/Thrift/TExpressionInfo.cs | 120 ++-- .../Service/Rpc/Thrift/TFetchResultsReq.cs | 40 +- .../Service/Rpc/Thrift/TFetchResultsResp.cs | 40 +- .../Service/Rpc/Thrift/TGetCatalogsReq.cs | 40 +- .../Service/Rpc/Thrift/TGetCatalogsResp.cs | 24 +- .../Service/Rpc/Thrift/TGetColumnsReq.cs | 72 +-- .../Service/Rpc/Thrift/TGetColumnsResp.cs | 24 +- .../Rpc/Thrift/TGetCrossReferenceReq.cs | 88 +-- .../Rpc/Thrift/TGetCrossReferenceResp.cs | 24 +- .../Rpc/Thrift/TGetDelegationTokenReq.cs | 24 +- .../Rpc/Thrift/TGetDelegationTokenResp.cs | 16 +- .../Service/Rpc/Thrift/TGetFunctionsReq.cs | 64 +- .../Service/Rpc/Thrift/TGetFunctionsResp.cs | 24 +- .../Thrift/Service/Rpc/Thrift/TGetInfoReq.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TGetInfoResp.cs | 16 +- .../Service/Rpc/Thrift/TGetInfoValue.cs | 60 +- .../Rpc/Thrift/TGetOperationStatusReq.cs | 16 +- .../Rpc/Thrift/TGetOperationStatusResp.cs | 136 ++--- .../Service/Rpc/Thrift/TGetPrimaryKeysReq.cs | 64 +- .../Service/Rpc/Thrift/TGetPrimaryKeysResp.cs | 24 +- .../Service/Rpc/Thrift/TGetQueryIdReq.cs | 8 +- .../Service/Rpc/Thrift/TGetQueryIdResp.cs | 8 +- .../Rpc/Thrift/TGetResultSetMetadataReq.cs | 16 +- .../Rpc/Thrift/TGetResultSetMetadataResp.cs | 104 ++-- .../Service/Rpc/Thrift/TGetSchemasReq.cs | 56 +- .../Service/Rpc/Thrift/TGetSchemasResp.cs | 24 +- .../Service/Rpc/Thrift/TGetTableTypesReq.cs | 40 +- .../Service/Rpc/Thrift/TGetTableTypesResp.cs | 24 +- .../Service/Rpc/Thrift/TGetTablesReq.cs | 72 +-- .../Service/Rpc/Thrift/TGetTablesResp.cs | 24 +- .../Service/Rpc/Thrift/TGetTypeInfoReq.cs | 40 +- .../Service/Rpc/Thrift/TGetTypeInfoResp.cs | 24 +- .../Service/Rpc/Thrift/THandleIdentifier.cs | 16 +- .../Thrift/Service/Rpc/Thrift/TI16Column.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TI16Value.cs | 10 +- .../Thrift/Service/Rpc/Thrift/TI32Column.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TI32Value.cs | 10 +- .../Thrift/Service/Rpc/Thrift/TI64Column.cs | 4 +- .../Thrift/Service/Rpc/Thrift/TI64Value.cs | 10 +- .../Thrift/Service/Rpc/Thrift/TNamespace.cs | 20 +- .../Service/Rpc/Thrift/TOpenSessionReq.cs | 72 +-- .../Service/Rpc/Thrift/TOpenSessionResp.cs | 48 +- .../Service/Rpc/Thrift/TOperationHandle.cs | 16 +- .../Service/Rpc/Thrift/TPrimitiveTypeEntry.cs | 8 +- .../Service/Rpc/Thrift/TProgressUpdateResp.cs | 24 +- .../Rpc/Thrift/TRenewDelegationTokenReq.cs | 16 +- .../Rpc/Thrift/TRenewDelegationTokenResp.cs | 8 +- .../Apache/Thrift/Service/Rpc/Thrift/TRow.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TRowSet.cs | 48 +- .../Service/Rpc/Thrift/TSessionHandle.cs | 8 +- .../Service/Rpc/Thrift/TSetClientInfoReq.cs | 16 +- .../Service/Rpc/Thrift/TSetClientInfoResp.cs | 8 +- .../Service/Rpc/Thrift/TSparkArrowBatch.cs | 8 +- .../Rpc/Thrift/TSparkArrowResultLink.cs | 8 +- .../Service/Rpc/Thrift/TSparkArrowTypes.cs | 40 +- .../Service/Rpc/Thrift/TSparkDirectResults.cs | 40 +- .../Rpc/Thrift/TSparkGetDirectResults.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TStatus.cs | 32 +- .../Service/Rpc/Thrift/TStringColumn.cs | 6 +- .../Thrift/Service/Rpc/Thrift/TStringValue.cs | 10 +- .../Service/Rpc/Thrift/TStructTypeEntry.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TTableSchema.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TTypeDesc.cs | 8 +- .../Thrift/Service/Rpc/Thrift/TTypeEntry.cs | 60 +- .../Service/Rpc/Thrift/TTypeQualifierValue.cs | 20 +- .../Service/Rpc/Thrift/TTypeQualifiers.cs | 8 +- .../Service/Rpc/Thrift/TUnionTypeEntry.cs | 8 +- .../Service/Rpc/Thrift/TUploadDataReq.cs | 32 +- .../Service/Rpc/Thrift/TUploadDataResp.cs | 16 +- .../Rpc/Thrift/TUserDefinedTypeEntry.cs | 8 +- 99 files changed, 1667 insertions(+), 1667 deletions(-) diff --git a/csharp/src/Client/SchemaConverter.cs b/csharp/src/Client/SchemaConverter.cs index a46eb1c913..95cb86ab86 100644 --- a/csharp/src/Client/SchemaConverter.cs +++ b/csharp/src/Client/SchemaConverter.cs @@ -72,13 +72,13 @@ public static DataTable ConvertArrowSchema(Schema schema, AdbcStatement adbcStat { if (f.Metadata.TryGetValue("precision", out string precisionValue)) { - if(!string.IsNullOrEmpty(precisionValue)) + if (!string.IsNullOrEmpty(precisionValue)) row[SchemaTableColumn.NumericPrecision] = Convert.ToInt32(precisionValue); } - if(f.Metadata.TryGetValue("scale", out string scaleValue)) + if (f.Metadata.TryGetValue("scale", out string scaleValue)) { - if(!string.IsNullOrEmpty(scaleValue)) + if (!string.IsNullOrEmpty(scaleValue)) row[SchemaTableColumn.NumericScale] = Convert.ToInt32(scaleValue); } } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs index f63e1add0b..30a64a24f8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs @@ -165,7 +165,7 @@ public TBinaryColumn DeepCopy() var tmp199 = new TStruct("TBinaryColumn"); await oprot.WriteStructBeginAsync(tmp199, cancellationToken); var tmp200 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp200.Name = "values"; tmp200.Type = TType.List; @@ -210,7 +210,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Values != null)) + if ((Values != null)) { for (int i = 0; i < Values.Length; i++) { @@ -224,7 +224,7 @@ public override int GetHashCode() { public override string ToString() { var tmp202 = new StringBuilder("TBinaryColumn("); - if((Values != null)) + if ((Values != null)) { tmp202.Append(", Values: "); Values.ToString(tmp202); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs index 49771c0498..8af3739db1 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs @@ -138,7 +138,7 @@ public TBoolColumn DeepCopy() var tmp136 = new TStruct("TBoolColumn"); await oprot.WriteStructBeginAsync(tmp136, cancellationToken); var tmp137 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp137.Name = "values"; tmp137.Type = TType.List; @@ -186,7 +186,7 @@ public override int GetHashCode() public override string ToString() { var tmp139 = new StringBuilder("TBoolColumn("); - if((Values != null)) + if ((Values != null)) { tmp139.Append(", Values: "); Values.ToString(tmp139); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs index 2cde7a2dd7..9a52e708d2 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolValue.cs @@ -65,7 +65,7 @@ public TBoolValue() public TBoolValue DeepCopy() { var tmp83 = new TBoolValue(); - if(__isset.@value) + if (__isset.@value) { tmp83.Value = this.Value; } @@ -124,7 +124,7 @@ public TBoolValue DeepCopy() var tmp84 = new TStruct("TBoolValue"); await oprot.WriteStructBeginAsync(tmp84, cancellationToken); var tmp85 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp85.Name = "value"; tmp85.Type = TType.Bool; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp86 = new StringBuilder("TBoolValue("); int tmp87 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp87++) { tmp86.Append(", "); } + if (0 < tmp87++) { tmp86.Append(", "); } tmp86.Append("Value: "); Value.ToString(tmp86); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs index 56ac220a76..afc9ad0622 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs @@ -136,7 +136,7 @@ public TByteColumn DeepCopy() var tmp145 = new TStruct("TByteColumn"); await oprot.WriteStructBeginAsync(tmp145, cancellationToken); var tmp146 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp146.Name = "values"; tmp146.Type = TType.List; @@ -184,7 +184,7 @@ public override int GetHashCode() public override string ToString() { var tmp148 = new StringBuilder("TByteColumn("); - if((Values != null)) + if ((Values != null)) { tmp148.Append(", Values: "); Values.ToString(tmp148); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs index 0d82196ecb..f39b91e9b2 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteValue.cs @@ -65,7 +65,7 @@ public TByteValue() public TByteValue DeepCopy() { var tmp88 = new TByteValue(); - if(__isset.@value) + if (__isset.@value) { tmp88.Value = this.Value; } @@ -124,7 +124,7 @@ public TByteValue DeepCopy() var tmp89 = new TStruct("TByteValue"); await oprot.WriteStructBeginAsync(tmp89, cancellationToken); var tmp90 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp90.Name = "value"; tmp90.Type = TType.Byte; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp91 = new StringBuilder("TByteValue("); int tmp92 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp92++) { tmp91.Append(", "); } + if (0 < tmp92++) { tmp91.Append(", "); } tmp91.Append("Value: "); Value.ToString(tmp91); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs index e127e49201..2f3e88f20e 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCLIService.cs @@ -1196,7 +1196,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp757) { var tmp758 = $"Error occurred in {GetType().FullName}: {tmp757.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp757, tmp758); else Console.Error.WriteLine(tmp758); @@ -1227,7 +1227,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp762) { var tmp763 = $"Error occurred in {GetType().FullName}: {tmp762.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp762, tmp763); else Console.Error.WriteLine(tmp763); @@ -1258,7 +1258,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp767) { var tmp768 = $"Error occurred in {GetType().FullName}: {tmp767.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp767, tmp768); else Console.Error.WriteLine(tmp768); @@ -1289,7 +1289,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp772) { var tmp773 = $"Error occurred in {GetType().FullName}: {tmp772.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp772, tmp773); else Console.Error.WriteLine(tmp773); @@ -1320,7 +1320,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp777) { var tmp778 = $"Error occurred in {GetType().FullName}: {tmp777.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp777, tmp778); else Console.Error.WriteLine(tmp778); @@ -1351,7 +1351,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp782) { var tmp783 = $"Error occurred in {GetType().FullName}: {tmp782.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp782, tmp783); else Console.Error.WriteLine(tmp783); @@ -1382,7 +1382,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp787) { var tmp788 = $"Error occurred in {GetType().FullName}: {tmp787.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp787, tmp788); else Console.Error.WriteLine(tmp788); @@ -1413,7 +1413,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp792) { var tmp793 = $"Error occurred in {GetType().FullName}: {tmp792.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp792, tmp793); else Console.Error.WriteLine(tmp793); @@ -1444,7 +1444,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp797) { var tmp798 = $"Error occurred in {GetType().FullName}: {tmp797.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp797, tmp798); else Console.Error.WriteLine(tmp798); @@ -1475,7 +1475,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp802) { var tmp803 = $"Error occurred in {GetType().FullName}: {tmp802.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp802, tmp803); else Console.Error.WriteLine(tmp803); @@ -1506,7 +1506,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp807) { var tmp808 = $"Error occurred in {GetType().FullName}: {tmp807.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp807, tmp808); else Console.Error.WriteLine(tmp808); @@ -1537,7 +1537,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp812) { var tmp813 = $"Error occurred in {GetType().FullName}: {tmp812.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp812, tmp813); else Console.Error.WriteLine(tmp813); @@ -1568,7 +1568,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp817) { var tmp818 = $"Error occurred in {GetType().FullName}: {tmp817.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp817, tmp818); else Console.Error.WriteLine(tmp818); @@ -1599,7 +1599,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp822) { var tmp823 = $"Error occurred in {GetType().FullName}: {tmp822.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp822, tmp823); else Console.Error.WriteLine(tmp823); @@ -1630,7 +1630,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp827) { var tmp828 = $"Error occurred in {GetType().FullName}: {tmp827.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp827, tmp828); else Console.Error.WriteLine(tmp828); @@ -1661,7 +1661,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp832) { var tmp833 = $"Error occurred in {GetType().FullName}: {tmp832.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp832, tmp833); else Console.Error.WriteLine(tmp833); @@ -1692,7 +1692,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp837) { var tmp838 = $"Error occurred in {GetType().FullName}: {tmp837.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp837, tmp838); else Console.Error.WriteLine(tmp838); @@ -1723,7 +1723,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp842) { var tmp843 = $"Error occurred in {GetType().FullName}: {tmp842.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp842, tmp843); else Console.Error.WriteLine(tmp843); @@ -1754,7 +1754,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp847) { var tmp848 = $"Error occurred in {GetType().FullName}: {tmp847.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp847, tmp848); else Console.Error.WriteLine(tmp848); @@ -1785,7 +1785,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp852) { var tmp853 = $"Error occurred in {GetType().FullName}: {tmp852.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp852, tmp853); else Console.Error.WriteLine(tmp853); @@ -1816,7 +1816,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp857) { var tmp858 = $"Error occurred in {GetType().FullName}: {tmp857.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp857, tmp858); else Console.Error.WriteLine(tmp858); @@ -1847,7 +1847,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp862) { var tmp863 = $"Error occurred in {GetType().FullName}: {tmp862.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp862, tmp863); else Console.Error.WriteLine(tmp863); @@ -1878,7 +1878,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp867) { var tmp868 = $"Error occurred in {GetType().FullName}: {tmp867.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp867, tmp868); else Console.Error.WriteLine(tmp868); @@ -1909,7 +1909,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp872) { var tmp873 = $"Error occurred in {GetType().FullName}: {tmp872.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp872, tmp873); else Console.Error.WriteLine(tmp873); @@ -1940,7 +1940,7 @@ public async Task ProcessAsync(TProtocol iprot, TProtocol oprot, Cancellat catch (Exception tmp877) { var tmp878 = $"Error occurred in {GetType().FullName}: {tmp877.Message}"; - if(_logger != null) + if (_logger != null) _logger.LogError("{Exception}, {Message}", tmp877, tmp878); else Console.Error.WriteLine(tmp878); @@ -1988,7 +1988,7 @@ public OpenSession_args() public OpenSession_args DeepCopy() { var tmp880 = new OpenSession_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp880.Req = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionReq)this.Req.DeepCopy(); } @@ -2048,7 +2048,7 @@ public OpenSession_args DeepCopy() var tmp881 = new TStruct("OpenSession_args"); await oprot.WriteStructBeginAsync(tmp881, cancellationToken); var tmp882 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp882.Name = "req"; tmp882.Type = TType.Struct; @@ -2076,7 +2076,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -2088,9 +2088,9 @@ public override string ToString() { var tmp883 = new StringBuilder("OpenSession_args("); int tmp884 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp884++) { tmp883.Append(", "); } + if (0 < tmp884++) { tmp883.Append(", "); } tmp883.Append("Req: "); Req.ToString(tmp883); } @@ -2131,7 +2131,7 @@ public OpenSession_result() public OpenSession_result DeepCopy() { var tmp885 = new OpenSession_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp885.Success = (global::Apache.Hive.Service.Rpc.Thrift.TOpenSessionResp)this.Success.DeepCopy(); } @@ -2192,7 +2192,7 @@ public OpenSession_result DeepCopy() await oprot.WriteStructBeginAsync(tmp886, cancellationToken); var tmp887 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -2223,7 +2223,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -2235,9 +2235,9 @@ public override string ToString() { var tmp888 = new StringBuilder("OpenSession_result("); int tmp889 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp889++) { tmp888.Append(", "); } + if (0 < tmp889++) { tmp888.Append(", "); } tmp888.Append("Success: "); Success.ToString(tmp888); } @@ -2278,7 +2278,7 @@ public CloseSession_args() public CloseSession_args DeepCopy() { var tmp890 = new CloseSession_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp890.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionReq)this.Req.DeepCopy(); } @@ -2338,7 +2338,7 @@ public CloseSession_args DeepCopy() var tmp891 = new TStruct("CloseSession_args"); await oprot.WriteStructBeginAsync(tmp891, cancellationToken); var tmp892 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp892.Name = "req"; tmp892.Type = TType.Struct; @@ -2366,7 +2366,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -2378,9 +2378,9 @@ public override string ToString() { var tmp893 = new StringBuilder("CloseSession_args("); int tmp894 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp894++) { tmp893.Append(", "); } + if (0 < tmp894++) { tmp893.Append(", "); } tmp893.Append("Req: "); Req.ToString(tmp893); } @@ -2421,7 +2421,7 @@ public CloseSession_result() public CloseSession_result DeepCopy() { var tmp895 = new CloseSession_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp895.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseSessionResp)this.Success.DeepCopy(); } @@ -2482,7 +2482,7 @@ public CloseSession_result DeepCopy() await oprot.WriteStructBeginAsync(tmp896, cancellationToken); var tmp897 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -2513,7 +2513,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -2525,9 +2525,9 @@ public override string ToString() { var tmp898 = new StringBuilder("CloseSession_result("); int tmp899 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp899++) { tmp898.Append(", "); } + if (0 < tmp899++) { tmp898.Append(", "); } tmp898.Append("Success: "); Success.ToString(tmp898); } @@ -2568,7 +2568,7 @@ public GetInfo_args() public GetInfo_args DeepCopy() { var tmp900 = new GetInfo_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp900.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoReq)this.Req.DeepCopy(); } @@ -2628,7 +2628,7 @@ public GetInfo_args DeepCopy() var tmp901 = new TStruct("GetInfo_args"); await oprot.WriteStructBeginAsync(tmp901, cancellationToken); var tmp902 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp902.Name = "req"; tmp902.Type = TType.Struct; @@ -2656,7 +2656,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -2668,9 +2668,9 @@ public override string ToString() { var tmp903 = new StringBuilder("GetInfo_args("); int tmp904 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp904++) { tmp903.Append(", "); } + if (0 < tmp904++) { tmp903.Append(", "); } tmp903.Append("Req: "); Req.ToString(tmp903); } @@ -2711,7 +2711,7 @@ public GetInfo_result() public GetInfo_result DeepCopy() { var tmp905 = new GetInfo_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp905.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoResp)this.Success.DeepCopy(); } @@ -2772,7 +2772,7 @@ public GetInfo_result DeepCopy() await oprot.WriteStructBeginAsync(tmp906, cancellationToken); var tmp907 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -2803,7 +2803,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -2815,9 +2815,9 @@ public override string ToString() { var tmp908 = new StringBuilder("GetInfo_result("); int tmp909 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp909++) { tmp908.Append(", "); } + if (0 < tmp909++) { tmp908.Append(", "); } tmp908.Append("Success: "); Success.ToString(tmp908); } @@ -2858,7 +2858,7 @@ public ExecuteStatement_args() public ExecuteStatement_args DeepCopy() { var tmp910 = new ExecuteStatement_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp910.Req = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementReq)this.Req.DeepCopy(); } @@ -2918,7 +2918,7 @@ public ExecuteStatement_args DeepCopy() var tmp911 = new TStruct("ExecuteStatement_args"); await oprot.WriteStructBeginAsync(tmp911, cancellationToken); var tmp912 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp912.Name = "req"; tmp912.Type = TType.Struct; @@ -2946,7 +2946,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -2958,9 +2958,9 @@ public override string ToString() { var tmp913 = new StringBuilder("ExecuteStatement_args("); int tmp914 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp914++) { tmp913.Append(", "); } + if (0 < tmp914++) { tmp913.Append(", "); } tmp913.Append("Req: "); Req.ToString(tmp913); } @@ -3001,7 +3001,7 @@ public ExecuteStatement_result() public ExecuteStatement_result DeepCopy() { var tmp915 = new ExecuteStatement_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp915.Success = (global::Apache.Hive.Service.Rpc.Thrift.TExecuteStatementResp)this.Success.DeepCopy(); } @@ -3062,7 +3062,7 @@ public ExecuteStatement_result DeepCopy() await oprot.WriteStructBeginAsync(tmp916, cancellationToken); var tmp917 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -3093,7 +3093,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -3105,9 +3105,9 @@ public override string ToString() { var tmp918 = new StringBuilder("ExecuteStatement_result("); int tmp919 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp919++) { tmp918.Append(", "); } + if (0 < tmp919++) { tmp918.Append(", "); } tmp918.Append("Success: "); Success.ToString(tmp918); } @@ -3148,7 +3148,7 @@ public GetTypeInfo_args() public GetTypeInfo_args DeepCopy() { var tmp920 = new GetTypeInfo_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp920.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoReq)this.Req.DeepCopy(); } @@ -3208,7 +3208,7 @@ public GetTypeInfo_args DeepCopy() var tmp921 = new TStruct("GetTypeInfo_args"); await oprot.WriteStructBeginAsync(tmp921, cancellationToken); var tmp922 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp922.Name = "req"; tmp922.Type = TType.Struct; @@ -3236,7 +3236,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -3248,9 +3248,9 @@ public override string ToString() { var tmp923 = new StringBuilder("GetTypeInfo_args("); int tmp924 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp924++) { tmp923.Append(", "); } + if (0 < tmp924++) { tmp923.Append(", "); } tmp923.Append("Req: "); Req.ToString(tmp923); } @@ -3291,7 +3291,7 @@ public GetTypeInfo_result() public GetTypeInfo_result DeepCopy() { var tmp925 = new GetTypeInfo_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp925.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTypeInfoResp)this.Success.DeepCopy(); } @@ -3352,7 +3352,7 @@ public GetTypeInfo_result DeepCopy() await oprot.WriteStructBeginAsync(tmp926, cancellationToken); var tmp927 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -3383,7 +3383,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -3395,9 +3395,9 @@ public override string ToString() { var tmp928 = new StringBuilder("GetTypeInfo_result("); int tmp929 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp929++) { tmp928.Append(", "); } + if (0 < tmp929++) { tmp928.Append(", "); } tmp928.Append("Success: "); Success.ToString(tmp928); } @@ -3438,7 +3438,7 @@ public GetCatalogs_args() public GetCatalogs_args DeepCopy() { var tmp930 = new GetCatalogs_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp930.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsReq)this.Req.DeepCopy(); } @@ -3498,7 +3498,7 @@ public GetCatalogs_args DeepCopy() var tmp931 = new TStruct("GetCatalogs_args"); await oprot.WriteStructBeginAsync(tmp931, cancellationToken); var tmp932 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp932.Name = "req"; tmp932.Type = TType.Struct; @@ -3526,7 +3526,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -3538,9 +3538,9 @@ public override string ToString() { var tmp933 = new StringBuilder("GetCatalogs_args("); int tmp934 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp934++) { tmp933.Append(", "); } + if (0 < tmp934++) { tmp933.Append(", "); } tmp933.Append("Req: "); Req.ToString(tmp933); } @@ -3581,7 +3581,7 @@ public GetCatalogs_result() public GetCatalogs_result DeepCopy() { var tmp935 = new GetCatalogs_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp935.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCatalogsResp)this.Success.DeepCopy(); } @@ -3642,7 +3642,7 @@ public GetCatalogs_result DeepCopy() await oprot.WriteStructBeginAsync(tmp936, cancellationToken); var tmp937 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -3673,7 +3673,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -3685,9 +3685,9 @@ public override string ToString() { var tmp938 = new StringBuilder("GetCatalogs_result("); int tmp939 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp939++) { tmp938.Append(", "); } + if (0 < tmp939++) { tmp938.Append(", "); } tmp938.Append("Success: "); Success.ToString(tmp938); } @@ -3728,7 +3728,7 @@ public GetSchemas_args() public GetSchemas_args DeepCopy() { var tmp940 = new GetSchemas_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp940.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasReq)this.Req.DeepCopy(); } @@ -3788,7 +3788,7 @@ public GetSchemas_args DeepCopy() var tmp941 = new TStruct("GetSchemas_args"); await oprot.WriteStructBeginAsync(tmp941, cancellationToken); var tmp942 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp942.Name = "req"; tmp942.Type = TType.Struct; @@ -3816,7 +3816,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -3828,9 +3828,9 @@ public override string ToString() { var tmp943 = new StringBuilder("GetSchemas_args("); int tmp944 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp944++) { tmp943.Append(", "); } + if (0 < tmp944++) { tmp943.Append(", "); } tmp943.Append("Req: "); Req.ToString(tmp943); } @@ -3871,7 +3871,7 @@ public GetSchemas_result() public GetSchemas_result DeepCopy() { var tmp945 = new GetSchemas_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp945.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetSchemasResp)this.Success.DeepCopy(); } @@ -3932,7 +3932,7 @@ public GetSchemas_result DeepCopy() await oprot.WriteStructBeginAsync(tmp946, cancellationToken); var tmp947 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -3963,7 +3963,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -3975,9 +3975,9 @@ public override string ToString() { var tmp948 = new StringBuilder("GetSchemas_result("); int tmp949 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp949++) { tmp948.Append(", "); } + if (0 < tmp949++) { tmp948.Append(", "); } tmp948.Append("Success: "); Success.ToString(tmp948); } @@ -4018,7 +4018,7 @@ public GetTables_args() public GetTables_args DeepCopy() { var tmp950 = new GetTables_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp950.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesReq)this.Req.DeepCopy(); } @@ -4078,7 +4078,7 @@ public GetTables_args DeepCopy() var tmp951 = new TStruct("GetTables_args"); await oprot.WriteStructBeginAsync(tmp951, cancellationToken); var tmp952 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp952.Name = "req"; tmp952.Type = TType.Struct; @@ -4106,7 +4106,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -4118,9 +4118,9 @@ public override string ToString() { var tmp953 = new StringBuilder("GetTables_args("); int tmp954 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp954++) { tmp953.Append(", "); } + if (0 < tmp954++) { tmp953.Append(", "); } tmp953.Append("Req: "); Req.ToString(tmp953); } @@ -4161,7 +4161,7 @@ public GetTables_result() public GetTables_result DeepCopy() { var tmp955 = new GetTables_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp955.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTablesResp)this.Success.DeepCopy(); } @@ -4222,7 +4222,7 @@ public GetTables_result DeepCopy() await oprot.WriteStructBeginAsync(tmp956, cancellationToken); var tmp957 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -4253,7 +4253,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -4265,9 +4265,9 @@ public override string ToString() { var tmp958 = new StringBuilder("GetTables_result("); int tmp959 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp959++) { tmp958.Append(", "); } + if (0 < tmp959++) { tmp958.Append(", "); } tmp958.Append("Success: "); Success.ToString(tmp958); } @@ -4308,7 +4308,7 @@ public GetTableTypes_args() public GetTableTypes_args DeepCopy() { var tmp960 = new GetTableTypes_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp960.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesReq)this.Req.DeepCopy(); } @@ -4368,7 +4368,7 @@ public GetTableTypes_args DeepCopy() var tmp961 = new TStruct("GetTableTypes_args"); await oprot.WriteStructBeginAsync(tmp961, cancellationToken); var tmp962 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp962.Name = "req"; tmp962.Type = TType.Struct; @@ -4396,7 +4396,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -4408,9 +4408,9 @@ public override string ToString() { var tmp963 = new StringBuilder("GetTableTypes_args("); int tmp964 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp964++) { tmp963.Append(", "); } + if (0 < tmp964++) { tmp963.Append(", "); } tmp963.Append("Req: "); Req.ToString(tmp963); } @@ -4451,7 +4451,7 @@ public GetTableTypes_result() public GetTableTypes_result DeepCopy() { var tmp965 = new GetTableTypes_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp965.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetTableTypesResp)this.Success.DeepCopy(); } @@ -4512,7 +4512,7 @@ public GetTableTypes_result DeepCopy() await oprot.WriteStructBeginAsync(tmp966, cancellationToken); var tmp967 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -4543,7 +4543,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -4555,9 +4555,9 @@ public override string ToString() { var tmp968 = new StringBuilder("GetTableTypes_result("); int tmp969 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp969++) { tmp968.Append(", "); } + if (0 < tmp969++) { tmp968.Append(", "); } tmp968.Append("Success: "); Success.ToString(tmp968); } @@ -4598,7 +4598,7 @@ public GetColumns_args() public GetColumns_args DeepCopy() { var tmp970 = new GetColumns_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp970.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsReq)this.Req.DeepCopy(); } @@ -4658,7 +4658,7 @@ public GetColumns_args DeepCopy() var tmp971 = new TStruct("GetColumns_args"); await oprot.WriteStructBeginAsync(tmp971, cancellationToken); var tmp972 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp972.Name = "req"; tmp972.Type = TType.Struct; @@ -4686,7 +4686,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -4698,9 +4698,9 @@ public override string ToString() { var tmp973 = new StringBuilder("GetColumns_args("); int tmp974 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp974++) { tmp973.Append(", "); } + if (0 < tmp974++) { tmp973.Append(", "); } tmp973.Append("Req: "); Req.ToString(tmp973); } @@ -4741,7 +4741,7 @@ public GetColumns_result() public GetColumns_result DeepCopy() { var tmp975 = new GetColumns_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp975.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetColumnsResp)this.Success.DeepCopy(); } @@ -4802,7 +4802,7 @@ public GetColumns_result DeepCopy() await oprot.WriteStructBeginAsync(tmp976, cancellationToken); var tmp977 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -4833,7 +4833,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -4845,9 +4845,9 @@ public override string ToString() { var tmp978 = new StringBuilder("GetColumns_result("); int tmp979 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp979++) { tmp978.Append(", "); } + if (0 < tmp979++) { tmp978.Append(", "); } tmp978.Append("Success: "); Success.ToString(tmp978); } @@ -4888,7 +4888,7 @@ public GetFunctions_args() public GetFunctions_args DeepCopy() { var tmp980 = new GetFunctions_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp980.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsReq)this.Req.DeepCopy(); } @@ -4948,7 +4948,7 @@ public GetFunctions_args DeepCopy() var tmp981 = new TStruct("GetFunctions_args"); await oprot.WriteStructBeginAsync(tmp981, cancellationToken); var tmp982 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp982.Name = "req"; tmp982.Type = TType.Struct; @@ -4976,7 +4976,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -4988,9 +4988,9 @@ public override string ToString() { var tmp983 = new StringBuilder("GetFunctions_args("); int tmp984 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp984++) { tmp983.Append(", "); } + if (0 < tmp984++) { tmp983.Append(", "); } tmp983.Append("Req: "); Req.ToString(tmp983); } @@ -5031,7 +5031,7 @@ public GetFunctions_result() public GetFunctions_result DeepCopy() { var tmp985 = new GetFunctions_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp985.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetFunctionsResp)this.Success.DeepCopy(); } @@ -5092,7 +5092,7 @@ public GetFunctions_result DeepCopy() await oprot.WriteStructBeginAsync(tmp986, cancellationToken); var tmp987 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -5123,7 +5123,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -5135,9 +5135,9 @@ public override string ToString() { var tmp988 = new StringBuilder("GetFunctions_result("); int tmp989 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp989++) { tmp988.Append(", "); } + if (0 < tmp989++) { tmp988.Append(", "); } tmp988.Append("Success: "); Success.ToString(tmp988); } @@ -5178,7 +5178,7 @@ public GetPrimaryKeys_args() public GetPrimaryKeys_args DeepCopy() { var tmp990 = new GetPrimaryKeys_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp990.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysReq)this.Req.DeepCopy(); } @@ -5238,7 +5238,7 @@ public GetPrimaryKeys_args DeepCopy() var tmp991 = new TStruct("GetPrimaryKeys_args"); await oprot.WriteStructBeginAsync(tmp991, cancellationToken); var tmp992 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp992.Name = "req"; tmp992.Type = TType.Struct; @@ -5266,7 +5266,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -5278,9 +5278,9 @@ public override string ToString() { var tmp993 = new StringBuilder("GetPrimaryKeys_args("); int tmp994 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp994++) { tmp993.Append(", "); } + if (0 < tmp994++) { tmp993.Append(", "); } tmp993.Append("Req: "); Req.ToString(tmp993); } @@ -5321,7 +5321,7 @@ public GetPrimaryKeys_result() public GetPrimaryKeys_result DeepCopy() { var tmp995 = new GetPrimaryKeys_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp995.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetPrimaryKeysResp)this.Success.DeepCopy(); } @@ -5382,7 +5382,7 @@ public GetPrimaryKeys_result DeepCopy() await oprot.WriteStructBeginAsync(tmp996, cancellationToken); var tmp997 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -5413,7 +5413,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -5425,9 +5425,9 @@ public override string ToString() { var tmp998 = new StringBuilder("GetPrimaryKeys_result("); int tmp999 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp999++) { tmp998.Append(", "); } + if (0 < tmp999++) { tmp998.Append(", "); } tmp998.Append("Success: "); Success.ToString(tmp998); } @@ -5468,7 +5468,7 @@ public GetCrossReference_args() public GetCrossReference_args DeepCopy() { var tmp1000 = new GetCrossReference_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1000.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceReq)this.Req.DeepCopy(); } @@ -5528,7 +5528,7 @@ public GetCrossReference_args DeepCopy() var tmp1001 = new TStruct("GetCrossReference_args"); await oprot.WriteStructBeginAsync(tmp1001, cancellationToken); var tmp1002 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1002.Name = "req"; tmp1002.Type = TType.Struct; @@ -5556,7 +5556,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -5568,9 +5568,9 @@ public override string ToString() { var tmp1003 = new StringBuilder("GetCrossReference_args("); int tmp1004 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1004++) { tmp1003.Append(", "); } + if (0 < tmp1004++) { tmp1003.Append(", "); } tmp1003.Append("Req: "); Req.ToString(tmp1003); } @@ -5611,7 +5611,7 @@ public GetCrossReference_result() public GetCrossReference_result DeepCopy() { var tmp1005 = new GetCrossReference_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1005.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetCrossReferenceResp)this.Success.DeepCopy(); } @@ -5672,7 +5672,7 @@ public GetCrossReference_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1006, cancellationToken); var tmp1007 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -5703,7 +5703,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -5715,9 +5715,9 @@ public override string ToString() { var tmp1008 = new StringBuilder("GetCrossReference_result("); int tmp1009 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1009++) { tmp1008.Append(", "); } + if (0 < tmp1009++) { tmp1008.Append(", "); } tmp1008.Append("Success: "); Success.ToString(tmp1008); } @@ -5758,7 +5758,7 @@ public GetOperationStatus_args() public GetOperationStatus_args DeepCopy() { var tmp1010 = new GetOperationStatus_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1010.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusReq)this.Req.DeepCopy(); } @@ -5818,7 +5818,7 @@ public GetOperationStatus_args DeepCopy() var tmp1011 = new TStruct("GetOperationStatus_args"); await oprot.WriteStructBeginAsync(tmp1011, cancellationToken); var tmp1012 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1012.Name = "req"; tmp1012.Type = TType.Struct; @@ -5846,7 +5846,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -5858,9 +5858,9 @@ public override string ToString() { var tmp1013 = new StringBuilder("GetOperationStatus_args("); int tmp1014 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1014++) { tmp1013.Append(", "); } + if (0 < tmp1014++) { tmp1013.Append(", "); } tmp1013.Append("Req: "); Req.ToString(tmp1013); } @@ -5901,7 +5901,7 @@ public GetOperationStatus_result() public GetOperationStatus_result DeepCopy() { var tmp1015 = new GetOperationStatus_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1015.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.Success.DeepCopy(); } @@ -5962,7 +5962,7 @@ public GetOperationStatus_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1016, cancellationToken); var tmp1017 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -5993,7 +5993,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -6005,9 +6005,9 @@ public override string ToString() { var tmp1018 = new StringBuilder("GetOperationStatus_result("); int tmp1019 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1019++) { tmp1018.Append(", "); } + if (0 < tmp1019++) { tmp1018.Append(", "); } tmp1018.Append("Success: "); Success.ToString(tmp1018); } @@ -6048,7 +6048,7 @@ public CancelOperation_args() public CancelOperation_args DeepCopy() { var tmp1020 = new CancelOperation_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1020.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationReq)this.Req.DeepCopy(); } @@ -6108,7 +6108,7 @@ public CancelOperation_args DeepCopy() var tmp1021 = new TStruct("CancelOperation_args"); await oprot.WriteStructBeginAsync(tmp1021, cancellationToken); var tmp1022 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1022.Name = "req"; tmp1022.Type = TType.Struct; @@ -6136,7 +6136,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -6148,9 +6148,9 @@ public override string ToString() { var tmp1023 = new StringBuilder("CancelOperation_args("); int tmp1024 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1024++) { tmp1023.Append(", "); } + if (0 < tmp1024++) { tmp1023.Append(", "); } tmp1023.Append("Req: "); Req.ToString(tmp1023); } @@ -6191,7 +6191,7 @@ public CancelOperation_result() public CancelOperation_result DeepCopy() { var tmp1025 = new CancelOperation_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1025.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelOperationResp)this.Success.DeepCopy(); } @@ -6252,7 +6252,7 @@ public CancelOperation_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1026, cancellationToken); var tmp1027 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -6283,7 +6283,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -6295,9 +6295,9 @@ public override string ToString() { var tmp1028 = new StringBuilder("CancelOperation_result("); int tmp1029 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1029++) { tmp1028.Append(", "); } + if (0 < tmp1029++) { tmp1028.Append(", "); } tmp1028.Append("Success: "); Success.ToString(tmp1028); } @@ -6338,7 +6338,7 @@ public CloseOperation_args() public CloseOperation_args DeepCopy() { var tmp1030 = new CloseOperation_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1030.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationReq)this.Req.DeepCopy(); } @@ -6398,7 +6398,7 @@ public CloseOperation_args DeepCopy() var tmp1031 = new TStruct("CloseOperation_args"); await oprot.WriteStructBeginAsync(tmp1031, cancellationToken); var tmp1032 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1032.Name = "req"; tmp1032.Type = TType.Struct; @@ -6426,7 +6426,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -6438,9 +6438,9 @@ public override string ToString() { var tmp1033 = new StringBuilder("CloseOperation_args("); int tmp1034 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1034++) { tmp1033.Append(", "); } + if (0 < tmp1034++) { tmp1033.Append(", "); } tmp1033.Append("Req: "); Req.ToString(tmp1033); } @@ -6481,7 +6481,7 @@ public CloseOperation_result() public CloseOperation_result DeepCopy() { var tmp1035 = new CloseOperation_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1035.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.Success.DeepCopy(); } @@ -6542,7 +6542,7 @@ public CloseOperation_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1036, cancellationToken); var tmp1037 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -6573,7 +6573,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -6585,9 +6585,9 @@ public override string ToString() { var tmp1038 = new StringBuilder("CloseOperation_result("); int tmp1039 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1039++) { tmp1038.Append(", "); } + if (0 < tmp1039++) { tmp1038.Append(", "); } tmp1038.Append("Success: "); Success.ToString(tmp1038); } @@ -6628,7 +6628,7 @@ public GetResultSetMetadata_args() public GetResultSetMetadata_args DeepCopy() { var tmp1040 = new GetResultSetMetadata_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1040.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataReq)this.Req.DeepCopy(); } @@ -6688,7 +6688,7 @@ public GetResultSetMetadata_args DeepCopy() var tmp1041 = new TStruct("GetResultSetMetadata_args"); await oprot.WriteStructBeginAsync(tmp1041, cancellationToken); var tmp1042 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1042.Name = "req"; tmp1042.Type = TType.Struct; @@ -6716,7 +6716,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -6728,9 +6728,9 @@ public override string ToString() { var tmp1043 = new StringBuilder("GetResultSetMetadata_args("); int tmp1044 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1044++) { tmp1043.Append(", "); } + if (0 < tmp1044++) { tmp1043.Append(", "); } tmp1043.Append("Req: "); Req.ToString(tmp1043); } @@ -6771,7 +6771,7 @@ public GetResultSetMetadata_result() public GetResultSetMetadata_result DeepCopy() { var tmp1045 = new GetResultSetMetadata_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1045.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.Success.DeepCopy(); } @@ -6832,7 +6832,7 @@ public GetResultSetMetadata_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1046, cancellationToken); var tmp1047 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -6863,7 +6863,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -6875,9 +6875,9 @@ public override string ToString() { var tmp1048 = new StringBuilder("GetResultSetMetadata_result("); int tmp1049 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1049++) { tmp1048.Append(", "); } + if (0 < tmp1049++) { tmp1048.Append(", "); } tmp1048.Append("Success: "); Success.ToString(tmp1048); } @@ -6918,7 +6918,7 @@ public FetchResults_args() public FetchResults_args DeepCopy() { var tmp1050 = new FetchResults_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1050.Req = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsReq)this.Req.DeepCopy(); } @@ -6978,7 +6978,7 @@ public FetchResults_args DeepCopy() var tmp1051 = new TStruct("FetchResults_args"); await oprot.WriteStructBeginAsync(tmp1051, cancellationToken); var tmp1052 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1052.Name = "req"; tmp1052.Type = TType.Struct; @@ -7006,7 +7006,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -7018,9 +7018,9 @@ public override string ToString() { var tmp1053 = new StringBuilder("FetchResults_args("); int tmp1054 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1054++) { tmp1053.Append(", "); } + if (0 < tmp1054++) { tmp1053.Append(", "); } tmp1053.Append("Req: "); Req.ToString(tmp1053); } @@ -7061,7 +7061,7 @@ public FetchResults_result() public FetchResults_result DeepCopy() { var tmp1055 = new FetchResults_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1055.Success = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.Success.DeepCopy(); } @@ -7122,7 +7122,7 @@ public FetchResults_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1056, cancellationToken); var tmp1057 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -7153,7 +7153,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -7165,9 +7165,9 @@ public override string ToString() { var tmp1058 = new StringBuilder("FetchResults_result("); int tmp1059 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1059++) { tmp1058.Append(", "); } + if (0 < tmp1059++) { tmp1058.Append(", "); } tmp1058.Append("Success: "); Success.ToString(tmp1058); } @@ -7208,7 +7208,7 @@ public GetDelegationToken_args() public GetDelegationToken_args DeepCopy() { var tmp1060 = new GetDelegationToken_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1060.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenReq)this.Req.DeepCopy(); } @@ -7268,7 +7268,7 @@ public GetDelegationToken_args DeepCopy() var tmp1061 = new TStruct("GetDelegationToken_args"); await oprot.WriteStructBeginAsync(tmp1061, cancellationToken); var tmp1062 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1062.Name = "req"; tmp1062.Type = TType.Struct; @@ -7296,7 +7296,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -7308,9 +7308,9 @@ public override string ToString() { var tmp1063 = new StringBuilder("GetDelegationToken_args("); int tmp1064 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1064++) { tmp1063.Append(", "); } + if (0 < tmp1064++) { tmp1063.Append(", "); } tmp1063.Append("Req: "); Req.ToString(tmp1063); } @@ -7351,7 +7351,7 @@ public GetDelegationToken_result() public GetDelegationToken_result DeepCopy() { var tmp1065 = new GetDelegationToken_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1065.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetDelegationTokenResp)this.Success.DeepCopy(); } @@ -7412,7 +7412,7 @@ public GetDelegationToken_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1066, cancellationToken); var tmp1067 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -7443,7 +7443,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -7455,9 +7455,9 @@ public override string ToString() { var tmp1068 = new StringBuilder("GetDelegationToken_result("); int tmp1069 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1069++) { tmp1068.Append(", "); } + if (0 < tmp1069++) { tmp1068.Append(", "); } tmp1068.Append("Success: "); Success.ToString(tmp1068); } @@ -7498,7 +7498,7 @@ public CancelDelegationToken_args() public CancelDelegationToken_args DeepCopy() { var tmp1070 = new CancelDelegationToken_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1070.Req = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenReq)this.Req.DeepCopy(); } @@ -7558,7 +7558,7 @@ public CancelDelegationToken_args DeepCopy() var tmp1071 = new TStruct("CancelDelegationToken_args"); await oprot.WriteStructBeginAsync(tmp1071, cancellationToken); var tmp1072 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1072.Name = "req"; tmp1072.Type = TType.Struct; @@ -7586,7 +7586,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -7598,9 +7598,9 @@ public override string ToString() { var tmp1073 = new StringBuilder("CancelDelegationToken_args("); int tmp1074 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1074++) { tmp1073.Append(", "); } + if (0 < tmp1074++) { tmp1073.Append(", "); } tmp1073.Append("Req: "); Req.ToString(tmp1073); } @@ -7641,7 +7641,7 @@ public CancelDelegationToken_result() public CancelDelegationToken_result DeepCopy() { var tmp1075 = new CancelDelegationToken_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1075.Success = (global::Apache.Hive.Service.Rpc.Thrift.TCancelDelegationTokenResp)this.Success.DeepCopy(); } @@ -7702,7 +7702,7 @@ public CancelDelegationToken_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1076, cancellationToken); var tmp1077 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -7733,7 +7733,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -7745,9 +7745,9 @@ public override string ToString() { var tmp1078 = new StringBuilder("CancelDelegationToken_result("); int tmp1079 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1079++) { tmp1078.Append(", "); } + if (0 < tmp1079++) { tmp1078.Append(", "); } tmp1078.Append("Success: "); Success.ToString(tmp1078); } @@ -7788,7 +7788,7 @@ public RenewDelegationToken_args() public RenewDelegationToken_args DeepCopy() { var tmp1080 = new RenewDelegationToken_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1080.Req = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenReq)this.Req.DeepCopy(); } @@ -7848,7 +7848,7 @@ public RenewDelegationToken_args DeepCopy() var tmp1081 = new TStruct("RenewDelegationToken_args"); await oprot.WriteStructBeginAsync(tmp1081, cancellationToken); var tmp1082 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1082.Name = "req"; tmp1082.Type = TType.Struct; @@ -7876,7 +7876,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -7888,9 +7888,9 @@ public override string ToString() { var tmp1083 = new StringBuilder("RenewDelegationToken_args("); int tmp1084 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1084++) { tmp1083.Append(", "); } + if (0 < tmp1084++) { tmp1083.Append(", "); } tmp1083.Append("Req: "); Req.ToString(tmp1083); } @@ -7931,7 +7931,7 @@ public RenewDelegationToken_result() public RenewDelegationToken_result DeepCopy() { var tmp1085 = new RenewDelegationToken_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1085.Success = (global::Apache.Hive.Service.Rpc.Thrift.TRenewDelegationTokenResp)this.Success.DeepCopy(); } @@ -7992,7 +7992,7 @@ public RenewDelegationToken_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1086, cancellationToken); var tmp1087 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -8023,7 +8023,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -8035,9 +8035,9 @@ public override string ToString() { var tmp1088 = new StringBuilder("RenewDelegationToken_result("); int tmp1089 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1089++) { tmp1088.Append(", "); } + if (0 < tmp1089++) { tmp1088.Append(", "); } tmp1088.Append("Success: "); Success.ToString(tmp1088); } @@ -8078,7 +8078,7 @@ public GetQueryId_args() public GetQueryId_args DeepCopy() { var tmp1090 = new GetQueryId_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1090.Req = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdReq)this.Req.DeepCopy(); } @@ -8138,7 +8138,7 @@ public GetQueryId_args DeepCopy() var tmp1091 = new TStruct("GetQueryId_args"); await oprot.WriteStructBeginAsync(tmp1091, cancellationToken); var tmp1092 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1092.Name = "req"; tmp1092.Type = TType.Struct; @@ -8166,7 +8166,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -8178,9 +8178,9 @@ public override string ToString() { var tmp1093 = new StringBuilder("GetQueryId_args("); int tmp1094 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1094++) { tmp1093.Append(", "); } + if (0 < tmp1094++) { tmp1093.Append(", "); } tmp1093.Append("Req: "); Req.ToString(tmp1093); } @@ -8221,7 +8221,7 @@ public GetQueryId_result() public GetQueryId_result DeepCopy() { var tmp1095 = new GetQueryId_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1095.Success = (global::Apache.Hive.Service.Rpc.Thrift.TGetQueryIdResp)this.Success.DeepCopy(); } @@ -8282,7 +8282,7 @@ public GetQueryId_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1096, cancellationToken); var tmp1097 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -8313,7 +8313,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -8325,9 +8325,9 @@ public override string ToString() { var tmp1098 = new StringBuilder("GetQueryId_result("); int tmp1099 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1099++) { tmp1098.Append(", "); } + if (0 < tmp1099++) { tmp1098.Append(", "); } tmp1098.Append("Success: "); Success.ToString(tmp1098); } @@ -8368,7 +8368,7 @@ public SetClientInfo_args() public SetClientInfo_args DeepCopy() { var tmp1100 = new SetClientInfo_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1100.Req = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoReq)this.Req.DeepCopy(); } @@ -8428,7 +8428,7 @@ public SetClientInfo_args DeepCopy() var tmp1101 = new TStruct("SetClientInfo_args"); await oprot.WriteStructBeginAsync(tmp1101, cancellationToken); var tmp1102 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1102.Name = "req"; tmp1102.Type = TType.Struct; @@ -8456,7 +8456,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -8468,9 +8468,9 @@ public override string ToString() { var tmp1103 = new StringBuilder("SetClientInfo_args("); int tmp1104 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1104++) { tmp1103.Append(", "); } + if (0 < tmp1104++) { tmp1103.Append(", "); } tmp1103.Append("Req: "); Req.ToString(tmp1103); } @@ -8511,7 +8511,7 @@ public SetClientInfo_result() public SetClientInfo_result DeepCopy() { var tmp1105 = new SetClientInfo_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1105.Success = (global::Apache.Hive.Service.Rpc.Thrift.TSetClientInfoResp)this.Success.DeepCopy(); } @@ -8572,7 +8572,7 @@ public SetClientInfo_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1106, cancellationToken); var tmp1107 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -8603,7 +8603,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -8615,9 +8615,9 @@ public override string ToString() { var tmp1108 = new StringBuilder("SetClientInfo_result("); int tmp1109 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1109++) { tmp1108.Append(", "); } + if (0 < tmp1109++) { tmp1108.Append(", "); } tmp1108.Append("Success: "); Success.ToString(tmp1108); } @@ -8658,7 +8658,7 @@ public UploadData_args() public UploadData_args DeepCopy() { var tmp1110 = new UploadData_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1110.Req = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataReq)this.Req.DeepCopy(); } @@ -8718,7 +8718,7 @@ public UploadData_args DeepCopy() var tmp1111 = new TStruct("UploadData_args"); await oprot.WriteStructBeginAsync(tmp1111, cancellationToken); var tmp1112 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1112.Name = "req"; tmp1112.Type = TType.Struct; @@ -8746,7 +8746,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -8758,9 +8758,9 @@ public override string ToString() { var tmp1113 = new StringBuilder("UploadData_args("); int tmp1114 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1114++) { tmp1113.Append(", "); } + if (0 < tmp1114++) { tmp1113.Append(", "); } tmp1113.Append("Req: "); Req.ToString(tmp1113); } @@ -8801,7 +8801,7 @@ public UploadData_result() public UploadData_result DeepCopy() { var tmp1115 = new UploadData_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1115.Success = (global::Apache.Hive.Service.Rpc.Thrift.TUploadDataResp)this.Success.DeepCopy(); } @@ -8862,7 +8862,7 @@ public UploadData_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1116, cancellationToken); var tmp1117 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -8893,7 +8893,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -8905,9 +8905,9 @@ public override string ToString() { var tmp1118 = new StringBuilder("UploadData_result("); int tmp1119 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1119++) { tmp1118.Append(", "); } + if (0 < tmp1119++) { tmp1118.Append(", "); } tmp1118.Append("Success: "); Success.ToString(tmp1118); } @@ -8948,7 +8948,7 @@ public DownloadData_args() public DownloadData_args DeepCopy() { var tmp1120 = new DownloadData_args(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1120.Req = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataReq)this.Req.DeepCopy(); } @@ -9008,7 +9008,7 @@ public DownloadData_args DeepCopy() var tmp1121 = new TStruct("DownloadData_args"); await oprot.WriteStructBeginAsync(tmp1121, cancellationToken); var tmp1122 = new TField(); - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { tmp1122.Name = "req"; tmp1122.Type = TType.Struct; @@ -9036,7 +9036,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { hashcode = (hashcode * 397) + Req.GetHashCode(); } @@ -9048,9 +9048,9 @@ public override string ToString() { var tmp1123 = new StringBuilder("DownloadData_args("); int tmp1124 = 0; - if((Req != null) && __isset.req) + if ((Req != null) && __isset.req) { - if(0 < tmp1124++) { tmp1123.Append(", "); } + if (0 < tmp1124++) { tmp1123.Append(", "); } tmp1123.Append("Req: "); Req.ToString(tmp1123); } @@ -9091,7 +9091,7 @@ public DownloadData_result() public DownloadData_result DeepCopy() { var tmp1125 = new DownloadData_result(); - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { tmp1125.Success = (global::Apache.Hive.Service.Rpc.Thrift.TDownloadDataResp)this.Success.DeepCopy(); } @@ -9152,7 +9152,7 @@ public DownloadData_result DeepCopy() await oprot.WriteStructBeginAsync(tmp1126, cancellationToken); var tmp1127 = new TField(); - if(this.__isset.success) + if (this.__isset.success) { if (Success != null) { @@ -9183,7 +9183,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { hashcode = (hashcode * 397) + Success.GetHashCode(); } @@ -9195,9 +9195,9 @@ public override string ToString() { var tmp1128 = new StringBuilder("DownloadData_result("); int tmp1129 = 0; - if((Success != null) && __isset.success) + if ((Success != null) && __isset.success) { - if(0 < tmp1129++) { tmp1128.Append(", "); } + if (0 < tmp1129++) { tmp1128.Append(", "); } tmp1128.Append("Success: "); Success.ToString(tmp1128); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs index 8ea1262598..3b191050ea 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenReq.cs @@ -54,11 +54,11 @@ public TCancelDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSession public TCancelDelegationTokenReq DeepCopy() { var tmp608 = new TCancelDelegationTokenReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp608.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp608.DelegationToken = this.DelegationToken; } @@ -139,7 +139,7 @@ public TCancelDelegationTokenReq DeepCopy() var tmp609 = new TStruct("TCancelDelegationTokenReq"); await oprot.WriteStructBeginAsync(tmp609, cancellationToken); var tmp610 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp610.Name = "sessionHandle"; tmp610.Type = TType.Struct; @@ -148,7 +148,7 @@ public TCancelDelegationTokenReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp610.Name = "delegationToken"; tmp610.Type = TType.String; @@ -177,11 +177,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); } @@ -192,12 +192,12 @@ public override int GetHashCode() { public override string ToString() { var tmp611 = new StringBuilder("TCancelDelegationTokenReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp611.Append(", SessionHandle: "); SessionHandle.ToString(tmp611); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp611.Append(", DelegationToken: "); DelegationToken.ToString(tmp611); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs index 7dbc286a64..a85ad4ab56 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelDelegationTokenResp.cs @@ -51,7 +51,7 @@ public TCancelDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus public TCancelDelegationTokenResp DeepCopy() { var tmp613 = new TCancelDelegationTokenResp(); - if((Status != null)) + if ((Status != null)) { tmp613.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TCancelDelegationTokenResp DeepCopy() var tmp614 = new TStruct("TCancelDelegationTokenResp"); await oprot.WriteStructBeginAsync(tmp614, cancellationToken); var tmp615 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp615.Name = "status"; tmp615.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp616 = new StringBuilder("TCancelDelegationTokenResp("); - if((Status != null)) + if ((Status != null)) { tmp616.Append(", Status: "); Status.ToString(tmp616); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs index 2578237158..a5d7e609d1 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationReq.cs @@ -51,7 +51,7 @@ public TCancelOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHand public TCancelOperationReq DeepCopy() { var tmp549 = new TCancelOperationReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp549.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } @@ -116,7 +116,7 @@ public TCancelOperationReq DeepCopy() var tmp550 = new TStruct("TCancelOperationReq"); await oprot.WriteStructBeginAsync(tmp550, cancellationToken); var tmp551 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp551.Name = "operationHandle"; tmp551.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp552 = new StringBuilder("TCancelOperationReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp552.Append(", OperationHandle: "); OperationHandle.ToString(tmp552); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs index 1453183e67..b5141e4490 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCancelOperationResp.cs @@ -51,7 +51,7 @@ public TCancelOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus statu public TCancelOperationResp DeepCopy() { var tmp554 = new TCancelOperationResp(); - if((Status != null)) + if ((Status != null)) { tmp554.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TCancelOperationResp DeepCopy() var tmp555 = new TStruct("TCancelOperationResp"); await oprot.WriteStructBeginAsync(tmp555, cancellationToken); var tmp556 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp556.Name = "status"; tmp556.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp557 = new StringBuilder("TCancelOperationResp("); - if((Status != null)) + if ((Status != null)) { tmp557.Append(", Status: "); Status.ToString(tmp557); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs index 43502e1c88..9f513fb741 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationReq.cs @@ -51,7 +51,7 @@ public TCloseOperationReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandl public TCloseOperationReq DeepCopy() { var tmp559 = new TCloseOperationReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp559.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } @@ -116,7 +116,7 @@ public TCloseOperationReq DeepCopy() var tmp560 = new TStruct("TCloseOperationReq"); await oprot.WriteStructBeginAsync(tmp560, cancellationToken); var tmp561 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp561.Name = "operationHandle"; tmp561.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp562 = new StringBuilder("TCloseOperationReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp562.Append(", OperationHandle: "); OperationHandle.ToString(tmp562); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs index afa06b73d8..47481c8cf7 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseOperationResp.cs @@ -51,7 +51,7 @@ public TCloseOperationResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status public TCloseOperationResp DeepCopy() { var tmp564 = new TCloseOperationResp(); - if((Status != null)) + if ((Status != null)) { tmp564.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TCloseOperationResp DeepCopy() var tmp565 = new TStruct("TCloseOperationResp"); await oprot.WriteStructBeginAsync(tmp565, cancellationToken); var tmp566 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp566.Name = "status"; tmp566.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp567 = new StringBuilder("TCloseOperationResp("); - if((Status != null)) + if ((Status != null)) { tmp567.Append(", Status: "); Status.ToString(tmp567); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs index 61b56ddb6c..cd26b78862 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionReq.cs @@ -51,7 +51,7 @@ public TCloseSessionReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle se public TCloseSessionReq DeepCopy() { var tmp332 = new TCloseSessionReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp332.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } @@ -116,7 +116,7 @@ public TCloseSessionReq DeepCopy() var tmp333 = new TStruct("TCloseSessionReq"); await oprot.WriteStructBeginAsync(tmp333, cancellationToken); var tmp334 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp334.Name = "sessionHandle"; tmp334.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp335 = new StringBuilder("TCloseSessionReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp335.Append(", SessionHandle: "); SessionHandle.ToString(tmp335); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs index 2e658308d3..b457b43af2 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TCloseSessionResp.cs @@ -51,7 +51,7 @@ public TCloseSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) public TCloseSessionResp DeepCopy() { var tmp337 = new TCloseSessionResp(); - if((Status != null)) + if ((Status != null)) { tmp337.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TCloseSessionResp DeepCopy() var tmp338 = new TStruct("TCloseSessionResp"); await oprot.WriteStructBeginAsync(tmp338, cancellationToken); var tmp339 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp339.Name = "status"; tmp339.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp340 = new StringBuilder("TCloseSessionResp("); - if((Status != null)) + if ((Status != null)) { tmp340.Append(", Status: "); Status.ToString(tmp340); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs index 05a149e84d..25e23cc116 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumn.cs @@ -170,42 +170,42 @@ public TColumn() public TColumn DeepCopy() { var tmp204 = new TColumn(); - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { tmp204.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolColumn)this.BoolVal.DeepCopy(); } tmp204.__isset.boolVal = this.__isset.boolVal; - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { tmp204.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteColumn)this.ByteVal.DeepCopy(); } tmp204.__isset.byteVal = this.__isset.byteVal; - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { tmp204.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Column)this.I16Val.DeepCopy(); } tmp204.__isset.i16Val = this.__isset.i16Val; - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { tmp204.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Column)this.I32Val.DeepCopy(); } tmp204.__isset.i32Val = this.__isset.i32Val; - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { tmp204.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Column)this.I64Val.DeepCopy(); } tmp204.__isset.i64Val = this.__isset.i64Val; - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { tmp204.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleColumn)this.DoubleVal.DeepCopy(); } tmp204.__isset.doubleVal = this.__isset.doubleVal; - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { tmp204.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringColumn)this.StringVal.DeepCopy(); } tmp204.__isset.stringVal = this.__isset.stringVal; - if((BinaryVal != null) && __isset.binaryVal) + if ((BinaryVal != null) && __isset.binaryVal) { tmp204.BinaryVal = (global::Apache.Hive.Service.Rpc.Thrift.TBinaryColumn)this.BinaryVal.DeepCopy(); } @@ -342,7 +342,7 @@ public TColumn DeepCopy() var tmp205 = new TStruct("TColumn"); await oprot.WriteStructBeginAsync(tmp205, cancellationToken); var tmp206 = new TField(); - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { tmp206.Name = "boolVal"; tmp206.Type = TType.Struct; @@ -351,7 +351,7 @@ public TColumn DeepCopy() await BoolVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { tmp206.Name = "byteVal"; tmp206.Type = TType.Struct; @@ -360,7 +360,7 @@ public TColumn DeepCopy() await ByteVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { tmp206.Name = "i16Val"; tmp206.Type = TType.Struct; @@ -369,7 +369,7 @@ public TColumn DeepCopy() await I16Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { tmp206.Name = "i32Val"; tmp206.Type = TType.Struct; @@ -378,7 +378,7 @@ public TColumn DeepCopy() await I32Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { tmp206.Name = "i64Val"; tmp206.Type = TType.Struct; @@ -387,7 +387,7 @@ public TColumn DeepCopy() await I64Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { tmp206.Name = "doubleVal"; tmp206.Type = TType.Struct; @@ -396,7 +396,7 @@ public TColumn DeepCopy() await DoubleVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { tmp206.Name = "stringVal"; tmp206.Type = TType.Struct; @@ -405,7 +405,7 @@ public TColumn DeepCopy() await StringVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((BinaryVal != null) && __isset.binaryVal) + if ((BinaryVal != null) && __isset.binaryVal) { tmp206.Name = "binaryVal"; tmp206.Type = TType.Struct; @@ -440,35 +440,35 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { hashcode = (hashcode * 397) + BoolVal.GetHashCode(); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { hashcode = (hashcode * 397) + ByteVal.GetHashCode(); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { hashcode = (hashcode * 397) + I16Val.GetHashCode(); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { hashcode = (hashcode * 397) + I32Val.GetHashCode(); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { hashcode = (hashcode * 397) + I64Val.GetHashCode(); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { hashcode = (hashcode * 397) + StringVal.GetHashCode(); } - if((BinaryVal != null) && __isset.binaryVal) + if ((BinaryVal != null) && __isset.binaryVal) { hashcode = (hashcode * 397) + BinaryVal.GetHashCode(); } @@ -480,51 +480,51 @@ public override string ToString() { var tmp207 = new StringBuilder("TColumn("); int tmp208 = 0; - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("BoolVal: "); BoolVal.ToString(tmp207); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("ByteVal: "); ByteVal.ToString(tmp207); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("I16Val: "); I16Val.ToString(tmp207); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("I32Val: "); I32Val.ToString(tmp207); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("I64Val: "); I64Val.ToString(tmp207); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("DoubleVal: "); DoubleVal.ToString(tmp207); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("StringVal: "); StringVal.ToString(tmp207); } - if((BinaryVal != null) && __isset.binaryVal) + if ((BinaryVal != null) && __isset.binaryVal) { - if(0 < tmp208++) { tmp207.Append(", "); } + if (0 < tmp208++) { tmp207.Append(", "); } tmp207.Append("BinaryVal: "); BinaryVal.ToString(tmp207); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs index d91567355f..970b18b624 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnDesc.cs @@ -78,16 +78,16 @@ public TColumnDesc(string columnName, global::Apache.Hive.Service.Rpc.Thrift.TTy public TColumnDesc DeepCopy() { var tmp69 = new TColumnDesc(); - if((ColumnName != null)) + if ((ColumnName != null)) { tmp69.ColumnName = this.ColumnName; } - if((TypeDesc != null)) + if ((TypeDesc != null)) { tmp69.TypeDesc = (global::Apache.Hive.Service.Rpc.Thrift.TTypeDesc)this.TypeDesc.DeepCopy(); } tmp69.Position = this.Position; - if((Comment != null) && __isset.comment) + if ((Comment != null) && __isset.comment) { tmp69.Comment = this.Comment; } @@ -195,7 +195,7 @@ public TColumnDesc DeepCopy() var tmp70 = new TStruct("TColumnDesc"); await oprot.WriteStructBeginAsync(tmp70, cancellationToken); var tmp71 = new TField(); - if((ColumnName != null)) + if ((ColumnName != null)) { tmp71.Name = "columnName"; tmp71.Type = TType.String; @@ -204,7 +204,7 @@ public TColumnDesc DeepCopy() await oprot.WriteStringAsync(ColumnName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TypeDesc != null)) + if ((TypeDesc != null)) { tmp71.Name = "typeDesc"; tmp71.Type = TType.Struct; @@ -219,7 +219,7 @@ public TColumnDesc DeepCopy() await oprot.WriteFieldBeginAsync(tmp71, cancellationToken); await oprot.WriteI32Async(Position, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((Comment != null) && __isset.comment) + if ((Comment != null) && __isset.comment) { tmp71.Name = "comment"; tmp71.Type = TType.String; @@ -250,16 +250,16 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((ColumnName != null)) + if ((ColumnName != null)) { hashcode = (hashcode * 397) + ColumnName.GetHashCode(); } - if((TypeDesc != null)) + if ((TypeDesc != null)) { hashcode = (hashcode * 397) + TypeDesc.GetHashCode(); } hashcode = (hashcode * 397) + Position.GetHashCode(); - if((Comment != null) && __isset.comment) + if ((Comment != null) && __isset.comment) { hashcode = (hashcode * 397) + Comment.GetHashCode(); } @@ -270,19 +270,19 @@ public override int GetHashCode() { public override string ToString() { var tmp72 = new StringBuilder("TColumnDesc("); - if((ColumnName != null)) + if ((ColumnName != null)) { tmp72.Append(", ColumnName: "); ColumnName.ToString(tmp72); } - if((TypeDesc != null)) + if ((TypeDesc != null)) { tmp72.Append(", TypeDesc: "); TypeDesc.ToString(tmp72); } tmp72.Append(", Position: "); Position.ToString(tmp72); - if((Comment != null) && __isset.comment) + if ((Comment != null) && __isset.comment) { tmp72.Append(", Comment: "); Comment.ToString(tmp72); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs index bf90d7ad23..a9aa8d2b38 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TColumnValue.cs @@ -155,37 +155,37 @@ public TColumnValue() public TColumnValue DeepCopy() { var tmp118 = new TColumnValue(); - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { tmp118.BoolVal = (global::Apache.Hive.Service.Rpc.Thrift.TBoolValue)this.BoolVal.DeepCopy(); } tmp118.__isset.boolVal = this.__isset.boolVal; - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { tmp118.ByteVal = (global::Apache.Hive.Service.Rpc.Thrift.TByteValue)this.ByteVal.DeepCopy(); } tmp118.__isset.byteVal = this.__isset.byteVal; - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { tmp118.I16Val = (global::Apache.Hive.Service.Rpc.Thrift.TI16Value)this.I16Val.DeepCopy(); } tmp118.__isset.i16Val = this.__isset.i16Val; - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { tmp118.I32Val = (global::Apache.Hive.Service.Rpc.Thrift.TI32Value)this.I32Val.DeepCopy(); } tmp118.__isset.i32Val = this.__isset.i32Val; - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { tmp118.I64Val = (global::Apache.Hive.Service.Rpc.Thrift.TI64Value)this.I64Val.DeepCopy(); } tmp118.__isset.i64Val = this.__isset.i64Val; - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { tmp118.DoubleVal = (global::Apache.Hive.Service.Rpc.Thrift.TDoubleValue)this.DoubleVal.DeepCopy(); } tmp118.__isset.doubleVal = this.__isset.doubleVal; - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { tmp118.StringVal = (global::Apache.Hive.Service.Rpc.Thrift.TStringValue)this.StringVal.DeepCopy(); } @@ -311,7 +311,7 @@ public TColumnValue DeepCopy() var tmp119 = new TStruct("TColumnValue"); await oprot.WriteStructBeginAsync(tmp119, cancellationToken); var tmp120 = new TField(); - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { tmp120.Name = "boolVal"; tmp120.Type = TType.Struct; @@ -320,7 +320,7 @@ public TColumnValue DeepCopy() await BoolVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { tmp120.Name = "byteVal"; tmp120.Type = TType.Struct; @@ -329,7 +329,7 @@ public TColumnValue DeepCopy() await ByteVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { tmp120.Name = "i16Val"; tmp120.Type = TType.Struct; @@ -338,7 +338,7 @@ public TColumnValue DeepCopy() await I16Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { tmp120.Name = "i32Val"; tmp120.Type = TType.Struct; @@ -347,7 +347,7 @@ public TColumnValue DeepCopy() await I32Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { tmp120.Name = "i64Val"; tmp120.Type = TType.Struct; @@ -356,7 +356,7 @@ public TColumnValue DeepCopy() await I64Val.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { tmp120.Name = "doubleVal"; tmp120.Type = TType.Struct; @@ -365,7 +365,7 @@ public TColumnValue DeepCopy() await DoubleVal.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { tmp120.Name = "stringVal"; tmp120.Type = TType.Struct; @@ -399,31 +399,31 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { hashcode = (hashcode * 397) + BoolVal.GetHashCode(); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { hashcode = (hashcode * 397) + ByteVal.GetHashCode(); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { hashcode = (hashcode * 397) + I16Val.GetHashCode(); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { hashcode = (hashcode * 397) + I32Val.GetHashCode(); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { hashcode = (hashcode * 397) + I64Val.GetHashCode(); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { hashcode = (hashcode * 397) + DoubleVal.GetHashCode(); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { hashcode = (hashcode * 397) + StringVal.GetHashCode(); } @@ -435,45 +435,45 @@ public override string ToString() { var tmp121 = new StringBuilder("TColumnValue("); int tmp122 = 0; - if((BoolVal != null) && __isset.boolVal) + if ((BoolVal != null) && __isset.boolVal) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("BoolVal: "); BoolVal.ToString(tmp121); } - if((ByteVal != null) && __isset.byteVal) + if ((ByteVal != null) && __isset.byteVal) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("ByteVal: "); ByteVal.ToString(tmp121); } - if((I16Val != null) && __isset.i16Val) + if ((I16Val != null) && __isset.i16Val) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("I16Val: "); I16Val.ToString(tmp121); } - if((I32Val != null) && __isset.i32Val) + if ((I32Val != null) && __isset.i32Val) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("I32Val: "); I32Val.ToString(tmp121); } - if((I64Val != null) && __isset.i64Val) + if ((I64Val != null) && __isset.i64Val) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("I64Val: "); I64Val.ToString(tmp121); } - if((DoubleVal != null) && __isset.doubleVal) + if ((DoubleVal != null) && __isset.doubleVal) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("DoubleVal: "); DoubleVal.ToString(tmp121); } - if((StringVal != null) && __isset.stringVal) + if ((StringVal != null) && __isset.stringVal) { - if(0 < tmp122++) { tmp121.Append(", "); } + if (0 < tmp122++) { tmp121.Append(", "); } tmp121.Append("StringVal: "); StringVal.ToString(tmp121); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs index 7648e6b4f6..1812622a5f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlCloudResultFile.cs @@ -63,7 +63,7 @@ public TDBSqlCloudResultFile(string filePath, long startRowOffset, long rowCount public TDBSqlCloudResultFile DeepCopy() { var tmp583 = new TDBSqlCloudResultFile(); - if((FilePath != null)) + if ((FilePath != null)) { tmp583.FilePath = this.FilePath; } @@ -195,7 +195,7 @@ public TDBSqlCloudResultFile DeepCopy() var tmp584 = new TStruct("TDBSqlCloudResultFile"); await oprot.WriteStructBeginAsync(tmp584, cancellationToken); var tmp585 = new TField(); - if((FilePath != null)) + if ((FilePath != null)) { tmp585.Name = "filePath"; tmp585.Type = TType.String; @@ -251,7 +251,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((FilePath != null)) + if ((FilePath != null)) { hashcode = (hashcode * 397) + FilePath.GetHashCode(); } @@ -266,7 +266,7 @@ public override int GetHashCode() { public override string ToString() { var tmp586 = new StringBuilder("TDBSqlCloudResultFile("); - if((FilePath != null)) + if ((FilePath != null)) { tmp586.Append(", FilePath: "); FilePath.ToString(tmp586); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs index 70f37de648..b765e7507f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlConfValue.cs @@ -65,7 +65,7 @@ public TDBSqlConfValue() public TDBSqlConfValue DeepCopy() { var tmp405 = new TDBSqlConfValue(); - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { tmp405.Value = this.Value; } @@ -124,7 +124,7 @@ public TDBSqlConfValue DeepCopy() var tmp406 = new TStruct("TDBSqlConfValue"); await oprot.WriteStructBeginAsync(tmp406, cancellationToken); var tmp407 = new TField(); - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { tmp407.Name = "value"; tmp407.Type = TType.String; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp408 = new StringBuilder("TDBSqlConfValue("); int tmp409 = 0; - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { - if(0 < tmp409++) { tmp408.Append(", "); } + if (0 < tmp409++) { tmp408.Append(", "); } tmp408.Append("Value: "); Value.ToString(tmp408); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs index 8011f356f4..6a9a1c4a90 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionCapabilities.cs @@ -65,7 +65,7 @@ public TDBSqlSessionCapabilities() public TDBSqlSessionCapabilities DeepCopy() { var tmp400 = new TDBSqlSessionCapabilities(); - if(__isset.supportsMultipleCatalogs) + if (__isset.supportsMultipleCatalogs) { tmp400.SupportsMultipleCatalogs = this.SupportsMultipleCatalogs; } @@ -124,7 +124,7 @@ public TDBSqlSessionCapabilities DeepCopy() var tmp401 = new TStruct("TDBSqlSessionCapabilities"); await oprot.WriteStructBeginAsync(tmp401, cancellationToken); var tmp402 = new TField(); - if(__isset.supportsMultipleCatalogs) + if (__isset.supportsMultipleCatalogs) { tmp402.Name = "supportsMultipleCatalogs"; tmp402.Type = TType.Bool; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.supportsMultipleCatalogs) + if (__isset.supportsMultipleCatalogs) { hashcode = (hashcode * 397) + SupportsMultipleCatalogs.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp403 = new StringBuilder("TDBSqlSessionCapabilities("); int tmp404 = 0; - if(__isset.supportsMultipleCatalogs) + if (__isset.supportsMultipleCatalogs) { - if(0 < tmp404++) { tmp403.Append(", "); } + if (0 < tmp404++) { tmp403.Append(", "); } tmp403.Append("SupportsMultipleCatalogs: "); SupportsMultipleCatalogs.ToString(tmp403); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs index ead076cab9..2b35725652 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlSessionConf.cs @@ -155,37 +155,37 @@ public TDBSqlSessionConf() public TDBSqlSessionConf DeepCopy() { var tmp367 = new TDBSqlSessionConf(); - if((Confs != null) && __isset.confs) + if ((Confs != null) && __isset.confs) { tmp367.Confs = this.Confs.DeepCopy(); } tmp367.__isset.confs = this.__isset.confs; - if((TempViews != null) && __isset.tempViews) + if ((TempViews != null) && __isset.tempViews) { tmp367.TempViews = this.TempViews.DeepCopy(); } tmp367.__isset.tempViews = this.__isset.tempViews; - if((CurrentDatabase != null) && __isset.currentDatabase) + if ((CurrentDatabase != null) && __isset.currentDatabase) { tmp367.CurrentDatabase = this.CurrentDatabase; } tmp367.__isset.currentDatabase = this.__isset.currentDatabase; - if((CurrentCatalog != null) && __isset.currentCatalog) + if ((CurrentCatalog != null) && __isset.currentCatalog) { tmp367.CurrentCatalog = this.CurrentCatalog; } tmp367.__isset.currentCatalog = this.__isset.currentCatalog; - if((SessionCapabilities != null) && __isset.sessionCapabilities) + if ((SessionCapabilities != null) && __isset.sessionCapabilities) { tmp367.SessionCapabilities = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionCapabilities)this.SessionCapabilities.DeepCopy(); } tmp367.__isset.sessionCapabilities = this.__isset.sessionCapabilities; - if((ExpressionsInfos != null) && __isset.expressionsInfos) + if ((ExpressionsInfos != null) && __isset.expressionsInfos) { tmp367.ExpressionsInfos = this.ExpressionsInfos.DeepCopy(); } tmp367.__isset.expressionsInfos = this.__isset.expressionsInfos; - if((InternalConfs != null) && __isset.internalConfs) + if ((InternalConfs != null) && __isset.internalConfs) { tmp367.InternalConfs = this.InternalConfs.DeepCopy(); } @@ -352,7 +352,7 @@ public TDBSqlSessionConf DeepCopy() var tmp382 = new TStruct("TDBSqlSessionConf"); await oprot.WriteStructBeginAsync(tmp382, cancellationToken); var tmp383 = new TField(); - if((Confs != null) && __isset.confs) + if ((Confs != null) && __isset.confs) { tmp383.Name = "confs"; tmp383.Type = TType.Map; @@ -367,7 +367,7 @@ public TDBSqlSessionConf DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TempViews != null) && __isset.tempViews) + if ((TempViews != null) && __isset.tempViews) { tmp383.Name = "tempViews"; tmp383.Type = TType.List; @@ -381,7 +381,7 @@ public TDBSqlSessionConf DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CurrentDatabase != null) && __isset.currentDatabase) + if ((CurrentDatabase != null) && __isset.currentDatabase) { tmp383.Name = "currentDatabase"; tmp383.Type = TType.String; @@ -390,7 +390,7 @@ public TDBSqlSessionConf DeepCopy() await oprot.WriteStringAsync(CurrentDatabase, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CurrentCatalog != null) && __isset.currentCatalog) + if ((CurrentCatalog != null) && __isset.currentCatalog) { tmp383.Name = "currentCatalog"; tmp383.Type = TType.String; @@ -399,7 +399,7 @@ public TDBSqlSessionConf DeepCopy() await oprot.WriteStringAsync(CurrentCatalog, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionCapabilities != null) && __isset.sessionCapabilities) + if ((SessionCapabilities != null) && __isset.sessionCapabilities) { tmp383.Name = "sessionCapabilities"; tmp383.Type = TType.Struct; @@ -408,7 +408,7 @@ public TDBSqlSessionConf DeepCopy() await SessionCapabilities.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ExpressionsInfos != null) && __isset.expressionsInfos) + if ((ExpressionsInfos != null) && __isset.expressionsInfos) { tmp383.Name = "expressionsInfos"; tmp383.Type = TType.List; @@ -422,7 +422,7 @@ public TDBSqlSessionConf DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((InternalConfs != null) && __isset.internalConfs) + if ((InternalConfs != null) && __isset.internalConfs) { tmp383.Name = "internalConfs"; tmp383.Type = TType.Map; @@ -462,31 +462,31 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Confs != null) && __isset.confs) + if ((Confs != null) && __isset.confs) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Confs); } - if((TempViews != null) && __isset.tempViews) + if ((TempViews != null) && __isset.tempViews) { hashcode = (hashcode * 397) + TCollections.GetHashCode(TempViews); } - if((CurrentDatabase != null) && __isset.currentDatabase) + if ((CurrentDatabase != null) && __isset.currentDatabase) { hashcode = (hashcode * 397) + CurrentDatabase.GetHashCode(); } - if((CurrentCatalog != null) && __isset.currentCatalog) + if ((CurrentCatalog != null) && __isset.currentCatalog) { hashcode = (hashcode * 397) + CurrentCatalog.GetHashCode(); } - if((SessionCapabilities != null) && __isset.sessionCapabilities) + if ((SessionCapabilities != null) && __isset.sessionCapabilities) { hashcode = (hashcode * 397) + SessionCapabilities.GetHashCode(); } - if((ExpressionsInfos != null) && __isset.expressionsInfos) + if ((ExpressionsInfos != null) && __isset.expressionsInfos) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ExpressionsInfos); } - if((InternalConfs != null) && __isset.internalConfs) + if ((InternalConfs != null) && __isset.internalConfs) { hashcode = (hashcode * 397) + TCollections.GetHashCode(InternalConfs); } @@ -498,45 +498,45 @@ public override string ToString() { var tmp388 = new StringBuilder("TDBSqlSessionConf("); int tmp389 = 0; - if((Confs != null) && __isset.confs) + if ((Confs != null) && __isset.confs) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("Confs: "); Confs.ToString(tmp388); } - if((TempViews != null) && __isset.tempViews) + if ((TempViews != null) && __isset.tempViews) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("TempViews: "); TempViews.ToString(tmp388); } - if((CurrentDatabase != null) && __isset.currentDatabase) + if ((CurrentDatabase != null) && __isset.currentDatabase) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("CurrentDatabase: "); CurrentDatabase.ToString(tmp388); } - if((CurrentCatalog != null) && __isset.currentCatalog) + if ((CurrentCatalog != null) && __isset.currentCatalog) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("CurrentCatalog: "); CurrentCatalog.ToString(tmp388); } - if((SessionCapabilities != null) && __isset.sessionCapabilities) + if ((SessionCapabilities != null) && __isset.sessionCapabilities) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("SessionCapabilities: "); SessionCapabilities.ToString(tmp388); } - if((ExpressionsInfos != null) && __isset.expressionsInfos) + if ((ExpressionsInfos != null) && __isset.expressionsInfos) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("ExpressionsInfos: "); ExpressionsInfos.ToString(tmp388); } - if((InternalConfs != null) && __isset.internalConfs) + if ((InternalConfs != null) && __isset.internalConfs) { - if(0 < tmp389++) { tmp388.Append(", "); } + if (0 < tmp389++) { tmp388.Append(", "); } tmp388.Append("InternalConfs: "); InternalConfs.ToString(tmp388); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs index 668dff029f..bb43016ce5 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDBSqlTempView.cs @@ -110,22 +110,22 @@ public TDBSqlTempView() public TDBSqlTempView DeepCopy() { var tmp390 = new TDBSqlTempView(); - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { tmp390.Name = this.Name; } tmp390.__isset.name = this.__isset.name; - if((SqlStatement != null) && __isset.sqlStatement) + if ((SqlStatement != null) && __isset.sqlStatement) { tmp390.SqlStatement = this.SqlStatement; } tmp390.__isset.sqlStatement = this.__isset.sqlStatement; - if((Properties != null) && __isset.properties) + if ((Properties != null) && __isset.properties) { tmp390.Properties = this.Properties.DeepCopy(); } tmp390.__isset.properties = this.__isset.properties; - if((ViewSchema != null) && __isset.viewSchema) + if ((ViewSchema != null) && __isset.viewSchema) { tmp390.ViewSchema = this.ViewSchema; } @@ -226,7 +226,7 @@ public TDBSqlTempView DeepCopy() var tmp395 = new TStruct("TDBSqlTempView"); await oprot.WriteStructBeginAsync(tmp395, cancellationToken); var tmp396 = new TField(); - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { tmp396.Name = "name"; tmp396.Type = TType.String; @@ -235,7 +235,7 @@ public TDBSqlTempView DeepCopy() await oprot.WriteStringAsync(Name, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SqlStatement != null) && __isset.sqlStatement) + if ((SqlStatement != null) && __isset.sqlStatement) { tmp396.Name = "sqlStatement"; tmp396.Type = TType.String; @@ -244,7 +244,7 @@ public TDBSqlTempView DeepCopy() await oprot.WriteStringAsync(SqlStatement, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Properties != null) && __isset.properties) + if ((Properties != null) && __isset.properties) { tmp396.Name = "properties"; tmp396.Type = TType.Map; @@ -259,7 +259,7 @@ public TDBSqlTempView DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ViewSchema != null) && __isset.viewSchema) + if ((ViewSchema != null) && __isset.viewSchema) { tmp396.Name = "viewSchema"; tmp396.Type = TType.String; @@ -290,19 +290,19 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { hashcode = (hashcode * 397) + Name.GetHashCode(); } - if((SqlStatement != null) && __isset.sqlStatement) + if ((SqlStatement != null) && __isset.sqlStatement) { hashcode = (hashcode * 397) + SqlStatement.GetHashCode(); } - if((Properties != null) && __isset.properties) + if ((Properties != null) && __isset.properties) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Properties); } - if((ViewSchema != null) && __isset.viewSchema) + if ((ViewSchema != null) && __isset.viewSchema) { hashcode = (hashcode * 397) + ViewSchema.GetHashCode(); } @@ -314,27 +314,27 @@ public override string ToString() { var tmp398 = new StringBuilder("TDBSqlTempView("); int tmp399 = 0; - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { - if(0 < tmp399++) { tmp398.Append(", "); } + if (0 < tmp399++) { tmp398.Append(", "); } tmp398.Append("Name: "); Name.ToString(tmp398); } - if((SqlStatement != null) && __isset.sqlStatement) + if ((SqlStatement != null) && __isset.sqlStatement) { - if(0 < tmp399++) { tmp398.Append(", "); } + if (0 < tmp399++) { tmp398.Append(", "); } tmp398.Append("SqlStatement: "); SqlStatement.ToString(tmp398); } - if((Properties != null) && __isset.properties) + if ((Properties != null) && __isset.properties) { - if(0 < tmp399++) { tmp398.Append(", "); } + if (0 < tmp399++) { tmp398.Append(", "); } tmp398.Append("Properties: "); Properties.ToString(tmp398); } - if((ViewSchema != null) && __isset.viewSchema) + if ((ViewSchema != null) && __isset.viewSchema) { - if(0 < tmp399++) { tmp398.Append(", "); } + if (0 < tmp399++) { tmp398.Append(", "); } tmp398.Append("ViewSchema: "); ViewSchema.ToString(tmp398); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs index 1dc52c6780..29e2d1ca0d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs @@ -139,7 +139,7 @@ public TDoubleColumn DeepCopy() var tmp181 = new TStruct("TDoubleColumn"); await oprot.WriteStructBeginAsync(tmp181, cancellationToken); var tmp182 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp182.Name = "values"; tmp182.Type = TType.List; @@ -187,7 +187,7 @@ public override int GetHashCode() public override string ToString() { var tmp184 = new StringBuilder("TDoubleColumn("); - if((Values != null)) + if ((Values != null)) { tmp184.Append(", Values: "); Values.ToString(tmp184); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs index facb3ac850..63ef69451d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleValue.cs @@ -65,7 +65,7 @@ public TDoubleValue() public TDoubleValue DeepCopy() { var tmp108 = new TDoubleValue(); - if(__isset.@value) + if (__isset.@value) { tmp108.Value = this.Value; } @@ -124,7 +124,7 @@ public TDoubleValue DeepCopy() var tmp109 = new TStruct("TDoubleValue"); await oprot.WriteStructBeginAsync(tmp109, cancellationToken); var tmp110 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp110.Name = "value"; tmp110.Type = TType.Double; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp111 = new StringBuilder("TDoubleValue("); int tmp112 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp112++) { tmp111.Append(", "); } + if (0 < tmp112++) { tmp111.Append(", "); } tmp111.Append("Value: "); Value.ToString(tmp111); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs index 3078d0fe29..16e4a32855 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataReq.cs @@ -117,26 +117,26 @@ public TDownloadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle se public TDownloadDataReq DeepCopy() { var tmp440 = new TDownloadDataReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp440.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp440.TableName = this.TableName; } tmp440.__isset.tableName = this.__isset.tableName; - if((Query != null) && __isset.query) + if ((Query != null) && __isset.query) { tmp440.Query = this.Query; } tmp440.__isset.query = this.__isset.query; - if((Format != null) && __isset.format) + if ((Format != null) && __isset.format) { tmp440.Format = this.Format; } tmp440.__isset.format = this.__isset.format; - if((DownloadOptions != null) && __isset.downloadOptions) + if ((DownloadOptions != null) && __isset.downloadOptions) { tmp440.DownloadOptions = this.DownloadOptions.DeepCopy(); } @@ -254,7 +254,7 @@ public TDownloadDataReq DeepCopy() var tmp445 = new TStruct("TDownloadDataReq"); await oprot.WriteStructBeginAsync(tmp445, cancellationToken); var tmp446 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp446.Name = "sessionHandle"; tmp446.Type = TType.Struct; @@ -263,7 +263,7 @@ public TDownloadDataReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp446.Name = "tableName"; tmp446.Type = TType.String; @@ -272,7 +272,7 @@ public TDownloadDataReq DeepCopy() await oprot.WriteStringAsync(TableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Query != null) && __isset.query) + if ((Query != null) && __isset.query) { tmp446.Name = "query"; tmp446.Type = TType.String; @@ -281,7 +281,7 @@ public TDownloadDataReq DeepCopy() await oprot.WriteStringAsync(Query, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Format != null) && __isset.format) + if ((Format != null) && __isset.format) { tmp446.Name = "format"; tmp446.Type = TType.String; @@ -290,7 +290,7 @@ public TDownloadDataReq DeepCopy() await oprot.WriteStringAsync(Format, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DownloadOptions != null) && __isset.downloadOptions) + if ((DownloadOptions != null) && __isset.downloadOptions) { tmp446.Name = "downloadOptions"; tmp446.Type = TType.Map; @@ -328,23 +328,23 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { hashcode = (hashcode * 397) + TableName.GetHashCode(); } - if((Query != null) && __isset.query) + if ((Query != null) && __isset.query) { hashcode = (hashcode * 397) + Query.GetHashCode(); } - if((Format != null) && __isset.format) + if ((Format != null) && __isset.format) { hashcode = (hashcode * 397) + Format.GetHashCode(); } - if((DownloadOptions != null) && __isset.downloadOptions) + if ((DownloadOptions != null) && __isset.downloadOptions) { hashcode = (hashcode * 397) + TCollections.GetHashCode(DownloadOptions); } @@ -355,27 +355,27 @@ public override int GetHashCode() { public override string ToString() { var tmp448 = new StringBuilder("TDownloadDataReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp448.Append(", SessionHandle: "); SessionHandle.ToString(tmp448); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp448.Append(", TableName: "); TableName.ToString(tmp448); } - if((Query != null) && __isset.query) + if ((Query != null) && __isset.query) { tmp448.Append(", Query: "); Query.ToString(tmp448); } - if((Format != null) && __isset.format) + if ((Format != null) && __isset.format) { tmp448.Append(", Format: "); Format.ToString(tmp448); } - if((DownloadOptions != null) && __isset.downloadOptions) + if ((DownloadOptions != null) && __isset.downloadOptions) { tmp448.Append(", DownloadOptions: "); DownloadOptions.ToString(tmp448); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs index fba252a007..666100f8ba 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDownloadDataResp.cs @@ -54,11 +54,11 @@ public TDownloadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, public TDownloadDataResp DeepCopy() { var tmp450 = new TDownloadDataResp(); - if((Status != null)) + if ((Status != null)) { tmp450.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp450.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } @@ -140,7 +140,7 @@ public TDownloadDataResp DeepCopy() var tmp451 = new TStruct("TDownloadDataResp"); await oprot.WriteStructBeginAsync(tmp451, cancellationToken); var tmp452 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp452.Name = "status"; tmp452.Type = TType.Struct; @@ -149,7 +149,7 @@ public TDownloadDataResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp452.Name = "operationHandle"; tmp452.Type = TType.Struct; @@ -178,11 +178,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } @@ -193,12 +193,12 @@ public override int GetHashCode() { public override string ToString() { var tmp453 = new StringBuilder("TDownloadDataResp("); - if((Status != null)) + if ((Status != null)) { tmp453.Append(", Status: "); Status.ToString(tmp453); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp453.Append(", OperationHandle: "); OperationHandle.ToString(tmp453); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs index 59423278df..4048dd9fc3 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementReq.cs @@ -350,105 +350,105 @@ public TExecuteStatementReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandl public TExecuteStatementReq DeepCopy() { var tmp357 = new TExecuteStatementReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp357.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((Statement != null)) + if ((Statement != null)) { tmp357.Statement = this.Statement; } - if((ConfOverlay != null) && __isset.confOverlay) + if ((ConfOverlay != null) && __isset.confOverlay) { tmp357.ConfOverlay = this.ConfOverlay.DeepCopy(); } tmp357.__isset.confOverlay = this.__isset.confOverlay; - if(__isset.runAsync) + if (__isset.runAsync) { tmp357.RunAsync = this.RunAsync; } tmp357.__isset.runAsync = this.__isset.runAsync; - if(__isset.queryTimeout) + if (__isset.queryTimeout) { tmp357.QueryTimeout = this.QueryTimeout; } tmp357.__isset.queryTimeout = this.__isset.queryTimeout; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp357.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp357.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.canReadArrowResult) + if (__isset.canReadArrowResult) { tmp357.CanReadArrowResult = this.CanReadArrowResult; } tmp357.__isset.canReadArrowResult = this.__isset.canReadArrowResult; - if(__isset.canDownloadResult) + if (__isset.canDownloadResult) { tmp357.CanDownloadResult = this.CanDownloadResult; } tmp357.__isset.canDownloadResult = this.__isset.canDownloadResult; - if(__isset.canDecompressLZ4Result) + if (__isset.canDecompressLZ4Result) { tmp357.CanDecompressLZ4Result = this.CanDecompressLZ4Result; } tmp357.__isset.canDecompressLZ4Result = this.__isset.canDecompressLZ4Result; - if(__isset.maxBytesPerFile) + if (__isset.maxBytesPerFile) { tmp357.MaxBytesPerFile = this.MaxBytesPerFile; } tmp357.__isset.maxBytesPerFile = this.__isset.maxBytesPerFile; - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + if ((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) { tmp357.UseArrowNativeTypes = (global::Apache.Hive.Service.Rpc.Thrift.TSparkArrowTypes)this.UseArrowNativeTypes.DeepCopy(); } tmp357.__isset.useArrowNativeTypes = this.__isset.useArrowNativeTypes; - if(__isset.resultRowLimit) + if (__isset.resultRowLimit) { tmp357.ResultRowLimit = this.ResultRowLimit; } tmp357.__isset.resultRowLimit = this.__isset.resultRowLimit; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp357.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp357.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp357.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } tmp357.__isset.sessionConf = this.__isset.sessionConf; - if(__isset.rejectHighCostQueries) + if (__isset.rejectHighCostQueries) { tmp357.RejectHighCostQueries = this.RejectHighCostQueries; } tmp357.__isset.rejectHighCostQueries = this.__isset.rejectHighCostQueries; - if(__isset.estimatedCost) + if (__isset.estimatedCost) { tmp357.EstimatedCost = this.EstimatedCost; } tmp357.__isset.estimatedCost = this.__isset.estimatedCost; - if(__isset.executionVersion) + if (__isset.executionVersion) { tmp357.ExecutionVersion = this.ExecutionVersion; } tmp357.__isset.executionVersion = this.__isset.executionVersion; - if((RequestValidation != null) && __isset.requestValidation) + if ((RequestValidation != null) && __isset.requestValidation) { tmp357.RequestValidation = this.RequestValidation; } tmp357.__isset.requestValidation = this.__isset.requestValidation; - if(__isset.resultPersistenceMode) + if (__isset.resultPersistenceMode) { tmp357.ResultPersistenceMode = this.ResultPersistenceMode; } tmp357.__isset.resultPersistenceMode = this.__isset.resultPersistenceMode; - if(__isset.trimArrowBatchesToLimit) + if (__isset.trimArrowBatchesToLimit) { tmp357.TrimArrowBatchesToLimit = this.TrimArrowBatchesToLimit; } tmp357.__isset.trimArrowBatchesToLimit = this.__isset.trimArrowBatchesToLimit; - if(__isset.enforceResultPersistenceMode) + if (__isset.enforceResultPersistenceMode) { tmp357.EnforceResultPersistenceMode = this.EnforceResultPersistenceMode; } @@ -736,7 +736,7 @@ public TExecuteStatementReq DeepCopy() var tmp362 = new TStruct("TExecuteStatementReq"); await oprot.WriteStructBeginAsync(tmp362, cancellationToken); var tmp363 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp363.Name = "sessionHandle"; tmp363.Type = TType.Struct; @@ -745,7 +745,7 @@ public TExecuteStatementReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Statement != null)) + if ((Statement != null)) { tmp363.Name = "statement"; tmp363.Type = TType.String; @@ -754,7 +754,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteStringAsync(Statement, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ConfOverlay != null) && __isset.confOverlay) + if ((ConfOverlay != null) && __isset.confOverlay) { tmp363.Name = "confOverlay"; tmp363.Type = TType.Map; @@ -769,7 +769,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp363.Name = "runAsync"; tmp363.Type = TType.Bool; @@ -778,7 +778,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.queryTimeout) + if (__isset.queryTimeout) { tmp363.Name = "queryTimeout"; tmp363.Type = TType.I64; @@ -787,7 +787,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteI64Async(QueryTimeout, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp363.Name = "getDirectResults"; tmp363.Type = TType.Struct; @@ -796,7 +796,7 @@ public TExecuteStatementReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.canReadArrowResult) + if (__isset.canReadArrowResult) { tmp363.Name = "canReadArrowResult"; tmp363.Type = TType.Bool; @@ -805,7 +805,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(CanReadArrowResult, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.canDownloadResult) + if (__isset.canDownloadResult) { tmp363.Name = "canDownloadResult"; tmp363.Type = TType.Bool; @@ -814,7 +814,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(CanDownloadResult, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.canDecompressLZ4Result) + if (__isset.canDecompressLZ4Result) { tmp363.Name = "canDecompressLZ4Result"; tmp363.Type = TType.Bool; @@ -823,7 +823,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(CanDecompressLZ4Result, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.maxBytesPerFile) + if (__isset.maxBytesPerFile) { tmp363.Name = "maxBytesPerFile"; tmp363.Type = TType.I64; @@ -832,7 +832,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteI64Async(MaxBytesPerFile, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + if ((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) { tmp363.Name = "useArrowNativeTypes"; tmp363.Type = TType.Struct; @@ -841,7 +841,7 @@ public TExecuteStatementReq DeepCopy() await UseArrowNativeTypes.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.resultRowLimit) + if (__isset.resultRowLimit) { tmp363.Name = "resultRowLimit"; tmp363.Type = TType.I64; @@ -850,7 +850,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteI64Async(ResultRowLimit, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp363.Name = "operationId"; tmp363.Type = TType.Struct; @@ -859,7 +859,7 @@ public TExecuteStatementReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp363.Name = "sessionConf"; tmp363.Type = TType.Struct; @@ -868,7 +868,7 @@ public TExecuteStatementReq DeepCopy() await SessionConf.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.rejectHighCostQueries) + if (__isset.rejectHighCostQueries) { tmp363.Name = "rejectHighCostQueries"; tmp363.Type = TType.Bool; @@ -877,7 +877,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(RejectHighCostQueries, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.estimatedCost) + if (__isset.estimatedCost) { tmp363.Name = "estimatedCost"; tmp363.Type = TType.Double; @@ -886,7 +886,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteDoubleAsync(EstimatedCost, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.executionVersion) + if (__isset.executionVersion) { tmp363.Name = "executionVersion"; tmp363.Type = TType.I16; @@ -895,7 +895,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteI16Async(ExecutionVersion, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((RequestValidation != null) && __isset.requestValidation) + if ((RequestValidation != null) && __isset.requestValidation) { tmp363.Name = "requestValidation"; tmp363.Type = TType.String; @@ -904,7 +904,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteStringAsync(RequestValidation, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.resultPersistenceMode) + if (__isset.resultPersistenceMode) { tmp363.Name = "resultPersistenceMode"; tmp363.Type = TType.I32; @@ -913,7 +913,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteI32Async(ResultPersistenceMode, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.trimArrowBatchesToLimit) + if (__isset.trimArrowBatchesToLimit) { tmp363.Name = "trimArrowBatchesToLimit"; tmp363.Type = TType.Bool; @@ -922,7 +922,7 @@ public TExecuteStatementReq DeepCopy() await oprot.WriteBoolAsync(TrimArrowBatchesToLimit, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.enforceResultPersistenceMode) + if (__isset.enforceResultPersistenceMode) { tmp363.Name = "enforceResultPersistenceMode"; tmp363.Type = TType.Bool; @@ -970,87 +970,87 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((Statement != null)) + if ((Statement != null)) { hashcode = (hashcode * 397) + Statement.GetHashCode(); } - if((ConfOverlay != null) && __isset.confOverlay) + if ((ConfOverlay != null) && __isset.confOverlay) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ConfOverlay); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if(__isset.queryTimeout) + if (__isset.queryTimeout) { hashcode = (hashcode * 397) + QueryTimeout.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.canReadArrowResult) + if (__isset.canReadArrowResult) { hashcode = (hashcode * 397) + CanReadArrowResult.GetHashCode(); } - if(__isset.canDownloadResult) + if (__isset.canDownloadResult) { hashcode = (hashcode * 397) + CanDownloadResult.GetHashCode(); } - if(__isset.canDecompressLZ4Result) + if (__isset.canDecompressLZ4Result) { hashcode = (hashcode * 397) + CanDecompressLZ4Result.GetHashCode(); } - if(__isset.maxBytesPerFile) + if (__isset.maxBytesPerFile) { hashcode = (hashcode * 397) + MaxBytesPerFile.GetHashCode(); } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + if ((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) { hashcode = (hashcode * 397) + UseArrowNativeTypes.GetHashCode(); } - if(__isset.resultRowLimit) + if (__isset.resultRowLimit) { hashcode = (hashcode * 397) + ResultRowLimit.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } - if(__isset.rejectHighCostQueries) + if (__isset.rejectHighCostQueries) { hashcode = (hashcode * 397) + RejectHighCostQueries.GetHashCode(); } - if(__isset.estimatedCost) + if (__isset.estimatedCost) { hashcode = (hashcode * 397) + EstimatedCost.GetHashCode(); } - if(__isset.executionVersion) + if (__isset.executionVersion) { hashcode = (hashcode * 397) + ExecutionVersion.GetHashCode(); } - if(__isset.enforceResultPersistenceMode) + if (__isset.enforceResultPersistenceMode) { hashcode = (hashcode * 397) + EnforceResultPersistenceMode.GetHashCode(); } - if((RequestValidation != null) && __isset.requestValidation) + if ((RequestValidation != null) && __isset.requestValidation) { hashcode = (hashcode * 397) + RequestValidation.GetHashCode(); } - if(__isset.resultPersistenceMode) + if (__isset.resultPersistenceMode) { hashcode = (hashcode * 397) + ResultPersistenceMode.GetHashCode(); } - if(__isset.trimArrowBatchesToLimit) + if (__isset.trimArrowBatchesToLimit) { hashcode = (hashcode * 397) + TrimArrowBatchesToLimit.GetHashCode(); } @@ -1061,107 +1061,107 @@ public override int GetHashCode() { public override string ToString() { var tmp365 = new StringBuilder("TExecuteStatementReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp365.Append(", SessionHandle: "); SessionHandle.ToString(tmp365); } - if((Statement != null)) + if ((Statement != null)) { tmp365.Append(", Statement: "); Statement.ToString(tmp365); } - if((ConfOverlay != null) && __isset.confOverlay) + if ((ConfOverlay != null) && __isset.confOverlay) { tmp365.Append(", ConfOverlay: "); ConfOverlay.ToString(tmp365); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp365.Append(", RunAsync: "); RunAsync.ToString(tmp365); } - if(__isset.queryTimeout) + if (__isset.queryTimeout) { tmp365.Append(", QueryTimeout: "); QueryTimeout.ToString(tmp365); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp365.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp365); } - if(__isset.canReadArrowResult) + if (__isset.canReadArrowResult) { tmp365.Append(", CanReadArrowResult: "); CanReadArrowResult.ToString(tmp365); } - if(__isset.canDownloadResult) + if (__isset.canDownloadResult) { tmp365.Append(", CanDownloadResult: "); CanDownloadResult.ToString(tmp365); } - if(__isset.canDecompressLZ4Result) + if (__isset.canDecompressLZ4Result) { tmp365.Append(", CanDecompressLZ4Result: "); CanDecompressLZ4Result.ToString(tmp365); } - if(__isset.maxBytesPerFile) + if (__isset.maxBytesPerFile) { tmp365.Append(", MaxBytesPerFile: "); MaxBytesPerFile.ToString(tmp365); } - if((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) + if ((UseArrowNativeTypes != null) && __isset.useArrowNativeTypes) { tmp365.Append(", UseArrowNativeTypes: "); UseArrowNativeTypes.ToString(tmp365); } - if(__isset.resultRowLimit) + if (__isset.resultRowLimit) { tmp365.Append(", ResultRowLimit: "); ResultRowLimit.ToString(tmp365); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp365.Append(", OperationId: "); OperationId.ToString(tmp365); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp365.Append(", SessionConf: "); SessionConf.ToString(tmp365); } - if(__isset.rejectHighCostQueries) + if (__isset.rejectHighCostQueries) { tmp365.Append(", RejectHighCostQueries: "); RejectHighCostQueries.ToString(tmp365); } - if(__isset.enforceResultPersistenceMode) + if (__isset.enforceResultPersistenceMode) { tmp365.Append(", EnforceResultPersistenceMode: "); EnforceResultPersistenceMode.ToString(tmp365); } - if(__isset.estimatedCost) + if (__isset.estimatedCost) { tmp365.Append(", EstimatedCost: "); EstimatedCost.ToString(tmp365); } - if(__isset.executionVersion) + if (__isset.executionVersion) { tmp365.Append(", ExecutionVersion: "); ExecutionVersion.ToString(tmp365); } - if((RequestValidation != null) && __isset.requestValidation) + if ((RequestValidation != null) && __isset.requestValidation) { tmp365.Append(", RequestValidation: "); RequestValidation.ToString(tmp365); } - if(__isset.resultPersistenceMode) + if (__isset.resultPersistenceMode) { tmp365.Append(", ResultPersistenceMode: "); ResultPersistenceMode.ToString(tmp365); } - if(__isset.trimArrowBatchesToLimit) + if (__isset.trimArrowBatchesToLimit) { tmp365.Append(", TrimArrowBatchesToLimit: "); TrimArrowBatchesToLimit.ToString(tmp365); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs index 7bbecb5570..cac905e1d2 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExecuteStatementResp.cs @@ -177,46 +177,46 @@ public TExecuteStatementResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus stat public TExecuteStatementResp DeepCopy() { var tmp415 = new TExecuteStatementResp(); - if((Status != null)) + if ((Status != null)) { tmp415.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp415.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp415.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp415.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } tmp415.__isset.directResults = this.__isset.directResults; - if(__isset.executionRejected) + if (__isset.executionRejected) { tmp415.ExecutionRejected = this.ExecutionRejected; } tmp415.__isset.executionRejected = this.__isset.executionRejected; - if(__isset.maxClusterCapacity) + if (__isset.maxClusterCapacity) { tmp415.MaxClusterCapacity = this.MaxClusterCapacity; } tmp415.__isset.maxClusterCapacity = this.__isset.maxClusterCapacity; - if(__isset.queryCost) + if (__isset.queryCost) { tmp415.QueryCost = this.QueryCost; } tmp415.__isset.queryCost = this.__isset.queryCost; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp415.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } tmp415.__isset.sessionConf = this.__isset.sessionConf; - if(__isset.currentClusterLoad) + if (__isset.currentClusterLoad) { tmp415.CurrentClusterLoad = this.CurrentClusterLoad; } tmp415.__isset.currentClusterLoad = this.__isset.currentClusterLoad; - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp415.IdempotencyType = this.IdempotencyType; } @@ -365,7 +365,7 @@ public TExecuteStatementResp DeepCopy() var tmp416 = new TStruct("TExecuteStatementResp"); await oprot.WriteStructBeginAsync(tmp416, cancellationToken); var tmp417 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp417.Name = "status"; tmp417.Type = TType.Struct; @@ -374,7 +374,7 @@ public TExecuteStatementResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp417.Name = "operationHandle"; tmp417.Type = TType.Struct; @@ -383,7 +383,7 @@ public TExecuteStatementResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp417.Name = "directResults"; tmp417.Type = TType.Struct; @@ -392,7 +392,7 @@ public TExecuteStatementResp DeepCopy() await DirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.executionRejected) + if (__isset.executionRejected) { tmp417.Name = "executionRejected"; tmp417.Type = TType.Bool; @@ -401,7 +401,7 @@ public TExecuteStatementResp DeepCopy() await oprot.WriteBoolAsync(ExecutionRejected, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.maxClusterCapacity) + if (__isset.maxClusterCapacity) { tmp417.Name = "maxClusterCapacity"; tmp417.Type = TType.Double; @@ -410,7 +410,7 @@ public TExecuteStatementResp DeepCopy() await oprot.WriteDoubleAsync(MaxClusterCapacity, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.queryCost) + if (__isset.queryCost) { tmp417.Name = "queryCost"; tmp417.Type = TType.Double; @@ -419,7 +419,7 @@ public TExecuteStatementResp DeepCopy() await oprot.WriteDoubleAsync(QueryCost, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp417.Name = "sessionConf"; tmp417.Type = TType.Struct; @@ -428,7 +428,7 @@ public TExecuteStatementResp DeepCopy() await SessionConf.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.currentClusterLoad) + if (__isset.currentClusterLoad) { tmp417.Name = "currentClusterLoad"; tmp417.Type = TType.Double; @@ -437,7 +437,7 @@ public TExecuteStatementResp DeepCopy() await oprot.WriteDoubleAsync(CurrentClusterLoad, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp417.Name = "idempotencyType"; tmp417.Type = TType.I32; @@ -473,39 +473,39 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } - if(__isset.executionRejected) + if (__isset.executionRejected) { hashcode = (hashcode * 397) + ExecutionRejected.GetHashCode(); } - if(__isset.maxClusterCapacity) + if (__isset.maxClusterCapacity) { hashcode = (hashcode * 397) + MaxClusterCapacity.GetHashCode(); } - if(__isset.queryCost) + if (__isset.queryCost) { hashcode = (hashcode * 397) + QueryCost.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } - if(__isset.currentClusterLoad) + if (__isset.currentClusterLoad) { hashcode = (hashcode * 397) + CurrentClusterLoad.GetHashCode(); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); } @@ -516,47 +516,47 @@ public override int GetHashCode() { public override string ToString() { var tmp418 = new StringBuilder("TExecuteStatementResp("); - if((Status != null)) + if ((Status != null)) { tmp418.Append(", Status: "); Status.ToString(tmp418); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp418.Append(", OperationHandle: "); OperationHandle.ToString(tmp418); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp418.Append(", DirectResults: "); DirectResults.ToString(tmp418); } - if(__isset.executionRejected) + if (__isset.executionRejected) { tmp418.Append(", ExecutionRejected: "); ExecutionRejected.ToString(tmp418); } - if(__isset.maxClusterCapacity) + if (__isset.maxClusterCapacity) { tmp418.Append(", MaxClusterCapacity: "); MaxClusterCapacity.ToString(tmp418); } - if(__isset.queryCost) + if (__isset.queryCost) { tmp418.Append(", QueryCost: "); QueryCost.ToString(tmp418); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp418.Append(", SessionConf: "); SessionConf.ToString(tmp418); } - if(__isset.currentClusterLoad) + if (__isset.currentClusterLoad) { tmp418.Append(", CurrentClusterLoad: "); CurrentClusterLoad.ToString(tmp418); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp418.Append(", IdempotencyType: "); IdempotencyType.ToString(tmp418); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs index 1db7477da0..0091e452f9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TExpressionInfo.cs @@ -230,62 +230,62 @@ public TExpressionInfo() public TExpressionInfo DeepCopy() { var tmp410 = new TExpressionInfo(); - if((ClassName != null) && __isset.className) + if ((ClassName != null) && __isset.className) { tmp410.ClassName = this.ClassName; } tmp410.__isset.className = this.__isset.className; - if((Usage != null) && __isset.usage) + if ((Usage != null) && __isset.usage) { tmp410.Usage = this.Usage; } tmp410.__isset.usage = this.__isset.usage; - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { tmp410.Name = this.Name; } tmp410.__isset.name = this.__isset.name; - if((Extended != null) && __isset.extended) + if ((Extended != null) && __isset.extended) { tmp410.Extended = this.Extended; } tmp410.__isset.extended = this.__isset.extended; - if((Db != null) && __isset.db) + if ((Db != null) && __isset.db) { tmp410.Db = this.Db; } tmp410.__isset.db = this.__isset.db; - if((Arguments != null) && __isset.arguments) + if ((Arguments != null) && __isset.arguments) { tmp410.Arguments = this.Arguments; } tmp410.__isset.arguments = this.__isset.arguments; - if((Examples != null) && __isset.examples) + if ((Examples != null) && __isset.examples) { tmp410.Examples = this.Examples; } tmp410.__isset.examples = this.__isset.examples; - if((Note != null) && __isset.note) + if ((Note != null) && __isset.note) { tmp410.Note = this.Note; } tmp410.__isset.note = this.__isset.note; - if((Group != null) && __isset.@group) + if ((Group != null) && __isset.@group) { tmp410.Group = this.Group; } tmp410.__isset.@group = this.__isset.@group; - if((Since != null) && __isset.since) + if ((Since != null) && __isset.since) { tmp410.Since = this.Since; } tmp410.__isset.since = this.__isset.since; - if((Deprecated != null) && __isset.deprecated) + if ((Deprecated != null) && __isset.deprecated) { tmp410.Deprecated = this.Deprecated; } tmp410.__isset.deprecated = this.__isset.deprecated; - if((Source != null) && __isset.source) + if ((Source != null) && __isset.source) { tmp410.Source = this.Source; } @@ -454,7 +454,7 @@ public TExpressionInfo DeepCopy() var tmp411 = new TStruct("TExpressionInfo"); await oprot.WriteStructBeginAsync(tmp411, cancellationToken); var tmp412 = new TField(); - if((ClassName != null) && __isset.className) + if ((ClassName != null) && __isset.className) { tmp412.Name = "className"; tmp412.Type = TType.String; @@ -463,7 +463,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(ClassName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Usage != null) && __isset.usage) + if ((Usage != null) && __isset.usage) { tmp412.Name = "usage"; tmp412.Type = TType.String; @@ -472,7 +472,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Usage, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { tmp412.Name = "name"; tmp412.Type = TType.String; @@ -481,7 +481,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Name, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Extended != null) && __isset.extended) + if ((Extended != null) && __isset.extended) { tmp412.Name = "extended"; tmp412.Type = TType.String; @@ -490,7 +490,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Extended, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Db != null) && __isset.db) + if ((Db != null) && __isset.db) { tmp412.Name = "db"; tmp412.Type = TType.String; @@ -499,7 +499,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Db, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Arguments != null) && __isset.arguments) + if ((Arguments != null) && __isset.arguments) { tmp412.Name = "arguments"; tmp412.Type = TType.String; @@ -508,7 +508,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Arguments, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Examples != null) && __isset.examples) + if ((Examples != null) && __isset.examples) { tmp412.Name = "examples"; tmp412.Type = TType.String; @@ -517,7 +517,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Examples, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Note != null) && __isset.note) + if ((Note != null) && __isset.note) { tmp412.Name = "note"; tmp412.Type = TType.String; @@ -526,7 +526,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Note, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Group != null) && __isset.@group) + if ((Group != null) && __isset.@group) { tmp412.Name = "group"; tmp412.Type = TType.String; @@ -535,7 +535,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Group, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Since != null) && __isset.since) + if ((Since != null) && __isset.since) { tmp412.Name = "since"; tmp412.Type = TType.String; @@ -544,7 +544,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Since, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Deprecated != null) && __isset.deprecated) + if ((Deprecated != null) && __isset.deprecated) { tmp412.Name = "deprecated"; tmp412.Type = TType.String; @@ -553,7 +553,7 @@ public TExpressionInfo DeepCopy() await oprot.WriteStringAsync(Deprecated, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Source != null) && __isset.source) + if ((Source != null) && __isset.source) { tmp412.Name = "source"; tmp412.Type = TType.String; @@ -592,51 +592,51 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((ClassName != null) && __isset.className) + if ((ClassName != null) && __isset.className) { hashcode = (hashcode * 397) + ClassName.GetHashCode(); } - if((Usage != null) && __isset.usage) + if ((Usage != null) && __isset.usage) { hashcode = (hashcode * 397) + Usage.GetHashCode(); } - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { hashcode = (hashcode * 397) + Name.GetHashCode(); } - if((Extended != null) && __isset.extended) + if ((Extended != null) && __isset.extended) { hashcode = (hashcode * 397) + Extended.GetHashCode(); } - if((Db != null) && __isset.db) + if ((Db != null) && __isset.db) { hashcode = (hashcode * 397) + Db.GetHashCode(); } - if((Arguments != null) && __isset.arguments) + if ((Arguments != null) && __isset.arguments) { hashcode = (hashcode * 397) + Arguments.GetHashCode(); } - if((Examples != null) && __isset.examples) + if ((Examples != null) && __isset.examples) { hashcode = (hashcode * 397) + Examples.GetHashCode(); } - if((Note != null) && __isset.note) + if ((Note != null) && __isset.note) { hashcode = (hashcode * 397) + Note.GetHashCode(); } - if((Group != null) && __isset.@group) + if ((Group != null) && __isset.@group) { hashcode = (hashcode * 397) + Group.GetHashCode(); } - if((Since != null) && __isset.since) + if ((Since != null) && __isset.since) { hashcode = (hashcode * 397) + Since.GetHashCode(); } - if((Deprecated != null) && __isset.deprecated) + if ((Deprecated != null) && __isset.deprecated) { hashcode = (hashcode * 397) + Deprecated.GetHashCode(); } - if((Source != null) && __isset.source) + if ((Source != null) && __isset.source) { hashcode = (hashcode * 397) + Source.GetHashCode(); } @@ -648,75 +648,75 @@ public override string ToString() { var tmp413 = new StringBuilder("TExpressionInfo("); int tmp414 = 0; - if((ClassName != null) && __isset.className) + if ((ClassName != null) && __isset.className) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("ClassName: "); ClassName.ToString(tmp413); } - if((Usage != null) && __isset.usage) + if ((Usage != null) && __isset.usage) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Usage: "); Usage.ToString(tmp413); } - if((Name != null) && __isset.name) + if ((Name != null) && __isset.name) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Name: "); Name.ToString(tmp413); } - if((Extended != null) && __isset.extended) + if ((Extended != null) && __isset.extended) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Extended: "); Extended.ToString(tmp413); } - if((Db != null) && __isset.db) + if ((Db != null) && __isset.db) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Db: "); Db.ToString(tmp413); } - if((Arguments != null) && __isset.arguments) + if ((Arguments != null) && __isset.arguments) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Arguments: "); Arguments.ToString(tmp413); } - if((Examples != null) && __isset.examples) + if ((Examples != null) && __isset.examples) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Examples: "); Examples.ToString(tmp413); } - if((Note != null) && __isset.note) + if ((Note != null) && __isset.note) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Note: "); Note.ToString(tmp413); } - if((Group != null) && __isset.@group) + if ((Group != null) && __isset.@group) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Group: "); Group.ToString(tmp413); } - if((Since != null) && __isset.since) + if ((Since != null) && __isset.since) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Since: "); Since.ToString(tmp413); } - if((Deprecated != null) && __isset.deprecated) + if ((Deprecated != null) && __isset.deprecated) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Deprecated: "); Deprecated.ToString(tmp413); } - if((Source != null) && __isset.source) + if ((Source != null) && __isset.source) { - if(0 < tmp414++) { tmp413.Append(", "); } + if (0 < tmp414++) { tmp413.Append(", "); } tmp413.Append("Source: "); Source.ToString(tmp413); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs index aa93df99bf..7080929dd5 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsReq.cs @@ -130,28 +130,28 @@ public TFetchResultsReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle public TFetchResultsReq DeepCopy() { var tmp588 = new TFetchResultsReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp588.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp588.Orientation = this.Orientation; tmp588.MaxRows = this.MaxRows; - if(__isset.fetchType) + if (__isset.fetchType) { tmp588.FetchType = this.FetchType; } tmp588.__isset.fetchType = this.__isset.fetchType; - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp588.MaxBytes = this.MaxBytes; } tmp588.__isset.maxBytes = this.__isset.maxBytes; - if(__isset.startRowOffset) + if (__isset.startRowOffset) { tmp588.StartRowOffset = this.StartRowOffset; } tmp588.__isset.startRowOffset = this.__isset.startRowOffset; - if(__isset.includeResultSetMetadata) + if (__isset.includeResultSetMetadata) { tmp588.IncludeResultSetMetadata = this.IncludeResultSetMetadata; } @@ -289,7 +289,7 @@ public TFetchResultsReq DeepCopy() var tmp589 = new TStruct("TFetchResultsReq"); await oprot.WriteStructBeginAsync(tmp589, cancellationToken); var tmp590 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp590.Name = "operationHandle"; tmp590.Type = TType.Struct; @@ -310,7 +310,7 @@ public TFetchResultsReq DeepCopy() await oprot.WriteFieldBeginAsync(tmp590, cancellationToken); await oprot.WriteI64Async(MaxRows, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.fetchType) + if (__isset.fetchType) { tmp590.Name = "fetchType"; tmp590.Type = TType.I16; @@ -319,7 +319,7 @@ public TFetchResultsReq DeepCopy() await oprot.WriteI16Async(FetchType, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp590.Name = "maxBytes"; tmp590.Type = TType.I64; @@ -328,7 +328,7 @@ public TFetchResultsReq DeepCopy() await oprot.WriteI64Async(MaxBytes, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.startRowOffset) + if (__isset.startRowOffset) { tmp590.Name = "startRowOffset"; tmp590.Type = TType.I64; @@ -337,7 +337,7 @@ public TFetchResultsReq DeepCopy() await oprot.WriteI64Async(StartRowOffset, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.includeResultSetMetadata) + if (__isset.includeResultSetMetadata) { tmp590.Name = "includeResultSetMetadata"; tmp590.Type = TType.Bool; @@ -371,25 +371,25 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } hashcode = (hashcode * 397) + Orientation.GetHashCode(); hashcode = (hashcode * 397) + MaxRows.GetHashCode(); - if(__isset.fetchType) + if (__isset.fetchType) { hashcode = (hashcode * 397) + FetchType.GetHashCode(); } - if(__isset.maxBytes) + if (__isset.maxBytes) { hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); } - if(__isset.startRowOffset) + if (__isset.startRowOffset) { hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); } - if(__isset.includeResultSetMetadata) + if (__isset.includeResultSetMetadata) { hashcode = (hashcode * 397) + IncludeResultSetMetadata.GetHashCode(); } @@ -400,7 +400,7 @@ public override int GetHashCode() { public override string ToString() { var tmp591 = new StringBuilder("TFetchResultsReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp591.Append(", OperationHandle: "); OperationHandle.ToString(tmp591); @@ -409,22 +409,22 @@ public override string ToString() Orientation.ToString(tmp591); tmp591.Append(", MaxRows: "); MaxRows.ToString(tmp591); - if(__isset.fetchType) + if (__isset.fetchType) { tmp591.Append(", FetchType: "); FetchType.ToString(tmp591); } - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp591.Append(", MaxBytes: "); MaxBytes.ToString(tmp591); } - if(__isset.startRowOffset) + if (__isset.startRowOffset) { tmp591.Append(", StartRowOffset: "); StartRowOffset.ToString(tmp591); } - if(__isset.includeResultSetMetadata) + if (__isset.includeResultSetMetadata) { tmp591.Append(", IncludeResultSetMetadata: "); IncludeResultSetMetadata.ToString(tmp591); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs index 660102054f..725b87add9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TFetchResultsResp.cs @@ -117,26 +117,26 @@ public TFetchResultsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) public TFetchResultsResp DeepCopy() { var tmp593 = new TFetchResultsResp(); - if((Status != null)) + if ((Status != null)) { tmp593.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if(__isset.hasMoreRows) + if (__isset.hasMoreRows) { tmp593.HasMoreRows = this.HasMoreRows; } tmp593.__isset.hasMoreRows = this.__isset.hasMoreRows; - if((Results != null) && __isset.results) + if ((Results != null) && __isset.results) { tmp593.Results = (global::Apache.Hive.Service.Rpc.Thrift.TRowSet)this.Results.DeepCopy(); } tmp593.__isset.results = this.__isset.results; - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { tmp593.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); } tmp593.__isset.resultSetMetadata = this.__isset.resultSetMetadata; - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp593.ResponseValidation = this.ResponseValidation; } @@ -244,7 +244,7 @@ public TFetchResultsResp DeepCopy() var tmp594 = new TStruct("TFetchResultsResp"); await oprot.WriteStructBeginAsync(tmp594, cancellationToken); var tmp595 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp595.Name = "status"; tmp595.Type = TType.Struct; @@ -253,7 +253,7 @@ public TFetchResultsResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.hasMoreRows) + if (__isset.hasMoreRows) { tmp595.Name = "hasMoreRows"; tmp595.Type = TType.Bool; @@ -262,7 +262,7 @@ public TFetchResultsResp DeepCopy() await oprot.WriteBoolAsync(HasMoreRows, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Results != null) && __isset.results) + if ((Results != null) && __isset.results) { tmp595.Name = "results"; tmp595.Type = TType.Struct; @@ -271,7 +271,7 @@ public TFetchResultsResp DeepCopy() await Results.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { tmp595.Name = "resultSetMetadata"; tmp595.Type = TType.Struct; @@ -280,7 +280,7 @@ public TFetchResultsResp DeepCopy() await ResultSetMetadata.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp595.Name = "responseValidation"; tmp595.Type = TType.String; @@ -312,23 +312,23 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if(__isset.hasMoreRows) + if (__isset.hasMoreRows) { hashcode = (hashcode * 397) + HasMoreRows.GetHashCode(); } - if((Results != null) && __isset.results) + if ((Results != null) && __isset.results) { hashcode = (hashcode * 397) + Results.GetHashCode(); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); } @@ -339,27 +339,27 @@ public override int GetHashCode() { public override string ToString() { var tmp596 = new StringBuilder("TFetchResultsResp("); - if((Status != null)) + if ((Status != null)) { tmp596.Append(", Status: "); Status.ToString(tmp596); } - if(__isset.hasMoreRows) + if (__isset.hasMoreRows) { tmp596.Append(", HasMoreRows: "); HasMoreRows.ToString(tmp596); } - if((Results != null) && __isset.results) + if ((Results != null) && __isset.results) { tmp596.Append(", Results: "); Results.ToString(tmp596); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { tmp596.Append(", ResultSetMetadata: "); ResultSetMetadata.ToString(tmp596); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp596.Append(", ResponseValidation: "); ResponseValidation.ToString(tmp596); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs index c515061b57..38dc1b1220 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsReq.cs @@ -117,26 +117,26 @@ public TGetCatalogsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle ses public TGetCatalogsReq DeepCopy() { var tmp455 = new TGetCatalogsReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp455.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp455.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp455.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp455.RunAsync = this.RunAsync; } tmp455.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp455.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp455.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp455.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -245,7 +245,7 @@ public TGetCatalogsReq DeepCopy() var tmp456 = new TStruct("TGetCatalogsReq"); await oprot.WriteStructBeginAsync(tmp456, cancellationToken); var tmp457 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp457.Name = "sessionHandle"; tmp457.Type = TType.Struct; @@ -254,7 +254,7 @@ public TGetCatalogsReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp457.Name = "getDirectResults"; tmp457.Type = TType.Struct; @@ -263,7 +263,7 @@ public TGetCatalogsReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp457.Name = "runAsync"; tmp457.Type = TType.Bool; @@ -272,7 +272,7 @@ public TGetCatalogsReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp457.Name = "operationId"; tmp457.Type = TType.Struct; @@ -281,7 +281,7 @@ public TGetCatalogsReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp457.Name = "sessionConf"; tmp457.Type = TType.Struct; @@ -313,23 +313,23 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -340,27 +340,27 @@ public override int GetHashCode() { public override string ToString() { var tmp458 = new StringBuilder("TGetCatalogsReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp458.Append(", SessionHandle: "); SessionHandle.ToString(tmp458); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp458.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp458); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp458.Append(", RunAsync: "); RunAsync.ToString(tmp458); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp458.Append(", OperationId: "); OperationId.ToString(tmp458); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp458.Append(", SessionConf: "); SessionConf.ToString(tmp458); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs index 466e876389..2b5d85eb2d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCatalogsResp.cs @@ -87,16 +87,16 @@ public TGetCatalogsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : public TGetCatalogsResp DeepCopy() { var tmp460 = new TGetCatalogsResp(); - if((Status != null)) + if ((Status != null)) { tmp460.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp460.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp460.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp460.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetCatalogsResp DeepCopy() var tmp461 = new TStruct("TGetCatalogsResp"); await oprot.WriteStructBeginAsync(tmp461, cancellationToken); var tmp462 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp462.Name = "status"; tmp462.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetCatalogsResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp462.Name = "operationHandle"; tmp462.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetCatalogsResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp462.Name = "directResults"; tmp462.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp463 = new StringBuilder("TGetCatalogsResp("); - if((Status != null)) + if ((Status != null)) { tmp463.Append(", Status: "); Status.ToString(tmp463); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp463.Append(", OperationHandle: "); OperationHandle.ToString(tmp463); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp463.Append(", DirectResults: "); DirectResults.ToString(tmp463); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs index 658aebebe4..2f328890a5 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsReq.cs @@ -177,46 +177,46 @@ public TGetColumnsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sess public TGetColumnsReq DeepCopy() { var tmp499 = new TGetColumnsReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp499.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp499.CatalogName = this.CatalogName; } tmp499.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp499.SchemaName = this.SchemaName; } tmp499.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp499.TableName = this.TableName; } tmp499.__isset.tableName = this.__isset.tableName; - if((ColumnName != null) && __isset.columnName) + if ((ColumnName != null) && __isset.columnName) { tmp499.ColumnName = this.ColumnName; } tmp499.__isset.columnName = this.__isset.columnName; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp499.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp499.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp499.RunAsync = this.RunAsync; } tmp499.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp499.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp499.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp499.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -365,7 +365,7 @@ public TGetColumnsReq DeepCopy() var tmp500 = new TStruct("TGetColumnsReq"); await oprot.WriteStructBeginAsync(tmp500, cancellationToken); var tmp501 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp501.Name = "sessionHandle"; tmp501.Type = TType.Struct; @@ -374,7 +374,7 @@ public TGetColumnsReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp501.Name = "catalogName"; tmp501.Type = TType.String; @@ -383,7 +383,7 @@ public TGetColumnsReq DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp501.Name = "schemaName"; tmp501.Type = TType.String; @@ -392,7 +392,7 @@ public TGetColumnsReq DeepCopy() await oprot.WriteStringAsync(SchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp501.Name = "tableName"; tmp501.Type = TType.String; @@ -401,7 +401,7 @@ public TGetColumnsReq DeepCopy() await oprot.WriteStringAsync(TableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ColumnName != null) && __isset.columnName) + if ((ColumnName != null) && __isset.columnName) { tmp501.Name = "columnName"; tmp501.Type = TType.String; @@ -410,7 +410,7 @@ public TGetColumnsReq DeepCopy() await oprot.WriteStringAsync(ColumnName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp501.Name = "getDirectResults"; tmp501.Type = TType.Struct; @@ -419,7 +419,7 @@ public TGetColumnsReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp501.Name = "runAsync"; tmp501.Type = TType.Bool; @@ -428,7 +428,7 @@ public TGetColumnsReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp501.Name = "operationId"; tmp501.Type = TType.Struct; @@ -437,7 +437,7 @@ public TGetColumnsReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp501.Name = "sessionConf"; tmp501.Type = TType.Struct; @@ -473,39 +473,39 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { hashcode = (hashcode * 397) + TableName.GetHashCode(); } - if((ColumnName != null) && __isset.columnName) + if ((ColumnName != null) && __isset.columnName) { hashcode = (hashcode * 397) + ColumnName.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -516,47 +516,47 @@ public override int GetHashCode() { public override string ToString() { var tmp502 = new StringBuilder("TGetColumnsReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp502.Append(", SessionHandle: "); SessionHandle.ToString(tmp502); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp502.Append(", CatalogName: "); CatalogName.ToString(tmp502); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp502.Append(", SchemaName: "); SchemaName.ToString(tmp502); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp502.Append(", TableName: "); TableName.ToString(tmp502); } - if((ColumnName != null) && __isset.columnName) + if ((ColumnName != null) && __isset.columnName) { tmp502.Append(", ColumnName: "); ColumnName.ToString(tmp502); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp502.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp502); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp502.Append(", RunAsync: "); RunAsync.ToString(tmp502); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp502.Append(", OperationId: "); OperationId.ToString(tmp502); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp502.Append(", SessionConf: "); SessionConf.ToString(tmp502); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs index fac909709e..ce41348611 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetColumnsResp.cs @@ -87,16 +87,16 @@ public TGetColumnsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : public TGetColumnsResp DeepCopy() { var tmp504 = new TGetColumnsResp(); - if((Status != null)) + if ((Status != null)) { tmp504.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp504.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp504.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp504.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetColumnsResp DeepCopy() var tmp505 = new TStruct("TGetColumnsResp"); await oprot.WriteStructBeginAsync(tmp505, cancellationToken); var tmp506 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp506.Name = "status"; tmp506.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetColumnsResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp506.Name = "operationHandle"; tmp506.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetColumnsResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp506.Name = "directResults"; tmp506.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp507 = new StringBuilder("TGetColumnsResp("); - if((Status != null)) + if ((Status != null)) { tmp507.Append(", Status: "); Status.ToString(tmp507); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp507.Append(", OperationHandle: "); OperationHandle.ToString(tmp507); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp507.Append(", DirectResults: "); DirectResults.ToString(tmp507); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs index a4dd2c81db..84b5cc583c 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceReq.cs @@ -207,56 +207,56 @@ public TGetCrossReferenceReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHand public TGetCrossReferenceReq DeepCopy() { var tmp529 = new TGetCrossReferenceReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp529.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((ParentCatalogName != null) && __isset.parentCatalogName) + if ((ParentCatalogName != null) && __isset.parentCatalogName) { tmp529.ParentCatalogName = this.ParentCatalogName; } tmp529.__isset.parentCatalogName = this.__isset.parentCatalogName; - if((ParentSchemaName != null) && __isset.parentSchemaName) + if ((ParentSchemaName != null) && __isset.parentSchemaName) { tmp529.ParentSchemaName = this.ParentSchemaName; } tmp529.__isset.parentSchemaName = this.__isset.parentSchemaName; - if((ParentTableName != null) && __isset.parentTableName) + if ((ParentTableName != null) && __isset.parentTableName) { tmp529.ParentTableName = this.ParentTableName; } tmp529.__isset.parentTableName = this.__isset.parentTableName; - if((ForeignCatalogName != null) && __isset.foreignCatalogName) + if ((ForeignCatalogName != null) && __isset.foreignCatalogName) { tmp529.ForeignCatalogName = this.ForeignCatalogName; } tmp529.__isset.foreignCatalogName = this.__isset.foreignCatalogName; - if((ForeignSchemaName != null) && __isset.foreignSchemaName) + if ((ForeignSchemaName != null) && __isset.foreignSchemaName) { tmp529.ForeignSchemaName = this.ForeignSchemaName; } tmp529.__isset.foreignSchemaName = this.__isset.foreignSchemaName; - if((ForeignTableName != null) && __isset.foreignTableName) + if ((ForeignTableName != null) && __isset.foreignTableName) { tmp529.ForeignTableName = this.ForeignTableName; } tmp529.__isset.foreignTableName = this.__isset.foreignTableName; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp529.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp529.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp529.RunAsync = this.RunAsync; } tmp529.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp529.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp529.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp529.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -425,7 +425,7 @@ public TGetCrossReferenceReq DeepCopy() var tmp530 = new TStruct("TGetCrossReferenceReq"); await oprot.WriteStructBeginAsync(tmp530, cancellationToken); var tmp531 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp531.Name = "sessionHandle"; tmp531.Type = TType.Struct; @@ -434,7 +434,7 @@ public TGetCrossReferenceReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ParentCatalogName != null) && __isset.parentCatalogName) + if ((ParentCatalogName != null) && __isset.parentCatalogName) { tmp531.Name = "parentCatalogName"; tmp531.Type = TType.String; @@ -443,7 +443,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ParentCatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ParentSchemaName != null) && __isset.parentSchemaName) + if ((ParentSchemaName != null) && __isset.parentSchemaName) { tmp531.Name = "parentSchemaName"; tmp531.Type = TType.String; @@ -452,7 +452,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ParentSchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ParentTableName != null) && __isset.parentTableName) + if ((ParentTableName != null) && __isset.parentTableName) { tmp531.Name = "parentTableName"; tmp531.Type = TType.String; @@ -461,7 +461,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ParentTableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) + if ((ForeignCatalogName != null) && __isset.foreignCatalogName) { tmp531.Name = "foreignCatalogName"; tmp531.Type = TType.String; @@ -470,7 +470,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ForeignCatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) + if ((ForeignSchemaName != null) && __isset.foreignSchemaName) { tmp531.Name = "foreignSchemaName"; tmp531.Type = TType.String; @@ -479,7 +479,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ForeignSchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ForeignTableName != null) && __isset.foreignTableName) + if ((ForeignTableName != null) && __isset.foreignTableName) { tmp531.Name = "foreignTableName"; tmp531.Type = TType.String; @@ -488,7 +488,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteStringAsync(ForeignTableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp531.Name = "getDirectResults"; tmp531.Type = TType.Struct; @@ -497,7 +497,7 @@ public TGetCrossReferenceReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp531.Name = "runAsync"; tmp531.Type = TType.Bool; @@ -506,7 +506,7 @@ public TGetCrossReferenceReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp531.Name = "operationId"; tmp531.Type = TType.Struct; @@ -515,7 +515,7 @@ public TGetCrossReferenceReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp531.Name = "sessionConf"; tmp531.Type = TType.Struct; @@ -553,47 +553,47 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((ParentCatalogName != null) && __isset.parentCatalogName) + if ((ParentCatalogName != null) && __isset.parentCatalogName) { hashcode = (hashcode * 397) + ParentCatalogName.GetHashCode(); } - if((ParentSchemaName != null) && __isset.parentSchemaName) + if ((ParentSchemaName != null) && __isset.parentSchemaName) { hashcode = (hashcode * 397) + ParentSchemaName.GetHashCode(); } - if((ParentTableName != null) && __isset.parentTableName) + if ((ParentTableName != null) && __isset.parentTableName) { hashcode = (hashcode * 397) + ParentTableName.GetHashCode(); } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) + if ((ForeignCatalogName != null) && __isset.foreignCatalogName) { hashcode = (hashcode * 397) + ForeignCatalogName.GetHashCode(); } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) + if ((ForeignSchemaName != null) && __isset.foreignSchemaName) { hashcode = (hashcode * 397) + ForeignSchemaName.GetHashCode(); } - if((ForeignTableName != null) && __isset.foreignTableName) + if ((ForeignTableName != null) && __isset.foreignTableName) { hashcode = (hashcode * 397) + ForeignTableName.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -604,57 +604,57 @@ public override int GetHashCode() { public override string ToString() { var tmp532 = new StringBuilder("TGetCrossReferenceReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp532.Append(", SessionHandle: "); SessionHandle.ToString(tmp532); } - if((ParentCatalogName != null) && __isset.parentCatalogName) + if ((ParentCatalogName != null) && __isset.parentCatalogName) { tmp532.Append(", ParentCatalogName: "); ParentCatalogName.ToString(tmp532); } - if((ParentSchemaName != null) && __isset.parentSchemaName) + if ((ParentSchemaName != null) && __isset.parentSchemaName) { tmp532.Append(", ParentSchemaName: "); ParentSchemaName.ToString(tmp532); } - if((ParentTableName != null) && __isset.parentTableName) + if ((ParentTableName != null) && __isset.parentTableName) { tmp532.Append(", ParentTableName: "); ParentTableName.ToString(tmp532); } - if((ForeignCatalogName != null) && __isset.foreignCatalogName) + if ((ForeignCatalogName != null) && __isset.foreignCatalogName) { tmp532.Append(", ForeignCatalogName: "); ForeignCatalogName.ToString(tmp532); } - if((ForeignSchemaName != null) && __isset.foreignSchemaName) + if ((ForeignSchemaName != null) && __isset.foreignSchemaName) { tmp532.Append(", ForeignSchemaName: "); ForeignSchemaName.ToString(tmp532); } - if((ForeignTableName != null) && __isset.foreignTableName) + if ((ForeignTableName != null) && __isset.foreignTableName) { tmp532.Append(", ForeignTableName: "); ForeignTableName.ToString(tmp532); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp532.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp532); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp532.Append(", RunAsync: "); RunAsync.ToString(tmp532); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp532.Append(", OperationId: "); OperationId.ToString(tmp532); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp532.Append(", SessionConf: "); SessionConf.ToString(tmp532); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs index c7ae201a6c..70f12b5ff4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetCrossReferenceResp.cs @@ -87,16 +87,16 @@ public TGetCrossReferenceResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus sta public TGetCrossReferenceResp DeepCopy() { var tmp534 = new TGetCrossReferenceResp(); - if((Status != null)) + if ((Status != null)) { tmp534.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp534.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp534.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp534.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetCrossReferenceResp DeepCopy() var tmp535 = new TStruct("TGetCrossReferenceResp"); await oprot.WriteStructBeginAsync(tmp535, cancellationToken); var tmp536 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp536.Name = "status"; tmp536.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetCrossReferenceResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp536.Name = "operationHandle"; tmp536.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetCrossReferenceResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp536.Name = "directResults"; tmp536.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp537 = new StringBuilder("TGetCrossReferenceResp("); - if((Status != null)) + if ((Status != null)) { tmp537.Append(", Status: "); Status.ToString(tmp537); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp537.Append(", OperationHandle: "); OperationHandle.ToString(tmp537); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp537.Append(", DirectResults: "); DirectResults.ToString(tmp537); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs index 237897967e..dcf8b97e15 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenReq.cs @@ -57,15 +57,15 @@ public TGetDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHan public TGetDelegationTokenReq DeepCopy() { var tmp598 = new TGetDelegationTokenReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp598.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((Owner != null)) + if ((Owner != null)) { tmp598.Owner = this.Owner; } - if((Renewer != null)) + if ((Renewer != null)) { tmp598.Renewer = this.Renewer; } @@ -162,7 +162,7 @@ public TGetDelegationTokenReq DeepCopy() var tmp599 = new TStruct("TGetDelegationTokenReq"); await oprot.WriteStructBeginAsync(tmp599, cancellationToken); var tmp600 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp600.Name = "sessionHandle"; tmp600.Type = TType.Struct; @@ -171,7 +171,7 @@ public TGetDelegationTokenReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Owner != null)) + if ((Owner != null)) { tmp600.Name = "owner"; tmp600.Type = TType.String; @@ -180,7 +180,7 @@ public TGetDelegationTokenReq DeepCopy() await oprot.WriteStringAsync(Owner, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Renewer != null)) + if ((Renewer != null)) { tmp600.Name = "renewer"; tmp600.Type = TType.String; @@ -210,15 +210,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((Owner != null)) + if ((Owner != null)) { hashcode = (hashcode * 397) + Owner.GetHashCode(); } - if((Renewer != null)) + if ((Renewer != null)) { hashcode = (hashcode * 397) + Renewer.GetHashCode(); } @@ -229,17 +229,17 @@ public override int GetHashCode() { public override string ToString() { var tmp601 = new StringBuilder("TGetDelegationTokenReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp601.Append(", SessionHandle: "); SessionHandle.ToString(tmp601); } - if((Owner != null)) + if ((Owner != null)) { tmp601.Append(", Owner: "); Owner.ToString(tmp601); } - if((Renewer != null)) + if ((Renewer != null)) { tmp601.Append(", Renewer: "); Renewer.ToString(tmp601); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs index c4b87dcd02..098beb7e33 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetDelegationTokenResp.cs @@ -72,11 +72,11 @@ public TGetDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus st public TGetDelegationTokenResp DeepCopy() { var tmp603 = new TGetDelegationTokenResp(); - if((Status != null)) + if ((Status != null)) { tmp603.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((DelegationToken != null) && __isset.delegationToken) + if ((DelegationToken != null) && __isset.delegationToken) { tmp603.DelegationToken = this.DelegationToken; } @@ -152,7 +152,7 @@ public TGetDelegationTokenResp DeepCopy() var tmp604 = new TStruct("TGetDelegationTokenResp"); await oprot.WriteStructBeginAsync(tmp604, cancellationToken); var tmp605 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp605.Name = "status"; tmp605.Type = TType.Struct; @@ -161,7 +161,7 @@ public TGetDelegationTokenResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DelegationToken != null) && __isset.delegationToken) + if ((DelegationToken != null) && __isset.delegationToken) { tmp605.Name = "delegationToken"; tmp605.Type = TType.String; @@ -190,11 +190,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((DelegationToken != null) && __isset.delegationToken) + if ((DelegationToken != null) && __isset.delegationToken) { hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); } @@ -205,12 +205,12 @@ public override int GetHashCode() { public override string ToString() { var tmp606 = new StringBuilder("TGetDelegationTokenResp("); - if((Status != null)) + if ((Status != null)) { tmp606.Append(", Status: "); Status.ToString(tmp606); } - if((DelegationToken != null) && __isset.delegationToken) + if ((DelegationToken != null) && __isset.delegationToken) { tmp606.Append(", DelegationToken: "); DelegationToken.ToString(tmp606); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs index 9bd190c95f..262dc60225 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsReq.cs @@ -150,40 +150,40 @@ public TGetFunctionsReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle se public TGetFunctionsReq DeepCopy() { var tmp509 = new TGetFunctionsReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp509.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp509.CatalogName = this.CatalogName; } tmp509.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp509.SchemaName = this.SchemaName; } tmp509.__isset.schemaName = this.__isset.schemaName; - if((FunctionName != null)) + if ((FunctionName != null)) { tmp509.FunctionName = this.FunctionName; } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp509.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp509.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp509.RunAsync = this.RunAsync; } tmp509.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp509.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp509.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp509.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -328,7 +328,7 @@ public TGetFunctionsReq DeepCopy() var tmp510 = new TStruct("TGetFunctionsReq"); await oprot.WriteStructBeginAsync(tmp510, cancellationToken); var tmp511 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp511.Name = "sessionHandle"; tmp511.Type = TType.Struct; @@ -337,7 +337,7 @@ public TGetFunctionsReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp511.Name = "catalogName"; tmp511.Type = TType.String; @@ -346,7 +346,7 @@ public TGetFunctionsReq DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp511.Name = "schemaName"; tmp511.Type = TType.String; @@ -355,7 +355,7 @@ public TGetFunctionsReq DeepCopy() await oprot.WriteStringAsync(SchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((FunctionName != null)) + if ((FunctionName != null)) { tmp511.Name = "functionName"; tmp511.Type = TType.String; @@ -364,7 +364,7 @@ public TGetFunctionsReq DeepCopy() await oprot.WriteStringAsync(FunctionName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp511.Name = "getDirectResults"; tmp511.Type = TType.Struct; @@ -373,7 +373,7 @@ public TGetFunctionsReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp511.Name = "runAsync"; tmp511.Type = TType.Bool; @@ -382,7 +382,7 @@ public TGetFunctionsReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp511.Name = "operationId"; tmp511.Type = TType.Struct; @@ -391,7 +391,7 @@ public TGetFunctionsReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp511.Name = "sessionConf"; tmp511.Type = TType.Struct; @@ -426,35 +426,35 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } - if((FunctionName != null)) + if ((FunctionName != null)) { hashcode = (hashcode * 397) + FunctionName.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -465,42 +465,42 @@ public override int GetHashCode() { public override string ToString() { var tmp512 = new StringBuilder("TGetFunctionsReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp512.Append(", SessionHandle: "); SessionHandle.ToString(tmp512); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp512.Append(", CatalogName: "); CatalogName.ToString(tmp512); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp512.Append(", SchemaName: "); SchemaName.ToString(tmp512); } - if((FunctionName != null)) + if ((FunctionName != null)) { tmp512.Append(", FunctionName: "); FunctionName.ToString(tmp512); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp512.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp512); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp512.Append(", RunAsync: "); RunAsync.ToString(tmp512); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp512.Append(", OperationId: "); OperationId.ToString(tmp512); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp512.Append(", SessionConf: "); SessionConf.ToString(tmp512); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs index fd959ac3eb..c932e4dee8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetFunctionsResp.cs @@ -87,16 +87,16 @@ public TGetFunctionsResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) public TGetFunctionsResp DeepCopy() { var tmp514 = new TGetFunctionsResp(); - if((Status != null)) + if ((Status != null)) { tmp514.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp514.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp514.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp514.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetFunctionsResp DeepCopy() var tmp515 = new TStruct("TGetFunctionsResp"); await oprot.WriteStructBeginAsync(tmp515, cancellationToken); var tmp516 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp516.Name = "status"; tmp516.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetFunctionsResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp516.Name = "operationHandle"; tmp516.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetFunctionsResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp516.Name = "directResults"; tmp516.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp517 = new StringBuilder("TGetFunctionsResp("); - if((Status != null)) + if ((Status != null)) { tmp517.Append(", Status: "); Status.ToString(tmp517); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp517.Append(", OperationHandle: "); OperationHandle.ToString(tmp517); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp517.Append(", DirectResults: "); DirectResults.ToString(tmp517); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs index 4a2155dd58..bf29987d56 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoReq.cs @@ -58,7 +58,7 @@ public TGetInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle session public TGetInfoReq DeepCopy() { var tmp347 = new TGetInfoReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp347.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } @@ -140,7 +140,7 @@ public TGetInfoReq DeepCopy() var tmp348 = new TStruct("TGetInfoReq"); await oprot.WriteStructBeginAsync(tmp348, cancellationToken); var tmp349 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp349.Name = "sessionHandle"; tmp349.Type = TType.Struct; @@ -175,7 +175,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } @@ -187,7 +187,7 @@ public override int GetHashCode() { public override string ToString() { var tmp350 = new StringBuilder("TGetInfoReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp350.Append(", SessionHandle: "); SessionHandle.ToString(tmp350); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs index 60ad815241..0f32a63be5 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoResp.cs @@ -54,11 +54,11 @@ public TGetInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, globa public TGetInfoResp DeepCopy() { var tmp352 = new TGetInfoResp(); - if((Status != null)) + if ((Status != null)) { tmp352.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((InfoValue != null)) + if ((InfoValue != null)) { tmp352.InfoValue = (global::Apache.Hive.Service.Rpc.Thrift.TGetInfoValue)this.InfoValue.DeepCopy(); } @@ -140,7 +140,7 @@ public TGetInfoResp DeepCopy() var tmp353 = new TStruct("TGetInfoResp"); await oprot.WriteStructBeginAsync(tmp353, cancellationToken); var tmp354 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp354.Name = "status"; tmp354.Type = TType.Struct; @@ -149,7 +149,7 @@ public TGetInfoResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((InfoValue != null)) + if ((InfoValue != null)) { tmp354.Name = "infoValue"; tmp354.Type = TType.Struct; @@ -178,11 +178,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((InfoValue != null)) + if ((InfoValue != null)) { hashcode = (hashcode * 397) + InfoValue.GetHashCode(); } @@ -193,12 +193,12 @@ public override int GetHashCode() { public override string ToString() { var tmp355 = new StringBuilder("TGetInfoResp("); - if((Status != null)) + if ((Status != null)) { tmp355.Append(", Status: "); Status.ToString(tmp355); } - if((InfoValue != null)) + if ((InfoValue != null)) { tmp355.Append(", InfoValue: "); InfoValue.ToString(tmp355); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs index 4a963e6dc8..fb31949687 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetInfoValue.cs @@ -140,32 +140,32 @@ public TGetInfoValue() public TGetInfoValue DeepCopy() { var tmp342 = new TGetInfoValue(); - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { tmp342.StringValue = this.StringValue; } tmp342.__isset.stringValue = this.__isset.stringValue; - if(__isset.smallIntValue) + if (__isset.smallIntValue) { tmp342.SmallIntValue = this.SmallIntValue; } tmp342.__isset.smallIntValue = this.__isset.smallIntValue; - if(__isset.integerBitmask) + if (__isset.integerBitmask) { tmp342.IntegerBitmask = this.IntegerBitmask; } tmp342.__isset.integerBitmask = this.__isset.integerBitmask; - if(__isset.integerFlag) + if (__isset.integerFlag) { tmp342.IntegerFlag = this.IntegerFlag; } tmp342.__isset.integerFlag = this.__isset.integerFlag; - if(__isset.binaryValue) + if (__isset.binaryValue) { tmp342.BinaryValue = this.BinaryValue; } tmp342.__isset.binaryValue = this.__isset.binaryValue; - if(__isset.lenValue) + if (__isset.lenValue) { tmp342.LenValue = this.LenValue; } @@ -274,7 +274,7 @@ public TGetInfoValue DeepCopy() var tmp343 = new TStruct("TGetInfoValue"); await oprot.WriteStructBeginAsync(tmp343, cancellationToken); var tmp344 = new TField(); - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { tmp344.Name = "stringValue"; tmp344.Type = TType.String; @@ -283,7 +283,7 @@ public TGetInfoValue DeepCopy() await oprot.WriteStringAsync(StringValue, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.smallIntValue) + if (__isset.smallIntValue) { tmp344.Name = "smallIntValue"; tmp344.Type = TType.I16; @@ -292,7 +292,7 @@ public TGetInfoValue DeepCopy() await oprot.WriteI16Async(SmallIntValue, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.integerBitmask) + if (__isset.integerBitmask) { tmp344.Name = "integerBitmask"; tmp344.Type = TType.I32; @@ -301,7 +301,7 @@ public TGetInfoValue DeepCopy() await oprot.WriteI32Async(IntegerBitmask, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.integerFlag) + if (__isset.integerFlag) { tmp344.Name = "integerFlag"; tmp344.Type = TType.I32; @@ -310,7 +310,7 @@ public TGetInfoValue DeepCopy() await oprot.WriteI32Async(IntegerFlag, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.binaryValue) + if (__isset.binaryValue) { tmp344.Name = "binaryValue"; tmp344.Type = TType.I32; @@ -319,7 +319,7 @@ public TGetInfoValue DeepCopy() await oprot.WriteI32Async(BinaryValue, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.lenValue) + if (__isset.lenValue) { tmp344.Name = "lenValue"; tmp344.Type = TType.I64; @@ -352,27 +352,27 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { hashcode = (hashcode * 397) + StringValue.GetHashCode(); } - if(__isset.smallIntValue) + if (__isset.smallIntValue) { hashcode = (hashcode * 397) + SmallIntValue.GetHashCode(); } - if(__isset.integerBitmask) + if (__isset.integerBitmask) { hashcode = (hashcode * 397) + IntegerBitmask.GetHashCode(); } - if(__isset.integerFlag) + if (__isset.integerFlag) { hashcode = (hashcode * 397) + IntegerFlag.GetHashCode(); } - if(__isset.binaryValue) + if (__isset.binaryValue) { hashcode = (hashcode * 397) + BinaryValue.GetHashCode(); } - if(__isset.lenValue) + if (__isset.lenValue) { hashcode = (hashcode * 397) + LenValue.GetHashCode(); } @@ -384,39 +384,39 @@ public override string ToString() { var tmp345 = new StringBuilder("TGetInfoValue("); int tmp346 = 0; - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("StringValue: "); StringValue.ToString(tmp345); } - if(__isset.smallIntValue) + if (__isset.smallIntValue) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("SmallIntValue: "); SmallIntValue.ToString(tmp345); } - if(__isset.integerBitmask) + if (__isset.integerBitmask) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("IntegerBitmask: "); IntegerBitmask.ToString(tmp345); } - if(__isset.integerFlag) + if (__isset.integerFlag) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("IntegerFlag: "); IntegerFlag.ToString(tmp345); } - if(__isset.binaryValue) + if (__isset.binaryValue) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("BinaryValue: "); BinaryValue.ToString(tmp345); } - if(__isset.lenValue) + if (__isset.lenValue) { - if(0 < tmp346++) { tmp345.Append(", "); } + if (0 < tmp346++) { tmp345.Append(", "); } tmp345.Append("LenValue: "); LenValue.ToString(tmp345); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs index d8b84fd0f0..2a99df67d0 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusReq.cs @@ -72,11 +72,11 @@ public TGetOperationStatusReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationH public TGetOperationStatusReq DeepCopy() { var tmp539 = new TGetOperationStatusReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp539.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } - if(__isset.getProgressUpdate) + if (__isset.getProgressUpdate) { tmp539.GetProgressUpdate = this.GetProgressUpdate; } @@ -152,7 +152,7 @@ public TGetOperationStatusReq DeepCopy() var tmp540 = new TStruct("TGetOperationStatusReq"); await oprot.WriteStructBeginAsync(tmp540, cancellationToken); var tmp541 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp541.Name = "operationHandle"; tmp541.Type = TType.Struct; @@ -161,7 +161,7 @@ public TGetOperationStatusReq DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.getProgressUpdate) + if (__isset.getProgressUpdate) { tmp541.Name = "getProgressUpdate"; tmp541.Type = TType.Bool; @@ -190,11 +190,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if(__isset.getProgressUpdate) + if (__isset.getProgressUpdate) { hashcode = (hashcode * 397) + GetProgressUpdate.GetHashCode(); } @@ -205,12 +205,12 @@ public override int GetHashCode() { public override string ToString() { var tmp542 = new StringBuilder("TGetOperationStatusReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp542.Append(", OperationHandle: "); OperationHandle.ToString(tmp542); } - if(__isset.getProgressUpdate) + if (__isset.getProgressUpdate) { tmp542.Append(", GetProgressUpdate: "); GetProgressUpdate.ToString(tmp542); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs index a5428ec158..2c4cecf619 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetOperationStatusResp.cs @@ -301,86 +301,86 @@ public TGetOperationStatusResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus st public TGetOperationStatusResp DeepCopy() { var tmp544 = new TGetOperationStatusResp(); - if((Status != null)) + if ((Status != null)) { tmp544.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if(__isset.operationState) + if (__isset.operationState) { tmp544.OperationState = this.OperationState; } tmp544.__isset.operationState = this.__isset.operationState; - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp544.SqlState = this.SqlState; } tmp544.__isset.sqlState = this.__isset.sqlState; - if(__isset.errorCode) + if (__isset.errorCode) { tmp544.ErrorCode = this.ErrorCode; } tmp544.__isset.errorCode = this.__isset.errorCode; - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp544.ErrorMessage = this.ErrorMessage; } tmp544.__isset.errorMessage = this.__isset.errorMessage; - if((TaskStatus != null) && __isset.taskStatus) + if ((TaskStatus != null) && __isset.taskStatus) { tmp544.TaskStatus = this.TaskStatus; } tmp544.__isset.taskStatus = this.__isset.taskStatus; - if(__isset.operationStarted) + if (__isset.operationStarted) { tmp544.OperationStarted = this.OperationStarted; } tmp544.__isset.operationStarted = this.__isset.operationStarted; - if(__isset.operationCompleted) + if (__isset.operationCompleted) { tmp544.OperationCompleted = this.OperationCompleted; } tmp544.__isset.operationCompleted = this.__isset.operationCompleted; - if(__isset.hasResultSet) + if (__isset.hasResultSet) { tmp544.HasResultSet = this.HasResultSet; } tmp544.__isset.hasResultSet = this.__isset.hasResultSet; - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + if ((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) { tmp544.ProgressUpdateResponse = (global::Apache.Hive.Service.Rpc.Thrift.TProgressUpdateResp)this.ProgressUpdateResponse.DeepCopy(); } tmp544.__isset.progressUpdateResponse = this.__isset.progressUpdateResponse; - if(__isset.numModifiedRows) + if (__isset.numModifiedRows) { tmp544.NumModifiedRows = this.NumModifiedRows; } tmp544.__isset.numModifiedRows = this.__isset.numModifiedRows; - if((DisplayMessage != null) && __isset.displayMessage) + if ((DisplayMessage != null) && __isset.displayMessage) { tmp544.DisplayMessage = this.DisplayMessage; } tmp544.__isset.displayMessage = this.__isset.displayMessage; - if((DiagnosticInfo != null) && __isset.diagnosticInfo) + if ((DiagnosticInfo != null) && __isset.diagnosticInfo) { tmp544.DiagnosticInfo = this.DiagnosticInfo; } tmp544.__isset.diagnosticInfo = this.__isset.diagnosticInfo; - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp544.ResponseValidation = this.ResponseValidation; } tmp544.__isset.responseValidation = this.__isset.responseValidation; - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp544.IdempotencyType = this.IdempotencyType; } tmp544.__isset.idempotencyType = this.__isset.idempotencyType; - if(__isset.statementTimeout) + if (__isset.statementTimeout) { tmp544.StatementTimeout = this.StatementTimeout; } tmp544.__isset.statementTimeout = this.__isset.statementTimeout; - if(__isset.statementTimeoutLevel) + if (__isset.statementTimeoutLevel) { tmp544.StatementTimeoutLevel = this.StatementTimeoutLevel; } @@ -607,7 +607,7 @@ public TGetOperationStatusResp DeepCopy() var tmp545 = new TStruct("TGetOperationStatusResp"); await oprot.WriteStructBeginAsync(tmp545, cancellationToken); var tmp546 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp546.Name = "status"; tmp546.Type = TType.Struct; @@ -616,7 +616,7 @@ public TGetOperationStatusResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.operationState) + if (__isset.operationState) { tmp546.Name = "operationState"; tmp546.Type = TType.I32; @@ -625,7 +625,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI32Async((int)OperationState, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp546.Name = "sqlState"; tmp546.Type = TType.String; @@ -634,7 +634,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(SqlState, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.errorCode) + if (__isset.errorCode) { tmp546.Name = "errorCode"; tmp546.Type = TType.I32; @@ -643,7 +643,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI32Async(ErrorCode, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp546.Name = "errorMessage"; tmp546.Type = TType.String; @@ -652,7 +652,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(ErrorMessage, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TaskStatus != null) && __isset.taskStatus) + if ((TaskStatus != null) && __isset.taskStatus) { tmp546.Name = "taskStatus"; tmp546.Type = TType.String; @@ -661,7 +661,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(TaskStatus, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.operationStarted) + if (__isset.operationStarted) { tmp546.Name = "operationStarted"; tmp546.Type = TType.I64; @@ -670,7 +670,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI64Async(OperationStarted, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.operationCompleted) + if (__isset.operationCompleted) { tmp546.Name = "operationCompleted"; tmp546.Type = TType.I64; @@ -679,7 +679,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI64Async(OperationCompleted, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.hasResultSet) + if (__isset.hasResultSet) { tmp546.Name = "hasResultSet"; tmp546.Type = TType.Bool; @@ -688,7 +688,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteBoolAsync(HasResultSet, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + if ((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) { tmp546.Name = "progressUpdateResponse"; tmp546.Type = TType.Struct; @@ -697,7 +697,7 @@ public TGetOperationStatusResp DeepCopy() await ProgressUpdateResponse.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.numModifiedRows) + if (__isset.numModifiedRows) { tmp546.Name = "numModifiedRows"; tmp546.Type = TType.I64; @@ -706,7 +706,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI64Async(NumModifiedRows, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DisplayMessage != null) && __isset.displayMessage) + if ((DisplayMessage != null) && __isset.displayMessage) { tmp546.Name = "displayMessage"; tmp546.Type = TType.String; @@ -715,7 +715,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(DisplayMessage, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) + if ((DiagnosticInfo != null) && __isset.diagnosticInfo) { tmp546.Name = "diagnosticInfo"; tmp546.Type = TType.String; @@ -724,7 +724,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(DiagnosticInfo, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp546.Name = "responseValidation"; tmp546.Type = TType.String; @@ -733,7 +733,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteStringAsync(ResponseValidation, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp546.Name = "idempotencyType"; tmp546.Type = TType.I32; @@ -742,7 +742,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI32Async(IdempotencyType, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.statementTimeout) + if (__isset.statementTimeout) { tmp546.Name = "statementTimeout"; tmp546.Type = TType.I64; @@ -751,7 +751,7 @@ public TGetOperationStatusResp DeepCopy() await oprot.WriteI64Async(StatementTimeout, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.statementTimeoutLevel) + if (__isset.statementTimeoutLevel) { tmp546.Name = "statementTimeoutLevel"; tmp546.Type = TType.I32; @@ -795,71 +795,71 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if(__isset.operationState) + if (__isset.operationState) { hashcode = (hashcode * 397) + OperationState.GetHashCode(); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { hashcode = (hashcode * 397) + SqlState.GetHashCode(); } - if(__isset.errorCode) + if (__isset.errorCode) { hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); } - if((TaskStatus != null) && __isset.taskStatus) + if ((TaskStatus != null) && __isset.taskStatus) { hashcode = (hashcode * 397) + TaskStatus.GetHashCode(); } - if(__isset.operationStarted) + if (__isset.operationStarted) { hashcode = (hashcode * 397) + OperationStarted.GetHashCode(); } - if(__isset.operationCompleted) + if (__isset.operationCompleted) { hashcode = (hashcode * 397) + OperationCompleted.GetHashCode(); } - if(__isset.hasResultSet) + if (__isset.hasResultSet) { hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + if ((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) { hashcode = (hashcode * 397) + ProgressUpdateResponse.GetHashCode(); } - if(__isset.numModifiedRows) + if (__isset.numModifiedRows) { hashcode = (hashcode * 397) + NumModifiedRows.GetHashCode(); } - if((DisplayMessage != null) && __isset.displayMessage) + if ((DisplayMessage != null) && __isset.displayMessage) { hashcode = (hashcode * 397) + DisplayMessage.GetHashCode(); } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) + if ((DiagnosticInfo != null) && __isset.diagnosticInfo) { hashcode = (hashcode * 397) + DiagnosticInfo.GetHashCode(); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { hashcode = (hashcode * 397) + ResponseValidation.GetHashCode(); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { hashcode = (hashcode * 397) + IdempotencyType.GetHashCode(); } - if(__isset.statementTimeout) + if (__isset.statementTimeout) { hashcode = (hashcode * 397) + StatementTimeout.GetHashCode(); } - if(__isset.statementTimeoutLevel) + if (__isset.statementTimeoutLevel) { hashcode = (hashcode * 397) + StatementTimeoutLevel.GetHashCode(); } @@ -870,87 +870,87 @@ public override int GetHashCode() { public override string ToString() { var tmp547 = new StringBuilder("TGetOperationStatusResp("); - if((Status != null)) + if ((Status != null)) { tmp547.Append(", Status: "); Status.ToString(tmp547); } - if(__isset.operationState) + if (__isset.operationState) { tmp547.Append(", OperationState: "); OperationState.ToString(tmp547); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp547.Append(", SqlState: "); SqlState.ToString(tmp547); } - if(__isset.errorCode) + if (__isset.errorCode) { tmp547.Append(", ErrorCode: "); ErrorCode.ToString(tmp547); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp547.Append(", ErrorMessage: "); ErrorMessage.ToString(tmp547); } - if((TaskStatus != null) && __isset.taskStatus) + if ((TaskStatus != null) && __isset.taskStatus) { tmp547.Append(", TaskStatus: "); TaskStatus.ToString(tmp547); } - if(__isset.operationStarted) + if (__isset.operationStarted) { tmp547.Append(", OperationStarted: "); OperationStarted.ToString(tmp547); } - if(__isset.operationCompleted) + if (__isset.operationCompleted) { tmp547.Append(", OperationCompleted: "); OperationCompleted.ToString(tmp547); } - if(__isset.hasResultSet) + if (__isset.hasResultSet) { tmp547.Append(", HasResultSet: "); HasResultSet.ToString(tmp547); } - if((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) + if ((ProgressUpdateResponse != null) && __isset.progressUpdateResponse) { tmp547.Append(", ProgressUpdateResponse: "); ProgressUpdateResponse.ToString(tmp547); } - if(__isset.numModifiedRows) + if (__isset.numModifiedRows) { tmp547.Append(", NumModifiedRows: "); NumModifiedRows.ToString(tmp547); } - if((DisplayMessage != null) && __isset.displayMessage) + if ((DisplayMessage != null) && __isset.displayMessage) { tmp547.Append(", DisplayMessage: "); DisplayMessage.ToString(tmp547); } - if((DiagnosticInfo != null) && __isset.diagnosticInfo) + if ((DiagnosticInfo != null) && __isset.diagnosticInfo) { tmp547.Append(", DiagnosticInfo: "); DiagnosticInfo.ToString(tmp547); } - if((ResponseValidation != null) && __isset.responseValidation) + if ((ResponseValidation != null) && __isset.responseValidation) { tmp547.Append(", ResponseValidation: "); ResponseValidation.ToString(tmp547); } - if(__isset.idempotencyType) + if (__isset.idempotencyType) { tmp547.Append(", IdempotencyType: "); IdempotencyType.ToString(tmp547); } - if(__isset.statementTimeout) + if (__isset.statementTimeout) { tmp547.Append(", StatementTimeout: "); StatementTimeout.ToString(tmp547); } - if(__isset.statementTimeoutLevel) + if (__isset.statementTimeoutLevel) { tmp547.Append(", StatementTimeoutLevel: "); StatementTimeoutLevel.ToString(tmp547); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs index 12da95c69a..d593fcde37 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysReq.cs @@ -162,41 +162,41 @@ public TGetPrimaryKeysReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle public TGetPrimaryKeysReq DeepCopy() { var tmp519 = new TGetPrimaryKeysReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp519.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp519.CatalogName = this.CatalogName; } tmp519.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp519.SchemaName = this.SchemaName; } tmp519.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp519.TableName = this.TableName; } tmp519.__isset.tableName = this.__isset.tableName; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp519.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp519.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp519.RunAsync = this.RunAsync; } tmp519.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp519.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp519.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp519.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -335,7 +335,7 @@ public TGetPrimaryKeysReq DeepCopy() var tmp520 = new TStruct("TGetPrimaryKeysReq"); await oprot.WriteStructBeginAsync(tmp520, cancellationToken); var tmp521 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp521.Name = "sessionHandle"; tmp521.Type = TType.Struct; @@ -344,7 +344,7 @@ public TGetPrimaryKeysReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp521.Name = "catalogName"; tmp521.Type = TType.String; @@ -353,7 +353,7 @@ public TGetPrimaryKeysReq DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp521.Name = "schemaName"; tmp521.Type = TType.String; @@ -362,7 +362,7 @@ public TGetPrimaryKeysReq DeepCopy() await oprot.WriteStringAsync(SchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp521.Name = "tableName"; tmp521.Type = TType.String; @@ -371,7 +371,7 @@ public TGetPrimaryKeysReq DeepCopy() await oprot.WriteStringAsync(TableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp521.Name = "getDirectResults"; tmp521.Type = TType.Struct; @@ -380,7 +380,7 @@ public TGetPrimaryKeysReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp521.Name = "runAsync"; tmp521.Type = TType.Bool; @@ -389,7 +389,7 @@ public TGetPrimaryKeysReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp521.Name = "operationId"; tmp521.Type = TType.Struct; @@ -398,7 +398,7 @@ public TGetPrimaryKeysReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp521.Name = "sessionConf"; tmp521.Type = TType.Struct; @@ -433,35 +433,35 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { hashcode = (hashcode * 397) + TableName.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -472,42 +472,42 @@ public override int GetHashCode() { public override string ToString() { var tmp522 = new StringBuilder("TGetPrimaryKeysReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp522.Append(", SessionHandle: "); SessionHandle.ToString(tmp522); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp522.Append(", CatalogName: "); CatalogName.ToString(tmp522); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp522.Append(", SchemaName: "); SchemaName.ToString(tmp522); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp522.Append(", TableName: "); TableName.ToString(tmp522); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp522.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp522); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp522.Append(", RunAsync: "); RunAsync.ToString(tmp522); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp522.Append(", OperationId: "); OperationId.ToString(tmp522); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp522.Append(", SessionConf: "); SessionConf.ToString(tmp522); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs index 4496a53eb8..05bbf43bf4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetPrimaryKeysResp.cs @@ -87,16 +87,16 @@ public TGetPrimaryKeysResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status public TGetPrimaryKeysResp DeepCopy() { var tmp524 = new TGetPrimaryKeysResp(); - if((Status != null)) + if ((Status != null)) { tmp524.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp524.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp524.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp524.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetPrimaryKeysResp DeepCopy() var tmp525 = new TStruct("TGetPrimaryKeysResp"); await oprot.WriteStructBeginAsync(tmp525, cancellationToken); var tmp526 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp526.Name = "status"; tmp526.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetPrimaryKeysResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp526.Name = "operationHandle"; tmp526.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetPrimaryKeysResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp526.Name = "directResults"; tmp526.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp527 = new StringBuilder("TGetPrimaryKeysResp("); - if((Status != null)) + if ((Status != null)) { tmp527.Append(", Status: "); Status.ToString(tmp527); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp527.Append(", OperationHandle: "); OperationHandle.ToString(tmp527); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp527.Append(", DirectResults: "); DirectResults.ToString(tmp527); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs index 060dd12a55..fafd01c4c9 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdReq.cs @@ -51,7 +51,7 @@ public TGetQueryIdReq(global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle op public TGetQueryIdReq DeepCopy() { var tmp645 = new TGetQueryIdReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp645.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } @@ -116,7 +116,7 @@ public TGetQueryIdReq DeepCopy() var tmp646 = new TStruct("TGetQueryIdReq"); await oprot.WriteStructBeginAsync(tmp646, cancellationToken); var tmp647 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp647.Name = "operationHandle"; tmp647.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp648 = new StringBuilder("TGetQueryIdReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp648.Append(", OperationHandle: "); OperationHandle.ToString(tmp648); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs index 26a6ffc8a4..07ffce5b2b 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetQueryIdResp.cs @@ -51,7 +51,7 @@ public TGetQueryIdResp(string queryId) : this() public TGetQueryIdResp DeepCopy() { var tmp650 = new TGetQueryIdResp(); - if((QueryId != null)) + if ((QueryId != null)) { tmp650.QueryId = this.QueryId; } @@ -115,7 +115,7 @@ public TGetQueryIdResp DeepCopy() var tmp651 = new TStruct("TGetQueryIdResp"); await oprot.WriteStructBeginAsync(tmp651, cancellationToken); var tmp652 = new TField(); - if((QueryId != null)) + if ((QueryId != null)) { tmp652.Name = "queryId"; tmp652.Type = TType.String; @@ -143,7 +143,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((QueryId != null)) + if ((QueryId != null)) { hashcode = (hashcode * 397) + QueryId.GetHashCode(); } @@ -154,7 +154,7 @@ public override int GetHashCode() { public override string ToString() { var tmp653 = new StringBuilder("TGetQueryIdResp("); - if((QueryId != null)) + if ((QueryId != null)) { tmp653.Append(", QueryId: "); QueryId.ToString(tmp653); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs index a282e6c36e..48a336022a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataReq.cs @@ -72,11 +72,11 @@ public TGetResultSetMetadataReq(global::Apache.Hive.Service.Rpc.Thrift.TOperatio public TGetResultSetMetadataReq DeepCopy() { var tmp569 = new TGetResultSetMetadataReq(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp569.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } - if(__isset.includeCloudResultFiles) + if (__isset.includeCloudResultFiles) { tmp569.IncludeCloudResultFiles = this.IncludeCloudResultFiles; } @@ -152,7 +152,7 @@ public TGetResultSetMetadataReq DeepCopy() var tmp570 = new TStruct("TGetResultSetMetadataReq"); await oprot.WriteStructBeginAsync(tmp570, cancellationToken); var tmp571 = new TField(); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp571.Name = "operationHandle"; tmp571.Type = TType.Struct; @@ -161,7 +161,7 @@ public TGetResultSetMetadataReq DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.includeCloudResultFiles) + if (__isset.includeCloudResultFiles) { tmp571.Name = "includeCloudResultFiles"; tmp571.Type = TType.Bool; @@ -190,11 +190,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if(__isset.includeCloudResultFiles) + if (__isset.includeCloudResultFiles) { hashcode = (hashcode * 397) + IncludeCloudResultFiles.GetHashCode(); } @@ -205,12 +205,12 @@ public override int GetHashCode() { public override string ToString() { var tmp572 = new StringBuilder("TGetResultSetMetadataReq("); - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp572.Append(", OperationHandle: "); OperationHandle.ToString(tmp572); } - if(__isset.includeCloudResultFiles) + if (__isset.includeCloudResultFiles) { tmp572.Append(", IncludeCloudResultFiles: "); IncludeCloudResultFiles.ToString(tmp572); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs index 77713bc107..7c9bb807fa 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetResultSetMetadataResp.cs @@ -237,66 +237,66 @@ public TGetResultSetMetadataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus public TGetResultSetMetadataResp DeepCopy() { var tmp574 = new TGetResultSetMetadataResp(); - if((Status != null)) + if ((Status != null)) { tmp574.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((Schema != null) && __isset.schema) + if ((Schema != null) && __isset.schema) { tmp574.Schema = (global::Apache.Hive.Service.Rpc.Thrift.TTableSchema)this.Schema.DeepCopy(); } tmp574.__isset.schema = this.__isset.schema; - if(__isset.resultFormat) + if (__isset.resultFormat) { tmp574.ResultFormat = this.ResultFormat; } tmp574.__isset.resultFormat = this.__isset.resultFormat; - if(__isset.lz4Compressed) + if (__isset.lz4Compressed) { tmp574.Lz4Compressed = this.Lz4Compressed; } tmp574.__isset.lz4Compressed = this.__isset.lz4Compressed; - if((ArrowSchema != null) && __isset.arrowSchema) + if ((ArrowSchema != null) && __isset.arrowSchema) { tmp574.ArrowSchema = this.ArrowSchema; } tmp574.__isset.arrowSchema = this.__isset.arrowSchema; - if(__isset.cacheLookupResult) + if (__isset.cacheLookupResult) { tmp574.CacheLookupResult = this.CacheLookupResult; } tmp574.__isset.cacheLookupResult = this.__isset.cacheLookupResult; - if(__isset.uncompressedBytes) + if (__isset.uncompressedBytes) { tmp574.UncompressedBytes = this.UncompressedBytes; } tmp574.__isset.uncompressedBytes = this.__isset.uncompressedBytes; - if(__isset.compressedBytes) + if (__isset.compressedBytes) { tmp574.CompressedBytes = this.CompressedBytes; } tmp574.__isset.compressedBytes = this.__isset.compressedBytes; - if(__isset.isStagingOperation) + if (__isset.isStagingOperation) { tmp574.IsStagingOperation = this.IsStagingOperation; } tmp574.__isset.isStagingOperation = this.__isset.isStagingOperation; - if(__isset.reasonForNoCloudFetch) + if (__isset.reasonForNoCloudFetch) { tmp574.ReasonForNoCloudFetch = this.ReasonForNoCloudFetch; } tmp574.__isset.reasonForNoCloudFetch = this.__isset.reasonForNoCloudFetch; - if((ResultFiles != null) && __isset.resultFiles) + if ((ResultFiles != null) && __isset.resultFiles) { tmp574.ResultFiles = this.ResultFiles.DeepCopy(); } tmp574.__isset.resultFiles = this.__isset.resultFiles; - if((ManifestFile != null) && __isset.manifestFile) + if ((ManifestFile != null) && __isset.manifestFile) { tmp574.ManifestFile = this.ManifestFile; } tmp574.__isset.manifestFile = this.__isset.manifestFile; - if((ManifestFileFormat != null) && __isset.manifestFileFormat) + if ((ManifestFileFormat != null) && __isset.manifestFileFormat) { tmp574.ManifestFileFormat = this.ManifestFileFormat; } @@ -494,7 +494,7 @@ public TGetResultSetMetadataResp DeepCopy() var tmp578 = new TStruct("TGetResultSetMetadataResp"); await oprot.WriteStructBeginAsync(tmp578, cancellationToken); var tmp579 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp579.Name = "status"; tmp579.Type = TType.Struct; @@ -503,7 +503,7 @@ public TGetResultSetMetadataResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Schema != null) && __isset.schema) + if ((Schema != null) && __isset.schema) { tmp579.Name = "schema"; tmp579.Type = TType.Struct; @@ -512,7 +512,7 @@ public TGetResultSetMetadataResp DeepCopy() await Schema.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.resultFormat) + if (__isset.resultFormat) { tmp579.Name = "resultFormat"; tmp579.Type = TType.I32; @@ -521,7 +521,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteI32Async(ResultFormat, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.lz4Compressed) + if (__isset.lz4Compressed) { tmp579.Name = "lz4Compressed"; tmp579.Type = TType.Bool; @@ -530,7 +530,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteBoolAsync(Lz4Compressed, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ArrowSchema != null) && __isset.arrowSchema) + if ((ArrowSchema != null) && __isset.arrowSchema) { tmp579.Name = "arrowSchema"; tmp579.Type = TType.String; @@ -539,7 +539,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteStringAsync(ArrowSchema, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.cacheLookupResult) + if (__isset.cacheLookupResult) { tmp579.Name = "cacheLookupResult"; tmp579.Type = TType.I32; @@ -548,7 +548,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteI32Async(CacheLookupResult, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.uncompressedBytes) + if (__isset.uncompressedBytes) { tmp579.Name = "uncompressedBytes"; tmp579.Type = TType.I64; @@ -557,7 +557,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteI64Async(UncompressedBytes, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.compressedBytes) + if (__isset.compressedBytes) { tmp579.Name = "compressedBytes"; tmp579.Type = TType.I64; @@ -566,7 +566,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteI64Async(CompressedBytes, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.isStagingOperation) + if (__isset.isStagingOperation) { tmp579.Name = "isStagingOperation"; tmp579.Type = TType.Bool; @@ -575,7 +575,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteBoolAsync(IsStagingOperation, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.reasonForNoCloudFetch) + if (__isset.reasonForNoCloudFetch) { tmp579.Name = "reasonForNoCloudFetch"; tmp579.Type = TType.I32; @@ -584,7 +584,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteI32Async(ReasonForNoCloudFetch, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResultFiles != null) && __isset.resultFiles) + if ((ResultFiles != null) && __isset.resultFiles) { tmp579.Name = "resultFiles"; tmp579.Type = TType.List; @@ -598,7 +598,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ManifestFile != null) && __isset.manifestFile) + if ((ManifestFile != null) && __isset.manifestFile) { tmp579.Name = "manifestFile"; tmp579.Type = TType.String; @@ -607,7 +607,7 @@ public TGetResultSetMetadataResp DeepCopy() await oprot.WriteStringAsync(ManifestFile, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) + if ((ManifestFileFormat != null) && __isset.manifestFileFormat) { tmp579.Name = "manifestFileFormat"; tmp579.Type = TType.String; @@ -647,55 +647,55 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((Schema != null) && __isset.schema) + if ((Schema != null) && __isset.schema) { hashcode = (hashcode * 397) + Schema.GetHashCode(); } - if(__isset.resultFormat) + if (__isset.resultFormat) { hashcode = (hashcode * 397) + ResultFormat.GetHashCode(); } - if(__isset.lz4Compressed) + if (__isset.lz4Compressed) { hashcode = (hashcode * 397) + Lz4Compressed.GetHashCode(); } - if((ArrowSchema != null) && __isset.arrowSchema) + if ((ArrowSchema != null) && __isset.arrowSchema) { hashcode = (hashcode * 397) + ArrowSchema.GetHashCode(); } - if(__isset.cacheLookupResult) + if (__isset.cacheLookupResult) { hashcode = (hashcode * 397) + CacheLookupResult.GetHashCode(); } - if(__isset.uncompressedBytes) + if (__isset.uncompressedBytes) { hashcode = (hashcode * 397) + UncompressedBytes.GetHashCode(); } - if(__isset.compressedBytes) + if (__isset.compressedBytes) { hashcode = (hashcode * 397) + CompressedBytes.GetHashCode(); } - if(__isset.isStagingOperation) + if (__isset.isStagingOperation) { hashcode = (hashcode * 397) + IsStagingOperation.GetHashCode(); } - if(__isset.reasonForNoCloudFetch) + if (__isset.reasonForNoCloudFetch) { hashcode = (hashcode * 397) + ReasonForNoCloudFetch.GetHashCode(); } - if((ResultFiles != null) && __isset.resultFiles) + if ((ResultFiles != null) && __isset.resultFiles) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultFiles); } - if((ManifestFile != null) && __isset.manifestFile) + if ((ManifestFile != null) && __isset.manifestFile) { hashcode = (hashcode * 397) + ManifestFile.GetHashCode(); } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) + if ((ManifestFileFormat != null) && __isset.manifestFileFormat) { hashcode = (hashcode * 397) + ManifestFileFormat.GetHashCode(); } @@ -706,67 +706,67 @@ public override int GetHashCode() { public override string ToString() { var tmp581 = new StringBuilder("TGetResultSetMetadataResp("); - if((Status != null)) + if ((Status != null)) { tmp581.Append(", Status: "); Status.ToString(tmp581); } - if((Schema != null) && __isset.schema) + if ((Schema != null) && __isset.schema) { tmp581.Append(", Schema: "); Schema.ToString(tmp581); } - if(__isset.resultFormat) + if (__isset.resultFormat) { tmp581.Append(", ResultFormat: "); ResultFormat.ToString(tmp581); } - if(__isset.lz4Compressed) + if (__isset.lz4Compressed) { tmp581.Append(", Lz4Compressed: "); Lz4Compressed.ToString(tmp581); } - if((ArrowSchema != null) && __isset.arrowSchema) + if ((ArrowSchema != null) && __isset.arrowSchema) { tmp581.Append(", ArrowSchema: "); ArrowSchema.ToString(tmp581); } - if(__isset.cacheLookupResult) + if (__isset.cacheLookupResult) { tmp581.Append(", CacheLookupResult: "); CacheLookupResult.ToString(tmp581); } - if(__isset.uncompressedBytes) + if (__isset.uncompressedBytes) { tmp581.Append(", UncompressedBytes: "); UncompressedBytes.ToString(tmp581); } - if(__isset.compressedBytes) + if (__isset.compressedBytes) { tmp581.Append(", CompressedBytes: "); CompressedBytes.ToString(tmp581); } - if(__isset.isStagingOperation) + if (__isset.isStagingOperation) { tmp581.Append(", IsStagingOperation: "); IsStagingOperation.ToString(tmp581); } - if(__isset.reasonForNoCloudFetch) + if (__isset.reasonForNoCloudFetch) { tmp581.Append(", ReasonForNoCloudFetch: "); ReasonForNoCloudFetch.ToString(tmp581); } - if((ResultFiles != null) && __isset.resultFiles) + if ((ResultFiles != null) && __isset.resultFiles) { tmp581.Append(", ResultFiles: "); ResultFiles.ToString(tmp581); } - if((ManifestFile != null) && __isset.manifestFile) + if ((ManifestFile != null) && __isset.manifestFile) { tmp581.Append(", ManifestFile: "); ManifestFile.ToString(tmp581); } - if((ManifestFileFormat != null) && __isset.manifestFileFormat) + if ((ManifestFileFormat != null) && __isset.manifestFileFormat) { tmp581.Append(", ManifestFileFormat: "); ManifestFileFormat.ToString(tmp581); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs index e40ca8a53d..e82239d3db 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasReq.cs @@ -147,36 +147,36 @@ public TGetSchemasReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sess public TGetSchemasReq DeepCopy() { var tmp465 = new TGetSchemasReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp465.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp465.CatalogName = this.CatalogName; } tmp465.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp465.SchemaName = this.SchemaName; } tmp465.__isset.schemaName = this.__isset.schemaName; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp465.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp465.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp465.RunAsync = this.RunAsync; } tmp465.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp465.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp465.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp465.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -305,7 +305,7 @@ public TGetSchemasReq DeepCopy() var tmp466 = new TStruct("TGetSchemasReq"); await oprot.WriteStructBeginAsync(tmp466, cancellationToken); var tmp467 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp467.Name = "sessionHandle"; tmp467.Type = TType.Struct; @@ -314,7 +314,7 @@ public TGetSchemasReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp467.Name = "catalogName"; tmp467.Type = TType.String; @@ -323,7 +323,7 @@ public TGetSchemasReq DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp467.Name = "schemaName"; tmp467.Type = TType.String; @@ -332,7 +332,7 @@ public TGetSchemasReq DeepCopy() await oprot.WriteStringAsync(SchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp467.Name = "getDirectResults"; tmp467.Type = TType.Struct; @@ -341,7 +341,7 @@ public TGetSchemasReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp467.Name = "runAsync"; tmp467.Type = TType.Bool; @@ -350,7 +350,7 @@ public TGetSchemasReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp467.Name = "operationId"; tmp467.Type = TType.Struct; @@ -359,7 +359,7 @@ public TGetSchemasReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp467.Name = "sessionConf"; tmp467.Type = TType.Struct; @@ -393,31 +393,31 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -428,37 +428,37 @@ public override int GetHashCode() { public override string ToString() { var tmp468 = new StringBuilder("TGetSchemasReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp468.Append(", SessionHandle: "); SessionHandle.ToString(tmp468); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp468.Append(", CatalogName: "); CatalogName.ToString(tmp468); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp468.Append(", SchemaName: "); SchemaName.ToString(tmp468); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp468.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp468); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp468.Append(", RunAsync: "); RunAsync.ToString(tmp468); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp468.Append(", OperationId: "); OperationId.ToString(tmp468); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp468.Append(", SessionConf: "); SessionConf.ToString(tmp468); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs index ad04ba44ca..02fd1eb234 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetSchemasResp.cs @@ -87,16 +87,16 @@ public TGetSchemasResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : public TGetSchemasResp DeepCopy() { var tmp470 = new TGetSchemasResp(); - if((Status != null)) + if ((Status != null)) { tmp470.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp470.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp470.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp470.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetSchemasResp DeepCopy() var tmp471 = new TStruct("TGetSchemasResp"); await oprot.WriteStructBeginAsync(tmp471, cancellationToken); var tmp472 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp472.Name = "status"; tmp472.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetSchemasResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp472.Name = "operationHandle"; tmp472.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetSchemasResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp472.Name = "directResults"; tmp472.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp473 = new StringBuilder("TGetSchemasResp("); - if((Status != null)) + if ((Status != null)) { tmp473.Append(", Status: "); Status.ToString(tmp473); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp473.Append(", OperationHandle: "); OperationHandle.ToString(tmp473); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp473.Append(", DirectResults: "); DirectResults.ToString(tmp473); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs index 7f62194bdc..48706b7638 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesReq.cs @@ -117,26 +117,26 @@ public TGetTableTypesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle s public TGetTableTypesReq DeepCopy() { var tmp489 = new TGetTableTypesReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp489.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp489.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp489.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp489.RunAsync = this.RunAsync; } tmp489.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp489.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp489.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp489.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -245,7 +245,7 @@ public TGetTableTypesReq DeepCopy() var tmp490 = new TStruct("TGetTableTypesReq"); await oprot.WriteStructBeginAsync(tmp490, cancellationToken); var tmp491 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp491.Name = "sessionHandle"; tmp491.Type = TType.Struct; @@ -254,7 +254,7 @@ public TGetTableTypesReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp491.Name = "getDirectResults"; tmp491.Type = TType.Struct; @@ -263,7 +263,7 @@ public TGetTableTypesReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp491.Name = "runAsync"; tmp491.Type = TType.Bool; @@ -272,7 +272,7 @@ public TGetTableTypesReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp491.Name = "operationId"; tmp491.Type = TType.Struct; @@ -281,7 +281,7 @@ public TGetTableTypesReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp491.Name = "sessionConf"; tmp491.Type = TType.Struct; @@ -313,23 +313,23 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -340,27 +340,27 @@ public override int GetHashCode() { public override string ToString() { var tmp492 = new StringBuilder("TGetTableTypesReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp492.Append(", SessionHandle: "); SessionHandle.ToString(tmp492); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp492.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp492); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp492.Append(", RunAsync: "); RunAsync.ToString(tmp492); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp492.Append(", OperationId: "); OperationId.ToString(tmp492); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp492.Append(", SessionConf: "); SessionConf.ToString(tmp492); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs index bbba42719d..5fcb4dcd35 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTableTypesResp.cs @@ -87,16 +87,16 @@ public TGetTableTypesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) public TGetTableTypesResp DeepCopy() { var tmp494 = new TGetTableTypesResp(); - if((Status != null)) + if ((Status != null)) { tmp494.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp494.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp494.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp494.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetTableTypesResp DeepCopy() var tmp495 = new TStruct("TGetTableTypesResp"); await oprot.WriteStructBeginAsync(tmp495, cancellationToken); var tmp496 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp496.Name = "status"; tmp496.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetTableTypesResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp496.Name = "operationHandle"; tmp496.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetTableTypesResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp496.Name = "directResults"; tmp496.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp497 = new StringBuilder("TGetTableTypesResp("); - if((Status != null)) + if ((Status != null)) { tmp497.Append(", Status: "); Status.ToString(tmp497); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp497.Append(", OperationHandle: "); OperationHandle.ToString(tmp497); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp497.Append(", DirectResults: "); DirectResults.ToString(tmp497); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs index 9db95f6045..80904aeed3 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesReq.cs @@ -177,46 +177,46 @@ public TGetTablesReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sessi public TGetTablesReq DeepCopy() { var tmp475 = new TGetTablesReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp475.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp475.CatalogName = this.CatalogName; } tmp475.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp475.SchemaName = this.SchemaName; } tmp475.__isset.schemaName = this.__isset.schemaName; - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp475.TableName = this.TableName; } tmp475.__isset.tableName = this.__isset.tableName; - if((TableTypes != null) && __isset.tableTypes) + if ((TableTypes != null) && __isset.tableTypes) { tmp475.TableTypes = this.TableTypes.DeepCopy(); } tmp475.__isset.tableTypes = this.__isset.tableTypes; - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp475.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp475.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp475.RunAsync = this.RunAsync; } tmp475.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp475.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp475.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp475.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -375,7 +375,7 @@ public TGetTablesReq DeepCopy() var tmp479 = new TStruct("TGetTablesReq"); await oprot.WriteStructBeginAsync(tmp479, cancellationToken); var tmp480 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp480.Name = "sessionHandle"; tmp480.Type = TType.Struct; @@ -384,7 +384,7 @@ public TGetTablesReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp480.Name = "catalogName"; tmp480.Type = TType.String; @@ -393,7 +393,7 @@ public TGetTablesReq DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp480.Name = "schemaName"; tmp480.Type = TType.String; @@ -402,7 +402,7 @@ public TGetTablesReq DeepCopy() await oprot.WriteStringAsync(SchemaName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp480.Name = "tableName"; tmp480.Type = TType.String; @@ -411,7 +411,7 @@ public TGetTablesReq DeepCopy() await oprot.WriteStringAsync(TableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableTypes != null) && __isset.tableTypes) + if ((TableTypes != null) && __isset.tableTypes) { tmp480.Name = "tableTypes"; tmp480.Type = TType.List; @@ -425,7 +425,7 @@ public TGetTablesReq DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp480.Name = "getDirectResults"; tmp480.Type = TType.Struct; @@ -434,7 +434,7 @@ public TGetTablesReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp480.Name = "runAsync"; tmp480.Type = TType.Bool; @@ -443,7 +443,7 @@ public TGetTablesReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp480.Name = "operationId"; tmp480.Type = TType.Struct; @@ -452,7 +452,7 @@ public TGetTablesReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp480.Name = "sessionConf"; tmp480.Type = TType.Struct; @@ -488,39 +488,39 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { hashcode = (hashcode * 397) + TableName.GetHashCode(); } - if((TableTypes != null) && __isset.tableTypes) + if ((TableTypes != null) && __isset.tableTypes) { hashcode = (hashcode * 397) + TCollections.GetHashCode(TableTypes); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -531,47 +531,47 @@ public override int GetHashCode() { public override string ToString() { var tmp482 = new StringBuilder("TGetTablesReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp482.Append(", SessionHandle: "); SessionHandle.ToString(tmp482); } - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp482.Append(", CatalogName: "); CatalogName.ToString(tmp482); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp482.Append(", SchemaName: "); SchemaName.ToString(tmp482); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp482.Append(", TableName: "); TableName.ToString(tmp482); } - if((TableTypes != null) && __isset.tableTypes) + if ((TableTypes != null) && __isset.tableTypes) { tmp482.Append(", TableTypes: "); TableTypes.ToString(tmp482); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp482.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp482); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp482.Append(", RunAsync: "); RunAsync.ToString(tmp482); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp482.Append(", OperationId: "); OperationId.ToString(tmp482); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp482.Append(", SessionConf: "); SessionConf.ToString(tmp482); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs index 96ebe70b80..a618f21ff2 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTablesResp.cs @@ -87,16 +87,16 @@ public TGetTablesResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : t public TGetTablesResp DeepCopy() { var tmp484 = new TGetTablesResp(); - if((Status != null)) + if ((Status != null)) { tmp484.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp484.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp484.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp484.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetTablesResp DeepCopy() var tmp485 = new TStruct("TGetTablesResp"); await oprot.WriteStructBeginAsync(tmp485, cancellationToken); var tmp486 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp486.Name = "status"; tmp486.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetTablesResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp486.Name = "operationHandle"; tmp486.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetTablesResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp486.Name = "directResults"; tmp486.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp487 = new StringBuilder("TGetTablesResp("); - if((Status != null)) + if ((Status != null)) { tmp487.Append(", Status: "); Status.ToString(tmp487); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp487.Append(", OperationHandle: "); OperationHandle.ToString(tmp487); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp487.Append(", DirectResults: "); DirectResults.ToString(tmp487); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs index 8bfdf058a1..53de96698f 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoReq.cs @@ -117,26 +117,26 @@ public TGetTypeInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle ses public TGetTypeInfoReq DeepCopy() { var tmp420 = new TGetTypeInfoReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp420.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp420.GetDirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkGetDirectResults)this.GetDirectResults.DeepCopy(); } tmp420.__isset.getDirectResults = this.__isset.getDirectResults; - if(__isset.runAsync) + if (__isset.runAsync) { tmp420.RunAsync = this.RunAsync; } tmp420.__isset.runAsync = this.__isset.runAsync; - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp420.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp420.__isset.operationId = this.__isset.operationId; - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp420.SessionConf = (global::Apache.Hive.Service.Rpc.Thrift.TDBSqlSessionConf)this.SessionConf.DeepCopy(); } @@ -245,7 +245,7 @@ public TGetTypeInfoReq DeepCopy() var tmp421 = new TStruct("TGetTypeInfoReq"); await oprot.WriteStructBeginAsync(tmp421, cancellationToken); var tmp422 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp422.Name = "sessionHandle"; tmp422.Type = TType.Struct; @@ -254,7 +254,7 @@ public TGetTypeInfoReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp422.Name = "getDirectResults"; tmp422.Type = TType.Struct; @@ -263,7 +263,7 @@ public TGetTypeInfoReq DeepCopy() await GetDirectResults.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp422.Name = "runAsync"; tmp422.Type = TType.Bool; @@ -272,7 +272,7 @@ public TGetTypeInfoReq DeepCopy() await oprot.WriteBoolAsync(RunAsync, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp422.Name = "operationId"; tmp422.Type = TType.Struct; @@ -281,7 +281,7 @@ public TGetTypeInfoReq DeepCopy() await OperationId.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp422.Name = "sessionConf"; tmp422.Type = TType.Struct; @@ -313,23 +313,23 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { hashcode = (hashcode * 397) + GetDirectResults.GetHashCode(); } - if(__isset.runAsync) + if (__isset.runAsync) { hashcode = (hashcode * 397) + RunAsync.GetHashCode(); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { hashcode = (hashcode * 397) + SessionConf.GetHashCode(); } @@ -340,27 +340,27 @@ public override int GetHashCode() { public override string ToString() { var tmp423 = new StringBuilder("TGetTypeInfoReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp423.Append(", SessionHandle: "); SessionHandle.ToString(tmp423); } - if((GetDirectResults != null) && __isset.getDirectResults) + if ((GetDirectResults != null) && __isset.getDirectResults) { tmp423.Append(", GetDirectResults: "); GetDirectResults.ToString(tmp423); } - if(__isset.runAsync) + if (__isset.runAsync) { tmp423.Append(", RunAsync: "); RunAsync.ToString(tmp423); } - if((OperationId != null) && __isset.operationId) + if ((OperationId != null) && __isset.operationId) { tmp423.Append(", OperationId: "); OperationId.ToString(tmp423); } - if((SessionConf != null) && __isset.sessionConf) + if ((SessionConf != null) && __isset.sessionConf) { tmp423.Append(", SessionConf: "); SessionConf.ToString(tmp423); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs index f614b34650..8db247925d 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TGetTypeInfoResp.cs @@ -87,16 +87,16 @@ public TGetTypeInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) : public TGetTypeInfoResp DeepCopy() { var tmp425 = new TGetTypeInfoResp(); - if((Status != null)) + if ((Status != null)) { tmp425.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp425.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } tmp425.__isset.operationHandle = this.__isset.operationHandle; - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp425.DirectResults = (global::Apache.Hive.Service.Rpc.Thrift.TSparkDirectResults)this.DirectResults.DeepCopy(); } @@ -184,7 +184,7 @@ public TGetTypeInfoResp DeepCopy() var tmp426 = new TStruct("TGetTypeInfoResp"); await oprot.WriteStructBeginAsync(tmp426, cancellationToken); var tmp427 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp427.Name = "status"; tmp427.Type = TType.Struct; @@ -193,7 +193,7 @@ public TGetTypeInfoResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp427.Name = "operationHandle"; tmp427.Type = TType.Struct; @@ -202,7 +202,7 @@ public TGetTypeInfoResp DeepCopy() await OperationHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp427.Name = "directResults"; tmp427.Type = TType.Struct; @@ -232,15 +232,15 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { hashcode = (hashcode * 397) + DirectResults.GetHashCode(); } @@ -251,17 +251,17 @@ public override int GetHashCode() { public override string ToString() { var tmp428 = new StringBuilder("TGetTypeInfoResp("); - if((Status != null)) + if ((Status != null)) { tmp428.Append(", Status: "); Status.ToString(tmp428); } - if((OperationHandle != null) && __isset.operationHandle) + if ((OperationHandle != null) && __isset.operationHandle) { tmp428.Append(", OperationHandle: "); OperationHandle.ToString(tmp428); } - if((DirectResults != null) && __isset.directResults) + if ((DirectResults != null) && __isset.directResults) { tmp428.Append(", DirectResults: "); DirectResults.ToString(tmp428); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs index 9a00231a75..5a84db6a90 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/THandleIdentifier.cs @@ -54,11 +54,11 @@ public THandleIdentifier(byte[] guid, byte[] secret) : this() public THandleIdentifier DeepCopy() { var tmp264 = new THandleIdentifier(); - if((Guid != null)) + if ((Guid != null)) { tmp264.Guid = this.Guid.ToArray(); } - if((Secret != null)) + if ((Secret != null)) { tmp264.Secret = this.Secret.ToArray(); } @@ -138,7 +138,7 @@ public THandleIdentifier DeepCopy() var tmp265 = new TStruct("THandleIdentifier"); await oprot.WriteStructBeginAsync(tmp265, cancellationToken); var tmp266 = new TField(); - if((Guid != null)) + if ((Guid != null)) { tmp266.Name = "guid"; tmp266.Type = TType.String; @@ -147,7 +147,7 @@ public THandleIdentifier DeepCopy() await oprot.WriteBinaryAsync(Guid, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Secret != null)) + if ((Secret != null)) { tmp266.Name = "secret"; tmp266.Type = TType.String; @@ -176,11 +176,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Guid != null)) + if ((Guid != null)) { hashcode = (hashcode * 397) + Guid.GetHashCode(); } - if((Secret != null)) + if ((Secret != null)) { hashcode = (hashcode * 397) + Secret.GetHashCode(); } @@ -191,12 +191,12 @@ public override int GetHashCode() { public override string ToString() { var tmp267 = new StringBuilder("THandleIdentifier("); - if((Guid != null)) + if ((Guid != null)) { tmp267.Append(", Guid: "); Guid.ToString(tmp267); } - if((Secret != null)) + if ((Secret != null)) { tmp267.Append(", Secret: "); Secret.ToString(tmp267); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs index b1b2fb8266..3608a5859a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs @@ -141,7 +141,7 @@ public TI16Column DeepCopy() var tmp154 = new TStruct("TI16Column"); await oprot.WriteStructBeginAsync(tmp154, cancellationToken); var tmp155 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp155.Name = "values"; tmp155.Type = TType.List; @@ -189,7 +189,7 @@ public override int GetHashCode() public override string ToString() { var tmp157 = new StringBuilder("TI16Column("); - if((Values != null)) + if ((Values != null)) { tmp157.Append(", Values: "); Values.ToString(tmp157); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs index b3b7589c80..690718d0e8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Value.cs @@ -65,7 +65,7 @@ public TI16Value() public TI16Value DeepCopy() { var tmp93 = new TI16Value(); - if(__isset.@value) + if (__isset.@value) { tmp93.Value = this.Value; } @@ -124,7 +124,7 @@ public TI16Value DeepCopy() var tmp94 = new TStruct("TI16Value"); await oprot.WriteStructBeginAsync(tmp94, cancellationToken); var tmp95 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp95.Name = "value"; tmp95.Type = TType.I16; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp96 = new StringBuilder("TI16Value("); int tmp97 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp97++) { tmp96.Append(", "); } + if (0 < tmp97++) { tmp96.Append(", "); } tmp96.Append("Value: "); Value.ToString(tmp96); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs index 6d8e164a38..04c080adbb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -140,7 +140,7 @@ public TI32Column DeepCopy() var tmp163 = new TStruct("TI32Column"); await oprot.WriteStructBeginAsync(tmp163, cancellationToken); var tmp164 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp164.Name = "values"; tmp164.Type = TType.List; @@ -188,7 +188,7 @@ public override int GetHashCode() public override string ToString() { var tmp166 = new StringBuilder("TI32Column("); - if((Values != null)) + if ((Values != null)) { tmp166.Append(", Values: "); Values.ToString(tmp166); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs index 1db14fb210..cce72ba3ac 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Value.cs @@ -65,7 +65,7 @@ public TI32Value() public TI32Value DeepCopy() { var tmp98 = new TI32Value(); - if(__isset.@value) + if (__isset.@value) { tmp98.Value = this.Value; } @@ -124,7 +124,7 @@ public TI32Value DeepCopy() var tmp99 = new TStruct("TI32Value"); await oprot.WriteStructBeginAsync(tmp99, cancellationToken); var tmp100 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp100.Name = "value"; tmp100.Type = TType.I32; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp101 = new StringBuilder("TI32Value("); int tmp102 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp102++) { tmp101.Append(", "); } + if (0 < tmp102++) { tmp101.Append(", "); } tmp101.Append("Value: "); Value.ToString(tmp101); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs index 317b9bd0ec..c31ba1bd69 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs @@ -140,7 +140,7 @@ public TI64Column DeepCopy() var tmp172 = new TStruct("TI64Column"); await oprot.WriteStructBeginAsync(tmp172, cancellationToken); var tmp173 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp173.Name = "values"; tmp173.Type = TType.List; @@ -188,7 +188,7 @@ public override int GetHashCode() public override string ToString() { var tmp175 = new StringBuilder("TI64Column("); - if((Values != null)) + if ((Values != null)) { tmp175.Append(", Values: "); Values.ToString(tmp175); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs index f260b158ca..9cfb282dcf 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Value.cs @@ -65,7 +65,7 @@ public TI64Value() public TI64Value DeepCopy() { var tmp103 = new TI64Value(); - if(__isset.@value) + if (__isset.@value) { tmp103.Value = this.Value; } @@ -124,7 +124,7 @@ public TI64Value DeepCopy() var tmp104 = new TStruct("TI64Value"); await oprot.WriteStructBeginAsync(tmp104, cancellationToken); var tmp105 = new TField(); - if(__isset.@value) + if (__isset.@value) { tmp105.Name = "value"; tmp105.Type = TType.I64; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.@value) + if (__isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp106 = new StringBuilder("TI64Value("); int tmp107 = 0; - if(__isset.@value) + if (__isset.@value) { - if(0 < tmp107++) { tmp106.Append(", "); } + if (0 < tmp107++) { tmp106.Append(", "); } tmp106.Append("Value: "); Value.ToString(tmp106); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs index 42d7897915..8ea87b2770 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TNamespace.cs @@ -80,12 +80,12 @@ public TNamespace() public TNamespace DeepCopy() { var tmp298 = new TNamespace(); - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp298.CatalogName = this.CatalogName; } tmp298.__isset.catalogName = this.__isset.catalogName; - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp298.SchemaName = this.SchemaName; } @@ -154,7 +154,7 @@ public TNamespace DeepCopy() var tmp299 = new TStruct("TNamespace"); await oprot.WriteStructBeginAsync(tmp299, cancellationToken); var tmp300 = new TField(); - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { tmp300.Name = "catalogName"; tmp300.Type = TType.String; @@ -163,7 +163,7 @@ public TNamespace DeepCopy() await oprot.WriteStringAsync(CatalogName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { tmp300.Name = "schemaName"; tmp300.Type = TType.String; @@ -192,11 +192,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { hashcode = (hashcode * 397) + CatalogName.GetHashCode(); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { hashcode = (hashcode * 397) + SchemaName.GetHashCode(); } @@ -208,15 +208,15 @@ public override string ToString() { var tmp301 = new StringBuilder("TNamespace("); int tmp302 = 0; - if((CatalogName != null) && __isset.catalogName) + if ((CatalogName != null) && __isset.catalogName) { - if(0 < tmp302++) { tmp301.Append(", "); } + if (0 < tmp302++) { tmp301.Append(", "); } tmp301.Append("CatalogName: "); CatalogName.ToString(tmp301); } - if((SchemaName != null) && __isset.schemaName) + if ((SchemaName != null) && __isset.schemaName) { - if(0 < tmp302++) { tmp301.Append(", "); } + if (0 < tmp302++) { tmp301.Append(", "); } tmp301.Append("SchemaName: "); SchemaName.ToString(tmp301); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs index 6201be76ad..4e4d50ea42 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionReq.cs @@ -198,47 +198,47 @@ public TOpenSessionReq DeepCopy() { var tmp279 = new TOpenSessionReq(); tmp279.Client_protocol = this.Client_protocol; - if((Username != null) && __isset.username) + if ((Username != null) && __isset.username) { tmp279.Username = this.Username; } tmp279.__isset.username = this.__isset.username; - if((Password != null) && __isset.password) + if ((Password != null) && __isset.password) { tmp279.Password = this.Password; } tmp279.__isset.password = this.__isset.password; - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp279.Configuration = this.Configuration.DeepCopy(); } tmp279.__isset.configuration = this.__isset.configuration; - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp279.GetInfos = this.GetInfos.DeepCopy(); } tmp279.__isset.getInfos = this.__isset.getInfos; - if(__isset.client_protocol_i64) + if (__isset.client_protocol_i64) { tmp279.Client_protocol_i64 = this.Client_protocol_i64; } tmp279.__isset.client_protocol_i64 = this.__isset.client_protocol_i64; - if((ConnectionProperties != null) && __isset.connectionProperties) + if ((ConnectionProperties != null) && __isset.connectionProperties) { tmp279.ConnectionProperties = this.ConnectionProperties.DeepCopy(); } tmp279.__isset.connectionProperties = this.__isset.connectionProperties; - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp279.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); } tmp279.__isset.initialNamespace = this.__isset.initialNamespace; - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp279.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; } tmp279.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; - if((SessionId != null) && __isset.sessionId) + if ((SessionId != null) && __isset.sessionId) { tmp279.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); } @@ -435,7 +435,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteFieldBeginAsync(tmp292, cancellationToken); await oprot.WriteI32Async((int)Client_protocol, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((Username != null) && __isset.username) + if ((Username != null) && __isset.username) { tmp292.Name = "username"; tmp292.Type = TType.String; @@ -444,7 +444,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteStringAsync(Username, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Password != null) && __isset.password) + if ((Password != null) && __isset.password) { tmp292.Name = "password"; tmp292.Type = TType.String; @@ -453,7 +453,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteStringAsync(Password, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp292.Name = "configuration"; tmp292.Type = TType.Map; @@ -468,7 +468,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp292.Name = "getInfos"; tmp292.Type = TType.List; @@ -482,7 +482,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.client_protocol_i64) + if (__isset.client_protocol_i64) { tmp292.Name = "client_protocol_i64"; tmp292.Type = TType.I64; @@ -491,7 +491,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteI64Async(Client_protocol_i64, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ConnectionProperties != null) && __isset.connectionProperties) + if ((ConnectionProperties != null) && __isset.connectionProperties) { tmp292.Name = "connectionProperties"; tmp292.Type = TType.Map; @@ -506,7 +506,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp292.Name = "initialNamespace"; tmp292.Type = TType.Struct; @@ -515,7 +515,7 @@ public TOpenSessionReq DeepCopy() await InitialNamespace.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp292.Name = "canUseMultipleCatalogs"; tmp292.Type = TType.Bool; @@ -524,7 +524,7 @@ public TOpenSessionReq DeepCopy() await oprot.WriteBoolAsync(CanUseMultipleCatalogs, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SessionId != null) && __isset.sessionId) + if ((SessionId != null) && __isset.sessionId) { tmp292.Name = "sessionId"; tmp292.Type = TType.Struct; @@ -562,39 +562,39 @@ public override int GetHashCode() { int hashcode = 157; unchecked { hashcode = (hashcode * 397) + Client_protocol.GetHashCode(); - if((Username != null) && __isset.username) + if ((Username != null) && __isset.username) { hashcode = (hashcode * 397) + Username.GetHashCode(); } - if((Password != null) && __isset.password) + if ((Password != null) && __isset.password) { hashcode = (hashcode * 397) + Password.GetHashCode(); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); } - if(__isset.client_protocol_i64) + if (__isset.client_protocol_i64) { hashcode = (hashcode * 397) + Client_protocol_i64.GetHashCode(); } - if((ConnectionProperties != null) && __isset.connectionProperties) + if ((ConnectionProperties != null) && __isset.connectionProperties) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ConnectionProperties); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); } - if((SessionId != null) && __isset.sessionId) + if ((SessionId != null) && __isset.sessionId) { hashcode = (hashcode * 397) + SessionId.GetHashCode(); } @@ -607,47 +607,47 @@ public override string ToString() var tmp296 = new StringBuilder("TOpenSessionReq("); tmp296.Append(", Client_protocol: "); Client_protocol.ToString(tmp296); - if((Username != null) && __isset.username) + if ((Username != null) && __isset.username) { tmp296.Append(", Username: "); Username.ToString(tmp296); } - if((Password != null) && __isset.password) + if ((Password != null) && __isset.password) { tmp296.Append(", Password: "); Password.ToString(tmp296); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp296.Append(", Configuration: "); Configuration.ToString(tmp296); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp296.Append(", GetInfos: "); GetInfos.ToString(tmp296); } - if(__isset.client_protocol_i64) + if (__isset.client_protocol_i64) { tmp296.Append(", Client_protocol_i64: "); Client_protocol_i64.ToString(tmp296); } - if((ConnectionProperties != null) && __isset.connectionProperties) + if ((ConnectionProperties != null) && __isset.connectionProperties) { tmp296.Append(", ConnectionProperties: "); ConnectionProperties.ToString(tmp296); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp296.Append(", InitialNamespace: "); InitialNamespace.ToString(tmp296); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp296.Append(", CanUseMultipleCatalogs: "); CanUseMultipleCatalogs.ToString(tmp296); } - if((SessionId != null) && __isset.sessionId) + if ((SessionId != null) && __isset.sessionId) { tmp296.Append(", SessionId: "); SessionId.ToString(tmp296); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs index e896a16c3c..a20d81dd29 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOpenSessionResp.cs @@ -140,32 +140,32 @@ public TOpenSessionResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, g public TOpenSessionResp DeepCopy() { var tmp303 = new TOpenSessionResp(); - if((Status != null)) + if ((Status != null)) { tmp303.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } tmp303.ServerProtocolVersion = this.ServerProtocolVersion; - if((SessionHandle != null) && __isset.sessionHandle) + if ((SessionHandle != null) && __isset.sessionHandle) { tmp303.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } tmp303.__isset.sessionHandle = this.__isset.sessionHandle; - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp303.Configuration = this.Configuration.DeepCopy(); } tmp303.__isset.configuration = this.__isset.configuration; - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp303.InitialNamespace = (global::Apache.Hive.Service.Rpc.Thrift.TNamespace)this.InitialNamespace.DeepCopy(); } tmp303.__isset.initialNamespace = this.__isset.initialNamespace; - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp303.CanUseMultipleCatalogs = this.CanUseMultipleCatalogs; } tmp303.__isset.canUseMultipleCatalogs = this.__isset.canUseMultipleCatalogs; - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp303.GetInfos = this.GetInfos.DeepCopy(); } @@ -321,7 +321,7 @@ public TOpenSessionResp DeepCopy() var tmp311 = new TStruct("TOpenSessionResp"); await oprot.WriteStructBeginAsync(tmp311, cancellationToken); var tmp312 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp312.Name = "status"; tmp312.Type = TType.Struct; @@ -336,7 +336,7 @@ public TOpenSessionResp DeepCopy() await oprot.WriteFieldBeginAsync(tmp312, cancellationToken); await oprot.WriteI32Async((int)ServerProtocolVersion, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((SessionHandle != null) && __isset.sessionHandle) + if ((SessionHandle != null) && __isset.sessionHandle) { tmp312.Name = "sessionHandle"; tmp312.Type = TType.Struct; @@ -345,7 +345,7 @@ public TOpenSessionResp DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp312.Name = "configuration"; tmp312.Type = TType.Map; @@ -360,7 +360,7 @@ public TOpenSessionResp DeepCopy() await oprot.WriteMapEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp312.Name = "getInfos"; tmp312.Type = TType.List; @@ -374,7 +374,7 @@ public TOpenSessionResp DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp312.Name = "initialNamespace"; tmp312.Type = TType.Struct; @@ -383,7 +383,7 @@ public TOpenSessionResp DeepCopy() await InitialNamespace.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp312.Name = "canUseMultipleCatalogs"; tmp312.Type = TType.Bool; @@ -417,28 +417,28 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } hashcode = (hashcode * 397) + ServerProtocolVersion.GetHashCode(); - if((SessionHandle != null) && __isset.sessionHandle) + if ((SessionHandle != null) && __isset.sessionHandle) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { hashcode = (hashcode * 397) + InitialNamespace.GetHashCode(); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { hashcode = (hashcode * 397) + CanUseMultipleCatalogs.GetHashCode(); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { hashcode = (hashcode * 397) + TCollections.GetHashCode(GetInfos); } @@ -449,34 +449,34 @@ public override int GetHashCode() { public override string ToString() { var tmp315 = new StringBuilder("TOpenSessionResp("); - if((Status != null)) + if ((Status != null)) { tmp315.Append(", Status: "); Status.ToString(tmp315); } tmp315.Append(", ServerProtocolVersion: "); ServerProtocolVersion.ToString(tmp315); - if((SessionHandle != null) && __isset.sessionHandle) + if ((SessionHandle != null) && __isset.sessionHandle) { tmp315.Append(", SessionHandle: "); SessionHandle.ToString(tmp315); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp315.Append(", Configuration: "); Configuration.ToString(tmp315); } - if((InitialNamespace != null) && __isset.initialNamespace) + if ((InitialNamespace != null) && __isset.initialNamespace) { tmp315.Append(", InitialNamespace: "); InitialNamespace.ToString(tmp315); } - if(__isset.canUseMultipleCatalogs) + if (__isset.canUseMultipleCatalogs) { tmp315.Append(", CanUseMultipleCatalogs: "); CanUseMultipleCatalogs.ToString(tmp315); } - if((GetInfos != null) && __isset.getInfos) + if ((GetInfos != null) && __isset.getInfos) { tmp315.Append(", GetInfos: "); GetInfos.ToString(tmp315); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs index 88c4303182..9dc7065e48 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TOperationHandle.cs @@ -82,13 +82,13 @@ public TOperationHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier public TOperationHandle DeepCopy() { var tmp274 = new TOperationHandle(); - if((OperationId != null)) + if ((OperationId != null)) { tmp274.OperationId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.OperationId.DeepCopy(); } tmp274.OperationType = this.OperationType; tmp274.HasResultSet = this.HasResultSet; - if(__isset.modifiedRowCount) + if (__isset.modifiedRowCount) { tmp274.ModifiedRowCount = this.ModifiedRowCount; } @@ -196,7 +196,7 @@ public TOperationHandle DeepCopy() var tmp275 = new TStruct("TOperationHandle"); await oprot.WriteStructBeginAsync(tmp275, cancellationToken); var tmp276 = new TField(); - if((OperationId != null)) + if ((OperationId != null)) { tmp276.Name = "operationId"; tmp276.Type = TType.Struct; @@ -217,7 +217,7 @@ public TOperationHandle DeepCopy() await oprot.WriteFieldBeginAsync(tmp276, cancellationToken); await oprot.WriteBoolAsync(HasResultSet, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.modifiedRowCount) + if (__isset.modifiedRowCount) { tmp276.Name = "modifiedRowCount"; tmp276.Type = TType.Double; @@ -248,13 +248,13 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationId != null)) + if ((OperationId != null)) { hashcode = (hashcode * 397) + OperationId.GetHashCode(); } hashcode = (hashcode * 397) + OperationType.GetHashCode(); hashcode = (hashcode * 397) + HasResultSet.GetHashCode(); - if(__isset.modifiedRowCount) + if (__isset.modifiedRowCount) { hashcode = (hashcode * 397) + ModifiedRowCount.GetHashCode(); } @@ -265,7 +265,7 @@ public override int GetHashCode() { public override string ToString() { var tmp277 = new StringBuilder("TOperationHandle("); - if((OperationId != null)) + if ((OperationId != null)) { tmp277.Append(", OperationId: "); OperationId.ToString(tmp277); @@ -274,7 +274,7 @@ public override string ToString() OperationType.ToString(tmp277); tmp277.Append(", HasResultSet: "); HasResultSet.ToString(tmp277); - if(__isset.modifiedRowCount) + if (__isset.modifiedRowCount) { tmp277.Append(", ModifiedRowCount: "); ModifiedRowCount.ToString(tmp277); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs index c18d19b275..89612011b7 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TPrimitiveTypeEntry.cs @@ -77,7 +77,7 @@ public TPrimitiveTypeEntry DeepCopy() { var tmp15 = new TPrimitiveTypeEntry(); tmp15.Type = this.Type; - if((TypeQualifiers != null) && __isset.typeQualifiers) + if ((TypeQualifiers != null) && __isset.typeQualifiers) { tmp15.TypeQualifiers = (global::Apache.Hive.Service.Rpc.Thrift.TTypeQualifiers)this.TypeQualifiers.DeepCopy(); } @@ -159,7 +159,7 @@ public TPrimitiveTypeEntry DeepCopy() await oprot.WriteFieldBeginAsync(tmp17, cancellationToken); await oprot.WriteI32Async((int)Type, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((TypeQualifiers != null) && __isset.typeQualifiers) + if ((TypeQualifiers != null) && __isset.typeQualifiers) { tmp17.Name = "typeQualifiers"; tmp17.Type = TType.Struct; @@ -189,7 +189,7 @@ public override int GetHashCode() { int hashcode = 157; unchecked { hashcode = (hashcode * 397) + Type.GetHashCode(); - if((TypeQualifiers != null) && __isset.typeQualifiers) + if ((TypeQualifiers != null) && __isset.typeQualifiers) { hashcode = (hashcode * 397) + TypeQualifiers.GetHashCode(); } @@ -202,7 +202,7 @@ public override string ToString() var tmp18 = new StringBuilder("TPrimitiveTypeEntry("); tmp18.Append(", Type: "); Type.ToString(tmp18); - if((TypeQualifiers != null) && __isset.typeQualifiers) + if ((TypeQualifiers != null) && __isset.typeQualifiers) { tmp18.Append(", TypeQualifiers: "); TypeQualifiers.ToString(tmp18); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs index 0c5f06d942..d34c1684f0 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TProgressUpdateResp.cs @@ -70,17 +70,17 @@ public TProgressUpdateResp(List headerNames, List> rows, do public TProgressUpdateResp DeepCopy() { var tmp628 = new TProgressUpdateResp(); - if((HeaderNames != null)) + if ((HeaderNames != null)) { tmp628.HeaderNames = this.HeaderNames.DeepCopy(); } - if((Rows != null)) + if ((Rows != null)) { tmp628.Rows = this.Rows.DeepCopy(); } tmp628.ProgressedPercentage = this.ProgressedPercentage; tmp628.Status = this.Status; - if((FooterSummary != null)) + if ((FooterSummary != null)) { tmp628.FooterSummary = this.FooterSummary; } @@ -255,7 +255,7 @@ public TProgressUpdateResp DeepCopy() var tmp638 = new TStruct("TProgressUpdateResp"); await oprot.WriteStructBeginAsync(tmp638, cancellationToken); var tmp639 = new TField(); - if((HeaderNames != null)) + if ((HeaderNames != null)) { tmp639.Name = "headerNames"; tmp639.Type = TType.List; @@ -269,7 +269,7 @@ public TProgressUpdateResp DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Rows != null)) + if ((Rows != null)) { tmp639.Name = "rows"; tmp639.Type = TType.List; @@ -300,7 +300,7 @@ public TProgressUpdateResp DeepCopy() await oprot.WriteFieldBeginAsync(tmp639, cancellationToken); await oprot.WriteI32Async((int)Status, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((FooterSummary != null)) + if ((FooterSummary != null)) { tmp639.Name = "footerSummary"; tmp639.Type = TType.String; @@ -339,17 +339,17 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((HeaderNames != null)) + if ((HeaderNames != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(HeaderNames); } - if((Rows != null)) + if ((Rows != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); } hashcode = (hashcode * 397) + ProgressedPercentage.GetHashCode(); hashcode = (hashcode * 397) + Status.GetHashCode(); - if((FooterSummary != null)) + if ((FooterSummary != null)) { hashcode = (hashcode * 397) + FooterSummary.GetHashCode(); } @@ -361,12 +361,12 @@ public override int GetHashCode() { public override string ToString() { var tmp643 = new StringBuilder("TProgressUpdateResp("); - if((HeaderNames != null)) + if ((HeaderNames != null)) { tmp643.Append(", HeaderNames: "); HeaderNames.ToString(tmp643); } - if((Rows != null)) + if ((Rows != null)) { tmp643.Append(", Rows: "); Rows.ToString(tmp643); @@ -375,7 +375,7 @@ public override string ToString() ProgressedPercentage.ToString(tmp643); tmp643.Append(", Status: "); Status.ToString(tmp643); - if((FooterSummary != null)) + if ((FooterSummary != null)) { tmp643.Append(", FooterSummary: "); FooterSummary.ToString(tmp643); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs index 24aaf8dcab..9d635b3399 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenReq.cs @@ -54,11 +54,11 @@ public TRenewDelegationTokenReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionH public TRenewDelegationTokenReq DeepCopy() { var tmp618 = new TRenewDelegationTokenReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp618.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp618.DelegationToken = this.DelegationToken; } @@ -139,7 +139,7 @@ public TRenewDelegationTokenReq DeepCopy() var tmp619 = new TStruct("TRenewDelegationTokenReq"); await oprot.WriteStructBeginAsync(tmp619, cancellationToken); var tmp620 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp620.Name = "sessionHandle"; tmp620.Type = TType.Struct; @@ -148,7 +148,7 @@ public TRenewDelegationTokenReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp620.Name = "delegationToken"; tmp620.Type = TType.String; @@ -177,11 +177,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { hashcode = (hashcode * 397) + DelegationToken.GetHashCode(); } @@ -192,12 +192,12 @@ public override int GetHashCode() { public override string ToString() { var tmp621 = new StringBuilder("TRenewDelegationTokenReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp621.Append(", SessionHandle: "); SessionHandle.ToString(tmp621); } - if((DelegationToken != null)) + if ((DelegationToken != null)) { tmp621.Append(", DelegationToken: "); DelegationToken.ToString(tmp621); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs index f7026f7bf3..86283278de 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRenewDelegationTokenResp.cs @@ -51,7 +51,7 @@ public TRenewDelegationTokenResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus public TRenewDelegationTokenResp DeepCopy() { var tmp623 = new TRenewDelegationTokenResp(); - if((Status != null)) + if ((Status != null)) { tmp623.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TRenewDelegationTokenResp DeepCopy() var tmp624 = new TStruct("TRenewDelegationTokenResp"); await oprot.WriteStructBeginAsync(tmp624, cancellationToken); var tmp625 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp625.Name = "status"; tmp625.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp626 = new StringBuilder("TRenewDelegationTokenResp("); - if((Status != null)) + if ((Status != null)) { tmp626.Append(", Status: "); Status.ToString(tmp626); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs index 80f250f656..880257d2fd 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRow.cs @@ -51,7 +51,7 @@ public TRow(List colVals) : public TRow DeepCopy() { var tmp123 = new TRow(); - if((ColVals != null)) + if ((ColVals != null)) { tmp123.ColVals = this.ColVals.DeepCopy(); } @@ -126,7 +126,7 @@ public TRow DeepCopy() var tmp127 = new TStruct("TRow"); await oprot.WriteStructBeginAsync(tmp127, cancellationToken); var tmp128 = new TField(); - if((ColVals != null)) + if ((ColVals != null)) { tmp128.Name = "colVals"; tmp128.Type = TType.List; @@ -159,7 +159,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((ColVals != null)) + if ((ColVals != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ColVals); } @@ -170,7 +170,7 @@ public override int GetHashCode() { public override string ToString() { var tmp130 = new StringBuilder("TRow("); - if((ColVals != null)) + if ((ColVals != null)) { tmp130.Append(", ColVals: "); ColVals.ToString(tmp130); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs index d95fb94142..1b4c186f6e 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TRowSet.cs @@ -136,31 +136,31 @@ public TRowSet DeepCopy() { var tmp209 = new TRowSet(); tmp209.StartRowOffset = this.StartRowOffset; - if((Rows != null)) + if ((Rows != null)) { tmp209.Rows = this.Rows.DeepCopy(); } - if((Columns != null) && __isset.columns) + if ((Columns != null) && __isset.columns) { tmp209.Columns = this.Columns.DeepCopy(); } tmp209.__isset.columns = this.__isset.columns; - if((BinaryColumns != null) && __isset.binaryColumns) + if ((BinaryColumns != null) && __isset.binaryColumns) { tmp209.BinaryColumns = this.BinaryColumns.ToArray(); } tmp209.__isset.binaryColumns = this.__isset.binaryColumns; - if(__isset.columnCount) + if (__isset.columnCount) { tmp209.ColumnCount = this.ColumnCount; } tmp209.__isset.columnCount = this.__isset.columnCount; - if((ArrowBatches != null) && __isset.arrowBatches) + if ((ArrowBatches != null) && __isset.arrowBatches) { tmp209.ArrowBatches = this.ArrowBatches.DeepCopy(); } tmp209.__isset.arrowBatches = this.__isset.arrowBatches; - if((ResultLinks != null) && __isset.resultLinks) + if ((ResultLinks != null) && __isset.resultLinks) { tmp209.ResultLinks = this.ResultLinks.DeepCopy(); } @@ -341,7 +341,7 @@ public TRowSet DeepCopy() await oprot.WriteFieldBeginAsync(tmp223, cancellationToken); await oprot.WriteI64Async(StartRowOffset, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((Rows != null)) + if ((Rows != null)) { tmp223.Name = "rows"; tmp223.Type = TType.List; @@ -355,7 +355,7 @@ public TRowSet DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Columns != null) && __isset.columns) + if ((Columns != null) && __isset.columns) { tmp223.Name = "columns"; tmp223.Type = TType.List; @@ -369,7 +369,7 @@ public TRowSet DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((BinaryColumns != null) && __isset.binaryColumns) + if ((BinaryColumns != null) && __isset.binaryColumns) { tmp223.Name = "binaryColumns"; tmp223.Type = TType.String; @@ -378,7 +378,7 @@ public TRowSet DeepCopy() await oprot.WriteBinaryAsync(BinaryColumns, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.columnCount) + if (__isset.columnCount) { tmp223.Name = "columnCount"; tmp223.Type = TType.I32; @@ -387,7 +387,7 @@ public TRowSet DeepCopy() await oprot.WriteI32Async(ColumnCount, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ArrowBatches != null) && __isset.arrowBatches) + if ((ArrowBatches != null) && __isset.arrowBatches) { tmp223.Name = "arrowBatches"; tmp223.Type = TType.List; @@ -401,7 +401,7 @@ public TRowSet DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResultLinks != null) && __isset.resultLinks) + if ((ResultLinks != null) && __isset.resultLinks) { tmp223.Name = "resultLinks"; tmp223.Type = TType.List; @@ -441,27 +441,27 @@ public override int GetHashCode() { int hashcode = 157; unchecked { hashcode = (hashcode * 397) + StartRowOffset.GetHashCode(); - if((Rows != null)) + if ((Rows != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Rows); } - if((Columns != null) && __isset.columns) + if ((Columns != null) && __isset.columns) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); } - if((BinaryColumns != null) && __isset.binaryColumns) + if ((BinaryColumns != null) && __isset.binaryColumns) { hashcode = (hashcode * 397) + BinaryColumns.GetHashCode(); } - if(__isset.columnCount) + if (__isset.columnCount) { hashcode = (hashcode * 397) + ColumnCount.GetHashCode(); } - if((ArrowBatches != null) && __isset.arrowBatches) + if ((ArrowBatches != null) && __isset.arrowBatches) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ArrowBatches); } - if((ResultLinks != null) && __isset.resultLinks) + if ((ResultLinks != null) && __isset.resultLinks) { hashcode = (hashcode * 397) + TCollections.GetHashCode(ResultLinks); } @@ -474,32 +474,32 @@ public override string ToString() var tmp228 = new StringBuilder("TRowSet("); tmp228.Append(", StartRowOffset: "); StartRowOffset.ToString(tmp228); - if((Rows != null)) + if ((Rows != null)) { tmp228.Append(", Rows: "); Rows.ToString(tmp228); } - if((Columns != null) && __isset.columns) + if ((Columns != null) && __isset.columns) { tmp228.Append(", Columns: "); Columns.ToString(tmp228); } - if((BinaryColumns != null) && __isset.binaryColumns) + if ((BinaryColumns != null) && __isset.binaryColumns) { tmp228.Append(", BinaryColumns: "); BinaryColumns.ToString(tmp228); } - if(__isset.columnCount) + if (__isset.columnCount) { tmp228.Append(", ColumnCount: "); ColumnCount.ToString(tmp228); } - if((ArrowBatches != null) && __isset.arrowBatches) + if ((ArrowBatches != null) && __isset.arrowBatches) { tmp228.Append(", ArrowBatches: "); ArrowBatches.ToString(tmp228); } - if((ResultLinks != null) && __isset.resultLinks) + if ((ResultLinks != null) && __isset.resultLinks) { tmp228.Append(", ResultLinks: "); ResultLinks.ToString(tmp228); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs index 061220e2e9..ba8dc068c4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSessionHandle.cs @@ -51,7 +51,7 @@ public TSessionHandle(global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier s public TSessionHandle DeepCopy() { var tmp269 = new TSessionHandle(); - if((SessionId != null)) + if ((SessionId != null)) { tmp269.SessionId = (global::Apache.Hive.Service.Rpc.Thrift.THandleIdentifier)this.SessionId.DeepCopy(); } @@ -116,7 +116,7 @@ public TSessionHandle DeepCopy() var tmp270 = new TStruct("TSessionHandle"); await oprot.WriteStructBeginAsync(tmp270, cancellationToken); var tmp271 = new TField(); - if((SessionId != null)) + if ((SessionId != null)) { tmp271.Name = "sessionId"; tmp271.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionId != null)) + if ((SessionId != null)) { hashcode = (hashcode * 397) + SessionId.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp272 = new StringBuilder("TSessionHandle("); - if((SessionId != null)) + if ((SessionId != null)) { tmp272.Append(", SessionId: "); SessionId.ToString(tmp272); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs index 18ede5a12a..afb0b06151 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoReq.cs @@ -72,11 +72,11 @@ public TSetClientInfoReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle s public TSetClientInfoReq DeepCopy() { var tmp317 = new TSetClientInfoReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp317.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp317.Configuration = this.Configuration.DeepCopy(); } @@ -164,7 +164,7 @@ public TSetClientInfoReq DeepCopy() var tmp322 = new TStruct("TSetClientInfoReq"); await oprot.WriteStructBeginAsync(tmp322, cancellationToken); var tmp323 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp323.Name = "sessionHandle"; tmp323.Type = TType.Struct; @@ -173,7 +173,7 @@ public TSetClientInfoReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp323.Name = "configuration"; tmp323.Type = TType.Map; @@ -208,11 +208,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Configuration); } @@ -223,12 +223,12 @@ public override int GetHashCode() { public override string ToString() { var tmp325 = new StringBuilder("TSetClientInfoReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp325.Append(", SessionHandle: "); SessionHandle.ToString(tmp325); } - if((Configuration != null) && __isset.configuration) + if ((Configuration != null) && __isset.configuration) { tmp325.Append(", Configuration: "); Configuration.ToString(tmp325); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs index 52f62c640c..22ba28bc3a 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSetClientInfoResp.cs @@ -51,7 +51,7 @@ public TSetClientInfoResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status) public TSetClientInfoResp DeepCopy() { var tmp327 = new TSetClientInfoResp(); - if((Status != null)) + if ((Status != null)) { tmp327.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } @@ -116,7 +116,7 @@ public TSetClientInfoResp DeepCopy() var tmp328 = new TStruct("TSetClientInfoResp"); await oprot.WriteStructBeginAsync(tmp328, cancellationToken); var tmp329 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp329.Name = "status"; tmp329.Type = TType.Struct; @@ -144,7 +144,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } @@ -155,7 +155,7 @@ public override int GetHashCode() { public override string ToString() { var tmp330 = new StringBuilder("TSetClientInfoResp("); - if((Status != null)) + if ((Status != null)) { tmp330.Append(", Status: "); Status.ToString(tmp330); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs index 7d8d187f1b..8e28ee90fa 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowBatch.cs @@ -54,7 +54,7 @@ public TSparkArrowBatch(byte[] batch, long rowCount) : this() public TSparkArrowBatch DeepCopy() { var tmp230 = new TSparkArrowBatch(); - if((Batch != null)) + if ((Batch != null)) { tmp230.Batch = this.Batch.ToArray(); } @@ -135,7 +135,7 @@ public TSparkArrowBatch DeepCopy() var tmp231 = new TStruct("TSparkArrowBatch"); await oprot.WriteStructBeginAsync(tmp231, cancellationToken); var tmp232 = new TField(); - if((Batch != null)) + if ((Batch != null)) { tmp232.Name = "batch"; tmp232.Type = TType.String; @@ -170,7 +170,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Batch != null)) + if ((Batch != null)) { hashcode = (hashcode * 397) + Batch.GetHashCode(); } @@ -182,7 +182,7 @@ public override int GetHashCode() { public override string ToString() { var tmp233 = new StringBuilder("TSparkArrowBatch("); - if((Batch != null)) + if ((Batch != null)) { tmp233.Append(", Batch: "); Batch.ToString(tmp233); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs index 702909e013..187b42c757 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowResultLink.cs @@ -63,7 +63,7 @@ public TSparkArrowResultLink(string fileLink, long expiryTime, long startRowOffs public TSparkArrowResultLink DeepCopy() { var tmp235 = new TSparkArrowResultLink(); - if((FileLink != null)) + if ((FileLink != null)) { tmp235.FileLink = this.FileLink; } @@ -195,7 +195,7 @@ public TSparkArrowResultLink DeepCopy() var tmp236 = new TStruct("TSparkArrowResultLink"); await oprot.WriteStructBeginAsync(tmp236, cancellationToken); var tmp237 = new TField(); - if((FileLink != null)) + if ((FileLink != null)) { tmp237.Name = "fileLink"; tmp237.Type = TType.String; @@ -251,7 +251,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((FileLink != null)) + if ((FileLink != null)) { hashcode = (hashcode * 397) + FileLink.GetHashCode(); } @@ -266,7 +266,7 @@ public override int GetHashCode() { public override string ToString() { var tmp238 = new StringBuilder("TSparkArrowResultLink("); - if((FileLink != null)) + if ((FileLink != null)) { tmp238.Append(", FileLink: "); FileLink.ToString(tmp238); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs index 081b30d771..7926cb3196 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkArrowTypes.cs @@ -110,22 +110,22 @@ public TSparkArrowTypes() public TSparkArrowTypes DeepCopy() { var tmp250 = new TSparkArrowTypes(); - if(__isset.timestampAsArrow) + if (__isset.timestampAsArrow) { tmp250.TimestampAsArrow = this.TimestampAsArrow; } tmp250.__isset.timestampAsArrow = this.__isset.timestampAsArrow; - if(__isset.decimalAsArrow) + if (__isset.decimalAsArrow) { tmp250.DecimalAsArrow = this.DecimalAsArrow; } tmp250.__isset.decimalAsArrow = this.__isset.decimalAsArrow; - if(__isset.complexTypesAsArrow) + if (__isset.complexTypesAsArrow) { tmp250.ComplexTypesAsArrow = this.ComplexTypesAsArrow; } tmp250.__isset.complexTypesAsArrow = this.__isset.complexTypesAsArrow; - if(__isset.intervalTypesAsArrow) + if (__isset.intervalTypesAsArrow) { tmp250.IntervalTypesAsArrow = this.IntervalTypesAsArrow; } @@ -214,7 +214,7 @@ public TSparkArrowTypes DeepCopy() var tmp251 = new TStruct("TSparkArrowTypes"); await oprot.WriteStructBeginAsync(tmp251, cancellationToken); var tmp252 = new TField(); - if(__isset.timestampAsArrow) + if (__isset.timestampAsArrow) { tmp252.Name = "timestampAsArrow"; tmp252.Type = TType.Bool; @@ -223,7 +223,7 @@ public TSparkArrowTypes DeepCopy() await oprot.WriteBoolAsync(TimestampAsArrow, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.decimalAsArrow) + if (__isset.decimalAsArrow) { tmp252.Name = "decimalAsArrow"; tmp252.Type = TType.Bool; @@ -232,7 +232,7 @@ public TSparkArrowTypes DeepCopy() await oprot.WriteBoolAsync(DecimalAsArrow, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.complexTypesAsArrow) + if (__isset.complexTypesAsArrow) { tmp252.Name = "complexTypesAsArrow"; tmp252.Type = TType.Bool; @@ -241,7 +241,7 @@ public TSparkArrowTypes DeepCopy() await oprot.WriteBoolAsync(ComplexTypesAsArrow, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.intervalTypesAsArrow) + if (__isset.intervalTypesAsArrow) { tmp252.Name = "intervalTypesAsArrow"; tmp252.Type = TType.Bool; @@ -272,19 +272,19 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.timestampAsArrow) + if (__isset.timestampAsArrow) { hashcode = (hashcode * 397) + TimestampAsArrow.GetHashCode(); } - if(__isset.decimalAsArrow) + if (__isset.decimalAsArrow) { hashcode = (hashcode * 397) + DecimalAsArrow.GetHashCode(); } - if(__isset.complexTypesAsArrow) + if (__isset.complexTypesAsArrow) { hashcode = (hashcode * 397) + ComplexTypesAsArrow.GetHashCode(); } - if(__isset.intervalTypesAsArrow) + if (__isset.intervalTypesAsArrow) { hashcode = (hashcode * 397) + IntervalTypesAsArrow.GetHashCode(); } @@ -296,27 +296,27 @@ public override string ToString() { var tmp253 = new StringBuilder("TSparkArrowTypes("); int tmp254 = 0; - if(__isset.timestampAsArrow) + if (__isset.timestampAsArrow) { - if(0 < tmp254++) { tmp253.Append(", "); } + if (0 < tmp254++) { tmp253.Append(", "); } tmp253.Append("TimestampAsArrow: "); TimestampAsArrow.ToString(tmp253); } - if(__isset.decimalAsArrow) + if (__isset.decimalAsArrow) { - if(0 < tmp254++) { tmp253.Append(", "); } + if (0 < tmp254++) { tmp253.Append(", "); } tmp253.Append("DecimalAsArrow: "); DecimalAsArrow.ToString(tmp253); } - if(__isset.complexTypesAsArrow) + if (__isset.complexTypesAsArrow) { - if(0 < tmp254++) { tmp253.Append(", "); } + if (0 < tmp254++) { tmp253.Append(", "); } tmp253.Append("ComplexTypesAsArrow: "); ComplexTypesAsArrow.ToString(tmp253); } - if(__isset.intervalTypesAsArrow) + if (__isset.intervalTypesAsArrow) { - if(0 < tmp254++) { tmp253.Append(", "); } + if (0 < tmp254++) { tmp253.Append(", "); } tmp253.Append("IntervalTypesAsArrow: "); IntervalTypesAsArrow.ToString(tmp253); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs index bc9aad2e9f..6c3ef421cb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkDirectResults.cs @@ -110,22 +110,22 @@ public TSparkDirectResults() public TSparkDirectResults DeepCopy() { var tmp245 = new TSparkDirectResults(); - if((OperationStatus != null) && __isset.operationStatus) + if ((OperationStatus != null) && __isset.operationStatus) { tmp245.OperationStatus = (global::Apache.Hive.Service.Rpc.Thrift.TGetOperationStatusResp)this.OperationStatus.DeepCopy(); } tmp245.__isset.operationStatus = this.__isset.operationStatus; - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { tmp245.ResultSetMetadata = (global::Apache.Hive.Service.Rpc.Thrift.TGetResultSetMetadataResp)this.ResultSetMetadata.DeepCopy(); } tmp245.__isset.resultSetMetadata = this.__isset.resultSetMetadata; - if((ResultSet != null) && __isset.resultSet) + if ((ResultSet != null) && __isset.resultSet) { tmp245.ResultSet = (global::Apache.Hive.Service.Rpc.Thrift.TFetchResultsResp)this.ResultSet.DeepCopy(); } tmp245.__isset.resultSet = this.__isset.resultSet; - if((CloseOperation != null) && __isset.closeOperation) + if ((CloseOperation != null) && __isset.closeOperation) { tmp245.CloseOperation = (global::Apache.Hive.Service.Rpc.Thrift.TCloseOperationResp)this.CloseOperation.DeepCopy(); } @@ -218,7 +218,7 @@ public TSparkDirectResults DeepCopy() var tmp246 = new TStruct("TSparkDirectResults"); await oprot.WriteStructBeginAsync(tmp246, cancellationToken); var tmp247 = new TField(); - if((OperationStatus != null) && __isset.operationStatus) + if ((OperationStatus != null) && __isset.operationStatus) { tmp247.Name = "operationStatus"; tmp247.Type = TType.Struct; @@ -227,7 +227,7 @@ public TSparkDirectResults DeepCopy() await OperationStatus.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { tmp247.Name = "resultSetMetadata"; tmp247.Type = TType.Struct; @@ -236,7 +236,7 @@ public TSparkDirectResults DeepCopy() await ResultSetMetadata.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ResultSet != null) && __isset.resultSet) + if ((ResultSet != null) && __isset.resultSet) { tmp247.Name = "resultSet"; tmp247.Type = TType.Struct; @@ -245,7 +245,7 @@ public TSparkDirectResults DeepCopy() await ResultSet.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((CloseOperation != null) && __isset.closeOperation) + if ((CloseOperation != null) && __isset.closeOperation) { tmp247.Name = "closeOperation"; tmp247.Type = TType.Struct; @@ -276,19 +276,19 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((OperationStatus != null) && __isset.operationStatus) + if ((OperationStatus != null) && __isset.operationStatus) { hashcode = (hashcode * 397) + OperationStatus.GetHashCode(); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { hashcode = (hashcode * 397) + ResultSetMetadata.GetHashCode(); } - if((ResultSet != null) && __isset.resultSet) + if ((ResultSet != null) && __isset.resultSet) { hashcode = (hashcode * 397) + ResultSet.GetHashCode(); } - if((CloseOperation != null) && __isset.closeOperation) + if ((CloseOperation != null) && __isset.closeOperation) { hashcode = (hashcode * 397) + CloseOperation.GetHashCode(); } @@ -300,27 +300,27 @@ public override string ToString() { var tmp248 = new StringBuilder("TSparkDirectResults("); int tmp249 = 0; - if((OperationStatus != null) && __isset.operationStatus) + if ((OperationStatus != null) && __isset.operationStatus) { - if(0 < tmp249++) { tmp248.Append(", "); } + if (0 < tmp249++) { tmp248.Append(", "); } tmp248.Append("OperationStatus: "); OperationStatus.ToString(tmp248); } - if((ResultSetMetadata != null) && __isset.resultSetMetadata) + if ((ResultSetMetadata != null) && __isset.resultSetMetadata) { - if(0 < tmp249++) { tmp248.Append(", "); } + if (0 < tmp249++) { tmp248.Append(", "); } tmp248.Append("ResultSetMetadata: "); ResultSetMetadata.ToString(tmp248); } - if((ResultSet != null) && __isset.resultSet) + if ((ResultSet != null) && __isset.resultSet) { - if(0 < tmp249++) { tmp248.Append(", "); } + if (0 < tmp249++) { tmp248.Append(", "); } tmp248.Append("ResultSet: "); ResultSet.ToString(tmp248); } - if((CloseOperation != null) && __isset.closeOperation) + if ((CloseOperation != null) && __isset.closeOperation) { - if(0 < tmp249++) { tmp248.Append(", "); } + if (0 < tmp249++) { tmp248.Append(", "); } tmp248.Append("CloseOperation: "); CloseOperation.ToString(tmp248); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs index 3dd323b4de..3c42576cc8 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TSparkGetDirectResults.cs @@ -73,7 +73,7 @@ public TSparkGetDirectResults DeepCopy() { var tmp240 = new TSparkGetDirectResults(); tmp240.MaxRows = this.MaxRows; - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp240.MaxBytes = this.MaxBytes; } @@ -154,7 +154,7 @@ public TSparkGetDirectResults DeepCopy() await oprot.WriteFieldBeginAsync(tmp242, cancellationToken); await oprot.WriteI64Async(MaxRows, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp242.Name = "maxBytes"; tmp242.Type = TType.I64; @@ -184,7 +184,7 @@ public override int GetHashCode() { int hashcode = 157; unchecked { hashcode = (hashcode * 397) + MaxRows.GetHashCode(); - if(__isset.maxBytes) + if (__isset.maxBytes) { hashcode = (hashcode * 397) + MaxBytes.GetHashCode(); } @@ -197,7 +197,7 @@ public override string ToString() var tmp243 = new StringBuilder("TSparkGetDirectResults("); tmp243.Append(", MaxRows: "); MaxRows.ToString(tmp243); - if(__isset.maxBytes) + if (__isset.maxBytes) { tmp243.Append(", MaxBytes: "); MaxBytes.ToString(tmp243); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs index 5c1ce5b906..55108b74bb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStatus.cs @@ -122,22 +122,22 @@ public TStatus DeepCopy() { var tmp255 = new TStatus(); tmp255.StatusCode = this.StatusCode; - if((InfoMessages != null) && __isset.infoMessages) + if ((InfoMessages != null) && __isset.infoMessages) { tmp255.InfoMessages = this.InfoMessages.DeepCopy(); } tmp255.__isset.infoMessages = this.__isset.infoMessages; - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp255.SqlState = this.SqlState; } tmp255.__isset.sqlState = this.__isset.sqlState; - if(__isset.errorCode) + if (__isset.errorCode) { tmp255.ErrorCode = this.ErrorCode; } tmp255.__isset.errorCode = this.__isset.errorCode; - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp255.ErrorMessage = this.ErrorMessage; } @@ -258,7 +258,7 @@ public TStatus DeepCopy() await oprot.WriteFieldBeginAsync(tmp260, cancellationToken); await oprot.WriteI32Async((int)StatusCode, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); - if((InfoMessages != null) && __isset.infoMessages) + if ((InfoMessages != null) && __isset.infoMessages) { tmp260.Name = "infoMessages"; tmp260.Type = TType.List; @@ -272,7 +272,7 @@ public TStatus DeepCopy() await oprot.WriteListEndAsync(cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp260.Name = "sqlState"; tmp260.Type = TType.String; @@ -281,7 +281,7 @@ public TStatus DeepCopy() await oprot.WriteStringAsync(SqlState, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if(__isset.errorCode) + if (__isset.errorCode) { tmp260.Name = "errorCode"; tmp260.Type = TType.I32; @@ -290,7 +290,7 @@ public TStatus DeepCopy() await oprot.WriteI32Async(ErrorCode, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp260.Name = "errorMessage"; tmp260.Type = TType.String; @@ -323,19 +323,19 @@ public override int GetHashCode() { int hashcode = 157; unchecked { hashcode = (hashcode * 397) + StatusCode.GetHashCode(); - if((InfoMessages != null) && __isset.infoMessages) + if ((InfoMessages != null) && __isset.infoMessages) { hashcode = (hashcode * 397) + TCollections.GetHashCode(InfoMessages); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { hashcode = (hashcode * 397) + SqlState.GetHashCode(); } - if(__isset.errorCode) + if (__isset.errorCode) { hashcode = (hashcode * 397) + ErrorCode.GetHashCode(); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { hashcode = (hashcode * 397) + ErrorMessage.GetHashCode(); } @@ -348,22 +348,22 @@ public override string ToString() var tmp262 = new StringBuilder("TStatus("); tmp262.Append(", StatusCode: "); StatusCode.ToString(tmp262); - if((InfoMessages != null) && __isset.infoMessages) + if ((InfoMessages != null) && __isset.infoMessages) { tmp262.Append(", InfoMessages: "); InfoMessages.ToString(tmp262); } - if((SqlState != null) && __isset.sqlState) + if ((SqlState != null) && __isset.sqlState) { tmp262.Append(", SqlState: "); SqlState.ToString(tmp262); } - if(__isset.errorCode) + if (__isset.errorCode) { tmp262.Append(", ErrorCode: "); ErrorCode.ToString(tmp262); } - if((ErrorMessage != null) && __isset.errorMessage) + if ((ErrorMessage != null) && __isset.errorMessage) { tmp262.Append(", ErrorMessage: "); ErrorMessage.ToString(tmp262); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs index 8ee8d9fa5f..c273e9e6af 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs @@ -165,7 +165,7 @@ public TStringColumn DeepCopy() var tmp190 = new TStruct("TStringColumn"); await oprot.WriteStructBeginAsync(tmp190, cancellationToken); var tmp191 = new TField(); - if((Values != null)) + if ((Values != null)) { tmp191.Name = "values"; tmp191.Type = TType.List; @@ -209,7 +209,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Values != null)) + if ((Values != null)) { for (int i = 0; i < Values.Length; i++) { @@ -224,7 +224,7 @@ public override int GetHashCode() { public override string ToString() { var tmp193 = new StringBuilder("TStringColumn("); - if((Values != null)) + if ((Values != null)) { tmp193.Append(", Values: "); Values.ToString(tmp193); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs index a6234b6636..9c470c4fc6 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringValue.cs @@ -65,7 +65,7 @@ public TStringValue() public TStringValue DeepCopy() { var tmp113 = new TStringValue(); - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { tmp113.Value = this.Value; } @@ -124,7 +124,7 @@ public TStringValue DeepCopy() var tmp114 = new TStruct("TStringValue"); await oprot.WriteStructBeginAsync(tmp114, cancellationToken); var tmp115 = new TField(); - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { tmp115.Name = "value"; tmp115.Type = TType.String; @@ -152,7 +152,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { hashcode = (hashcode * 397) + Value.GetHashCode(); } @@ -164,9 +164,9 @@ public override string ToString() { var tmp116 = new StringBuilder("TStringValue("); int tmp117 = 0; - if((Value != null) && __isset.@value) + if ((Value != null) && __isset.@value) { - if(0 < tmp117++) { tmp116.Append(", "); } + if (0 < tmp117++) { tmp116.Append(", "); } tmp116.Append("Value: "); Value.ToString(tmp116); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs index d29202695b..19e1f73ad4 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStructTypeEntry.cs @@ -51,7 +51,7 @@ public TStructTypeEntry(Dictionary nameToTypePtr) : this() public TStructTypeEntry DeepCopy() { var tmp30 = new TStructTypeEntry(); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp30.NameToTypePtr = this.NameToTypePtr.DeepCopy(); } @@ -127,7 +127,7 @@ public TStructTypeEntry DeepCopy() var tmp35 = new TStruct("TStructTypeEntry"); await oprot.WriteStructBeginAsync(tmp35, cancellationToken); var tmp36 = new TField(); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp36.Name = "nameToTypePtr"; tmp36.Type = TType.Map; @@ -161,7 +161,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); } @@ -172,7 +172,7 @@ public override int GetHashCode() { public override string ToString() { var tmp38 = new StringBuilder("TStructTypeEntry("); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp38.Append(", NameToTypePtr: "); NameToTypePtr.ToString(tmp38); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs index b37fe3e090..fbeceada6b 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTableSchema.cs @@ -51,7 +51,7 @@ public TTableSchema(List col public TTableSchema DeepCopy() { var tmp74 = new TTableSchema(); - if((Columns != null)) + if ((Columns != null)) { tmp74.Columns = this.Columns.DeepCopy(); } @@ -126,7 +126,7 @@ public TTableSchema DeepCopy() var tmp78 = new TStruct("TTableSchema"); await oprot.WriteStructBeginAsync(tmp78, cancellationToken); var tmp79 = new TField(); - if((Columns != null)) + if ((Columns != null)) { tmp79.Name = "columns"; tmp79.Type = TType.List; @@ -159,7 +159,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Columns != null)) + if ((Columns != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Columns); } @@ -170,7 +170,7 @@ public override int GetHashCode() { public override string ToString() { var tmp81 = new StringBuilder("TTableSchema("); - if((Columns != null)) + if ((Columns != null)) { tmp81.Append(", Columns: "); Columns.ToString(tmp81); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs index ccffa40f79..feea837530 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeDesc.cs @@ -51,7 +51,7 @@ public TTypeDesc(List types) public TTypeDesc DeepCopy() { var tmp60 = new TTypeDesc(); - if((Types != null)) + if ((Types != null)) { tmp60.Types = this.Types.DeepCopy(); } @@ -126,7 +126,7 @@ public TTypeDesc DeepCopy() var tmp64 = new TStruct("TTypeDesc"); await oprot.WriteStructBeginAsync(tmp64, cancellationToken); var tmp65 = new TField(); - if((Types != null)) + if ((Types != null)) { tmp65.Name = "types"; tmp65.Type = TType.List; @@ -159,7 +159,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Types != null)) + if ((Types != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(Types); } @@ -170,7 +170,7 @@ public override int GetHashCode() { public override string ToString() { var tmp67 = new StringBuilder("TTypeDesc("); - if((Types != null)) + if ((Types != null)) { tmp67.Append(", Types: "); Types.ToString(tmp67); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs index e10c4b89e9..4f2d94c6f6 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeEntry.cs @@ -140,32 +140,32 @@ public TTypeEntry() public TTypeEntry DeepCopy() { var tmp55 = new TTypeEntry(); - if((PrimitiveEntry != null) && __isset.primitiveEntry) + if ((PrimitiveEntry != null) && __isset.primitiveEntry) { tmp55.PrimitiveEntry = (global::Apache.Hive.Service.Rpc.Thrift.TPrimitiveTypeEntry)this.PrimitiveEntry.DeepCopy(); } tmp55.__isset.primitiveEntry = this.__isset.primitiveEntry; - if((ArrayEntry != null) && __isset.arrayEntry) + if ((ArrayEntry != null) && __isset.arrayEntry) { tmp55.ArrayEntry = (global::Apache.Hive.Service.Rpc.Thrift.TArrayTypeEntry)this.ArrayEntry.DeepCopy(); } tmp55.__isset.arrayEntry = this.__isset.arrayEntry; - if((MapEntry != null) && __isset.mapEntry) + if ((MapEntry != null) && __isset.mapEntry) { tmp55.MapEntry = (global::Apache.Hive.Service.Rpc.Thrift.TMapTypeEntry)this.MapEntry.DeepCopy(); } tmp55.__isset.mapEntry = this.__isset.mapEntry; - if((StructEntry != null) && __isset.structEntry) + if ((StructEntry != null) && __isset.structEntry) { tmp55.StructEntry = (global::Apache.Hive.Service.Rpc.Thrift.TStructTypeEntry)this.StructEntry.DeepCopy(); } tmp55.__isset.structEntry = this.__isset.structEntry; - if((UnionEntry != null) && __isset.unionEntry) + if ((UnionEntry != null) && __isset.unionEntry) { tmp55.UnionEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUnionTypeEntry)this.UnionEntry.DeepCopy(); } tmp55.__isset.unionEntry = this.__isset.unionEntry; - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + if ((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) { tmp55.UserDefinedTypeEntry = (global::Apache.Hive.Service.Rpc.Thrift.TUserDefinedTypeEntry)this.UserDefinedTypeEntry.DeepCopy(); } @@ -280,7 +280,7 @@ public TTypeEntry DeepCopy() var tmp56 = new TStruct("TTypeEntry"); await oprot.WriteStructBeginAsync(tmp56, cancellationToken); var tmp57 = new TField(); - if((PrimitiveEntry != null) && __isset.primitiveEntry) + if ((PrimitiveEntry != null) && __isset.primitiveEntry) { tmp57.Name = "primitiveEntry"; tmp57.Type = TType.Struct; @@ -289,7 +289,7 @@ public TTypeEntry DeepCopy() await PrimitiveEntry.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((ArrayEntry != null) && __isset.arrayEntry) + if ((ArrayEntry != null) && __isset.arrayEntry) { tmp57.Name = "arrayEntry"; tmp57.Type = TType.Struct; @@ -298,7 +298,7 @@ public TTypeEntry DeepCopy() await ArrayEntry.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((MapEntry != null) && __isset.mapEntry) + if ((MapEntry != null) && __isset.mapEntry) { tmp57.Name = "mapEntry"; tmp57.Type = TType.Struct; @@ -307,7 +307,7 @@ public TTypeEntry DeepCopy() await MapEntry.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((StructEntry != null) && __isset.structEntry) + if ((StructEntry != null) && __isset.structEntry) { tmp57.Name = "structEntry"; tmp57.Type = TType.Struct; @@ -316,7 +316,7 @@ public TTypeEntry DeepCopy() await StructEntry.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((UnionEntry != null) && __isset.unionEntry) + if ((UnionEntry != null) && __isset.unionEntry) { tmp57.Name = "unionEntry"; tmp57.Type = TType.Struct; @@ -325,7 +325,7 @@ public TTypeEntry DeepCopy() await UnionEntry.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + if ((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) { tmp57.Name = "userDefinedTypeEntry"; tmp57.Type = TType.Struct; @@ -358,27 +358,27 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((PrimitiveEntry != null) && __isset.primitiveEntry) + if ((PrimitiveEntry != null) && __isset.primitiveEntry) { hashcode = (hashcode * 397) + PrimitiveEntry.GetHashCode(); } - if((ArrayEntry != null) && __isset.arrayEntry) + if ((ArrayEntry != null) && __isset.arrayEntry) { hashcode = (hashcode * 397) + ArrayEntry.GetHashCode(); } - if((MapEntry != null) && __isset.mapEntry) + if ((MapEntry != null) && __isset.mapEntry) { hashcode = (hashcode * 397) + MapEntry.GetHashCode(); } - if((StructEntry != null) && __isset.structEntry) + if ((StructEntry != null) && __isset.structEntry) { hashcode = (hashcode * 397) + StructEntry.GetHashCode(); } - if((UnionEntry != null) && __isset.unionEntry) + if ((UnionEntry != null) && __isset.unionEntry) { hashcode = (hashcode * 397) + UnionEntry.GetHashCode(); } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + if ((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) { hashcode = (hashcode * 397) + UserDefinedTypeEntry.GetHashCode(); } @@ -390,39 +390,39 @@ public override string ToString() { var tmp58 = new StringBuilder("TTypeEntry("); int tmp59 = 0; - if((PrimitiveEntry != null) && __isset.primitiveEntry) + if ((PrimitiveEntry != null) && __isset.primitiveEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("PrimitiveEntry: "); PrimitiveEntry.ToString(tmp58); } - if((ArrayEntry != null) && __isset.arrayEntry) + if ((ArrayEntry != null) && __isset.arrayEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("ArrayEntry: "); ArrayEntry.ToString(tmp58); } - if((MapEntry != null) && __isset.mapEntry) + if ((MapEntry != null) && __isset.mapEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("MapEntry: "); MapEntry.ToString(tmp58); } - if((StructEntry != null) && __isset.structEntry) + if ((StructEntry != null) && __isset.structEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("StructEntry: "); StructEntry.ToString(tmp58); } - if((UnionEntry != null) && __isset.unionEntry) + if ((UnionEntry != null) && __isset.unionEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("UnionEntry: "); UnionEntry.ToString(tmp58); } - if((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) + if ((UserDefinedTypeEntry != null) && __isset.userDefinedTypeEntry) { - if(0 < tmp59++) { tmp58.Append(", "); } + if (0 < tmp59++) { tmp58.Append(", "); } tmp58.Append("UserDefinedTypeEntry: "); UserDefinedTypeEntry.ToString(tmp58); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs index 8f43b59d13..8c2087dddb 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifierValue.cs @@ -80,12 +80,12 @@ public TTypeQualifierValue() public TTypeQualifierValue DeepCopy() { var tmp0 = new TTypeQualifierValue(); - if(__isset.i32Value) + if (__isset.i32Value) { tmp0.I32Value = this.I32Value; } tmp0.__isset.i32Value = this.__isset.i32Value; - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { tmp0.StringValue = this.StringValue; } @@ -154,7 +154,7 @@ public TTypeQualifierValue DeepCopy() var tmp1 = new TStruct("TTypeQualifierValue"); await oprot.WriteStructBeginAsync(tmp1, cancellationToken); var tmp2 = new TField(); - if(__isset.i32Value) + if (__isset.i32Value) { tmp2.Name = "i32Value"; tmp2.Type = TType.I32; @@ -163,7 +163,7 @@ public TTypeQualifierValue DeepCopy() await oprot.WriteI32Async(I32Value, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { tmp2.Name = "stringValue"; tmp2.Type = TType.String; @@ -192,11 +192,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if(__isset.i32Value) + if (__isset.i32Value) { hashcode = (hashcode * 397) + I32Value.GetHashCode(); } - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { hashcode = (hashcode * 397) + StringValue.GetHashCode(); } @@ -208,15 +208,15 @@ public override string ToString() { var tmp3 = new StringBuilder("TTypeQualifierValue("); int tmp4 = 0; - if(__isset.i32Value) + if (__isset.i32Value) { - if(0 < tmp4++) { tmp3.Append(", "); } + if (0 < tmp4++) { tmp3.Append(", "); } tmp3.Append("I32Value: "); I32Value.ToString(tmp3); } - if((StringValue != null) && __isset.stringValue) + if ((StringValue != null) && __isset.stringValue) { - if(0 < tmp4++) { tmp3.Append(", "); } + if (0 < tmp4++) { tmp3.Append(", "); } tmp3.Append("StringValue: "); StringValue.ToString(tmp3); } diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs index 0eb8f11326..e134029d23 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TTypeQualifiers.cs @@ -51,7 +51,7 @@ public TTypeQualifiers(Dictionary nameToTypePtr) : this() public TUnionTypeEntry DeepCopy() { var tmp40 = new TUnionTypeEntry(); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp40.NameToTypePtr = this.NameToTypePtr.DeepCopy(); } @@ -127,7 +127,7 @@ public TUnionTypeEntry DeepCopy() var tmp45 = new TStruct("TUnionTypeEntry"); await oprot.WriteStructBeginAsync(tmp45, cancellationToken); var tmp46 = new TField(); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp46.Name = "nameToTypePtr"; tmp46.Type = TType.Map; @@ -161,7 +161,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { hashcode = (hashcode * 397) + TCollections.GetHashCode(NameToTypePtr); } @@ -172,7 +172,7 @@ public override int GetHashCode() { public override string ToString() { var tmp48 = new StringBuilder("TUnionTypeEntry("); - if((NameToTypePtr != null)) + if ((NameToTypePtr != null)) { tmp48.Append(", NameToTypePtr: "); NameToTypePtr.ToString(tmp48); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs index 602d173843..22ce8d6605 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataReq.cs @@ -90,21 +90,21 @@ public TUploadDataReq(global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle sess public TUploadDataReq DeepCopy() { var tmp430 = new TUploadDataReq(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp430.SessionHandle = (global::Apache.Hive.Service.Rpc.Thrift.TSessionHandle)this.SessionHandle.DeepCopy(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp430.TableName = this.TableName; } tmp430.__isset.tableName = this.__isset.tableName; - if((Path != null) && __isset.path) + if ((Path != null) && __isset.path) { tmp430.Path = this.Path; } tmp430.__isset.path = this.__isset.path; - if((Values != null)) + if ((Values != null)) { tmp430.Values = this.Values.ToArray(); } @@ -205,7 +205,7 @@ public TUploadDataReq DeepCopy() var tmp431 = new TStruct("TUploadDataReq"); await oprot.WriteStructBeginAsync(tmp431, cancellationToken); var tmp432 = new TField(); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp432.Name = "sessionHandle"; tmp432.Type = TType.Struct; @@ -214,7 +214,7 @@ public TUploadDataReq DeepCopy() await SessionHandle.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp432.Name = "tableName"; tmp432.Type = TType.String; @@ -223,7 +223,7 @@ public TUploadDataReq DeepCopy() await oprot.WriteStringAsync(TableName, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Path != null) && __isset.path) + if ((Path != null) && __isset.path) { tmp432.Name = "path"; tmp432.Type = TType.String; @@ -232,7 +232,7 @@ public TUploadDataReq DeepCopy() await oprot.WriteStringAsync(Path, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((Values != null)) + if ((Values != null)) { tmp432.Name = "values"; tmp432.Type = TType.String; @@ -263,19 +263,19 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((SessionHandle != null)) + if ((SessionHandle != null)) { hashcode = (hashcode * 397) + SessionHandle.GetHashCode(); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { hashcode = (hashcode * 397) + TableName.GetHashCode(); } - if((Path != null) && __isset.path) + if ((Path != null) && __isset.path) { hashcode = (hashcode * 397) + Path.GetHashCode(); } - if((Values != null)) + if ((Values != null)) { hashcode = (hashcode * 397) + Values.GetHashCode(); } @@ -286,22 +286,22 @@ public override int GetHashCode() { public override string ToString() { var tmp433 = new StringBuilder("TUploadDataReq("); - if((SessionHandle != null)) + if ((SessionHandle != null)) { tmp433.Append(", SessionHandle: "); SessionHandle.ToString(tmp433); } - if((TableName != null) && __isset.tableName) + if ((TableName != null) && __isset.tableName) { tmp433.Append(", TableName: "); TableName.ToString(tmp433); } - if((Path != null) && __isset.path) + if ((Path != null) && __isset.path) { tmp433.Append(", Path: "); Path.ToString(tmp433); } - if((Values != null)) + if ((Values != null)) { tmp433.Append(", Values: "); Values.ToString(tmp433); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs index 19bcd47397..26944c2920 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUploadDataResp.cs @@ -54,11 +54,11 @@ public TUploadDataResp(global::Apache.Hive.Service.Rpc.Thrift.TStatus status, gl public TUploadDataResp DeepCopy() { var tmp435 = new TUploadDataResp(); - if((Status != null)) + if ((Status != null)) { tmp435.Status = (global::Apache.Hive.Service.Rpc.Thrift.TStatus)this.Status.DeepCopy(); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp435.OperationHandle = (global::Apache.Hive.Service.Rpc.Thrift.TOperationHandle)this.OperationHandle.DeepCopy(); } @@ -140,7 +140,7 @@ public TUploadDataResp DeepCopy() var tmp436 = new TStruct("TUploadDataResp"); await oprot.WriteStructBeginAsync(tmp436, cancellationToken); var tmp437 = new TField(); - if((Status != null)) + if ((Status != null)) { tmp437.Name = "status"; tmp437.Type = TType.Struct; @@ -149,7 +149,7 @@ public TUploadDataResp DeepCopy() await Status.WriteAsync(oprot, cancellationToken); await oprot.WriteFieldEndAsync(cancellationToken); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp437.Name = "operationHandle"; tmp437.Type = TType.Struct; @@ -178,11 +178,11 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((Status != null)) + if ((Status != null)) { hashcode = (hashcode * 397) + Status.GetHashCode(); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { hashcode = (hashcode * 397) + OperationHandle.GetHashCode(); } @@ -193,12 +193,12 @@ public override int GetHashCode() { public override string ToString() { var tmp438 = new StringBuilder("TUploadDataResp("); - if((Status != null)) + if ((Status != null)) { tmp438.Append(", Status: "); Status.ToString(tmp438); } - if((OperationHandle != null)) + if ((OperationHandle != null)) { tmp438.Append(", OperationHandle: "); OperationHandle.ToString(tmp438); diff --git a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs index 893a5a0c41..78f4d34442 100644 --- a/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs +++ b/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TUserDefinedTypeEntry.cs @@ -51,7 +51,7 @@ public TUserDefinedTypeEntry(string typeClassName) : this() public TUserDefinedTypeEntry DeepCopy() { var tmp50 = new TUserDefinedTypeEntry(); - if((TypeClassName != null)) + if ((TypeClassName != null)) { tmp50.TypeClassName = this.TypeClassName; } @@ -115,7 +115,7 @@ public TUserDefinedTypeEntry DeepCopy() var tmp51 = new TStruct("TUserDefinedTypeEntry"); await oprot.WriteStructBeginAsync(tmp51, cancellationToken); var tmp52 = new TField(); - if((TypeClassName != null)) + if ((TypeClassName != null)) { tmp52.Name = "typeClassName"; tmp52.Type = TType.String; @@ -143,7 +143,7 @@ public override bool Equals(object that) public override int GetHashCode() { int hashcode = 157; unchecked { - if((TypeClassName != null)) + if ((TypeClassName != null)) { hashcode = (hashcode * 397) + TypeClassName.GetHashCode(); } @@ -154,7 +154,7 @@ public override int GetHashCode() { public override string ToString() { var tmp53 = new StringBuilder("TUserDefinedTypeEntry("); - if((TypeClassName != null)) + if ((TypeClassName != null)) { tmp53.Append(", TypeClassName: "); TypeClassName.ToString(tmp53); From 843896bff6449580a2072a209bb61cd7034b498d Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Fri, 5 Apr 2024 17:23:41 -0700 Subject: [PATCH 42/61] test(csharp/test): add tests for numeric values using the Spark ADBC driver. --- .../Apache/Hive2/HiveServer2Statement.cs | 4 +- .../Drivers/Apache/Spark/SparkStatement.cs | 9 +- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 12 +- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 508 ++++++++++++++++++ .../Drivers/Apache/ApacheTestConfiguration.cs | 2 +- .../test/Drivers/Apache/Spark/DriverTests.cs | 44 +- .../Drivers/Apache/Spark/NumericValueTests.cs | 246 +++++++++ .../Drivers/Apache/Spark/SparkTestBase.cs | 63 +++ .../Apache/Spark/SparkTestConfiguration.cs | 4 +- .../Drivers/Apache/Spark/SparkTestingUtils.cs | 107 ---- 10 files changed, 854 insertions(+), 145 deletions(-) create mode 100644 csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs create mode 100644 csharp/test/Drivers/Apache/Spark/NumericValueTests.cs create mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestBase.cs delete mode 100644 csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs index 0076c090fa..d41ea36490 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs @@ -15,7 +15,6 @@ * limitations under the License. */ -using System; using System.Threading; using Apache.Hive.Service.Rpc.Thrift; @@ -42,9 +41,8 @@ protected void ExecuteStatement() var executeResponse = this.connection.client.ExecuteStatement(executeRequest).Result; if (executeResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) { - throw new Exception(executeResponse.Status.ErrorMessage); + throw new AdbcException(executeResponse.Status.ErrorMessage); } - this.operationHandle = executeResponse.OperationHandle; } diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 5d9c8ed69c..b686d802f3 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -76,7 +76,8 @@ public override UpdateResult ExecuteUpdate() throw new AdbcException($"Unexpected data type for column: '{NumberOfAffectedRowsColumnName}'", new ArgumentException(NumberOfAffectedRowsColumnName)); } - long affectedRows = 0; + // If no altered rows, i.e. DDC statements, then -1 is the default. + long? affectedRows = null; while (true) { using RecordBatch nextBatch = stream.ReadNextRecordBatchAsync().Result; @@ -85,12 +86,12 @@ public override UpdateResult ExecuteUpdate() // Note: should only have one item, but iterate for completeness for (int i = 0; i < numOfModifiedArray.Length; i++) { - affectedRows += numOfModifiedArray.GetValue(i).GetValueOrDefault(0); + // Note: handle the case where the affected rows are zero (0). + affectedRows = (affectedRows ?? 0) + numOfModifiedArray.GetValue(i).GetValueOrDefault(0); } } - // If no altered rows, i.e. DDC statements, then -1 is the default. - return new UpdateResult(affectedRows == 0 ? -1 : affectedRows); + return new UpdateResult(affectedRows ?? -1); } public override object GetValue(IArrowArray arrowArray, int index) diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index 96da30de0b..f3283c3ed8 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -38,14 +38,14 @@ static IArrowType GetArrowType(TTypeEntry thriftType) { if (thriftType.PrimitiveEntry != null) { - return GetArrowType(thriftType.PrimitiveEntry.Type); + return GetArrowType(thriftType.PrimitiveEntry); } throw new InvalidOperationException(); } - public static IArrowType GetArrowType(TTypeId thriftType) + public static IArrowType GetArrowType(TPrimitiveTypeEntry thriftType) { - switch (thriftType) + switch (thriftType.Type) { case TTypeId.BIGINT_TYPE: return Int64Type.Default; case TTypeId.BINARY_TYPE: return BinaryType.Default; @@ -62,8 +62,12 @@ public static IArrowType GetArrowType(TTypeId thriftType) case TTypeId.TINYINT_TYPE: return Int8Type.Default; case TTypeId.VARCHAR_TYPE: return StringType.Default; - // ??? case TTypeId.DECIMAL_TYPE: + var precision = thriftType.TypeQualifiers.Qualifiers["precision"].I32Value; + var scale = thriftType.TypeQualifiers.Qualifiers["scale"].I32Value; + return new Decimal128Type(precision, scale); + + // ??? case TTypeId.INTERVAL_DAY_TIME_TYPE: case TTypeId.INTERVAL_YEAR_MONTH_TYPE: return StringType.Default; diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs new file mode 100644 index 0000000000..7bc57a1bb6 --- /dev/null +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -0,0 +1,508 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Apache.Arrow.Ipc; +using Apache.Arrow.Types; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests +{ + /// + /// Provides a base class for ADBC tests. + /// + /// A TestConfiguration type to use when accessing test configuration files. + public abstract class TestBase : IDisposable where T : TestConfiguration + { + private bool _disposedValue; + private T _testConfiguration; + private AdbcConnection _connection = null; + private AdbcStatement _statement = null; + + private TestBase() { } + + /// + /// Constructs a new TestBase object. + /// + /// Test output helper for writing test output. + public TestBase(ITestOutputHelper outputHelper) + { + OutputHelper = outputHelper; + } + + /// + /// Gets the test ouput helper. + /// + protected ITestOutputHelper OutputHelper { get; } + + /// + /// The name of the environment variable that stores the full location of the test configuration file. + /// + protected abstract string TestConfigVariable { get; } + + /// + /// Creates a temporary table (if possible) using the native SQL dialect. + /// + /// The ADBC statement to apply the update. + /// The columns definition in the native SQL dialect. + /// A disposable temporary table object that will drop the table when disposed. + protected virtual TemporaryTable NewTemporaryTable(AdbcStatement statement, string columns) + { + string tableName = NewTableName(); + string sqlUpdate = string.Format("CREATE TEMPORARY IF NOT EXISTS TABLE {0} ({1})", tableName, columns); + return TemporaryTable.NewTemporaryTable(statement, tableName, sqlUpdate); + } + + /// + /// Creates a new unique table name . + /// + /// A unique table name. + protected virtual string NewTableName() => string.Format( + "{0}.{1}.{2}", + TestConfiguration.Metadata.Catalog, + TestConfiguration.Metadata.Schema, + Guid.NewGuid().ToString().Replace("-", "") + ); + + /// + /// Gets the relative resource location of source SQL data used in driver testing. + /// + protected abstract string SqlDataResourceLocation { get; } + + /// + /// Creates a new driver. + /// + protected abstract AdbcDriver NewDriver { get; } + + /// + /// Gets the parameters from the test configuration that are passed to the driver as a dictionary. + /// + /// The test configuration as input. + /// Ditionary of parameters for the driver. + protected abstract Dictionary GetDriverParameters(T testConfiguration); + + /// + /// Gets a single ADBC Connection for the object. + /// + protected AdbcConnection Connection + { + get + { + if (_connection == null) + { + _connection = NewConnection(); + } + return _connection; + } + } + + /// + /// Gets as single ADBC Statement for the object. + /// + protected AdbcStatement Statement + { + get + { + if (_statement == null) + { + _statement = Connection.CreateStatement(); + } + return _statement; + } + } + + /// + /// Gets the test configuration file. + /// + protected T TestConfiguration + { + get + { + if (_testConfiguration == null) + { + _testConfiguration = Utils.LoadTestConfiguration(TestConfigVariable); + } + return _testConfiguration; + } + } + + /// + /// Parses the queries from internal resource location + /// + protected string[] GetQueries() + { + const string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; + string[] sql = File.ReadAllLines(SqlDataResourceLocation); + + StringBuilder content = new StringBuilder(); + foreach (string line in sql) + { + if (line.TrimStart().StartsWith("--")) { continue; } + if (line.Contains(placeholder)) + { + // TODO: Try 3-level name + string modifiedLine = line.Replace(placeholder, $"{TestConfiguration.Metadata.Catalog}.{TestConfiguration.Metadata.Schema}.{TestConfiguration.Metadata.Table}"); + content.AppendLine(modifiedLine); + } + else + { + content.AppendLine(line); + } + } + + string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); + + return queries; + } + + /// + /// Gets a the Spark ADBC driver with settings from the . + /// + /// + /// + /// + protected AdbcConnection NewConnection(T testConfiguration = null, IReadOnlyDictionary connectionOptions = null) + { + Dictionary parameters = GetDriverParameters(testConfiguration ?? TestConfiguration); + AdbcDatabase database = NewDriver.Open(parameters); + return database.Connect(connectionOptions ?? new Dictionary()); + } + + /// + /// Validates that an insert, select and delete statement works with the given value. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to insert, select and delete. + /// + protected async Task ValidateInsertSelectDeleteSingleValue(string tableName, string columnName, object value) + { + InsertSingleValue(tableName, columnName, value.ToString()); + await SelectAndValidateValues(tableName, columnName, value, 1); + DeleteFromTable(tableName, string.Format("{0}={1}", columnName, value), 1); + } + + /// + /// Inserts a single value into a table. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to insert. + protected virtual void InsertSingleValue(string tableName, string columnName, string value) + { + string insertNumberStatement = GetInsertValueStatement(tableName, columnName, value); + OutputHelper.WriteLine(insertNumberStatement); + Statement.SqlQuery = insertNumberStatement; + UpdateResult updateResult = Statement.ExecuteUpdate(); + Assert.Equal(1, updateResult.AffectedRows); + } + + /// + /// Gets the native SQL statment to insert a single value. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to insert. + /// + protected virtual string GetInsertValueStatement(string tableName, string columnName, string value) => + string.Format("INSERT INTO {0} ({1}) VALUES ({2});", tableName, columnName, value); + + /// + /// Deletes a (single) value from a table. + /// + /// The name of the table to use. + /// The WHERE clause string. + /// The expected number of affected rows. + protected virtual void DeleteFromTable(string tableName, string whereClause, int expectedRowsAffected) + { + string deleteNumberStatement = GetDeleteValueStatement(tableName, whereClause); + OutputHelper.WriteLine(deleteNumberStatement); + Statement.SqlQuery = deleteNumberStatement; + UpdateResult updateResult = Statement.ExecuteUpdate(); + Assert.Equal(expectedRowsAffected, updateResult.AffectedRows); + } + + /// + /// Gets the native SQL statement to delete (single) value. + /// + /// The name of the table to use. + /// The WHERE clause string. + /// + protected virtual string GetDeleteValueStatement(string tableName, string whereClause) => + string.Format("DELETE FROM {0} WHERE {1};", tableName, whereClause); + + /// + /// Selects a single value and validates it equality with expected value and number of results. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to select and validate. + /// The number of expected results (rows). + /// + protected virtual async Task SelectAndValidateValues(string table, string columnName, object value, int expectedLength) + { + string selectNumberStatement = GetSelectSingleValueStatement(table, columnName, value); + OutputHelper.WriteLine(selectNumberStatement); + Statement.SqlQuery = selectNumberStatement; + QueryResult queryResult = Statement.ExecuteQuery(); + int actualLength = 0; + using (IArrowArrayStream stream = queryResult.Stream) + { + Field field = stream.Schema.GetFieldByName(columnName); + while (true) + { + using (RecordBatch nextBatch = await stream.ReadNextRecordBatchAsync()) + { + if (nextBatch == null) { break; } + switch (field.DataType) + { + case Decimal128Type: + Decimal128Array decimalArray = (Decimal128Array)nextBatch.Column(0); + actualLength += decimalArray.Length; + ValidateValue(value, decimalArray.Length, (i) => decimalArray.GetSqlDecimal(i)); + break; + case DoubleType: + DoubleArray doubleArray = (DoubleArray)nextBatch.Column(0); + actualLength += doubleArray.Length; + ValidateValue(value, doubleArray.Length, (i) => doubleArray.GetValue(i)); + break; + case FloatType: + FloatArray floatArray = (FloatArray)nextBatch.Column(0); + actualLength += floatArray.Length; + ValidateValue(value, floatArray.Length, (i) => floatArray.GetValue(i)); + break; + case Int32Type: + Int32Array intArray = (Int32Array)nextBatch.Column(0); + actualLength += intArray.Length; + ValidateValue(value, intArray.Length, (i) => intArray.GetValue(i)); + break; + case Int16Type: + Int16Array shortArray = (Int16Array)nextBatch.Column(0); + actualLength += shortArray.Length; + ValidateValue(value, shortArray.Length, (i) => shortArray.GetValue(i)); + break; + case Int8Type: + Int8Array tinyIntArray = (Int8Array)nextBatch.Column(0); + actualLength += tinyIntArray.Length; + ValidateValue(value, tinyIntArray.Length, (i) => tinyIntArray.GetValue(i)); + break; + case StringType: + StringArray stringArray = (StringArray)nextBatch.Column(0); + actualLength += stringArray.Length; + ValidateValue(value, stringArray.Length, (i) => stringArray.GetString(i)); + break; + default: + Assert.Fail($"Unhandled datatype {field.DataType}"); + break; + + } + } + } + Assert.Equal(expectedLength, actualLength); + } + } + + /// + /// Validates a single values for all results (in the batch). + /// + /// The value to validate. + /// The length of the current batch/array. + /// The getter function to retrieve the actual value. + private static void ValidateValue(object value, int length, Func getter) + { + for (int i = 0; i < length; i++) + { + Assert.Equal(value, getter(i)); + } + } + + /// + /// Gets the native SQL statement to select the (single) value from the table. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to select and validate. + /// The native SQL statement. + protected virtual string GetSelectSingleValueStatement(string table, string columnName, object value) => string.Format( + "SELECT {0} FROM {1} WHERE {0}={2};", + columnName, + table, + value.GetType() == typeof(float) + ? ConvertFloatToString((float)value) + : value.GetType() == typeof(double) + ? ConvertDoubleToString((double)value) + : value + ); + + /// + /// Converts double values to it's String equivalent. + /// + /// The double value to convert. + /// The String representation of the double value. + protected static string ConvertDoubleToString(double value) + { + switch (value) + { + case double.PositiveInfinity: + return "'inf'"; + case double.NegativeInfinity: + return "'-inf'"; + case double.NaN: + return "'NaN'"; +#if NET472 + // Double.ToString() rounds max/min values, causing Snowflake to store +/- infinity + case double.MaxValue: + return "1.7976931348623157E+308"; + case double.MinValue: + return "-1.7976931348623157E+308"; +#endif + default: + return value.ToString(CultureInfo.InvariantCulture); + } + } + + /// + /// Converts float values to it's String equivalent. + /// + /// The float value to convert. + /// The String representation of the float value. + protected static string ConvertFloatToString(float value) + { + switch (value) + { + case float.PositiveInfinity: + return "'inf'"; + case float.NegativeInfinity: + return "'-inf'"; + case float.NaN: + return "'NaN'"; +#if NET472 + // Float.ToString() rounds max/min values, causing Snowflake to store +/- infinity + case float.MaxValue: + return "3.40282347E+38"; + case float.MinValue: + return "-3.40282347E+38"; +#endif + default: + return value.ToString(CultureInfo.InvariantCulture); + } + } + + /// + /// Disposes managed and unmanaged resources. + /// + /// Indicator of whether this method is called explicitly or implicitly. + protected virtual void Dispose(bool disposing) + { + if (!_disposedValue) + { + if (disposing) + { + if (_statement != null) + { + _statement.Dispose(); + _statement = null; + } + if (_connection != null) + { + _connection.Dispose(); + _connection = null; + } + } + + _disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + + /// + /// Represents a temporary table that can create and drop the table automatically. + /// + public class TemporaryTable : IDisposable + { + private bool _disposedValue; + private readonly AdbcStatement _statement; + + /// + /// Gets the name of the table. + /// + public string TableName { get; } + + private TemporaryTable(AdbcStatement statement, string tableName, string sqlQuery) + { + TableName = tableName; + _statement = statement; + statement.SqlQuery = sqlQuery; + statement.ExecuteUpdate(); + } + + /// + /// Creates a new instance of a temporary table. + /// + /// The ADBC statement to run the create table query. + /// The name of temporary table to create. + /// The SQL query to create the table in the native SQL dialect. + /// + public static TemporaryTable NewTemporaryTable(AdbcStatement statement, string tableName, string sqlUpdate) + { + return new TemporaryTable(statement, tableName, sqlUpdate); + } + + /// + /// Drops the tables. + /// + protected virtual void Drop() + { + _statement.SqlQuery = $"DROP TABLE {TableName}"; + _statement.ExecuteUpdate(); + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposedValue) + { + if (disposing) + { + Drop(); + } + + _disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } + } +} diff --git a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs index 2d419e77c1..5c09a06d4b 100644 --- a/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs +++ b/csharp/test/Drivers/Apache/ApacheTestConfiguration.cs @@ -19,7 +19,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Apache { - internal class ApacheTestConfiguration : TestConfiguration + public class ApacheTestConfiguration : TestConfiguration { [JsonPropertyName("hostName")] public string HostName { get; set; } diff --git a/csharp/test/Drivers/Apache/Spark/DriverTests.cs b/csharp/test/Drivers/Apache/Spark/DriverTests.cs index 7c8d31ff41..74043cf07e 100644 --- a/csharp/test/Drivers/Apache/Spark/DriverTests.cs +++ b/csharp/test/Drivers/Apache/Spark/DriverTests.cs @@ -22,6 +22,7 @@ using Apache.Arrow.Adbc.Tests.Xunit; using Apache.Arrow.Ipc; using Xunit; +using Xunit.Abstractions; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { @@ -33,14 +34,11 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark /// queries to run. /// [TestCaseOrderer("Apache.Arrow.Adbc.Tests.Xunit.TestOrderer", "Apache.Arrow.Adbc.Tests")] - public class DriverTests + public class DriverTests : SparkTestBase { - SparkTestConfiguration _testConfiguration; - - public DriverTests() + public DriverTests(ITestOutputHelper outputHelper) : base(outputHelper) { - Skip.IfNot(Utils.CanExecuteTestConfig(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE)); - _testConfiguration = Utils.LoadTestConfiguration(SparkTestingUtils.SPARK_TEST_CONFIG_VARIABLE); + Skip.IfNot(Utils.CanExecuteTestConfig(TestConfigVariable)); } /// @@ -49,9 +47,9 @@ public DriverTests() [SkippableFact, Order(1)] public void CanExecuteUpdate() { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); - string[] queries = SparkTestingUtils.GetQueries(_testConfiguration); + string[] queries = GetQueries(); List expectedResults = new() { -1, // DROP TABLE @@ -81,7 +79,7 @@ public void CanExecuteUpdate() [SkippableFact, Order(2)] public void CanGetInfo() { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); IArrowArrayStream stream = adbcConnection.GetInfo(new List() { AdbcInfoCode.DriverName, AdbcInfoCode.DriverVersion, AdbcInfoCode.VendorName }); @@ -109,12 +107,12 @@ public void CanGetInfo() public void CanGetObjects() { // need to add the database - string catalogName = _testConfiguration.Metadata.Catalog; - string schemaName = _testConfiguration.Metadata.Schema; - string tableName = _testConfiguration.Metadata.Table; + string catalogName = TestConfiguration.Metadata.Catalog; + string schemaName = TestConfiguration.Metadata.Schema; + string tableName = TestConfiguration.Metadata.Table; string columnName = null; - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); IArrowArrayStream stream = adbcConnection.GetObjects( depth: AdbcConnection.GetObjectsDepth.All, @@ -136,7 +134,7 @@ public void CanGetObjects() .Select(c => c.Columns) .FirstOrDefault(); - Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, columns.Count); + Assert.Equal(TestConfiguration.Metadata.ExpectedColumnCount, columns.Count); } /// @@ -145,17 +143,17 @@ public void CanGetObjects() [SkippableFact, Order(4)] public void CanGetTableSchema() { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); - string catalogName = _testConfiguration.Metadata.Catalog; - string schemaName = _testConfiguration.Metadata.Schema; - string tableName = _testConfiguration.Metadata.Table; + string catalogName = TestConfiguration.Metadata.Catalog; + string schemaName = TestConfiguration.Metadata.Schema; + string tableName = TestConfiguration.Metadata.Table; Schema schema = adbcConnection.GetTableSchema(catalogName, schemaName, tableName); int numberOfFields = schema.FieldsList.Count; - Assert.Equal(_testConfiguration.Metadata.ExpectedColumnCount, numberOfFields); + Assert.Equal(TestConfiguration.Metadata.ExpectedColumnCount, numberOfFields); } /// @@ -164,7 +162,7 @@ public void CanGetTableSchema() [SkippableFact, Order(5)] public void CanGetTableTypes() { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); IArrowArrayStream arrowArrayStream = adbcConnection.GetTableTypes(); @@ -199,14 +197,14 @@ public void CanGetTableTypes() [SkippableFact, Order(6)] public void CanExecuteQuery() { - AdbcConnection adbcConnection = SparkTestingUtils.GetSparkAdbcConnection(_testConfiguration); + AdbcConnection adbcConnection = NewConnection(); AdbcStatement statement = adbcConnection.CreateStatement(); - statement.SqlQuery = _testConfiguration.Query; + statement.SqlQuery = TestConfiguration.Query; QueryResult queryResult = statement.ExecuteQuery(); - Tests.DriverTests.CanExecuteQuery(queryResult, _testConfiguration.ExpectedResultsCount); + Tests.DriverTests.CanExecuteQuery(queryResult, TestConfiguration.ExpectedResultsCount); } } } diff --git a/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs new file mode 100644 index 0000000000..e68dc79f1a --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs @@ -0,0 +1,246 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System.Data.SqlTypes; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + public class NumericValueTests : SparkTestBase + { + /// + /// Validates that specific numeric values can be inserted, retrieved and targeted correctly + /// + public NumericValueTests(ITestOutputHelper output) : base(output) { } + + /// + /// Validates if driver can send and receive specific Integer values correctly + /// + [SkippableTheory] + [InlineData(-1)] + [InlineData(0)] + [InlineData(1)] + public async Task TestIntegerSanity(int value) + { + string columnName = "INTTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} INT", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); + } + + /// + /// Validates if driver can handle the largest / smallest numbers + /// + [SkippableTheory] + [InlineData(2147483647)] + [InlineData(-2147483648)] + public async Task TestIntegerMinMax(int value) + { + string columnName = "INTTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} INT", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); + } + + /// + /// Validates if driver can handle the largest / smallest numbers + /// + [SkippableTheory] + [InlineData(short.MaxValue)] + [InlineData(short.MinValue)] + public async Task TestSmallIntMinMax(short value) + { + string columnName = "SMALLINTTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} SMALLINT", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); + } + + /// + /// Validates if driver can handle the largest / smallest numbers + /// + [SkippableTheory] + [InlineData(sbyte.MaxValue)] + [InlineData(sbyte.MinValue)] + public async Task TestTinyIntMinMax(sbyte value) + { + string columnName = "TINYINTTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} TINYINT", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); + } + + /// + /// Validates if driver can handle smaller Number type correctly + /// + [SkippableTheory] + [InlineData("-1")] + [InlineData("0")] + [InlineData("1")] + [InlineData("99")] + [InlineData("-99")] + public async Task TestSmallNumberRange(string value) + { + string columnName = "SMALLNUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(2,0)", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value)); + } + + /// + /// Validates if driver correctly errors out when the values exceed the column's limit + /// + [SkippableTheory] + [InlineData(-100)] + [InlineData(100)] + [InlineData(int.MaxValue)] + [InlineData(int.MinValue)] + public async Task TestSmallNumberRangeOverlimit(int value) + { + string columnName = "SMALLNUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(2,0)", columnName)); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, new SqlDecimal(value))); + } + + /// + /// Validates if driver can handle a large scale Number type correctly + /// + [SkippableTheory] + [InlineData("0")] + [InlineData("-2.003")] + [InlineData("4.85")] + [InlineData("0.0000000000000000000000000000000000001")] + [InlineData("9.5545204502636499875576383003668916798")] + public async Task TestLargeScaleNumberRange(string value) + { + string columnName = "LARGESCALENUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,37)", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value)); + } + + /// + /// Validates if driver can error handle when input goes beyond a large scale Number type + /// + [SkippableTheory] + [InlineData("-10")] + [InlineData("10")] + [InlineData("99999999999999999999999999999999999999")] + [InlineData("-99999999999999999999999999999999999999")] + public async Task TestLargeScaleNumberOverlimit(string value) + { + string columnName = "LARGESCALENUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,37)", columnName)); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); + } + + /// + /// Validates if driver can handle a small scale Number type correctly + /// + [SkippableTheory] + [InlineData("0")] + [InlineData("4.85")] + [InlineData("-999999999999999999999999999999999999.99")] + [InlineData("999999999999999999999999999999999999.99")] + public async Task TestSmallScaleNumberRange(string value) + { + string columnName = "SMALLSCALENUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,2)", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value)); + } + + /// + /// Validates if driver can error handle when an insert goes beyond a small scale Number type correctly + /// + [SkippableTheory] + [InlineData("-99999999999999999999999999999999999999")] + [InlineData("99999999999999999999999999999999999999")] + public async Task TestSmallScaleNumberOverlimit(string value) + { + string columnName = "SMALLSCALENUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,2)", columnName)); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); + } + + + /// + /// Tests that decimals are rounded as expected. + /// Snowflake allows inserts of scales beyond the data type size, but storage of value will round it up or down + /// + [SkippableTheory] + [InlineData(2.467, 2.47)] + [InlineData(-672.613, -672.61)] + public async Task TestRoundingNumbers(decimal input, decimal output) + { + string columnName = "SMALLSCALENUMBER"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,2)", columnName)); + SqlDecimal value = new SqlDecimal(input); + SqlDecimal returned = new SqlDecimal(output); + InsertSingleValue(table.TableName, columnName, value.ToString()); + await SelectAndValidateValues(table.TableName, columnName, returned, 1); + DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, returned), 1); + } + + /// + /// Validates if driver can handle floating point number type correctly + /// + [SkippableTheory] + [InlineData(0)] + [InlineData(0.2)] + [InlineData(15e-03)] + [InlineData(1.234E+2)] + [InlineData(double.NegativeInfinity)] + [InlineData(double.PositiveInfinity)] + [InlineData(double.NaN)] + [InlineData(double.MinValue)] + [InlineData(double.MaxValue)] + public async Task TestDoubleValuesInsertSelectDelete(double value) + { + string columnName = "DOUBLETYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DOUBLE", columnName)); + string valueString = ConvertDoubleToString(value); + InsertSingleValue(table.TableName, columnName, valueString); + await SelectAndValidateValues(table.TableName, columnName, value, 1); + DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, valueString), 1); + } + + /// + /// Validates if driver can handle floating point number type correctly + /// + [SkippableTheory] + [InlineData(0)] + [InlineData(25)] + [InlineData(float.NegativeInfinity)] + [InlineData(float.PositiveInfinity)] + [InlineData(float.NaN)] + // TODO: Solve server issue when non-integer float value is used in where clause. + //[InlineData(25.1)] + //[InlineData(0.2)] + //[InlineData(15e-03)] + //[InlineData(1.234E+2)] + //[InlineData(float.MinValue)] + //[InlineData(float.MaxValue)] + public async Task TestFloatValuesInsertSelectDelete(float value) + { + string columnName = "FLOATTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} FLOAT", columnName)); + string valueString = ConvertFloatToString(value); + InsertSingleValue(table.TableName, columnName, valueString); + await SelectAndValidateValues(table.TableName, columnName, value, 1); + DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, valueString), 1); + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs b/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs new file mode 100644 index 0000000000..4abe9ac46a --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs @@ -0,0 +1,63 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using Apache.Arrow.Adbc.Drivers.Apache.Spark; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + public class SparkTestBase : TestBase + { + public SparkTestBase(ITestOutputHelper outputHelper) : base(outputHelper) { } + + protected override string TestConfigVariable => "SPARK_TEST_CONFIG_FILE"; + + protected override string SqlDataResourceLocation => "Spark/Resources/SparkData.sql"; + + protected override AdbcDriver NewDriver => new SparkDriver(); + + protected override TemporaryTable NewTemporaryTable(AdbcStatement statement, string columns) { + string tableName = NewTableName(); + // Note: Databricks/Spark doesn't support TEMPORARY table. + string sqlUpdate = string.Format("CREATE TABLE {0} ({1})", tableName, columns); + return TemporaryTable.NewTemporaryTable(statement, tableName, sqlUpdate); + } + + protected override Dictionary GetDriverParameters(SparkTestConfiguration testConfiguration) + { + Dictionary parameters = new(StringComparer.OrdinalIgnoreCase); + + // TODO: make these parameters that are passed in + if (!string.IsNullOrEmpty(testConfiguration.HostName)) + { + parameters.Add("HostName", testConfiguration.HostName); + } + if (!string.IsNullOrEmpty(testConfiguration.Path)) + { + parameters.Add("Path", testConfiguration.Path); + } + if (!string.IsNullOrEmpty(testConfiguration.Token)) + { + parameters.Add("Token", testConfiguration.Token); + } + + return parameters; + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs index c73134dd85..90dd7150ba 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTestConfiguration.cs @@ -15,11 +15,9 @@ * limitations under the License. */ -using System.Text.Json.Serialization; - namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { - internal class SparkTestConfiguration : ApacheTestConfiguration + public class SparkTestConfiguration : ApacheTestConfiguration { } diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs b/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs deleted file mode 100644 index ade41a107c..0000000000 --- a/csharp/test/Drivers/Apache/Spark/SparkTestingUtils.cs +++ /dev/null @@ -1,107 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using Apache.Arrow.Adbc.Drivers.Apache.Spark; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - internal class SparkTestingUtils - { - internal const string SPARK_TEST_CONFIG_VARIABLE = "SPARK_TEST_CONFIG_FILE"; - - /// - /// Gets a the Spark ADBC driver with settings from the . - /// - /// - /// - /// - internal static AdbcConnection GetSparkAdbcConnection( - SparkTestConfiguration testConfiguration - ) - { - Dictionary parameters = GetSparkParameters(testConfiguration); - AdbcDatabase database = new SparkDriver().Open(parameters); - AdbcConnection connection = database.Connect(new Dictionary()); - - return connection; - } - - /// - /// Gets the parameters for connecting to Spark. - /// - /// - /// - internal static Dictionary GetSparkParameters(SparkTestConfiguration testConfiguration) - { - Dictionary parameters = new Dictionary(StringComparer.OrdinalIgnoreCase); - - // TODO: make these parameters that are passed in - - if (!string.IsNullOrEmpty(testConfiguration.HostName)) - { - parameters.Add("HostName", testConfiguration.HostName); - } - - if (!string.IsNullOrEmpty(testConfiguration.Path)) - { - parameters.Add("Path", testConfiguration.Path); - } - - if (!string.IsNullOrEmpty(testConfiguration.Token)) - { - parameters.Add("Token", testConfiguration.Token); - } - - return parameters; - } - - /// - /// Parses the queries from resources/SparkData.sql - /// - /// - internal static string[] GetQueries(SparkTestConfiguration testConfiguration) - { - const string placeholder = "{ADBC_CATALOG}.{ADBC_DATASET}.{ADBC_TABLE}"; - string[] sql = File.ReadAllLines("Spark/Resources/SparkData.sql"); - - StringBuilder content = new StringBuilder(); - foreach (string line in sql) - { - if (line.TrimStart().StartsWith("--")) { continue; } - if (line.Contains(placeholder)) - { - // TODO: Try 3-level name - string modifiedLine = line.Replace(placeholder, $"{testConfiguration.Metadata.Catalog}.{testConfiguration.Metadata.Schema}.{testConfiguration.Metadata.Table}"); - content.AppendLine(modifiedLine); - } - else - { - content.AppendLine(line); - } - } - - string[] queries = content.ToString().Split(";".ToCharArray()).Where(x => x.Trim().Length > 0).ToArray(); - - return queries; - } - } -} From 436b189611922168f3263e7f09cb23ae1f58f498 Mon Sep 17 00:00:00 2001 From: David Coe Date: Mon, 8 Apr 2024 11:11:23 -0400 Subject: [PATCH 43/61] add to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b1ede18f04..18a516188c 100644 --- a/.gitignore +++ b/.gitignore @@ -64,6 +64,7 @@ python/doc/ # Egg metadata *.egg-info +.vs .vscode .idea/ .pytest_cache/ From 302fc9884d88125796ddc76db8f999e79f098063 Mon Sep 17 00:00:00 2001 From: David Coe Date: Mon, 8 Apr 2024 11:13:20 -0400 Subject: [PATCH 44/61] fix gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7500e334e9..0c70d830db 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,7 @@ python/doc/ # Egg metadata *.egg-info -.vs +.vs/ .vscode .idea/ .pytest_cache/ From 79d5cd93a8e4565db70ab6abdec4c978bbcd3d91 Mon Sep 17 00:00:00 2001 From: David Coe Date: Mon, 8 Apr 2024 11:15:56 -0400 Subject: [PATCH 45/61] fix gitignore --- .pre-commit-config.yaml | 14 +++++++------- .vs/VSWorkspaceState.json | 7 ------- .vs/arrow-adbc/v17/.wsuo | Bin 11264 -> 0 bytes .vs/arrow-adbc/v17/DocumentLayout.json | 23 ----------------------- 4 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/arrow-adbc/v17/.wsuo delete mode 100644 .vs/arrow-adbc/v17/DocumentLayout.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 17ac98a2be..438d44b3c6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.3.0 + rev: v4.5.0 hooks: - id: check-xml - id: check-yaml @@ -40,7 +40,7 @@ repos: - id: trailing-whitespace exclude: "^r/.*?/_snaps/.*?.md$" - repo: https://github.com/pre-commit/mirrors-clang-format - rev: "v14.0.6" + rev: "v18.1.2" hooks: - id: clang-format types_or: [c, c++] @@ -59,30 +59,30 @@ repos: - "--linelength=90" - "--verbose=2" - repo: https://github.com/golangci/golangci-lint - rev: v1.57.1 + rev: v1.57.2 hooks: - id: golangci-lint entry: bash -c 'cd go/adbc && golangci-lint run --fix --timeout 5m' types_or: [go] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - rev: v2.12.0 + rev: v2.13.0 hooks: - id: pretty-format-golang - id: pretty-format-java args: [--autofix] types_or: [java] - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 24.3.0 hooks: - id: black types_or: [pyi, python] - repo: https://github.com/PyCQA/flake8 - rev: 4.0.1 + rev: 7.0.0 hooks: - id: flake8 types_or: [python] - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort types_or: [python] diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 9458e5e452..0000000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\Apache.Arrow.Adbc.sln", - "PreviewInSolutionExplorer": false -} diff --git a/.vs/arrow-adbc/v17/.wsuo b/.vs/arrow-adbc/v17/.wsuo deleted file mode 100644 index 50e7e37621bd862aad90f1d49a78262638f154eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11264 zcmeHNTW=dh6h2N#q2>~c^Ua*g%$Z|9d~ojZ zPd{JyOFVQ%PRNs;Q*zR%PZ)VQEAkS`tb4Mvv%^=+BipAV#DUvV!KWd^a$U+uYjTgG zj7&o^xGVF)4!s_q{o}opTaOaYv)!|9<9Q%f2!3J;y;7>0X$LH{~FqAyXIW}H5Y*V%gwP^O+G!>EWd#CMLe(Iq0Lj?Oiv*_ zhllN1?$goXz|*wEg9#w5sT2qI0ow0*~&s&jqv2%pYn-9Mj3=;PI4{53-J2 zS!UJu3OtWh)Yg;_g<3$qd*FJev z{_}kQPOV2AI$@b}gJ zvRLmXPEvT(7N3H<>4U9vZj*8Fyg1!VP zD*gh{sSC7)s$mJRzXbV7pFS!+aW#Gp8t%Z-xVo<~b^$A^$*9tQ^IROo4pqU*3u-6W z0-qWjMzH>_<^MYR>HVi0e4bMc?ASb&%b4{V#+iwMPkCwi=dfPx{2Yy1Mugj_quq0j zpF`&42+zj)?kfYPxB!mrvjS{oT0z2Y>wjhhF+eooBzDKL=hf@ul=cq zz2MW1*uOPKbq2-A)a(2s1BEoycM-EmFLmZP2c1tCoR5R0&!ISd*@tq!i)U7*Wmy)n zC-bzbBfpB%tcsnxgwvdNyb|h6uXb6Tb5(WbEvqw-KESqE$QQ8RJ80jT=zDx2Uv_R7 z(4wWc0S!7-^WN+3<)$VtqLw4yOyZ(#eyrV6c+Tv@{DBeg4O#dYu4k9Sxk_)Op*&4} z0~7fOzee)Z{IG2vyvJ}47_rl-Onzk|V`Wly+DaEzl2-n*Jz+WaSU#B_pGc?1ClyoF zb(Q0+&#-*e$}LPM@%h$qiW5`m{G^q1#;2@wI-Roeb}D0yC7sE%?OZNqrdIBg%bba( zyALRV_%zaX1Fy?4Vi9Ee7&MpPVbrVsnDIF?e-QCMj^C%l#eshO=Xl3|vN#17vEz8- zz{5r)ENuUY6Mx}do%`s1k!ex;HD)*C9A$iO{3%BKPyG+*e~kaB_}4`UjBmBD*YQ6;eD@cyf{OQanh)c@+)K~n x;T(cdTW|PVO%Q%x{$0yo@%^aEUu#9&_+78@Kk6>y$JE?7@yCArP)jgg`X6u9-yr}1 diff --git a/.vs/arrow-adbc/v17/DocumentLayout.json b/.vs/arrow-adbc/v17/DocumentLayout.json deleted file mode 100644 index 03a3535a95..0000000000 --- a/.vs/arrow-adbc/v17/DocumentLayout.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Version": 1, - "WorkspaceRootPath": "C:\\Users\\gopal.lal\\source\\repos\\arrow-adbc\\", - "Documents": [], - "DocumentGroupContainers": [ - { - "Orientation": 0, - "VerticalTabListWidth": 256, - "DocumentGroups": [ - { - "DockedWidth": 200, - "SelectedChildIndex": -1, - "Children": [ - { - "$type": "Bookmark", - "Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}" - } - ] - } - ] - } - ] -} From 9d11fdc48700c69149b645f321dd8b3076dad35c Mon Sep 17 00:00:00 2001 From: David Coe Date: Mon, 8 Apr 2024 13:34:56 -0400 Subject: [PATCH 46/61] fixes from pre-commit --- .pre-commit-config.yaml | 4 ++-- c/validation/adbc_validation_util.h | 8 ++------ python/adbc_driver_flightsql/LICENSE.txt | 2 +- python/adbc_driver_flightsql/NOTICE.txt | 2 +- python/adbc_driver_manager/LICENSE.txt | 2 +- python/adbc_driver_manager/NOTICE.txt | 2 +- python/adbc_driver_manager/adbc_driver_manager/dbapi.py | 3 +-- python/adbc_driver_manager/tests/test_lowlevel.py | 2 +- python/adbc_driver_postgresql/LICENSE.txt | 2 +- python/adbc_driver_postgresql/NOTICE.txt | 2 +- python/adbc_driver_postgresql/benchmarks/benchmarks.py | 3 +-- python/adbc_driver_snowflake/LICENSE.txt | 2 +- python/adbc_driver_snowflake/NOTICE.txt | 2 +- .../adbc_driver_snowflake/__init__.py | 6 +++--- python/adbc_driver_sqlite/LICENSE.txt | 2 +- python/adbc_driver_sqlite/NOTICE.txt | 2 +- 16 files changed, 20 insertions(+), 26 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 438d44b3c6..5a1d2d8b97 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: check-xml - id: check-yaml @@ -40,7 +40,7 @@ repos: - id: trailing-whitespace exclude: "^r/.*?/_snaps/.*?.md$" - repo: https://github.com/pre-commit/mirrors-clang-format - rev: "v18.1.2" + rev: "v18.1.3" hooks: - id: clang-format types_or: [c, c++] diff --git a/c/validation/adbc_validation_util.h b/c/validation/adbc_validation_util.h index e5ad996246..683103e175 100644 --- a/c/validation/adbc_validation_util.h +++ b/c/validation/adbc_validation_util.h @@ -232,12 +232,8 @@ struct GetObjectsReader { } ~GetObjectsReader() { AdbcGetObjectsDataDelete(get_objects_data_); } - struct AdbcGetObjectsData* operator*() { - return get_objects_data_; - } - struct AdbcGetObjectsData* operator->() { - return get_objects_data_; - } + struct AdbcGetObjectsData* operator*() { return get_objects_data_; } + struct AdbcGetObjectsData* operator->() { return get_objects_data_; } private: struct AdbcGetObjectsData* get_objects_data_; diff --git a/python/adbc_driver_flightsql/LICENSE.txt b/python/adbc_driver_flightsql/LICENSE.txt index 1ef648f64b..8d9e813ef2 120000 --- a/python/adbc_driver_flightsql/LICENSE.txt +++ b/python/adbc_driver_flightsql/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt \ No newline at end of file +../../LICENSE.txt diff --git a/python/adbc_driver_flightsql/NOTICE.txt b/python/adbc_driver_flightsql/NOTICE.txt index fb051c92b1..c0bcc339c3 120000 --- a/python/adbc_driver_flightsql/NOTICE.txt +++ b/python/adbc_driver_flightsql/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt \ No newline at end of file +../../NOTICE.txt diff --git a/python/adbc_driver_manager/LICENSE.txt b/python/adbc_driver_manager/LICENSE.txt index 1ef648f64b..8d9e813ef2 120000 --- a/python/adbc_driver_manager/LICENSE.txt +++ b/python/adbc_driver_manager/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt \ No newline at end of file +../../LICENSE.txt diff --git a/python/adbc_driver_manager/NOTICE.txt b/python/adbc_driver_manager/NOTICE.txt index fb051c92b1..c0bcc339c3 120000 --- a/python/adbc_driver_manager/NOTICE.txt +++ b/python/adbc_driver_manager/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt \ No newline at end of file +../../NOTICE.txt diff --git a/python/adbc_driver_manager/adbc_driver_manager/dbapi.py b/python/adbc_driver_manager/adbc_driver_manager/dbapi.py index 4c17bb6e7b..fea644514a 100644 --- a/python/adbc_driver_manager/adbc_driver_manager/dbapi.py +++ b/python/adbc_driver_manager/adbc_driver_manager/dbapi.py @@ -235,8 +235,7 @@ def __exit__(self, exc_type, exc_val, exc_tb) -> None: self.close() @abc.abstractmethod - def close(self) -> None: - ... + def close(self) -> None: ... class _SharedDatabase(_Closeable): diff --git a/python/adbc_driver_manager/tests/test_lowlevel.py b/python/adbc_driver_manager/tests/test_lowlevel.py index f94c90415f..d2940aef18 100644 --- a/python/adbc_driver_manager/tests/test_lowlevel.py +++ b/python/adbc_driver_manager/tests/test_lowlevel.py @@ -80,7 +80,7 @@ def test_error_mapping(): ] message = "Message" - for (klass, code) in cases: + for klass, code in cases: with pytest.raises(klass) as exc_info: _lib._test_error(code, message, vendor_code=None, sqlstate=None) assert message in exc_info.value.args[0] diff --git a/python/adbc_driver_postgresql/LICENSE.txt b/python/adbc_driver_postgresql/LICENSE.txt index 1ef648f64b..8d9e813ef2 120000 --- a/python/adbc_driver_postgresql/LICENSE.txt +++ b/python/adbc_driver_postgresql/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt \ No newline at end of file +../../LICENSE.txt diff --git a/python/adbc_driver_postgresql/NOTICE.txt b/python/adbc_driver_postgresql/NOTICE.txt index fb051c92b1..c0bcc339c3 120000 --- a/python/adbc_driver_postgresql/NOTICE.txt +++ b/python/adbc_driver_postgresql/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt \ No newline at end of file +../../NOTICE.txt diff --git a/python/adbc_driver_postgresql/benchmarks/benchmarks.py b/python/adbc_driver_postgresql/benchmarks/benchmarks.py index 037bb30045..4d9a4bf4c3 100644 --- a/python/adbc_driver_postgresql/benchmarks/benchmarks.py +++ b/python/adbc_driver_postgresql/benchmarks/benchmarks.py @@ -60,8 +60,7 @@ def teardown(self, *args, **kwargs) -> None: self.sqlalchemy_connection.close() @abc.abstractmethod - def _make_table_name(self, *args, **kwargs) -> str: - ... + def _make_table_name(self, *args, **kwargs) -> str: ... def time_pandas_adbc(self, row_count: int, data_type: str) -> None: with self.conn.cursor() as cursor: diff --git a/python/adbc_driver_snowflake/LICENSE.txt b/python/adbc_driver_snowflake/LICENSE.txt index 1ef648f64b..8d9e813ef2 120000 --- a/python/adbc_driver_snowflake/LICENSE.txt +++ b/python/adbc_driver_snowflake/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt \ No newline at end of file +../../LICENSE.txt diff --git a/python/adbc_driver_snowflake/NOTICE.txt b/python/adbc_driver_snowflake/NOTICE.txt index fb051c92b1..c0bcc339c3 120000 --- a/python/adbc_driver_snowflake/NOTICE.txt +++ b/python/adbc_driver_snowflake/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt \ No newline at end of file +../../NOTICE.txt diff --git a/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py b/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py index 1b8e3b56ff..b939c0b24b 100644 --- a/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py +++ b/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py @@ -132,9 +132,9 @@ def connect( if uri is not None: kwargs["uri"] = uri appname = kwargs.get(DatabaseOptions.APPLICATION_NAME.value, "") - kwargs[ - DatabaseOptions.APPLICATION_NAME.value - ] = f"[ADBC][Python-{__version__}]{appname}" + kwargs[DatabaseOptions.APPLICATION_NAME.value] = ( + f"[ADBC][Python-{__version__}]{appname}" + ) return adbc_driver_manager.AdbcDatabase(driver=_driver_path(), **kwargs) diff --git a/python/adbc_driver_sqlite/LICENSE.txt b/python/adbc_driver_sqlite/LICENSE.txt index 1ef648f64b..8d9e813ef2 120000 --- a/python/adbc_driver_sqlite/LICENSE.txt +++ b/python/adbc_driver_sqlite/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt \ No newline at end of file +../../LICENSE.txt diff --git a/python/adbc_driver_sqlite/NOTICE.txt b/python/adbc_driver_sqlite/NOTICE.txt index fb051c92b1..c0bcc339c3 120000 --- a/python/adbc_driver_sqlite/NOTICE.txt +++ b/python/adbc_driver_sqlite/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt \ No newline at end of file +../../NOTICE.txt From cc985a380bb591731d5a2323d54548b9d0d2bb76 Mon Sep 17 00:00:00 2001 From: David Coe Date: Tue, 9 Apr 2024 23:34:20 -0400 Subject: [PATCH 47/61] attempting to fix PR check in issues --- .pre-commit-config.yaml | 14 +++++++------- c/validation/adbc_validation_util.h | 8 ++++++-- .../adbc_driver_manager/dbapi.py | 3 ++- python/adbc_driver_manager/tests/test_lowlevel.py | 2 +- .../benchmarks/benchmarks.py | 3 ++- .../adbc_driver_snowflake/__init__.py | 6 +++--- 6 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5a1d2d8b97..17ac98a2be 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v2.3.0 hooks: - id: check-xml - id: check-yaml @@ -40,7 +40,7 @@ repos: - id: trailing-whitespace exclude: "^r/.*?/_snaps/.*?.md$" - repo: https://github.com/pre-commit/mirrors-clang-format - rev: "v18.1.3" + rev: "v14.0.6" hooks: - id: clang-format types_or: [c, c++] @@ -59,30 +59,30 @@ repos: - "--linelength=90" - "--verbose=2" - repo: https://github.com/golangci/golangci-lint - rev: v1.57.2 + rev: v1.57.1 hooks: - id: golangci-lint entry: bash -c 'cd go/adbc && golangci-lint run --fix --timeout 5m' types_or: [go] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - rev: v2.13.0 + rev: v2.12.0 hooks: - id: pretty-format-golang - id: pretty-format-java args: [--autofix] types_or: [java] - repo: https://github.com/psf/black - rev: 24.3.0 + rev: 22.3.0 hooks: - id: black types_or: [pyi, python] - repo: https://github.com/PyCQA/flake8 - rev: 7.0.0 + rev: 4.0.1 hooks: - id: flake8 types_or: [python] - repo: https://github.com/PyCQA/isort - rev: 5.13.2 + rev: 5.12.0 hooks: - id: isort types_or: [python] diff --git a/c/validation/adbc_validation_util.h b/c/validation/adbc_validation_util.h index 683103e175..e5ad996246 100644 --- a/c/validation/adbc_validation_util.h +++ b/c/validation/adbc_validation_util.h @@ -232,8 +232,12 @@ struct GetObjectsReader { } ~GetObjectsReader() { AdbcGetObjectsDataDelete(get_objects_data_); } - struct AdbcGetObjectsData* operator*() { return get_objects_data_; } - struct AdbcGetObjectsData* operator->() { return get_objects_data_; } + struct AdbcGetObjectsData* operator*() { + return get_objects_data_; + } + struct AdbcGetObjectsData* operator->() { + return get_objects_data_; + } private: struct AdbcGetObjectsData* get_objects_data_; diff --git a/python/adbc_driver_manager/adbc_driver_manager/dbapi.py b/python/adbc_driver_manager/adbc_driver_manager/dbapi.py index fea644514a..4c17bb6e7b 100644 --- a/python/adbc_driver_manager/adbc_driver_manager/dbapi.py +++ b/python/adbc_driver_manager/adbc_driver_manager/dbapi.py @@ -235,7 +235,8 @@ def __exit__(self, exc_type, exc_val, exc_tb) -> None: self.close() @abc.abstractmethod - def close(self) -> None: ... + def close(self) -> None: + ... class _SharedDatabase(_Closeable): diff --git a/python/adbc_driver_manager/tests/test_lowlevel.py b/python/adbc_driver_manager/tests/test_lowlevel.py index d2940aef18..f94c90415f 100644 --- a/python/adbc_driver_manager/tests/test_lowlevel.py +++ b/python/adbc_driver_manager/tests/test_lowlevel.py @@ -80,7 +80,7 @@ def test_error_mapping(): ] message = "Message" - for klass, code in cases: + for (klass, code) in cases: with pytest.raises(klass) as exc_info: _lib._test_error(code, message, vendor_code=None, sqlstate=None) assert message in exc_info.value.args[0] diff --git a/python/adbc_driver_postgresql/benchmarks/benchmarks.py b/python/adbc_driver_postgresql/benchmarks/benchmarks.py index 4d9a4bf4c3..037bb30045 100644 --- a/python/adbc_driver_postgresql/benchmarks/benchmarks.py +++ b/python/adbc_driver_postgresql/benchmarks/benchmarks.py @@ -60,7 +60,8 @@ def teardown(self, *args, **kwargs) -> None: self.sqlalchemy_connection.close() @abc.abstractmethod - def _make_table_name(self, *args, **kwargs) -> str: ... + def _make_table_name(self, *args, **kwargs) -> str: + ... def time_pandas_adbc(self, row_count: int, data_type: str) -> None: with self.conn.cursor() as cursor: diff --git a/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py b/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py index b939c0b24b..1b8e3b56ff 100644 --- a/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py +++ b/python/adbc_driver_snowflake/adbc_driver_snowflake/__init__.py @@ -132,9 +132,9 @@ def connect( if uri is not None: kwargs["uri"] = uri appname = kwargs.get(DatabaseOptions.APPLICATION_NAME.value, "") - kwargs[DatabaseOptions.APPLICATION_NAME.value] = ( - f"[ADBC][Python-{__version__}]{appname}" - ) + kwargs[ + DatabaseOptions.APPLICATION_NAME.value + ] = f"[ADBC][Python-{__version__}]{appname}" return adbc_driver_manager.AdbcDatabase(driver=_driver_path(), **kwargs) From 82e5dab9c092b9c8a2ddf95dd2e13eb5cbd30a95 Mon Sep 17 00:00:00 2001 From: David Coe Date: Wed, 10 Apr 2024 12:56:58 -0400 Subject: [PATCH 48/61] fix line endings on notice, license --- python/adbc_driver_flightsql/LICENSE.txt | 2 +- python/adbc_driver_flightsql/NOTICE.txt | 2 +- python/adbc_driver_manager/LICENSE.txt | 2 +- python/adbc_driver_manager/NOTICE.txt | 2 +- python/adbc_driver_postgresql/LICENSE.txt | 2 +- python/adbc_driver_postgresql/NOTICE.txt | 2 +- python/adbc_driver_snowflake/LICENSE.txt | 2 +- python/adbc_driver_snowflake/NOTICE.txt | 2 +- python/adbc_driver_sqlite/LICENSE.txt | 2 +- python/adbc_driver_sqlite/NOTICE.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/python/adbc_driver_flightsql/LICENSE.txt b/python/adbc_driver_flightsql/LICENSE.txt index 8d9e813ef2..1ef648f64b 120000 --- a/python/adbc_driver_flightsql/LICENSE.txt +++ b/python/adbc_driver_flightsql/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt +../../LICENSE.txt \ No newline at end of file diff --git a/python/adbc_driver_flightsql/NOTICE.txt b/python/adbc_driver_flightsql/NOTICE.txt index c0bcc339c3..fb051c92b1 120000 --- a/python/adbc_driver_flightsql/NOTICE.txt +++ b/python/adbc_driver_flightsql/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt +../../NOTICE.txt \ No newline at end of file diff --git a/python/adbc_driver_manager/LICENSE.txt b/python/adbc_driver_manager/LICENSE.txt index 8d9e813ef2..1ef648f64b 120000 --- a/python/adbc_driver_manager/LICENSE.txt +++ b/python/adbc_driver_manager/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt +../../LICENSE.txt \ No newline at end of file diff --git a/python/adbc_driver_manager/NOTICE.txt b/python/adbc_driver_manager/NOTICE.txt index c0bcc339c3..fb051c92b1 120000 --- a/python/adbc_driver_manager/NOTICE.txt +++ b/python/adbc_driver_manager/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt +../../NOTICE.txt \ No newline at end of file diff --git a/python/adbc_driver_postgresql/LICENSE.txt b/python/adbc_driver_postgresql/LICENSE.txt index 8d9e813ef2..1ef648f64b 120000 --- a/python/adbc_driver_postgresql/LICENSE.txt +++ b/python/adbc_driver_postgresql/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt +../../LICENSE.txt \ No newline at end of file diff --git a/python/adbc_driver_postgresql/NOTICE.txt b/python/adbc_driver_postgresql/NOTICE.txt index c0bcc339c3..fb051c92b1 120000 --- a/python/adbc_driver_postgresql/NOTICE.txt +++ b/python/adbc_driver_postgresql/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt +../../NOTICE.txt \ No newline at end of file diff --git a/python/adbc_driver_snowflake/LICENSE.txt b/python/adbc_driver_snowflake/LICENSE.txt index 8d9e813ef2..1ef648f64b 120000 --- a/python/adbc_driver_snowflake/LICENSE.txt +++ b/python/adbc_driver_snowflake/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt +../../LICENSE.txt \ No newline at end of file diff --git a/python/adbc_driver_snowflake/NOTICE.txt b/python/adbc_driver_snowflake/NOTICE.txt index c0bcc339c3..fb051c92b1 120000 --- a/python/adbc_driver_snowflake/NOTICE.txt +++ b/python/adbc_driver_snowflake/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt +../../NOTICE.txt \ No newline at end of file diff --git a/python/adbc_driver_sqlite/LICENSE.txt b/python/adbc_driver_sqlite/LICENSE.txt index 8d9e813ef2..1ef648f64b 120000 --- a/python/adbc_driver_sqlite/LICENSE.txt +++ b/python/adbc_driver_sqlite/LICENSE.txt @@ -1 +1 @@ -../../LICENSE.txt +../../LICENSE.txt \ No newline at end of file diff --git a/python/adbc_driver_sqlite/NOTICE.txt b/python/adbc_driver_sqlite/NOTICE.txt index c0bcc339c3..fb051c92b1 120000 --- a/python/adbc_driver_sqlite/NOTICE.txt +++ b/python/adbc_driver_sqlite/NOTICE.txt @@ -1 +1 @@ -../../NOTICE.txt +../../NOTICE.txt \ No newline at end of file From 19e8c8fbd17ee2a8a33f42c27e25df64547df1a6 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 10 Apr 2024 15:02:29 -0700 Subject: [PATCH 49/61] WIP: Complex types are not working as expected, yet. Add tests for * Binary/Boolean * Date/Timestamp/Interval * Complex Types (ARRAY/MAP/STRUCT) --- .../Drivers/Apache/Spark/SparkConnection.cs | 81 +++++---- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 5 +- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 125 ++++++++++++-- .../Apache/Spark/BinaryBooleanValueTests.cs | 83 +++++++++ .../Apache/Spark/ComplexTypesValueTests.cs | 101 +++++++++++ .../Apache/Spark/DateTimeValueTests.cs | 162 ++++++++++++++++++ .../Drivers/Apache/Spark/NumericValueTests.cs | 9 +- .../Drivers/Apache/Spark/SparkTestBase.cs | 1 + 8 files changed, 523 insertions(+), 44 deletions(-) create mode 100644 csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs create mode 100644 csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs create mode 100644 csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 729e05c6c9..cd06e1109c 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -58,25 +58,6 @@ public class SparkConnection : HiveServer2Connection { "spark.thriftserver.arrowBasedRowSet.timestampAsString", "false" } }; - private static readonly IReadOnlyDictionary s_columnTypeToArrowTypeMap = new Dictionary() { - { ColumnTypeId.BOOLEAN_TYPE, BooleanType.Default }, - { ColumnTypeId.TINYINT_TYPE, Int8Type.Default }, - { ColumnTypeId.SMALLINT_TYPE, Int16Type.Default }, - { ColumnTypeId.INT_TYPE, Int32Type.Default }, - { ColumnTypeId.BIGINT_TYPE, Int64Type.Default }, - { ColumnTypeId.FLOAT_TYPE, FloatType.Default }, - { ColumnTypeId.DOUBLE_TYPE, DoubleType.Default }, - { ColumnTypeId.STRING_TYPE, StringType.Default }, - { ColumnTypeId.TIMESTAMP_TYPE, new TimestampType(TimeUnit.Microsecond, (string)null) }, - { ColumnTypeId.BINARY_TYPE, BinaryType.Default }, - { ColumnTypeId.ARRAY_TYPE, StringType.Default }, - { ColumnTypeId.MAP_TYPE, StringType.Default }, - { ColumnTypeId.STRUCT_TYPE, StringType.Default }, - { ColumnTypeId.DECIMAL_TYPE, StringType.Default }, - { ColumnTypeId.DATE_TYPE, Date32Type.Default }, - { ColumnTypeId.CHAR_TYPE, StringType.Default }, - }; - private enum ColumnTypeId { BOOLEAN_TYPE = 16, @@ -330,9 +311,10 @@ public override Schema GetTableSchema(string catalog, string dbSchema, string ta { string columnName = columns[3].StringVal.Values.GetString(i); int? columnType = columns[4].I32Val.Values.GetValue(i); - fields[i] = new Field(columnName, - SparkConnection.GetArrowType((ColumnTypeId)columnType), - nullable: true /* ??? */); + string typeName = columns[5].StringVal.Values.GetString(i); + bool nullable = columns[10].I32Val.Values.GetValue(i) == 1; + IArrowType dataType = SparkConnection.GetArrowType((ColumnTypeId)columnType, typeName); + fields[i] = new Field(columnName, dataType, nullable); } return new Schema(fields, null); } @@ -509,13 +491,54 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal return new SparkInfoArrowStream(StandardSchemas.GetObjectsSchema, dataArrays); } - private static IArrowType GetArrowType(ColumnTypeId columnTypeId) - { - if (!s_columnTypeToArrowTypeMap.TryGetValue(columnTypeId, out IArrowType arrowType)) - { - throw new NotImplementedException($"Unsupported column type id: {columnTypeId}"); - } - return arrowType; + private static IArrowType GetArrowType(ColumnTypeId columnTypeId, string typeName) + { + switch (columnTypeId) + { + case ColumnTypeId.BOOLEAN_TYPE: + return BooleanType.Default; + case ColumnTypeId.TINYINT_TYPE: + return Int8Type.Default; + case ColumnTypeId.SMALLINT_TYPE: + return Int16Type.Default; + case ColumnTypeId.INT_TYPE: + return Int32Type.Default; + case ColumnTypeId.BIGINT_TYPE: + return Int64Type.Default; + case ColumnTypeId.FLOAT_TYPE: + return FloatType.Default; + case ColumnTypeId.DOUBLE_TYPE: + return DoubleType.Default; + case ColumnTypeId.STRING_TYPE: + return StringType.Default; + case ColumnTypeId.TIMESTAMP_TYPE: + return new TimestampType(TimeUnit.Microsecond, timezone: (string)null); + case ColumnTypeId.BINARY_TYPE: + return BinaryType.Default; + case ColumnTypeId.DATE_TYPE: + return Date32Type.Default; + case ColumnTypeId.CHAR_TYPE: + return StringType.Default; + case ColumnTypeId.DECIMAL_TYPE: + // TODO: Parse typeName for precision and scale. + return new Decimal128Type(38, 38); + case ColumnTypeId.ARRAY_TYPE: + // TODO: Parse the typeName to get the element type dynamically. + return new ListType(StringType.Default); + case ColumnTypeId.MAP_TYPE: + // TODO: Parse the typeName to get the element types dynamically. + return new MapType(StringType.Default, StringType.Default); + case ColumnTypeId.STRUCT_TYPE: + // TODO: Parse the typeName to get the element types dynamically. + List structSchema = new List() + { + new Field("key", Int32Type.Default, nullable: true), + new Field("value", Int32Type.Default, nullable: true), + }; + return new StructType(structSchema); + default: + throw new NotImplementedException($"Column type id: {columnTypeId} is not supported."); + } } private StructArray GetDbSchemas( diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index f3283c3ed8..53e97e43ff 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -67,13 +67,16 @@ public static IArrowType GetArrowType(TPrimitiveTypeEntry thriftType) var scale = thriftType.TypeQualifiers.Qualifiers["scale"].I32Value; return new Decimal128Type(precision, scale); - // ??? case TTypeId.INTERVAL_DAY_TIME_TYPE: case TTypeId.INTERVAL_YEAR_MONTH_TYPE: return StringType.Default; case TTypeId.ARRAY_TYPE: + return new ListType(Int32Type.Default); + case TTypeId.MAP_TYPE: + return new MapType(Int32Type.Default, StringType.Default); + case TTypeId.STRUCT_TYPE: case TTypeId.UNION_TYPE: case TTypeId.USER_DEFINED_TYPE: diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs index 7bc57a1bb6..3cf444b705 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -192,15 +192,40 @@ protected AdbcConnection NewConnection(T testConfiguration = null, IReadOnlyDict /// /// Validates that an insert, select and delete statement works with the given value. /// + /// /// The name of the table to use. /// The name of the column. /// The value to insert, select and delete. + /// The formated value to insert, select and delete. /// - protected async Task ValidateInsertSelectDeleteSingleValue(string tableName, string columnName, object value) + protected async Task ValidateInsertSelectDeleteSingleValue(string selectStatement, string tableName, string columnName, object value, string formattedValue = null) { - InsertSingleValue(tableName, columnName, value.ToString()); - await SelectAndValidateValues(tableName, columnName, value, 1); - DeleteFromTable(tableName, string.Format("{0}={1}", columnName, value), 1); + InsertSingleValue(tableName, columnName, formattedValue ?? value?.ToString()); + await SelectAndValidateValues(selectStatement, value, 1); + string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); + DeleteFromTable(tableName, whereClause, 1); + } + + /// + /// Validates that an insert, select and delete statement works with the given value. + /// + /// The name of the table to use. + /// The name of the column. + /// The value to insert, select and delete. + /// The formated value to insert, select and delete. + /// + protected async Task ValidateInsertSelectDeleteSingleValue(string tableName, string columnName, object value, string formattedValue = null) + { + InsertSingleValue(tableName, columnName, formattedValue ?? value?.ToString()); + await SelectAndValidateValues(tableName, columnName, value, 1, formattedValue); + string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); + DeleteFromTable(tableName, whereClause, 1); + } + + protected virtual string GetDeleteFromWhereClause(string columnName, object value, string formattedValue = null) + { + string comparison = formattedValue != null ? $"= {formattedValue}" : value == null ? "IS NULL" : $"= {value}"; + return $"{columnName} {comparison}"; } /// @@ -226,7 +251,7 @@ protected virtual void InsertSingleValue(string tableName, string columnName, st /// The value to insert. /// protected virtual string GetInsertValueStatement(string tableName, string columnName, string value) => - string.Format("INSERT INTO {0} ({1}) VALUES ({2});", tableName, columnName, value); + string.Format("INSERT INTO {0} ({1}) VALUES ({2});", tableName, columnName, value ?? "NULL"); /// /// Deletes a (single) value from a table. @@ -260,16 +285,29 @@ protected virtual string GetDeleteValueStatement(string tableName, string whereC /// The value to select and validate. /// The number of expected results (rows). /// - protected virtual async Task SelectAndValidateValues(string table, string columnName, object value, int expectedLength) + protected virtual async Task SelectAndValidateValues(string table, string columnName, object value, int expectedLength, string formattedValue = null) + { + string selectNumberStatement = GetSelectSingleValueStatement(table, columnName, formattedValue ?? value); + await SelectAndValidateValues(selectNumberStatement, value, expectedLength); + } + + /// + /// Selects a single value and validates it equality with expected value and number of results. + /// + /// The SQL statement to execute. + /// The value to select and validate. + /// The number of expected results (rows). + /// + protected virtual async Task SelectAndValidateValues(string selectStatement, object value, int expectedLength) { - string selectNumberStatement = GetSelectSingleValueStatement(table, columnName, value); - OutputHelper.WriteLine(selectNumberStatement); - Statement.SqlQuery = selectNumberStatement; + Statement.SqlQuery = selectStatement; + OutputHelper.WriteLine(selectStatement); QueryResult queryResult = Statement.ExecuteQuery(); int actualLength = 0; using (IArrowArrayStream stream = queryResult.Stream) { - Field field = stream.Schema.GetFieldByName(columnName); + // Assume first column + Field field = stream.Schema.GetFieldByIndex(0); while (true) { using (RecordBatch nextBatch = await stream.ReadNextRecordBatchAsync()) @@ -311,6 +349,51 @@ protected virtual async Task SelectAndValidateValues(string table, string column StringArray stringArray = (StringArray)nextBatch.Column(0); actualLength += stringArray.Length; ValidateValue(value, stringArray.Length, (i) => stringArray.GetString(i)); + break; + case TimestampType: + TimestampArray timestampArray = (TimestampArray)nextBatch.Column(0); + actualLength += timestampArray.Length; + ValidateValue(value, timestampArray.Length, (i) => timestampArray.GetTimestamp(i)); + break; + case Date32Type: + Date32Array date32Array = (Date32Array)nextBatch.Column(0); + actualLength += date32Array.Length; + ValidateValue(value, date32Array.Length, (i) => date32Array.GetDateTimeOffset(i)); + break; + case BooleanType: + BooleanArray booleanArray = (BooleanArray)nextBatch.Column(0); + actualLength += booleanArray.Length; + ValidateValue(value, booleanArray.Length, (i) => booleanArray.GetValue(i)); + break; + case BinaryType: + BinaryArray binaryArray = (BinaryArray)nextBatch.Column(0); + actualLength += binaryArray.Length; + ValidateValue(value, binaryArray.Length, (i) => binaryArray.GetBytes(i).ToArray()); + break; + case MapType: + MapArray mapArray = (MapArray)nextBatch.Column(0); + actualLength += mapArray.Length; + IArrowType valType = mapArray.Values.Data.DataType; + IArrowType keyType = mapArray.Keys.Data.DataType; + ValidateValue(value, mapArray.Length, (i) => ((StructArray)mapArray.GetSlicedValues(i))); + break; + case ListType: + ListArray listArrayArray = (ListArray)nextBatch.Column(0); + actualLength += listArrayArray.Length; + IArrowType elementType = ((ListType)listArrayArray.Data.DataType).ValueDataType; + switch (elementType) + { + case Int32Type: + ValidateValue(value, listArrayArray.Length, (i) => ((Int32Array)listArrayArray.GetSlicedValues(i)).Values.ToArray()); + break; + case Int64Type: + ValidateValue(value, listArrayArray.Length, (i) => ((Int64Array)listArrayArray.GetSlicedValues(i)).Values.ToArray()); + break; + default: + Assert.Fail($"List element type: {elementType} - is not supported."); + break; + } + break; default: Assert.Fail($"Unhandled datatype {field.DataType}"); @@ -344,7 +427,10 @@ private static void ValidateValue(object value, int length, Func ge /// The name of the column. /// The value to select and validate. /// The native SQL statement. - protected virtual string GetSelectSingleValueStatement(string table, string columnName, object value) => string.Format( + protected virtual string GetSelectSingleValueStatement(string table, string columnName, object value) => + value == null + ? $"SELECT {columnName} FROM {table} WHERE {columnName} IS NULL" + : string.Format( "SELECT {0} FROM {1} WHERE {0}={2};", columnName, table, @@ -355,6 +441,18 @@ protected virtual string GetSelectSingleValueStatement(string table, string colu : value ); + protected virtual string GetSelectStatement( + string projection, + string source, + string selection, + string aggregation) => string.Format( + "SELECT {0} {1} {2} {3};", + projection, + source, + selection, + aggregation + ); + /// /// Converts double values to it's String equivalent. /// @@ -442,6 +540,11 @@ public void Dispose() GC.SuppressFinalize(this); } + protected static string QuoteValue(string value) + { + return $"'{value.Replace("'", "''")}'"; + } + /// /// Represents a temporary table that can create and drop the table automatically. /// diff --git a/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs new file mode 100644 index 0000000000..840fa085f9 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs @@ -0,0 +1,83 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + /// + /// Validates that specific binary and boolean values can be inserted, retrieved and targeted correctly + /// + public class BinaryBooleanValueTests : SparkTestBase + { + public BinaryBooleanValueTests(ITestOutputHelper output) : base(output) { } + + public static IEnumerable ByteArrayData(int size) + { + var rnd = new Random(); + byte[] bytes = new byte[size]; + rnd.NextBytes(bytes); + yield return new object[] { bytes }; + } + + /// + /// Validates if driver can send and receive specific Binary values correctly. + /// + [SkippableTheory] + [MemberData(nameof(ByteArrayData), 0)] + [MemberData(nameof(ByteArrayData), 2)] + [MemberData(nameof(ByteArrayData), 1024)] + public async Task TestBinaryData(byte[] value) + { + string columnName = "BINARYTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "BINARY")); + string formattedValue = $"X'{BitConverter.ToString(value).Replace("-", "")}'"; + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + value, + formattedValue); + } + + /// + /// Validates if driver can send and receive specific Boolean values correctly. + /// + [SkippableTheory] + [InlineData(null)] + [InlineData(true)] + [InlineData(false)] + public async Task TestBooleanData(bool? value) + { + string columnName = "BOOLEANTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "BOOLEAN")); + string formattedValue = value == null ? null : QuoteValue($"{value?.ToString(CultureInfo.InvariantCulture)}"); + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + value, + formattedValue); + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs new file mode 100644 index 0000000000..2b51ff85e4 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs @@ -0,0 +1,101 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + /// + /// Validates that specific complex structured types can be inserted, retrieved and targeted correctly + /// + public class ComplexTypesValueTests : SparkTestBase + { + public ComplexTypesValueTests(ITestOutputHelper output) : base(output) { } + + public static IEnumerable IntArrayData(int size) + { + var rnd = new Random(); + int[] ints = new int[size]; + for (int i = 0; i < ints.Length; i++) + { + ints[i] = rnd.Next(); + } + yield return new object[] { ints }; + } + + public static IEnumerable LongArrayData(int size) + { + var rnd = new Random(); + long[] ints = new long[size]; + for (int i = 0; i < ints.Length; i++) + { + ints[i] = rnd.Next(); + } + yield return new object[] { ints }; + } + + /// + /// Validates if driver can send and receive specific array of integer values correctly. + /// + [SkippableFact] + //[MemberData(nameof(IntArrayData), 0)] + //[MemberData(nameof(LongArrayData), 2)] + //[MemberData(nameof(IntArrayData), 1024)] + public async Task TestArrayOfIntData() + { + //string columnName = "INTARRAYTYPE"; + //using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "ARRAY")); + //string formattedValue = $"ARRAY({string.Join(",", value)})"; + //await ValidateInsertSelectDeleteSingleValue( + // table.TableName, + // columnName, + // value, + // formattedValue); + string selectStatement = "SELECT ARRAY(CAST(1 as INT), 2, 3);"; + await SelectAndValidateValues(selectStatement, new[] { 1, 2, 3 }, 1); + } + + /// + /// Validates if driver can send and receive specific map values correctly. + /// + [SkippableFact] + public async Task TestMapData() + { + //string columnName = "STRUCTTYPE"; + //using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "MAP < INT, STRING >")); + //// This works for INSERT but need a different syntax for SELECT and DELETE + //string formattedValue = $"MAP(30, \'John Doe\')"; + //InsertSingleValue(table.TableName, columnName, formattedValue); + //string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); + //DeleteFromTable(tableName, whereClause, 1); + //await ValidateInsertSelectDeleteSingleValue( + // table.TableName, + // columnName, + // "", + // formattedValue); + string selectStatement = "SELECT map(1, 'John Doe', 2, 'Jane Doe', 3, 'Jack Doe');"; + await SelectAndValidateValues(selectStatement, "", 1); + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs b/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs new file mode 100644 index 0000000000..093eb3a9d1 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs @@ -0,0 +1,162 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + /// + /// Validates that specific date, timestamp and interval values can be inserted, retrieved and targeted correctly + /// + public class DateTimeValueTests : SparkTestBase + { + // Spark handles microseconds but not nanoseconds. Truncated to 6 decimal places. + const string DateTimeZoneFormat = "yyyy-MM-dd'T'HH:mm:ss'.'ffffffK"; + const string DateFormat = "yyyy-MM-dd"; + + private static readonly DateTimeOffset[] s_timestampValues = new[] + { +#if NET5_0_OR_GREATER + DateTimeOffset.UnixEpoch, +#endif + DateTimeOffset.MinValue, + DateTimeOffset.MaxValue, + DateTimeOffset.UtcNow, + DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(4)) + }; + + public DateTimeValueTests(ITestOutputHelper output) : base(output) { } + + /// + /// Validates if driver can send and receive specific Timstamp values correctly + /// + [SkippableTheory] + [MemberData(nameof(TimestampData), "TIMESTAMP")] + [MemberData(nameof(TimestampData), "TIMESTAMP_LTZ")] + public async Task TestTimestampData(DateTimeOffset value, string columnType) + { + string columnName = "TIMESTAMPTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, columnType)); + + string formattedValue = $"{value.ToString(DateTimeZoneFormat, CultureInfo.InvariantCulture)}"; + DateTimeOffset truncatedValue = DateTimeOffset.ParseExact(formattedValue, DateTimeZoneFormat, CultureInfo.InvariantCulture); + + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + truncatedValue, + QuoteValue(formattedValue)); + } + + /// + /// Validates if driver can send and receive specific no timezone Timstamp values correctly + /// + [SkippableTheory] + [MemberData(nameof(TimestampData), "TIMESTAMP_NTZ")] + public async Task TestTimestampNoTimezoneData(DateTimeOffset value, string columnType) + { + // Note: Minimum value falls outside range of valid values on server when no time zone is included. Cannot be selected + Skip.If(value == DateTimeOffset.MinValue); + + string columnName = "TIMESTAMPTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, columnType)); + + string formattedValue = $"{value.ToString(DateFormat, CultureInfo.InvariantCulture)}"; + DateTimeOffset truncatedValue = DateTimeOffset.ParseExact(formattedValue, DateFormat, CultureInfo.InvariantCulture); + + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + // Remove timezone offset + new DateTimeOffset(truncatedValue.DateTime, TimeSpan.Zero), + QuoteValue(formattedValue)); + } + + /// + /// Validates if driver can send and receive specific no timezone Timstamp values correctly + /// + [SkippableTheory] + [MemberData(nameof(TimestampData), "DATE")] + public async Task TestDateData(DateTimeOffset value, string columnType) + { + string columnName = "DATETYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, columnType)); + + string formattedValue = $"{value.ToString(DateFormat, CultureInfo.InvariantCulture)}"; + DateTimeOffset truncatedValue = DateTimeOffset.ParseExact(formattedValue, DateFormat, CultureInfo.InvariantCulture); + + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + // Remove timezone offset + new DateTimeOffset(truncatedValue.DateTime, TimeSpan.Zero), + QuoteValue(formattedValue)); + } + + /// + /// Tests INTERVAL data types (YEAR-MONTH and DAY-SECOND). + /// + /// The INTERVAL to test. + /// The expected return value. + /// + [SkippableTheory] + [InlineData("INTERVAL 1 YEAR", "1-0")] + [InlineData("INTERVAL 1 YEAR 2 MONTH", "1-2")] + [InlineData("INTERVAL 2 MONTHS", "0-2")] + [InlineData("INTERVAL -1 YEAR", "-1-0")] + [InlineData("INTERVAL -1 YEAR 2 MONTH", "-0-10")] + [InlineData("INTERVAL -2 YEAR 2 MONTH", "-1-10")] + [InlineData("INTERVAL 1 YEAR -2 MONTH", "0-10")] + [InlineData("INTERVAL 178956970 YEAR", "178956970-0")] + [InlineData("INTERVAL 178956969 YEAR 11 MONTH", "178956969-11")] + [InlineData("INTERVAL -178956970 YEAR", "-178956970-0")] + [InlineData("INTERVAL 0 DAYS 0 HOURS 0 MINUTES 0 SECONDS", "0 00:00:00.000000000")] + [InlineData("INTERVAL 1 DAYS", "1 00:00:00.000000000")] + [InlineData("INTERVAL 2 HOURS", "0 02:00:00.000000000")] + [InlineData("INTERVAL 3 MINUTES", "0 00:03:00.000000000")] + [InlineData("INTERVAL 4 SECONDS", "0 00:00:04.000000000")] + [InlineData("INTERVAL 1 DAYS 2 HOURS", "1 02:00:00.000000000")] + [InlineData("INTERVAL 1 DAYS 2 HOURS 3 MINUTES", "1 02:03:00.000000000")] + [InlineData("INTERVAL 1 DAYS 2 HOURS 3 MINUTES 4 SECONDS", "1 02:03:04.000000000")] + [InlineData("INTERVAL 1 DAYS 2 HOURS 3 MINUTES 4.123123123 SECONDS", "1 02:03:04.123123000")] // Only to microseconds + [InlineData("INTERVAL 106751990 DAYS 23 HOURS 59 MINUTES 59.999999 SECONDS", "106751990 23:59:59.999999000")] + [InlineData("INTERVAL 106751991 DAYS 0 HOURS 0 MINUTES 0 SECONDS", "106751991 00:00:00.000000000")] + [InlineData("INTERVAL -106751991 DAYS 0 HOURS 0 MINUTES 0 SECONDS", "-106751991 00:00:00.000000000")] + [InlineData("INTERVAL -106751991 DAYS 23 HOURS 59 MINUTES 59.999999 SECONDS", "-106751990 00:00:00.000001000")] + public async Task TestIntervalData(string intervalClause, string value) + { + string selectStatement = $"SELECT {intervalClause} AS INTERVAL_VALUE;"; + await SelectAndValidateValues(selectStatement, value, 1); + } + + public static IEnumerable TimestampData(string columnType) + { + foreach (DateTimeOffset timestamp in s_timestampValues) + { + yield return new object[] { timestamp, columnType }; + } + } + } +} diff --git a/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs index e68dc79f1a..53d428a105 100644 --- a/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs @@ -191,7 +191,8 @@ public async Task TestRoundingNumbers(decimal input, decimal output) SqlDecimal returned = new SqlDecimal(output); InsertSingleValue(table.TableName, columnName, value.ToString()); await SelectAndValidateValues(table.TableName, columnName, returned, 1); - DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, returned), 1); + string whereClause = GetDeleteFromWhereClause(columnName, value); + DeleteFromTable(table.TableName, whereClause, 1); } /// @@ -214,7 +215,8 @@ public async Task TestDoubleValuesInsertSelectDelete(double value) string valueString = ConvertDoubleToString(value); InsertSingleValue(table.TableName, columnName, valueString); await SelectAndValidateValues(table.TableName, columnName, value, 1); - DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, valueString), 1); + string whereClause = GetDeleteFromWhereClause(columnName, value); + DeleteFromTable(table.TableName, whereClause, 1); } /// @@ -240,7 +242,8 @@ public async Task TestFloatValuesInsertSelectDelete(float value) string valueString = ConvertFloatToString(value); InsertSingleValue(table.TableName, columnName, valueString); await SelectAndValidateValues(table.TableName, columnName, value, 1); - DeleteFromTable(table.TableName, string.Format("{0}={1}", columnName, valueString), 1); + string whereClause = GetDeleteFromWhereClause(columnName, value); + DeleteFromTable(table.TableName, whereClause, 1); } } } diff --git a/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs b/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs index 4abe9ac46a..b892658ea9 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkTestBase.cs @@ -36,6 +36,7 @@ protected override TemporaryTable NewTemporaryTable(AdbcStatement statement, str string tableName = NewTableName(); // Note: Databricks/Spark doesn't support TEMPORARY table. string sqlUpdate = string.Format("CREATE TABLE {0} ({1})", tableName, columns); + OutputHelper.WriteLine(sqlUpdate); return TemporaryTable.NewTemporaryTable(statement, tableName, sqlUpdate); } From f2cdd8e4ac31c60017fa0c772c926579e9991cbb Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 10 Apr 2024 15:10:21 -0700 Subject: [PATCH 50/61] Corrected line endings. --- .../Drivers/Apache/Spark/SparkConnection.cs | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index cd06e1109c..2e748c8167 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -312,8 +312,8 @@ public override Schema GetTableSchema(string catalog, string dbSchema, string ta string columnName = columns[3].StringVal.Values.GetString(i); int? columnType = columns[4].I32Val.Values.GetValue(i); string typeName = columns[5].StringVal.Values.GetString(i); - bool nullable = columns[10].I32Val.Values.GetValue(i) == 1; - IArrowType dataType = SparkConnection.GetArrowType((ColumnTypeId)columnType, typeName); + bool nullable = columns[10].I32Val.Values.GetValue(i) == 1; + IArrowType dataType = SparkConnection.GetArrowType((ColumnTypeId)columnType, typeName); fields[i] = new Field(columnName, dataType, nullable); } return new Schema(fields, null); @@ -492,53 +492,53 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal } private static IArrowType GetArrowType(ColumnTypeId columnTypeId, string typeName) - { - switch (columnTypeId) - { - case ColumnTypeId.BOOLEAN_TYPE: - return BooleanType.Default; - case ColumnTypeId.TINYINT_TYPE: - return Int8Type.Default; - case ColumnTypeId.SMALLINT_TYPE: - return Int16Type.Default; - case ColumnTypeId.INT_TYPE: - return Int32Type.Default; - case ColumnTypeId.BIGINT_TYPE: - return Int64Type.Default; - case ColumnTypeId.FLOAT_TYPE: - return FloatType.Default; - case ColumnTypeId.DOUBLE_TYPE: - return DoubleType.Default; - case ColumnTypeId.STRING_TYPE: - return StringType.Default; - case ColumnTypeId.TIMESTAMP_TYPE: - return new TimestampType(TimeUnit.Microsecond, timezone: (string)null); - case ColumnTypeId.BINARY_TYPE: - return BinaryType.Default; - case ColumnTypeId.DATE_TYPE: - return Date32Type.Default; - case ColumnTypeId.CHAR_TYPE: - return StringType.Default; - case ColumnTypeId.DECIMAL_TYPE: - // TODO: Parse typeName for precision and scale. - return new Decimal128Type(38, 38); - case ColumnTypeId.ARRAY_TYPE: - // TODO: Parse the typeName to get the element type dynamically. - return new ListType(StringType.Default); - case ColumnTypeId.MAP_TYPE: - // TODO: Parse the typeName to get the element types dynamically. - return new MapType(StringType.Default, StringType.Default); - case ColumnTypeId.STRUCT_TYPE: - // TODO: Parse the typeName to get the element types dynamically. + { + switch (columnTypeId) + { + case ColumnTypeId.BOOLEAN_TYPE: + return BooleanType.Default; + case ColumnTypeId.TINYINT_TYPE: + return Int8Type.Default; + case ColumnTypeId.SMALLINT_TYPE: + return Int16Type.Default; + case ColumnTypeId.INT_TYPE: + return Int32Type.Default; + case ColumnTypeId.BIGINT_TYPE: + return Int64Type.Default; + case ColumnTypeId.FLOAT_TYPE: + return FloatType.Default; + case ColumnTypeId.DOUBLE_TYPE: + return DoubleType.Default; + case ColumnTypeId.STRING_TYPE: + return StringType.Default; + case ColumnTypeId.TIMESTAMP_TYPE: + return new TimestampType(TimeUnit.Microsecond, timezone: (string)null); + case ColumnTypeId.BINARY_TYPE: + return BinaryType.Default; + case ColumnTypeId.DATE_TYPE: + return Date32Type.Default; + case ColumnTypeId.CHAR_TYPE: + return StringType.Default; + case ColumnTypeId.DECIMAL_TYPE: + // TODO: Parse typeName for precision and scale. + return new Decimal128Type(38, 38); + case ColumnTypeId.ARRAY_TYPE: + // TODO: Parse the typeName to get the element type dynamically. + return new ListType(StringType.Default); + case ColumnTypeId.MAP_TYPE: + // TODO: Parse the typeName to get the element types dynamically. + return new MapType(StringType.Default, StringType.Default); + case ColumnTypeId.STRUCT_TYPE: + // TODO: Parse the typeName to get the element types dynamically. List structSchema = new List() { new Field("key", Int32Type.Default, nullable: true), new Field("value", Int32Type.Default, nullable: true), - }; - return new StructType(structSchema); - default: + }; + return new StructType(structSchema); + default: throw new NotImplementedException($"Column type id: {columnTypeId} is not supported."); - } + } } private StructArray GetDbSchemas( From 15b7daed0f3086c8548c08f41f5f6a979af5254c Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 10 Apr 2024 15:15:00 -0700 Subject: [PATCH 51/61] Corrected line endings. --- .../test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs | 8 ++++---- .../test/Drivers/Apache/Spark/ComplexTypesValueTests.cs | 8 ++++---- csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs index 840fa085f9..2b659f5696 100644 --- a/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs @@ -23,10 +23,10 @@ using Xunit.Abstractions; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - // TODO: When supported, use prepared statements instead of SQL string literals - // Which will better test how the driver handles values sent/received - +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + /// /// Validates that specific binary and boolean values can be inserted, retrieved and targeted correctly /// diff --git a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs index 2b51ff85e4..463ab9c15a 100644 --- a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs @@ -22,10 +22,10 @@ using Xunit.Abstractions; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - // TODO: When supported, use prepared statements instead of SQL string literals - // Which will better test how the driver handles values sent/received - +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + /// /// Validates that specific complex structured types can be inserted, retrieved and targeted correctly /// diff --git a/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs b/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs index 093eb3a9d1..b418e39bd2 100644 --- a/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/DateTimeValueTests.cs @@ -23,10 +23,10 @@ using Xunit.Abstractions; namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - // TODO: When supported, use prepared statements instead of SQL string literals - // Which will better test how the driver handles values sent/received - +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + /// /// Validates that specific date, timestamp and interval values can be inserted, retrieved and targeted correctly /// From 1618429c969a557ff846d6915dada783bf95e55a Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Wed, 10 Apr 2024 17:20:07 -0700 Subject: [PATCH 52/61] Added tests for string/character values --- .../Apache/Hive2/HiveServer2Exception.cs | 69 ++++++++++ .../Apache/Hive2/HiveServer2Statement.cs | 4 +- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 9 ++ .../Drivers/Apache/Spark/StringValueTests.cs | 129 ++++++++++++++++++ 4 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 csharp/src/Drivers/Apache/Hive2/HiveServer2Exception.cs create mode 100644 csharp/test/Drivers/Apache/Spark/StringValueTests.cs diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Exception.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Exception.cs new file mode 100644 index 0000000000..865e9bff3f --- /dev/null +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Exception.cs @@ -0,0 +1,69 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; + +namespace Apache.Arrow.Adbc.Drivers.Apache.Hive2 +{ + public class HiveServer2Exception : AdbcException + { + private string _sqlState; + private int _nativeError; + + public HiveServer2Exception() + { + } + + public HiveServer2Exception(string message) : base(message) + { + } + + public HiveServer2Exception(string message, AdbcStatusCode statusCode) : base(message, statusCode) + { + } + + public HiveServer2Exception(string message, Exception innerException) : base(message, innerException) + { + } + + public HiveServer2Exception(string message, AdbcStatusCode statusCode, Exception innerException) : base(message, statusCode, innerException) + { + } + + public override string SqlState + { + get { return _sqlState; } + } + + public override int NativeError + { + get { return _nativeError; } + } + + internal HiveServer2Exception SetSqlState(string sqlState) + { + _sqlState = sqlState; + return this; + } + + internal HiveServer2Exception SetNativeError(int nativeError) + { + _nativeError = nativeError; + return this; + } + } +} diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs index d41ea36490..196f88519b 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Statement.cs @@ -41,7 +41,9 @@ protected void ExecuteStatement() var executeResponse = this.connection.client.ExecuteStatement(executeRequest).Result; if (executeResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) { - throw new AdbcException(executeResponse.Status.ErrorMessage); + throw new HiveServer2Exception(executeResponse.Status.ErrorMessage) + .SetSqlState(executeResponse.Status.SqlState) + .SetNativeError(executeResponse.Status.ErrorCode); } this.operationHandle = executeResponse.OperationHandle; } diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs index 3cf444b705..0b4366431a 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -545,6 +545,15 @@ protected static string QuoteValue(string value) return $"'{value.Replace("'", "''")}'"; } + protected static void AssertContainsAll(string[] expectedTexts, string value) + { + if (expectedTexts == null) { return; }; + foreach (string text in expectedTexts) + { + Assert.Contains(text, value); + } + } + /// /// Represents a temporary table that can create and drop the table automatically. /// diff --git a/csharp/test/Drivers/Apache/Spark/StringValueTests.cs b/csharp/test/Drivers/Apache/Spark/StringValueTests.cs new file mode 100644 index 0000000000..f5a582f582 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/StringValueTests.cs @@ -0,0 +1,129 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + /// + /// Validates that specific string and character values can be inserted, retrieved and targeted correctly + /// + public class StringValueTests : SparkTestBase + { + public StringValueTests(ITestOutputHelper output) : base(output) { } + + public static IEnumerable ByteArrayData(int size) + { + var rnd = new Random(); + byte[] bytes = new byte[size]; + rnd.NextBytes(bytes); + yield return new object[] { bytes }; + } + + /// + /// Validates if driver can send and receive specific String values correctly. + /// + [SkippableTheory] + [InlineData(null)] + [InlineData("")] + [InlineData("你好")] + [InlineData("String contains formatting characters tab\t, newline\n, carriage return\r.")] + [InlineData(" Leading and trailing spaces ")] + public async Task TestStringData(string value) + { + string columnName = "STRINGTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "STRING")); + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + value, + value != null ? QuoteValue(value) : value); + } + + /// + /// Validates if driver can send and receive specific VARCHAR values correctly. + /// + [SkippableTheory] + [InlineData(null)] + [InlineData("")] + [InlineData("你好")] + [InlineData("String contains formatting characters tab\t, newline\n, carriage return\r.")] + [InlineData(" Leading and trailing spaces ")] + public async Task TestVarcharData(string value) + { + string columnName = "VARCHARTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "VARCHAR(100)")); + await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + value, + value != null ? QuoteValue(value) : value); + } + + /// + /// Validates if driver can send and receive specific VARCHAR values correctly. + /// + [SkippableTheory] + [InlineData(null)] + [InlineData("")] + [InlineData("你好")] + [InlineData("String contains formatting characters tab\t, newline\n, carriage return\r.")] + [InlineData(" Leading and trailing spaces ")] + public async Task TestCharData(string value) + { + string columnName = "CHARTYPE"; + int fieldLength = 100; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, $"CHAR({fieldLength})")); + + string formattedValue = value != null ? QuoteValue(value.PadRight(fieldLength)) : value; + string paddedValue = value != null ? value.PadRight(fieldLength) : value; + + InsertSingleValue(table.TableName, columnName, formattedValue); + await SelectAndValidateValues(table.TableName, columnName, paddedValue, 1, formattedValue); + string whereClause = GetDeleteFromWhereClause(columnName, paddedValue, formattedValue); + DeleteFromTable(table.TableName, whereClause, 1); + } + + /// + /// Validates if driver fails to insert invalid length of VARCHAR value. + /// + [SkippableTheory] + [InlineData("String whose length is too long for VARCHAR(10).")] + public async Task TestVarcharExceptionData(string value) + { + string columnName = "VARCHARTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "VARCHAR(10)")); + AdbcException exception = await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue( + table.TableName, + columnName, + value, + value != null ? QuoteValue(value) : value)); + AssertContainsAll(new[] { "DELTA_EXCEED_CHAR_VARCHAR_LIMIT", "DeltaInvariantViolationException" }, exception.Message); + Assert.Equal("22001", exception.SqlState); + } + + } +} From 8eda11f92a1cf179fa144526ea35936a9b3ce17a Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 11 Apr 2024 14:57:54 -0700 Subject: [PATCH 53/61] * Corrected handling of null and double/float values * Removed tests for complex types. * Added tests for long and null. --- .../Drivers/Apache/Spark/SparkConnection.cs | 15 +-- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 8 +- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 78 ++++---------- .../Apache/Spark/BinaryBooleanValueTests.cs | 25 +++++ .../Apache/Spark/ComplexTypesValueTests.cs | 101 ------------------ .../Drivers/Apache/Spark/NumericValueTests.cs | 30 ++++-- .../Drivers/Apache/Spark/StringValueTests.cs | 2 +- 7 files changed, 75 insertions(+), 184 deletions(-) delete mode 100644 csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 2e748c8167..7174f34b28 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -520,22 +520,13 @@ private static IArrowType GetArrowType(ColumnTypeId columnTypeId, string typeNam case ColumnTypeId.CHAR_TYPE: return StringType.Default; case ColumnTypeId.DECIMAL_TYPE: - // TODO: Parse typeName for precision and scale. + // TODO: Parse typeName for precision and scale, because not available in other metadata. return new Decimal128Type(38, 38); case ColumnTypeId.ARRAY_TYPE: - // TODO: Parse the typeName to get the element type dynamically. - return new ListType(StringType.Default); case ColumnTypeId.MAP_TYPE: - // TODO: Parse the typeName to get the element types dynamically. - return new MapType(StringType.Default, StringType.Default); case ColumnTypeId.STRUCT_TYPE: - // TODO: Parse the typeName to get the element types dynamically. - List structSchema = new List() - { - new Field("key", Int32Type.Default, nullable: true), - new Field("value", Int32Type.Default, nullable: true), - }; - return new StructType(structSchema); + // TODO: Resolve issue where complex types are not being returned as string. + return StringType.Default; default: throw new NotImplementedException($"Column type id: {columnTypeId} is not supported."); } diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index 53e97e43ff..4c54a737b2 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -61,25 +61,19 @@ public static IArrowType GetArrowType(TPrimitiveTypeEntry thriftType) case TTypeId.TIMESTAMP_TYPE: return new TimestampType(TimeUnit.Microsecond, (string)null); case TTypeId.TINYINT_TYPE: return Int8Type.Default; case TTypeId.VARCHAR_TYPE: return StringType.Default; - case TTypeId.DECIMAL_TYPE: var precision = thriftType.TypeQualifiers.Qualifiers["precision"].I32Value; var scale = thriftType.TypeQualifiers.Qualifiers["scale"].I32Value; return new Decimal128Type(precision, scale); - case TTypeId.INTERVAL_DAY_TIME_TYPE: case TTypeId.INTERVAL_YEAR_MONTH_TYPE: return StringType.Default; - case TTypeId.ARRAY_TYPE: - return new ListType(Int32Type.Default); - case TTypeId.MAP_TYPE: - return new MapType(Int32Type.Default, StringType.Default); - case TTypeId.STRUCT_TYPE: case TTypeId.UNION_TYPE: case TTypeId.USER_DEFINED_TYPE: + // TODO: Resolve issue that data returned is natvie and not a string representation. return StringType.Default; default: throw new NotImplementedException(); diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs index 0b4366431a..a11e581344 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -202,7 +202,7 @@ protected async Task ValidateInsertSelectDeleteSingleValue(string selectStatemen { InsertSingleValue(tableName, columnName, formattedValue ?? value?.ToString()); await SelectAndValidateValues(selectStatement, value, 1); - string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); + string whereClause = GetWhereClause(columnName, formattedValue ?? value); DeleteFromTable(tableName, whereClause, 1); } @@ -218,16 +218,10 @@ protected async Task ValidateInsertSelectDeleteSingleValue(string tableName, str { InsertSingleValue(tableName, columnName, formattedValue ?? value?.ToString()); await SelectAndValidateValues(tableName, columnName, value, 1, formattedValue); - string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); + string whereClause = GetWhereClause(columnName, formattedValue ?? value); DeleteFromTable(tableName, whereClause, 1); } - protected virtual string GetDeleteFromWhereClause(string columnName, object value, string formattedValue = null) - { - string comparison = formattedValue != null ? $"= {formattedValue}" : value == null ? "IS NULL" : $"= {value}"; - return $"{columnName} {comparison}"; - } - /// /// Inserts a single value into a table. /// @@ -330,6 +324,11 @@ protected virtual async Task SelectAndValidateValues(string selectStatement, obj actualLength += floatArray.Length; ValidateValue(value, floatArray.Length, (i) => floatArray.GetValue(i)); break; + case Int64Type: + Int64Array int64Array = (Int64Array)nextBatch.Column(0); + actualLength += int64Array.Length; + ValidateValue(value, int64Array.Length, (i) => int64Array.GetValue(i)); + break; case Int32Type: Int32Array intArray = (Int32Array)nextBatch.Column(0); actualLength += intArray.Length; @@ -370,30 +369,10 @@ protected virtual async Task SelectAndValidateValues(string selectStatement, obj actualLength += binaryArray.Length; ValidateValue(value, binaryArray.Length, (i) => binaryArray.GetBytes(i).ToArray()); break; - case MapType: - MapArray mapArray = (MapArray)nextBatch.Column(0); - actualLength += mapArray.Length; - IArrowType valType = mapArray.Values.Data.DataType; - IArrowType keyType = mapArray.Keys.Data.DataType; - ValidateValue(value, mapArray.Length, (i) => ((StructArray)mapArray.GetSlicedValues(i))); - break; - case ListType: - ListArray listArrayArray = (ListArray)nextBatch.Column(0); - actualLength += listArrayArray.Length; - IArrowType elementType = ((ListType)listArrayArray.Data.DataType).ValueDataType; - switch (elementType) - { - case Int32Type: - ValidateValue(value, listArrayArray.Length, (i) => ((Int32Array)listArrayArray.GetSlicedValues(i)).Values.ToArray()); - break; - case Int64Type: - ValidateValue(value, listArrayArray.Length, (i) => ((Int64Array)listArrayArray.GetSlicedValues(i)).Values.ToArray()); - break; - default: - Assert.Fail($"List element type: {elementType} - is not supported."); - break; - } - + case NullType: + NullArray nullArray = (NullArray)nextBatch.Column(0); + actualLength += nullArray.Length; + ValidateValue(value == null, nullArray.Length, (i) => nullArray.IsNull(i)); break; default: Assert.Fail($"Unhandled datatype {field.DataType}"); @@ -428,30 +407,19 @@ private static void ValidateValue(object value, int length, Func ge /// The value to select and validate. /// The native SQL statement. protected virtual string GetSelectSingleValueStatement(string table, string columnName, object value) => + $"SELECT {columnName} FROM {table} WHERE {GetWhereClause(columnName, value)}"; + + protected virtual string GetWhereClause(string columnName, object value) => value == null - ? $"SELECT {columnName} FROM {table} WHERE {columnName} IS NULL" - : string.Format( - "SELECT {0} FROM {1} WHERE {0}={2};", - columnName, - table, - value.GetType() == typeof(float) - ? ConvertFloatToString((float)value) - : value.GetType() == typeof(double) - ? ConvertDoubleToString((double)value) - : value - ); - - protected virtual string GetSelectStatement( - string projection, - string source, - string selection, - string aggregation) => string.Format( - "SELECT {0} {1} {2} {3};", - projection, - source, - selection, - aggregation - ); + ? $"{columnName} IS NULL" + : string.Format("{0} = {1}", columnName, MaybeDoubleToString(value)); + + private static object MaybeDoubleToString(object value) => + value.GetType() == typeof(float) + ? ConvertFloatToString((float)value) + : value.GetType() == typeof(double) + ? ConvertDoubleToString((double)value) + : value; /// /// Converts double values to it's String equivalent. diff --git a/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs index 2b659f5696..3015f82800 100644 --- a/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/BinaryBooleanValueTests.cs @@ -79,5 +79,30 @@ await ValidateInsertSelectDeleteSingleValue( value, formattedValue); } + + /// + /// Validates if driver can receive specific NULL values correctly. + /// + [SkippableTheory] + [InlineData("NULL")] + [InlineData("CAST(NULL AS INT)")] + [InlineData("CAST(NULL AS BIGINT)")] + [InlineData("CAST(NULL AS SMALLINT)")] + [InlineData("CAST(NULL AS TINYINT)")] + [InlineData("CAST(NULL AS FLOAT)")] + [InlineData("CAST(NULL AS DOUBLE)")] + [InlineData("CAST(NULL AS DECIMAL(38,0))")] + [InlineData("CAST(NULL AS STRING)")] + [InlineData("CAST(NULL AS VARCHAR(10))")] + [InlineData("CAST(NULL AS CHAR(10))")] + [InlineData("CAST(NULL AS BOOLEAN)")] + // TODO: Returns byte[] [] (i.e., empty array) - expecting null value. + //[InlineData("CAST(NULL AS BINARY)", Skip = "Returns empty array - expecting null value.")] + public async Task TestNullData(string projectionClause) + { + string selectStatement = $"SELECT {projectionClause};"; + // Note: by default, this returns as String type, not NULL type. + await SelectAndValidateValues(selectStatement, null, 1); + } } } diff --git a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs deleted file mode 100644 index 463ab9c15a..0000000000 --- a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs +++ /dev/null @@ -1,101 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Xunit; -using Xunit.Abstractions; - -namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark -{ - // TODO: When supported, use prepared statements instead of SQL string literals - // Which will better test how the driver handles values sent/received - - /// - /// Validates that specific complex structured types can be inserted, retrieved and targeted correctly - /// - public class ComplexTypesValueTests : SparkTestBase - { - public ComplexTypesValueTests(ITestOutputHelper output) : base(output) { } - - public static IEnumerable IntArrayData(int size) - { - var rnd = new Random(); - int[] ints = new int[size]; - for (int i = 0; i < ints.Length; i++) - { - ints[i] = rnd.Next(); - } - yield return new object[] { ints }; - } - - public static IEnumerable LongArrayData(int size) - { - var rnd = new Random(); - long[] ints = new long[size]; - for (int i = 0; i < ints.Length; i++) - { - ints[i] = rnd.Next(); - } - yield return new object[] { ints }; - } - - /// - /// Validates if driver can send and receive specific array of integer values correctly. - /// - [SkippableFact] - //[MemberData(nameof(IntArrayData), 0)] - //[MemberData(nameof(LongArrayData), 2)] - //[MemberData(nameof(IntArrayData), 1024)] - public async Task TestArrayOfIntData() - { - //string columnName = "INTARRAYTYPE"; - //using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "ARRAY")); - //string formattedValue = $"ARRAY({string.Join(",", value)})"; - //await ValidateInsertSelectDeleteSingleValue( - // table.TableName, - // columnName, - // value, - // formattedValue); - string selectStatement = "SELECT ARRAY(CAST(1 as INT), 2, 3);"; - await SelectAndValidateValues(selectStatement, new[] { 1, 2, 3 }, 1); - } - - /// - /// Validates if driver can send and receive specific map values correctly. - /// - [SkippableFact] - public async Task TestMapData() - { - //string columnName = "STRUCTTYPE"; - //using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} {1}", columnName, "MAP < INT, STRING >")); - //// This works for INSERT but need a different syntax for SELECT and DELETE - //string formattedValue = $"MAP(30, \'John Doe\')"; - //InsertSingleValue(table.TableName, columnName, formattedValue); - //string whereClause = GetDeleteFromWhereClause(columnName, value, formattedValue); - //DeleteFromTable(tableName, whereClause, 1); - //await ValidateInsertSelectDeleteSingleValue( - // table.TableName, - // columnName, - // "", - // formattedValue); - string selectStatement = "SELECT map(1, 'John Doe', 2, 'Jane Doe', 3, 'Jack Doe');"; - await SelectAndValidateValues(selectStatement, "", 1); - } - } -} diff --git a/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs index 53d428a105..718fa8f543 100644 --- a/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/NumericValueTests.cs @@ -17,6 +17,7 @@ using System.Data.SqlTypes; using System.Threading.Tasks; +using Apache.Arrow.Adbc.Drivers.Apache.Hive2; using Xunit; using Xunit.Abstractions; @@ -50,8 +51,8 @@ public async Task TestIntegerSanity(int value) /// Validates if driver can handle the largest / smallest numbers /// [SkippableTheory] - [InlineData(2147483647)] - [InlineData(-2147483648)] + [InlineData(int.MaxValue)] + [InlineData(int.MinValue)] public async Task TestIntegerMinMax(int value) { string columnName = "INTTYPE"; @@ -59,6 +60,19 @@ public async Task TestIntegerMinMax(int value) await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); } + /// + /// Validates if driver can handle the largest / smallest numbers + /// + [SkippableTheory] + [InlineData(long.MaxValue)] + [InlineData(long.MinValue)] + public async Task TestLongMinMax(long value) + { + string columnName = "BIGINTTYPE"; + using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} BIGINT", columnName)); + await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, value); + } + /// /// Validates if driver can handle the largest / smallest numbers /// @@ -113,7 +127,7 @@ public async Task TestSmallNumberRangeOverlimit(int value) { string columnName = "SMALLNUMBER"; using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(2,0)", columnName)); - await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, new SqlDecimal(value))); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, new SqlDecimal(value))); } /// @@ -144,7 +158,7 @@ public async Task TestLargeScaleNumberOverlimit(string value) { string columnName = "LARGESCALENUMBER"; using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,37)", columnName)); - await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); } /// @@ -172,7 +186,7 @@ public async Task TestSmallScaleNumberOverlimit(string value) { string columnName = "SMALLSCALENUMBER"; using TemporaryTable table = NewTemporaryTable(Statement, string.Format("{0} DECIMAL(38,2)", columnName)); - await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); + await Assert.ThrowsAsync(async () => await ValidateInsertSelectDeleteSingleValue(table.TableName, columnName, SqlDecimal.Parse(value))); } @@ -191,7 +205,7 @@ public async Task TestRoundingNumbers(decimal input, decimal output) SqlDecimal returned = new SqlDecimal(output); InsertSingleValue(table.TableName, columnName, value.ToString()); await SelectAndValidateValues(table.TableName, columnName, returned, 1); - string whereClause = GetDeleteFromWhereClause(columnName, value); + string whereClause = GetWhereClause(columnName, returned); DeleteFromTable(table.TableName, whereClause, 1); } @@ -215,7 +229,7 @@ public async Task TestDoubleValuesInsertSelectDelete(double value) string valueString = ConvertDoubleToString(value); InsertSingleValue(table.TableName, columnName, valueString); await SelectAndValidateValues(table.TableName, columnName, value, 1); - string whereClause = GetDeleteFromWhereClause(columnName, value); + string whereClause = GetWhereClause(columnName, value); DeleteFromTable(table.TableName, whereClause, 1); } @@ -242,7 +256,7 @@ public async Task TestFloatValuesInsertSelectDelete(float value) string valueString = ConvertFloatToString(value); InsertSingleValue(table.TableName, columnName, valueString); await SelectAndValidateValues(table.TableName, columnName, value, 1); - string whereClause = GetDeleteFromWhereClause(columnName, value); + string whereClause = GetWhereClause(columnName, value); DeleteFromTable(table.TableName, whereClause, 1); } } diff --git a/csharp/test/Drivers/Apache/Spark/StringValueTests.cs b/csharp/test/Drivers/Apache/Spark/StringValueTests.cs index f5a582f582..88e8b6d2a1 100644 --- a/csharp/test/Drivers/Apache/Spark/StringValueTests.cs +++ b/csharp/test/Drivers/Apache/Spark/StringValueTests.cs @@ -103,7 +103,7 @@ public async Task TestCharData(string value) InsertSingleValue(table.TableName, columnName, formattedValue); await SelectAndValidateValues(table.TableName, columnName, paddedValue, 1, formattedValue); - string whereClause = GetDeleteFromWhereClause(columnName, paddedValue, formattedValue); + string whereClause = GetWhereClause(columnName, formattedValue ?? paddedValue); DeleteFromTable(table.TableName, whereClause, 1); } From c6c5407c65a418af5369942b9bfb613781896b9e Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Thu, 11 Apr 2024 15:03:27 -0700 Subject: [PATCH 54/61] corrected line endings. --- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs index a11e581344..9d7941926f 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -407,18 +407,18 @@ private static void ValidateValue(object value, int length, Func ge /// The value to select and validate. /// The native SQL statement. protected virtual string GetSelectSingleValueStatement(string table, string columnName, object value) => - $"SELECT {columnName} FROM {table} WHERE {GetWhereClause(columnName, value)}"; - + $"SELECT {columnName} FROM {table} WHERE {GetWhereClause(columnName, value)}"; + protected virtual string GetWhereClause(string columnName, object value) => value == null ? $"{columnName} IS NULL" - : string.Format("{0} = {1}", columnName, MaybeDoubleToString(value)); - - private static object MaybeDoubleToString(object value) => - value.GetType() == typeof(float) - ? ConvertFloatToString((float)value) - : value.GetType() == typeof(double) - ? ConvertDoubleToString((double)value) + : string.Format("{0} = {1}", columnName, MaybeDoubleToString(value)); + + private static object MaybeDoubleToString(object value) => + value.GetType() == typeof(float) + ? ConvertFloatToString((float)value) + : value.GetType() == typeof(double) + ? ConvertDoubleToString((double)value) : value; /// From f3d97f6e54052147a79e5c4f7f784eaf69043814 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Fri, 12 Apr 2024 15:20:03 -0700 Subject: [PATCH 55/61] Set option to return string for complex types Added tests for complex types --- .../Drivers/Apache/Spark/SparkStatement.cs | 2 +- .../src/Drivers/Apache/Thrift/SchemaParser.cs | 6 +- .../Apache/Spark/ComplexTypesValueTests.cs | 79 +++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index b686d802f3..8e78fc4173 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -46,7 +46,7 @@ protected override void SetStatementProperties(TExecuteStatementReq statement) { TimestampAsArrow = true, DecimalAsArrow = true, - ComplexTypesAsArrow = true, + ComplexTypesAsArrow = false, IntervalTypesAsArrow = false, }; } diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index 4c54a737b2..fb772a51cb 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -62,18 +62,16 @@ public static IArrowType GetArrowType(TPrimitiveTypeEntry thriftType) case TTypeId.TINYINT_TYPE: return Int8Type.Default; case TTypeId.VARCHAR_TYPE: return StringType.Default; case TTypeId.DECIMAL_TYPE: - var precision = thriftType.TypeQualifiers.Qualifiers["precision"].I32Value; - var scale = thriftType.TypeQualifiers.Qualifiers["scale"].I32Value; + int precision = thriftType.TypeQualifiers.Qualifiers["precision"].I32Value; + int scale = thriftType.TypeQualifiers.Qualifiers["scale"].I32Value; return new Decimal128Type(precision, scale); case TTypeId.INTERVAL_DAY_TIME_TYPE: case TTypeId.INTERVAL_YEAR_MONTH_TYPE: - return StringType.Default; case TTypeId.ARRAY_TYPE: case TTypeId.MAP_TYPE: case TTypeId.STRUCT_TYPE: case TTypeId.UNION_TYPE: case TTypeId.USER_DEFINED_TYPE: - // TODO: Resolve issue that data returned is natvie and not a string representation. return StringType.Default; default: throw new NotImplementedException(); diff --git a/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs new file mode 100644 index 0000000000..87f30ce893 --- /dev/null +++ b/csharp/test/Drivers/Apache/Spark/ComplexTypesValueTests.cs @@ -0,0 +1,79 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark +{ + // TODO: When supported, use prepared statements instead of SQL string literals + // Which will better test how the driver handles values sent/received + + /// + /// Validates that specific complex structured types can be inserted, retrieved and targeted correctly + /// + public class ComplexTypesValueTests : SparkTestBase + { + public ComplexTypesValueTests(ITestOutputHelper output) : base(output) { } + + /// + /// Validates if driver can send and receive specific array of integer values correctly. + /// + [SkippableTheory] + [InlineData("ARRAY(CAST(1 AS INT), 2, 3)", "[1,2,3]")] + [InlineData("ARRAY(CAST(1 AS LONG), 2, 3)", "[1,2,3]")] + [InlineData("ARRAY(CAST(1 AS DOUBLE), 2, 3)", "[1.0,2.0,3.0]")] + [InlineData("ARRAY(CAST(1 AS NUMERIC(38,0)), 2, 3)", "[1,2,3]")] + [InlineData("ARRAY(CAST('John Doe' AS STRING), 2, 3)", """["John Doe","2","3"]""")] + // Note: Timestamp returned adjusted to UTC. + [InlineData("ARRAY(CAST('2024-01-01T00:00:00-07:00' AS TIMESTAMP_LTZ), CAST('2024-02-02T02:02:02+01:30' AS TIMESTAMP_LTZ), CAST('2024-03-03T03:03:03Z' AS TIMESTAMP_LTZ))", """[2024-01-01 07:00:00,2024-02-02 00:32:02,2024-03-03 03:03:03]""")] + [InlineData("ARRAY(CAST('2024-01-01T00:00:00Z' AS DATE), CAST('2024-02-02T02:02:02Z' AS DATE), CAST('2024-03-03T03:03:03Z' AS DATE))", """[2024-01-01,2024-02-02,2024-03-03]""")] + [InlineData("ARRAY(INTERVAL 123 YEARS 11 MONTHS, INTERVAL 5 YEARS, INTERVAL 6 MONTHS)", """[123-11,5-0,0-6]""")] + public async Task TestArrayData(string projection, string value) + { + string selectStatement = $"SELECT {projection};"; + await SelectAndValidateValues(selectStatement, value, 1); + } + + /// + /// Validates if driver can send and receive specific map values correctly. + /// + [SkippableTheory] + [InlineData("MAP(1, 'John Doe', 2, 'Jane Doe', 3, 'Jack Doe')", """{1:"John Doe",2:"Jane Doe",3:"Jack Doe"}""")] + [InlineData("MAP('John Doe', 1, 'Jane Doe', 2, 'Jack Doe', 3)", """{"Jack Doe":3,"Jane Doe":2,"John Doe":1}""")] + public async Task TestMapData(string projection, string value) + { + string selectStatement = $"SELECT {projection};"; + await SelectAndValidateValues(selectStatement, value, 1); + } + + /// + /// Validates if driver can send and receive specific map values correctly. + /// + [SkippableTheory] + [InlineData("STRUCT(CAST(1 AS INT), CAST('John Doe' AS STRING))", """{"col1":1,"col2":"John Doe"}""")] + [InlineData("STRUCT(CAST('John Doe' AS STRING), CAST(1 AS INT))", """{"col1":"John Doe","col2":1}""")] + public async Task TestStructData(string projection, string value) + { + string selectStatement = $"SELECT {projection};"; + await SelectAndValidateValues(selectStatement, value, 1); + } + } +} From a118de1348e4a15911a2c73fd2e15c9e397057c7 Mon Sep 17 00:00:00 2001 From: David Coe Date: Tue, 16 Apr 2024 11:53:30 -0400 Subject: [PATCH 56/61] PR feedback --- .../Drivers/Apache/Spark/SparkStatement.cs | 146 +----------------- csharp/src/Drivers/Apache/readme.md | 72 +++++++++ ...kup.Arrow.Adbc.Tests.Drivers.Apache.csproj | 42 ----- 3 files changed, 76 insertions(+), 184 deletions(-) create mode 100644 csharp/src/Drivers/Apache/readme.md delete mode 100644 csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj diff --git a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs index 8e78fc4173..6be00a76ad 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStatement.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStatement.cs @@ -46,6 +46,10 @@ protected override void SetStatementProperties(TExecuteStatementReq statement) { TimestampAsArrow = true, DecimalAsArrow = true, + + // set to false so they return as string + // otherwise, they return as ARRAY_TYPE but you can't determine + // the object type of the items in the array ComplexTypesAsArrow = false, IntervalTypesAsArrow = false, }; @@ -59,7 +63,6 @@ public override QueryResult ExecuteQuery() // TODO: Ensure this is set dynamically based on server capabilities return new QueryResult(-1, new SparkReader(this, schema)); - //return new QueryResult(-1, new CloudFetchReader(this, schema)); } public override UpdateResult ExecuteUpdate() @@ -159,146 +162,5 @@ public void Dispose() } } - - sealed class CloudFetchReader : IArrowArrayStream - { - SparkStatement _statement; - Schema _schema; - ChunkDownloader _chunkDownloader; - IArrowReader _reader; - - public CloudFetchReader(SparkStatement statement, Schema schema) - { - _statement = statement; - _schema = schema; - TFetchResultsReq request = new TFetchResultsReq(_statement.operationHandle, TFetchOrientation.FETCH_NEXT, 500000); - TFetchResultsResp response = this._statement.connection.client.FetchResults(request, cancellationToken: default).Result; - _chunkDownloader = new ChunkDownloader(response.Results.ResultLinks); - } - - public Schema Schema { get { return _schema; } } - - public async ValueTask ReadNextRecordBatchAsync(CancellationToken cancellationToken = default) - { - while (true) - { - if (_reader != null) - { - RecordBatch next = await _reader.ReadNextRecordBatchAsync(cancellationToken); - if (next != null) - { - return next; - } - _reader = null; - if (_chunkDownloader.currentChunkIndex >= _chunkDownloader.chunks.Count) - { - _statement = null; - } - } - - if (_statement == null) - { - return null; - } - - if (_reader == null) - { - var currentChunk = _chunkDownloader.chunks[_chunkDownloader.currentChunkIndex]; - while (!currentChunk.isDownloaded) - { - await Task.Delay(500, cancellationToken); - } - _chunkDownloader.currentChunkIndex++; - _reader = currentChunk.reader; - } - } - } - - public void Dispose() - { - } - } - } - - internal class ChunkDownloader - { - public Dictionary chunks; - - public int currentChunkIndex = 0; - HttpClient client; - - public ChunkDownloader(List links) - { - this.chunks = new Dictionary(); - for (int i = 0; i < links.Count; i++) - { - var currentChunk = new Chunk(i, links[i].FileLink); - this.chunks.Add(i, currentChunk); - } - this.client = new HttpClient(); - initialize(); - } - - public ChunkDownloader(Dictionary> links) - { - //this.links = links; - this.client = new HttpClient(); - } - - void initialize() - { - int workerThreads, completionPortThreads; - ThreadPool.GetMinThreads(out workerThreads, out completionPortThreads); - ThreadPool.SetMinThreads(5, completionPortThreads); - ThreadPool.SetMaxThreads(10, completionPortThreads); - foreach (KeyValuePair chunk in chunks) - { - ThreadPool.QueueUserWorkItem(async _ => - { - try - { - await chunk.Value.downloadData(this.client); - } - catch (Exception e) - { - Console.WriteLine(e); - } - }); - } - } - } - - public class Chunk - { - int chunkId; - string chunkUrl; - Dictionary headers; - public bool isDownloaded = false; - public bool isFailed = false; - public IArrowReader reader; - - public Chunk(int chunkId, string chunkUrl) : this(chunkId, chunkUrl, new Dictionary()) - { - } - - public Chunk(int chunkId, string chunkUrl, Dictionary headers) - { - this.chunkId = chunkId; - this.chunkUrl = chunkUrl; - this.headers = headers; - this.reader = null; - } - - public async Task downloadData(HttpClient client) - { - var request = new HttpRequestMessage(HttpMethod.Get, chunkUrl); - foreach (KeyValuePair pair in headers) - { - request.Headers.Add(pair.Key, pair.Value); - } - HttpResponseMessage response = await client.SendAsync(request); - this.reader = new ArrowStreamReader(response.Content.ReadAsStreamAsync().Result); - isDownloaded = true; - } } } diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md new file mode 100644 index 0000000000..8e3d696409 --- /dev/null +++ b/csharp/src/Drivers/Apache/readme.md @@ -0,0 +1,72 @@ + + +# Thrift-based Apache connectors +This library contains code for ADBC drivers built on top of the Thrift protocol with Arrow support: + +- Hive +- Impala +- Spark + +Each driver is at a different state of implementation. + +## Custom generation +Typically, [Thrift](https://thrift.apache.org/) code is generated from the Thrift compiler. And that is mostly true here as well. However, some files were further edited to include Arrow support. These contain the phrase `BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK` at the top. Some of these files include: + +``` +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rcase TTypeId.pc/Thrift/TByteColumn.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs +``` + +# Spark + +## Spark Types + +The following table depicts how the Spark ADBC driver converts a Spark type to an Arrow type and a .NET type: + +| Spark Type | Arrow Type | C# Type +|----------|:-------------:| +| ARRAY | String | string +| BIGINT | Int64 | long +| BINARY | Binary | byte[] +| BOOLEAN | Boolean | bool +| CHAR | String | string +| DATE | Date32 | DateTime +| DECIMAL | Decimal128 | SqlDecimal +| DOUBLE | Double | double +| FLOAT | Float | float +| INT | Int32 | int +| INTERVAL_DAY_TIME | String | string +| INTERVAL_YEAR_MONTH | String | string +| MAP | String | string +| NULL | Null | null +| SMALLINT | Int16 | short +| STRING | String | string +| STRUCT | String | string +| TIMESTAMP | Timestamp | DateTimeOffset +| TINYINT | Int8 | sbyte +| UNION | String | string +| USER_DEFINED | String | string +| VARCHAR | String | string diff --git a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj b/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj deleted file mode 100644 index 0c4ca36935..0000000000 --- a/csharp/test/Drivers/Apache/Apache - Backup.Arrow.Adbc.Tests.Drivers.Apache.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - net7.0 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - From 7fa0a1656774680f939b93e9d0ec5f47fd55f25b Mon Sep 17 00:00:00 2001 From: David Coe Date: Tue, 16 Apr 2024 13:14:58 -0400 Subject: [PATCH 57/61] add more details to readme --- csharp/src/Drivers/Apache/readme.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md index 8e3d696409..1d233e3abd 100644 --- a/csharp/src/Drivers/Apache/readme.md +++ b/csharp/src/Drivers/Apache/readme.md @@ -40,7 +40,16 @@ arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs ``` +# Hive +The Hive classes serve as the base class for Spark and Impala, since both of those platform implement Hive capabilities. + +Core functionality of the Hive classes beyond the base library implementation is under development, has limited functionality, and may produce errors. + +# Impala +The Imapala classes are under development, have limited functionality, and may produce errors. + # Spark +The Spark classes are intended for use against native Spark and Spark on Databricks. ## Spark Types @@ -48,7 +57,7 @@ The following table depicts how the Spark ADBC driver converts a Spark type to a | Spark Type | Arrow Type | C# Type |----------|:-------------:| -| ARRAY | String | string +| ARRAY* | String | string | BIGINT | Int64 | long | BINARY | Binary | byte[] | BOOLEAN | Boolean | bool @@ -58,15 +67,18 @@ The following table depicts how the Spark ADBC driver converts a Spark type to a | DOUBLE | Double | double | FLOAT | Float | float | INT | Int32 | int -| INTERVAL_DAY_TIME | String | string -| INTERVAL_YEAR_MONTH | String | string -| MAP | String | string +| INTERVAL_DAY_TIME+ | String | string +| INTERVAL_YEAR_MONTH+ | String | string +| MAP* | String | string | NULL | Null | null | SMALLINT | Int16 | short | STRING | String | string -| STRUCT | String | string +| STRUCT* | String | string | TIMESTAMP | Timestamp | DateTimeOffset | TINYINT | Int8 | sbyte | UNION | String | string | USER_DEFINED | String | string | VARCHAR | String | string + +*Complex types are returned as strings
++Interval types are returned as strings From 0e7aa506cd23f3e1c71cf23cae08c8f114fdb43f Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Tue, 16 Apr 2024 11:58:53 -0700 Subject: [PATCH 58/61] feat(csharp/src/Drivers/Apache): code review improvements (#12) * Code Review Improvements * Fixed line ending. --- .../Apache/Hive2/HiveServer2Connection.cs | 12 ++-- .../Drivers/Apache/Spark/SparkConnection.cs | 1 - .../src/Drivers/Apache/Thrift/SchemaParser.cs | 3 +- csharp/src/Drivers/Apache/readme.md | 67 +++++++++++-------- .../test/Apache.Arrow.Adbc.Tests/TestBase.cs | 1 - 5 files changed, 48 insertions(+), 36 deletions(-) diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs index 74cb728455..526b04d148 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -64,17 +64,17 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal Dictionary>>> catalogMap = new Dictionary>>>(); if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) { - TGetCatalogsReq getCatalogsReq = new TGetCatalogsReq(this.sessionHandle); + throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.Catalogs)}"); } if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) { - TGetSchemasReq getSchemasReq = new TGetSchemasReq(this.sessionHandle); + throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.DbSchemas)}"); } if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) { - TGetTablesReq getTablesReq = new TGetTablesReq(this.sessionHandle); + throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.Tables)}"); } if (depth == GetObjectsDepth.All) @@ -90,7 +90,9 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal var columnsResponse = this.client.GetColumns(columnsReq).Result; if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) { - throw new Exception(columnsResponse.Status.ErrorMessage); + throw new HiveServer2Exception(columnsResponse.Status.ErrorMessage) + .SetSqlState(columnsResponse.Status.SqlState) + .SetNativeError(columnsResponse.Status.ErrorCode); } this.operationHandle = columnsResponse.OperationHandle; @@ -100,7 +102,7 @@ public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catal Schema schema = GetSchema(); - return new GetObjectsReader(this,schema); + return new GetObjectsReader(this, schema); } public override IArrowArrayStream GetInfo(List codes) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index 7174f34b28..fa1ae62dad 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -525,7 +525,6 @@ private static IArrowType GetArrowType(ColumnTypeId columnTypeId, string typeNam case ColumnTypeId.ARRAY_TYPE: case ColumnTypeId.MAP_TYPE: case ColumnTypeId.STRUCT_TYPE: - // TODO: Resolve issue where complex types are not being returned as string. return StringType.Default; default: throw new NotImplementedException($"Column type id: {columnTypeId} is not supported."); diff --git a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs index fb772a51cb..82c768b80f 100644 --- a/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs +++ b/csharp/src/Drivers/Apache/Thrift/SchemaParser.cs @@ -29,7 +29,8 @@ internal static Schema GetArrowSchema(TTableSchema thriftSchema) for (int i = 0; i < thriftSchema.Columns.Count; i++) { TColumnDesc column = thriftSchema.Columns[i]; - fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* ??? */); + // Note: no nullable metadata is returned from the Thrift interface. + fields[i] = new Field(column.ColumnName, GetArrowType(column.TypeDesc.Types[0]), nullable: true /* assumed */); } return new Schema(fields, null); } diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md index 1d233e3abd..a83d5860a6 100644 --- a/csharp/src/Drivers/Apache/readme.md +++ b/csharp/src/Drivers/Apache/readme.md @@ -32,7 +32,7 @@ Typically, [Thrift](https://thrift.apache.org/) code is generated from the Thrif ``` arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs -arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rcase TTypeId.pc/Thrift/TByteColumn.cs +arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs @@ -55,30 +55,41 @@ The Spark classes are intended for use against native Spark and Spark on Databri The following table depicts how the Spark ADBC driver converts a Spark type to an Arrow type and a .NET type: -| Spark Type | Arrow Type | C# Type -|----------|:-------------:| -| ARRAY* | String | string -| BIGINT | Int64 | long -| BINARY | Binary | byte[] -| BOOLEAN | Boolean | bool -| CHAR | String | string -| DATE | Date32 | DateTime -| DECIMAL | Decimal128 | SqlDecimal -| DOUBLE | Double | double -| FLOAT | Float | float -| INT | Int32 | int -| INTERVAL_DAY_TIME+ | String | string -| INTERVAL_YEAR_MONTH+ | String | string -| MAP* | String | string -| NULL | Null | null -| SMALLINT | Int16 | short -| STRING | String | string -| STRUCT* | String | string -| TIMESTAMP | Timestamp | DateTimeOffset -| TINYINT | Int8 | sbyte -| UNION | String | string -| USER_DEFINED | String | string -| VARCHAR | String | string - -*Complex types are returned as strings
-+Interval types are returned as strings +| Spark Type | Arrow Type | C# Type | +| :--- | :---: | :---: | +| ARRAY* | String | string | +| BIGINT | Int64 | long | +| BINARY | Binary | byte[] | +| BOOLEAN | Boolean | bool | +| CHAR | String | string | +| DATE | Date32 | DateTime | +| DECIMAL | Decimal128 | SqlDecimal | +| DOUBLE | Double | double | +| FLOAT | Float | float | +| INT | Int32 | int | +| INTERVAL_DAY_TIME+ | String | string | +| INTERVAL_YEAR_MONTH+ | String | string | +| MAP* | String | string | +| NULL | Null | null | +| SMALLINT | Int16 | short | +| STRING | String | string | +| STRUCT* | String | string | +| TIMESTAMP | Timestamp | DateTimeOffset | +| TINYINT | Int8 | sbyte | +| UNION | String | string | +| USER_DEFINED | String | string | +| VARCHAR | String | string | + +\* Complex types are returned as strings
+\+ Interval types are returned as strings + + +## Known Limitations + +1. API `Connection.GetObjects` is not fully implemented at this time + 1. Only supports depth of `GetObjectsDepth.All`. + 1. May not return all catalogs and schema in the server. + 1. May throw an exception when returning object metadata from multiple catalog and schema. +1. API `Connection.GetTableSchema` does not return correct precision and scale for `NUMERIC`/`DECIMAL` types. +1. When a `NULL` value is returned for a `BINARY` type it is instead being returned as an empty array instead of the expected `null`. +1. Result set metadata does not provide information about the nullability of each column. They are marked as `nullable` by default, which may not be accurate. diff --git a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs index 9d7941926f..9af4d1c3c5 100644 --- a/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs +++ b/csharp/test/Apache.Arrow.Adbc.Tests/TestBase.cs @@ -161,7 +161,6 @@ protected string[] GetQueries() if (line.TrimStart().StartsWith("--")) { continue; } if (line.Contains(placeholder)) { - // TODO: Try 3-level name string modifiedLine = line.Replace(placeholder, $"{TestConfiguration.Metadata.Catalog}.{TestConfiguration.Metadata.Schema}.{TestConfiguration.Metadata.Table}"); content.AppendLine(modifiedLine); } From 58d2d2335f5e878ea06b55584b6ccdd355578e9b Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Tue, 16 Apr 2024 13:03:32 -0700 Subject: [PATCH 59/61] Document unsupported Impala driver. --- csharp/src/Drivers/Apache/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md index a83d5860a6..5ad98bfb2e 100644 --- a/csharp/src/Drivers/Apache/readme.md +++ b/csharp/src/Drivers/Apache/readme.md @@ -93,3 +93,4 @@ The following table depicts how the Spark ADBC driver converts a Spark type to a 1. API `Connection.GetTableSchema` does not return correct precision and scale for `NUMERIC`/`DECIMAL` types. 1. When a `NULL` value is returned for a `BINARY` type it is instead being returned as an empty array instead of the expected `null`. 1. Result set metadata does not provide information about the nullability of each column. They are marked as `nullable` by default, which may not be accurate. +1. The **Impala** driver is untested and is currently unsupported. From 8373c966cd9b6b18ca1e42e77c928cd5878bcdd7 Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Tue, 16 Apr 2024 13:08:26 -0700 Subject: [PATCH 60/61] Added comment for supporting only little-endian platforms. --- csharp/src/Drivers/Apache/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md index 5ad98bfb2e..5e01001165 100644 --- a/csharp/src/Drivers/Apache/readme.md +++ b/csharp/src/Drivers/Apache/readme.md @@ -94,3 +94,4 @@ The following table depicts how the Spark ADBC driver converts a Spark type to a 1. When a `NULL` value is returned for a `BINARY` type it is instead being returned as an empty array instead of the expected `null`. 1. Result set metadata does not provide information about the nullability of each column. They are marked as `nullable` by default, which may not be accurate. 1. The **Impala** driver is untested and is currently unsupported. +1. The underlying Thrift interface only supports little-endian platforms. From 226343a7b25de102103825cf27e91ebe9edb019a Mon Sep 17 00:00:00 2001 From: Bruce Irschick Date: Tue, 16 Apr 2024 15:12:02 -0700 Subject: [PATCH 61/61] Remove implementation of HiveServer2Connection.GetObjects. Update README --- .../Apache/Hive2/HiveServer2Connection.cs | 43 +------------------ csharp/src/Drivers/Apache/readme.md | 7 ++- 2 files changed, 4 insertions(+), 46 deletions(-) diff --git a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs index 526b04d148..ae0c47a93c 100644 --- a/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs +++ b/csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs @@ -61,48 +61,7 @@ public void Open() public override IArrowArrayStream GetObjects(GetObjectsDepth depth, string catalogPattern, string dbSchemaPattern, string tableNamePattern, List tableTypes, string columnNamePattern) { - Dictionary>>> catalogMap = new Dictionary>>>(); - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Catalogs) - { - throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.Catalogs)}"); - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.DbSchemas) - { - throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.DbSchemas)}"); - } - - if (depth == GetObjectsDepth.All || depth >= GetObjectsDepth.Tables) - { - throw new NotImplementedException($"Unsupported depth: {nameof(GetObjectsDepth.Tables)}"); - } - - if (depth == GetObjectsDepth.All) - { - TGetColumnsReq columnsReq = new TGetColumnsReq(this.sessionHandle); - columnsReq.CatalogName = catalogPattern; - columnsReq.SchemaName = dbSchemaPattern; - columnsReq.TableName = tableNamePattern; - - if (!string.IsNullOrEmpty(columnNamePattern)) - columnsReq.ColumnName = columnNamePattern; - - var columnsResponse = this.client.GetColumns(columnsReq).Result; - if (columnsResponse.Status.StatusCode == TStatusCode.ERROR_STATUS) - { - throw new HiveServer2Exception(columnsResponse.Status.ErrorMessage) - .SetSqlState(columnsResponse.Status.SqlState) - .SetNativeError(columnsResponse.Status.ErrorCode); - } - - this.operationHandle = columnsResponse.OperationHandle; - } - - PollForResponse(); - - Schema schema = GetSchema(); - - return new GetObjectsReader(this, schema); + throw new NotImplementedException(); } public override IArrowArrayStream GetInfo(List codes) diff --git a/csharp/src/Drivers/Apache/readme.md b/csharp/src/Drivers/Apache/readme.md index 5e01001165..ec385f2e26 100644 --- a/csharp/src/Drivers/Apache/readme.md +++ b/csharp/src/Drivers/Apache/readme.md @@ -86,10 +86,9 @@ The following table depicts how the Spark ADBC driver converts a Spark type to a ## Known Limitations -1. API `Connection.GetObjects` is not fully implemented at this time - 1. Only supports depth of `GetObjectsDepth.All`. - 1. May not return all catalogs and schema in the server. - 1. May throw an exception when returning object metadata from multiple catalog and schema. +1. The API `SparkConnection.GetObjects` is not fully tested at this time + 1. It may not return all catalogs and schema in the server. + 1. It may throw an exception when returning object metadata from multiple catalog and schema. 1. API `Connection.GetTableSchema` does not return correct precision and scale for `NUMERIC`/`DECIMAL` types. 1. When a `NULL` value is returned for a `BINARY` type it is instead being returned as an empty array instead of the expected `null`. 1. Result set metadata does not provide information about the nullability of each column. They are marked as `nullable` by default, which may not be accurate.

SX8?Xsmuno-&W;mnRfeGxyZe+;* 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ဈZ=WsRm^E~hK9e-Y;qGDsV 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

SX8?Xsmuno-&W;mnRfeGxyZe+;* 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ဈZ=WsRm^E~hK9e-Y;qGDsV zq>+)#;vi1s9B$%$DweFMSc&!7mKH{{D+hB5mvR@c@fk}lRZ;ObHlvy%W0}GJoXizG z&O3a`VoO(4tjgw8)6970a4=_cJ@@c3pR?jJ(y#$rQO`(ba2RKECAae?pYkhzTUOcF zh6YB_&psT_1>DSIyvowcNkfutXs3tWIhxbBng@A>Z&_;jii(w4hb%)G&Up6cIL_fV zp5Sf1WyKXLD%K`V3nS@cUryj+Zsbv3=5u~xnH4K4)?iDT8OaRx;TX>4Y98Q4KI3Or zSgE37JyJw$&omBX9+z_m&+;Bi3jQ_OoNXA+1a{+KPURZz;%VODOO{%>qT;WlsHMP; zOkz(?;R^2OY2M~5D*kAHRI(kz>0wXiaT#~>Bp>h-tNuxRvo+0(W)}`*9_Mf!_wWiI z@jXlak210@ThqpPrm-)la3zoO0v|Kr&lMG`u@O0jGll&*hO@YayLp8lS?+%;DpqGx z@^mqoeVE4uJjpwJ%OC%u4%mckXki@Fn9C_##lyV7JABXbf0d4nsb@!~un$La4p(y* zPw)<3u*~12V-U3rr-$k6&k0<{%{F@d$RkSmOy*Zlmxs50JfUo(5HJwCr zG}6s9=5i93a62#Z9`jjlRk2Pb+tR{FcI8OU;9~CNMZRFbYWgEDQQqSx{&yWQLBx(sW>*g7Os?WCUgTYVVa0VT zDmElbEp3cv502nmuH{iareZz)gmp2=k@h1wxyYI%;s>; z<`$mfUH-u`8&p*Mg-zI!X2vs{1DMD8+{t6S$|wB5${T89wx*q4cIPoL*6%nJ^jr}>5E4hPbc#H2? za*%TcDOwoCOb+HuZstke;~-ApVjkc{KH_KooDgf|Xl4vE z*@xq~gd2H?4_GYey3V?6!4SHb&Ow~cwLHShe9W)>J>~cr%6R(On`1ef8+e!(`IsMB zHf?OgdZegg7~|QEd0fQxJk94UmT_KXbv7YKL zukk5MZ|Pi4mS)B?gMB%QQ@Dg1xQ|!(h@V+%E9WuRU{iLak9|3u^SFvTd5U-Wk|np+ zepIp@olItLj^lK0;2~b(E0)?u9J4+t2GdSAyKpF{aWS{^7_ajw-?Qwt`V29uX=fa} zav-O21^4qb@9-7NZs+{T+Qit3p^Rq_j^;FOIY)pJABVdgQaD2BF56oo}A3B zyuio&$Vzq2VQj%j_T*S@;WfTvrFwmvDq5M&;he)Qyu#P4KEyT*XDV|!jhlFak63o7 z^EX*)>1I#naXk<783Q75Nt%c$?92Jw!^?a{MS~b3K{H*<;UJFZ9PZ&u1~fV+vNj1C z8O0Q4a|rV|pIdmCSNW8mSguJtFoiJ9v`!`H>Y`)h}rV zGn|RcVICK9JJ0eNKeBwAxgIg<*@-Fa#ZjEg_1wz~e87*a*sh!;Xd50`RX{DQ~?8V`n%!S;-W4yuVEIHiyoOQ|4!Z_w|2&Zus_whV$^F1q%uuo!a zO*1<&ow*#rdECTfyu(+l*y-9qjBV*)B71Wz=W;Fg@*E$s`1aDUDcdoeSscQt+`wym z$Del42Pn|R9OiL7ukr=U?Wir;mJ#%G2xoB(FYzOP80j3zwv1#ZM{*u_@B*K*_$cQC zHl>bH%;0z~<0c;DMLwfqC;g4h*oqcrGM5v$gj;x&cleTuE^*KLY)KQN=wnZg;#_Xv zAztKjmKm*&vLQJd=wK}U?9ZuO#GO3N+kDM{G3t|b8N{|U(812k<`~Z8B5vkoKH*nZ z9BaR%C@_kt%;jj#;7T6mbw1*Imh9F(3}PD^*oj{D;s{RR5^m&vp64UJWw~+MgY`%; zm<}c|i@6-lxm?42Jj-YN%8KKio7jL#YAG^`nH<0|oW&K~&C|Tik1RPsdInKNGdnPg zgE@ioxPkk5g^yXhM_Vz7?I^MneeBIKoW- zH~e9$b2S@NO$*&j;~>u9W}e|QmfFSnj|?sB$V?9BRBqrgK4Qr}eTW)%UUUuUs&f+@m;0fO6YX;1A?P5(b)X+*7Q<%wI zPUcGP;tAg4dzReId6>1SWILJ|MKAkt7MF1+Pw+n9@y9u0h9r54bTgHsxsdC)m#6uV zrFM5NVMDf|gI;EH04H!MH*-I)@)?Wo;aWj0!x_Ua?8^z<#C^QVhsR&R48UhCBtvFoQ!liA%YiC;5P7_qHFlq@5WY%K6;QQ+&u``-m;p zBFk_lGMhs=mm7GLSNV!R?5q5wXkZ%qa{?D}9Z&KF^I3jBa}qXZYZ~aJhrKwQQ@EK2 zd7iiVjsbI>M_HYXsAd>lOl2QNjF^3~KnTxrNSNNL6kI=?!#1=HM6SFy$ zYq*Oid7ovDbZ#L|k)4>#Y!2jTuHX?~Vm^O7N*V?+m=?w`lcTtR>$sa2`GlYO!_nqm zB&ed5ZuaCz&f*px;SD}#iDSeRs}rZ5kxXJH2XZ{;b1RSWJfAS1za6W-NimFZ%wR63 za|w6w9PjWGD;}quY)L&GOk#KDaX#1c3~%!tE6sDRBtqxd5(|yfj^w+{7;%8bkNN-_Tnhc z;1cfVdEVtGmOaVXlufCnm2pgCUykD(uI3S5=0m<`#gmO|*n}K)bkI#7dvO@2as{{Z z7;o|oi=Cpsuqi_rPA~g$KDYBYFYz@4PIa9nNgKWF$zhzv<=nzkyvvU)b(*#&M;%>E z=Sa@tGVbG9-eBp|#UdGoGm%*w%{g4otvtxHyvcww#0Qn+>0lyzast=!7;iG*Ozp)+ zRME~D`Z<_0xRpnEiy!#&S^7F7*^NUuliPTmPxy|N&US5LJBBfe=^V|u+`;2~z<_g% zt%%dWSo%1C6SXjFN7jqL&@IJrr zw+qE1Lm0FSinF+u+jx|h`GBuk>|*i2Y9txL z7-p~!M{+th^BSK}afxvPe`kGS)Y8gScIQyeSVh|Z>DbmY*`5jP$-$h! z6+Fi$EPkc!S(i%kOy*!tDe-R0 z9LkAY%uPJNi+oMRb&i=;*pw|8#%OlqAdcsJZs8%G=Rr5wQak zn85*@&XqjGyZpre+^VmUq>48B*o(sn|BCJ{>6z9wb7152DLrF)rglvlShe8K%saaJ zd#8-=8d&Ha-_twgpUbPeyJmFv{pa@ok-^};?(VU@lmE+>y}fl#13 z`#+aAgrk}AUsg1Bj~&h4>#o8pA7nN$8t zIg8zsd#3bG`Y+W}?CyLP595U)OU>?+dF3Bf_7}`?wPc~w1LHm zvj!Hrri_`euz1zeXV32H8#`@aq4!@3T{nHo*jdvSZqqnsU`^MwNj?A4=py02#AJQ% zWHs8|HFn_OuD;2O(huz#GqJyS=Az`G5cT3z0bZCX>6Z{UYOIsroMskfo+re`(!zOLVu`-#xY~Nrs%2z!-47uo-bZYtS07{26rmt&U|G)+Z*E40jF5TBNwPQk0f4@(mRex8Ay6LKJ+_Zl-cE`Y) z-?k{WHaCP_*Y=JdIHd326Aqm|_TK_OKUVzxF7skf_jsq7DT`{bp?CbWvHzZvXq;tP zacZ9e>Nfw{nL-v|DBf>;%bziU3Oy8n>9k#aB;rbUXDt3R z`6)fS4y^9|m!0SWzbi#`=*YicqVe_1$qNIgqj%D{fsG*=yZ+g!)qI!E^81t>t|?Qy z`kgO^OzGE?N{#u?i__pi9fJmTc1?0>(%XJ()kc>u{bfNg4W2YBG;96Bm95>Ar~Wg7 zUY)oDWaxKiYAR-D|kAlRpc0IKU9J63=F{jn6f zr*zHe>iO*)Q|y`KY%)_v{kPaH_D}E9lYdu^>fWyYDN3?nr~N%+Cv;8T?B7lsj=pq} z3JtmNn2Mpx7J9~x|7UOcmm{w2nKs4M;xbnPx0Ht2FlZx!^9`QGL&59RlpP z-8POH-#x)~tEQ`eT+g%#uCw~%^u8`9uiv(4=q-&FN)^>Iy>DXotf?-E3)dF(-<~o5 z<+R+0J4i@i6GkGrb=|I>YO-vyVB8z9=Uxxz<#-!qw+w8>0{OrR9h zc9Kq$p=l;$X`6~P?jVSY8;a1X2r9U-C@7GsAmWB1ilWjgAR;O%c3<*+o^$VgFEinv z-`_tUpT~!0-tYHa&OPhvoO|!`F&u>suSWSHN1v>M>q@M5%DG4Gr&4X8j;%$###|KT zm~cYDAWSYABy1Q0twgyER%i^GsRk<18$Bi7L0#AckGxhcBYa=5vbad(ozS%b9)Q+kPb1qEK zy(GyQ<;p0+iJuW^|6F}+m=EWePm=~ z4a&r+(T*_HoJE!wp%*5l0@n`Igp}4+yC&p`_*s5Nof{d3vdF1pl^VXK8f*75>SGj( zpZu|{ihnSSTM(|}%CU8W5u0`k{d9afkv8n}cn^$fhb&f9R@C>8cQRaw=+Y%#ml_)# zQ=!s}vo^T71|giqb~8*5R8SvrGGqp-73drvf9E)=R%joI)be`&ptvYiJi}TfE9uGr z9$kYPUe-H~cnu*kYs0xNgJ*}}&FWy|;&fLBYHKQfURezEx(3Q+H#GdvS|3Lsvq>MM zwK6a~E}A)VyV_8o!;$|u*4I}Raf|tm8QxH7SDK^gH=-%T^ONz6h#oFf@s-`W=4%7% z2}CTXwN^*^8L7AW?v-K<&pedPh9Q=5ZU*Y9(+LK`2`ga{7x#TSbyO;CjblP{c2vfC z!guP381AObRL5;ORa)||bXP}X&Tg(+5$m1g=rT*pJF1VBwaV4eQEdH4Ds8o;PJaaq z8|ka|%E0;_B*b^4`m0nK!twTuY6U3_wfwY{$Aq6eamCST!`T`T`{LfhMP~#Fe$qkU zS`1*Glj6H;p zSx4R5Kt^7y3{`6D$MCpI=(?(<&{~b`YCSy=GUS==vB5Fic|XO|hK6{#4Id5Lm=Lix=a zu@!5^dgBJHt-diHe9(^w8vl`Lb>r%I^^FgY4e(D2RpiZCBlog8+&Y}{SkIaoQGU!$ zqTPrVyDCF98gw6I`r)w306MPRU&U#3KeyFILD>Pc*ZcZvVjBJ5V#*=C`?FYCHyHVb z==HgxZyicpZFHIYD- zY9bIpQR3bg#46XvFnxkqjQcfI*1!#h@Zyyx7_~HjBO$y7XN2=D4^&aczMu4%h<#I> zldGZWh}B~9*+nNk^^K{vsxa3`Tmvf~b&n0eS`p=In;~0ht7Vv-Ob4ypLrCDJ9oX15 zE_><9U>|@3V^U+59vEA@)*8RK@+gfFn4ROBX{!#3-{Kkt_^5|7)}gV6Rb<{h?}qdn z31A6qr15CPOS+eom-x5Z#zsf+--wjN5CnMCXZlCwL1dg|24`_i<}1}TA%O)hVDPw? z4d$U$uny!uL>b)It;E(joKTFT`=u=w@t=OV3310Iik)7@W9ojS&HhwECDU_T?+ndK)-K^rmPHuA94m|ww+_{b0d*g>qxk*5aVMZ!E!jyh zjBX|9L`p*J)dEs+!Rn~iMsTLQl296_I>GG3Ym~|PJ|J$R9#wOQMu&_2pzx~uF=NO1 z#a|w3JgkRvBVR45crRu<2s;R8yyQf?}ma9s~TAw zX09-SO@SUW&Cn&(|U>d;v;IU4&b$c zD@O{hd$?AQD?yn*_>LDM>nRJ=D-L0~T1hRl@~vypU0aW-OF`vYL=22R&8IO|j_v`@ zs^BMz8_I9Q00ADRQwID+_~_mDFy1P!W3Vx&5_(A3psC^N> z90g5v-ab>fip=_Z9Aj4mrwm|Cd4yQ<=yG&T!#wGnTv9V4p^fM z>nwRX4_9LOrfj7TO<5Eq%RRSVIGzTcuK%svUqj6&U3tiaZ|dL3i#jLo6+(@|nqn>D zN;o|RPbFtFEDowTRK6h#Xb7VwmRB@JkE8(^rBHS#(@z{;@9mF?W-HDhz-+f>_H5~lAUDhgS!br>b0j({7g=mplM0cFgK=~f|1begWLsgPpz zi#rDJ!2J9;r*BH(pE7E%7kJx$TC8rAvATx3S=vND-q&%@+c(zw(8pMx=o<|7U|%en zE{a*#Fx-9AR;|GNk+p;rEOQ?YnD18eUM#5K46%@ie+yh4;{_0fg7`d$w6 zR9i1%6|Ad)K1If+yRsPu3CYtrgqHEc!8scuGva2NR}&JGRMjeNk~^_lj*!2BA00B+ zq$i!_7>l{=)I^9+5Z6?yg%WBLXY1SkzK2X$9rLF_l8=&MB8f8I`K$&m3)kZf0os|Y8O<(2d9J3|Zz8eqzVt-}8r8zPBZ~-*c`8aKoAYh@= zU+*KEn<|VBF7a*PHxG{YBZRRZ#F3^8%j-6#1{o3#&@m_s*F})vKgkRb`&Fbw#bZ5g zfDkI)bf6Hj#`BFNSy7S9O~es6BcVZBL8g<8a)bhDx;qgLl+a53V`u}_T%mCXHXv6k zaI+gwXJwt0o&;ftX;C-u84RDF`oVnFe%X$L|{?M9?%H{z}* zTpnLxMMkJUNiPdDXjaz-k7?mH?NBI8D+2={dY=6V$nb$fAe4eE4V+hC!rU;IS1@15 zg?H1G%}!H1{0Awx_ESIg?|~11dv|EJfJ@Ysz{Q5(lIsy7GJYWpeq|W4T!gN?q4l{ z6NLIZUnhMD4xm$t=zxDUD1(g3XY^~7mu2~cX8{Nzuy?ZpJ#GCEC1B2Ti^II`f#a66 zs3m+#W|N?7n#dl_AE`Xh8$f#Zm9wAS$#3v*G{EO28~tmMi2DR%RZXE=8v4ms>q68V z@QQC7c$K2XB%i4xkcRv5-yL}pd?;p}_%rfVKrDeLDP9R@;7th*W+*EG$sLB3n0aXc zaNi*iZtQN5?k|`ykAV1jjgxB)8&LL_QZ<-iBvzLo=FrM~_^Pl4(Qgd6Q-@B`M9ay7 zb>Nb?f-Tm+8)R!ES|Oa%3jF10(s1zl+M1A#Xd--@qf(tcVtf2}F@PfsMU<2P*uxSb z#&x5u^K_HL{fUhSmye88(zDIr&4k9kv$vmsYdBFk*G2kHoC>erR1`_(lU|yb8S8s5*l~#v9}}Q|S>;SbfICz|&d~V!Z`&0m#0u3Cdkfmz% z&RWUXBiTTL4TFMi0|G1+*2x#u2Vm2y1A}F&Otw3#gePj4dx5~Oy#ramW>Z&YGl9l}utPwsN12NTa zm2(Rc1w>^GC~MK}36&v!VR}5JK$&l)q-I!ZHxjREP9X7%O(!!umGExj!$<>=^<%DO z5&d+Xq9AlfykK4cdP+RPc?wP%83|UP1e1%#Nd_R!Q)^9*OiB^f3a;lZq|Uypjz)-d z^fcb4B!aEQ>_(Y3xN-u&5aUBISw2Q2ad?Fl566riBxDP#;CRJh6-{VCK@0!Y+^Ftz zEyCckAo3TBDELRSF`|-)#8xyld9zr-^yL6unKK_N^=+A5786Xs(m@@m_v)b47o*Y{Kq1*`m{ z?9EnnVCQ=Ohl+HzD1zxKNp&Oq-OP z=qIx7wLVF1`4*VNdMQ^AY&oqP1jS`Ia_giXLX4w-8MCt)ti!#8?_C+!#pDO=N`M1g ziF!{AQ&ElFFF~;T%zGdHZ)hud*e27I9%C;=MBp;Kf*Ht?!0n^tGqNwiz&a@kX?9^( zP>zJclWhvjx4~7!J3|r^KRTrmukRA;YC-2N&!@yw%I%pBqN?C${F4sp3TMU* zu(dw+B(a!gheY4UzYZj5klHMj(o})!xiI?)*E`of@v|1PSQI1idn>z7>w|0Y0JN=+ zYAm@@s8OmXXqSCNKHs5vZn&sY>vCiV)(OV1uaPH;?MUp>3V;}9r|$%b>>{wC^b^DI z)6yxLsy5W6M#z3N%$$9Xf}4#<=0+dsqFW3ziAHG0!qW{b?oltCYnu&}cbp1t)$(zP z*wW;n9bIJQ*UE3$4_hH&XYNoh9YwgY$__mZx{wGRY;MrHK#p)HzPT8yTZwj=`DqFh zq9odZcS7Bzn{@1C<2>O;A2}85{?gF0h)h0@}vh3ca$6~_%q zxD8IWBri!}Y9DofvF;1?Y1xq$_M>L2Uh>`21^}$zCgbl&4rWvNr5{q(V)H zfsI*HMQw(_m)&J18bEonJ}%Lb)lLasl8`j`iT)(D#cUxL z-Wsm5nJb#IZv<7XJI{}P;~S3ltud%k(fkb{9?8|vu&B2+lBmGS)Hf}bjS|pB)rQXB z6c0b(YP817H^LK=FmW>lxIx;9 zagvfC{&6K1UzIn)ObLO_jggxgKaPTH3DtEq3AaPVU#hGhr~&Y~ZeT0x1(sxt>`Mq4 zj=TZsN_I)c!`=4UdMO=nABR4QdV*S)>tx%D|AQ@k-!MucN>VN{Zuvyr& zj)SP3$_n@a*|^-gmXZUPXMX4_mK2v{mdIa#k|R|zYHq%#*KnZ1ekfvGi%(?R_O5K) z>%h$U1Qe}jF)T57a5*lM8<(rdk>ai17~mxSDsg^du1>l;AY^PL08Ub#YAI_?N6wQh zJ;t_AePRK@m^Y!Dwy=H))1!pJQ;UVMq!CckNn0y>TEuWBf6Wk0Mcj+d0rE?X-)d4> z-G{^YWK5ohB3@*3(gB9BQ-ot_;DxsQ;K1&36QZiy%AvB z!_JZhoZZe+eiR=Dn~Dg-r6DC}ppHZGmAt4+aZH-JV&DzU5sFC=DQYShAV;PNu7<8$^ zFO{e2c*;(F6n4|B1HRF5HO>f5C2mC(53g75v0X$9*SSdt;rapSk&Rm*`|gCIjvK<)cuxE^|k`&M=N7=ZiwSt5CB&+YsS(h(K*^o$=BS+PDKO!Ufj^w#b z>L~~fsGM!+@o*Vv4Se305`m`oSgNu$_E+693WC&`V2s1GGSP!ACb z8$=~nic-fxjuVJR@5Z1oh;!>3yDwQil57YwAl$i_;NB0Q@jKcS2O{~M)$0vlWh#RQ zglcqyv5N<4g}>B9#7<7E>BSXk*x#veLG#zgt+o~3RyIJ{EvXt@iaKLXYbD5PCu9x{JtnalC79aS zs~5T{Xm-J9ql8R@`9u!@IlGeN*6Lc>A(HBbh1A4S_q-uiBMM%CiK0Z=lNK3sYEF*J zQ2k>0-H{$L+OGWv-D7OOCZo+VHw;AmQ-NJWS{2FC40GUtYfBOz`fvORWs|t;xDxQ$ zc@zR_u$<9ZG+mXdj;yO+6sojF3u#Wrh(~6GJ$MJ~2lL&5SW|1L8!>cB$qWHOX$3Z* zF`(9wsur#`xb&D1H8S4Q(LDw6P)V|24QwX|t~6#@@bECKc6XS%!v16u9afZ>P&e*W zJRa6Q?n+VSC_$S8gVghKe|SII{b}O{>mw4E_^?@==_8Wj~< zkWWeHCl*Leq=h;?T;Vozuv^JR#!6KGmGq@&6uGgI)e~$>S1VIryEgP)rP@r3I(X5N zeR+i%kg(E}{Rfl`*!7S&bYMIrUy+^RA&GQP8JtY`O;V-7C{WX}I2aH;>4wveF934mUQ`tiT*!7C6 z#binVN3DiW{0I&fdg53j!AXb4Lhbm(Yb$}i# zf{Sb`Q~Zl!52?0<^zq!i?6zT}qs=l&QICI}0Kv|dF>@49XaKC1&=YhbB~3*NUMD)k z&s^UMz+)+c1+qwNfx@7{D;vc+%j+R)u;yg{eE)i0OxUaNscdZsm6iNZmV|gJFNH*5 zBRO@_G{fL{C_rJXks~masXN)}XO&B6VXS0C@OHp{?UBVntv7_zMXnplmjX7Y#m%l` z2!R2KVZ*ki9t63tS&A5|*vyMco+p{iNYi;xD*}b`x|zfiMXDUx+{Mm7JRWiT6*`X2 z^kdghRd@Ns8*R6#m2xO;9Rt1SJG(E^5h;G6PP2VFy*AuOYTc(o!*4hnFlH!n!)Qoh zPmr8=|LJiFhU4yAAp6yIIaVl293zZP2LVC2#Z#SjGV^Q()(BC5LzcUT*>TBuLI_ZH5cm%OY5=SKBs@6@=Q*RLMy$&bA1V}U#hT07 z$BXn)C86E3FOZ+599t)AgJ2i0s|{52E#M8`xz%jGCdhT3BV9ix{+0V1xYogtu_CTG z9mv!w;vWC4t+qyX?j@AJWC>7Ah<*G`V&Dz2eJAx%gn3#?6MHB|G-M2r7dgR<=rSB@ zyFCQ1Sk@UM`D1n=W&=Pov9Z;TP6l+wK>6+Uw5J^&Iub5GUU^L#)7-1Lxac0G%Z%Cz9GHDrx_igoaHn5>ob1b5hJBuOCj zp1zF&ye)|*^#0%oyRe%EiTjDG%!bCWca%SBp|nKKbfGRp`_qsk*=HoOR1V?6Mw*h{ z$M)=oh7V8(q##F>(#tt2Aq-@N|5-)*qzQUOO>wTe3$_-^S?J<+>ac=duvpm@lk6$< z!=bV-Zl((@J4$5wbHrR&bCQIW4Pqw8Hq{uSC`F`SFpr#SGB6uKB3vg;9NG!nQ=gt3 zgYcl$D9N&|R(7AWCjJD<5ZZ6^s3>`NO4JiMJ;shbv*)3Q%j9^yOuD-cu+sDehXZL^ zE{Q>fwpw(ExR9ax=#V45bZwFo>7alTpiPf{2w!$cFnM_?Ztzlu72h}wswSiW-jK}) ze$aZPZ@5fW*IP_N>wd`T#}+}u25E$(A?7C$bazt}TTwabUAH((aJs4C1q-05BNA6t zCBd^pr6-W({#J+-h%)u9f@P+o2 zTar3$Nvg0U74Uy{-0Ek^c7d=dk2uH+SP@d%SnYAZ1rUAtN?Vec2Av7DrHCVDuu)fG zOYSVINaxU8gbBF;h?5(|n0A<~jXT|+f}-dcEH?7>!)D>S*(K7AC%!Rzq$#X*6oE|m zqSj#Pj2VH&Ap{_y0w`i&UBHABq*5ct=)1<3ZAg}P2;0VFLJpgWN2Max)@Al!VIXg- zPG$E1`Zea66e`?S;5&+?VE|M~RVO$aFd?kOC@~+O?}y!z?wU|G;vfkSweK8htBRhe z>gFZ7#htM_tv8p}J?gR8!^wEujRyydpHeushLFguY7)%}5f?EnQoK}6iDDoGkwkBt zlY%g5jw}&&)yPjXQa5N<#FbPxxeBuG-w;C{6?S&9RtYlZSi9kVJkG_O55i%?m6QjC z?715ul&StWF$GyIrJp;C*o~v4!t4IXNm)80aGNw_HlZ+d;eLc;llUxNtAzGsSCAh$ zRqIkilNc@;V35MFHA$wVhsPr=UaoAETPFM*I^*YF3bMFXj-8ZY!ZBgxqee@V88bCE z13gPN7Ewr{MFW71%M=QhpcRrQ6K6hbok~Wh6Uu@>$_63_`AShld=aH$GqL6ccDJf} z^y6tKmy@6an;1AN)1oh`ETqk-{n*72!u}4d^Q{qvXvWD+Rw0<7ci3)8$j%KXFzfhqF&an$yJ%t|bL-E!v7fD?<4aZN&;#`9`R@){e zFRp&GbHLsXfjyTLdbnOW$sY|X=&Qs=CviqE))vCc&U{~+Em^7IQ6k%QXm5%Y^2|HREBGuR6LDOSgxad zh#Dd&t4zo&Y#cMC?eP*To5@B6gicfe`@$s=;mEOQ@;EY&Ue$V%a)i1#EV{PnQ$pQ@ zg2KZ?U$Xe(L`0h$9eyTiBX;s4yg{LeWJnr_kd;(nOo4PT|H0ACk?Yt+9~(GeUmdHm z@~J>M4$qPiMXN!yLl@Fua?RyuO_BAxSLpwvL9R0X}H*9S$o+ zOhYRqWz_>5MLi9E1;PVkgI}Np#F|EQwgH9mNdx6h8(f1X3kN_AM-y?Ev1mP1b2uRz z8Ima7&98j+m|#AU#nEZ7(Ltyq5)nNSs8fRzOCd>66im$@S=0U7zv8k~%B;pg-Zx(mg`;j5-sTh(^-7D>5 z)TcK!gLUSt#ipNg;9OF-IgRwPr)qp!u@0*)n_83dHpbfYyM$8mtoaGYoC7~LeIT%i z;3Z8D280q!2KZG{eC(`&NRj7lb)n5IYg8^AYB zKjTM_u+_Zjcirubnv#nc8c*+tpdqVJD`Xr6$!mHs4+F9(L2N|h@^sfE1=;k4blWdy zVl+MBHiwXy`Hgt?vgUQsndJ4Q7TS)buB8jjUn6D6$#jxg;QRu9cZ||FPVjCpNo~7S zUC;e3(+ry9<)$SeSCnZ5^|ZzA88*6!`!KB%B6OGdplKQk&N2_{`8xGl!sT};s9Z)^ zUUxP?6oj{f7SBa0tU;r6GpYMX&L@C3-Ct$ukwYcK6#xSXmqslbK@RSB!XrzI3Tbdk z+SygOPI{+h{f@ZKdgKk(+y^}kKjY^+4@ke(8!0$NATs1_+}L7o#?cqr#^eY_tbSQ6 zcDSplq1DqVG7uqE)8FV+W2g^5})}HpUrPa2O*cgn! zVr~`(&VS{0w4E6OLpri9oWYKIzxD9Nw`9*Fe>65NL5;eG+EJ0IM$DsK zUZSXu$FVk~VX(hY%53PoxR|`OB!`YjAZK!FXJa#Zd#DaQ4?jZF(3G&pOkKK$e%%F9 zssok{uG0V@Mt(Ph zaXAX~QWvI3yEz@DVtHAH;5HLD7|OTnpoMZWgdxaqpnxBLRl*$pSS!#pdP&ZmZM_Gwj57Ulg8Hr+M zuc?wQw)jU_Ljl9utJfN7k8;IPyfvLf2qL*9z+MQV13wD zCK7O9VvtI9fE+}#tz!vQ-gHzQ)w8Q|7pLnH=T6XU-@l|cK+LFu&r-N+b1~lHiO2Lkbp?n?BR&^2TJGYH|7RRQ! zx*tK*{m~4%U@!xznT9Q#Txg)jl32k7RtdLp2;=EN4SK8sy{^>~fHBSoiQhseIW#Gb zOytYp1%Ek38wr)(`jCKTR0#Dh@w3m9ms>8hqso~*T@AzH5Mj3Aa{92SeMhhM_2EC; z&>)e`6grDR+=F< z&dD^MRFq7{*;|rmjgMGfKNqg^lbMBgS7a#FR06LW2 zT>)irx&&%WApPvX2I>nv3DF?jp@G}L(c5+duT{wf&FqE(X!j0+rP*yGY9|;-vP>Y5 zAk^OI>?kgZo#1-7fk!o~Xd~n4RRF40sO?%IB33H!|0$UscGn*!i#Xg4{1PYd3^we6 zaiU2y#l+oO#2K?w!J)+`BndU$SAJGR-}dsp=0a9d5PII0^RUxwmN<$Xw~eYw%c7dU zCRfIlm{bGMlX9rvWa4`6q&{IfM+PO2nzrTtVo)3C-Nh(6svQ0sv6(0yDJgMoFv3Z# z4{_phPjo3`_F3^H2NCTedGXR@sfy~6>*M3%(cO>xCA!OvorBaQ_)TWAr5xu;4M8x> zCU@Z|rvZIS!FuX1!*-ME=5_w14zLbPnZBm_mvyj`sxsqWE2EP(4a&U>A-i!@6498D z*{?#Z5Y$bkRr18{-x*SF_g(zJ7-R3 zgoh44aDJ4Ey42Vcd;133NaIJxbW^msMyiJ0kU6K^?m%YwtC6m;CsoUOh{5V0Z={^4 zopskibqR@i-ztjaLb_4{*S=KPDMM&O?Gm)QCq&6q*kIyfoI#P|F!jIcF|rfPzp8bO z>N4nxaVn;UWAYkq72=6r}_@=IRwxe8?04gGWn+IwT~tZU|z+@iBGanB=jc zA{nyZh+_~Krg)cLX}Br8E}hgAX?P)4uEk+c{k3M7i4?ZemRdZ{*l8WWLat$r0s5#o z*{Vz>1<-*nH(+8?IkJXxA(q$U^$PB0UhyQ-l_AbAfz(q`>~U)o;E1nNAfql zSSfxK6BQ+cPl83;j9EuToKx|)oF4S}3a1D-qJy64W^VuL!ywT(?b!sV?j`dF) zpK%Kv31qqC3%{rFVR>{3H+`)q`oaBZXf$?9lp6`zL#ZB4&RI)#;gRNYV=41Z1m&HA z*1ERH3k^u-xrsr$`)fV*HI=bV&5s1Vz(R9l5jk=Q)VO|8ab9xu8OP9)6D`p|KZ{6jr{GTvoC6$Gmx6VYL;iGD)y-EP|hZdyVT{p@ocKoyF9i z%=*YVSZqQH8G1cdd^5DK(ns4q(WARg>!bz{lbrG%1|RXga-L8IEHcF%4X@Sk;&R80)d zPYq8YD=#&+poO>!*xHFDNtH{QOIggg^_+eI~+c8s}98El6Kbe(LeRyVNY>>n=s>5NXokvqIh>A>(#}BFcv@p56aB+HzHxkA&$ znrNdQ*}W;HaGK^<#*=hyXj}75)#nXEr5>9pg)D7(OLj6Qxr%6x%1W8<^t4Iqx$~-1 z8{dcpm1WNO)14o*`R;WJ|=e z$QIGFyru`=HM|h-YB+MwJBZG*nmP?RP_}^rYS0q@m`=q?2q$oyQZzu3lyq$3-_*F5 z!VeS=Os`U~?{T}NTZ4?$@o}*KD2agc{Fs?|n0pQCPO@R+}n0{$E zKT4CnmN!)E=s#P5a}t43matlGNpT-Kie>%Zk>ZPkAi4=8evx_y9*MS}k=^rPCgPcd zx~PlekBJ{ZL|iZF+Svr7*4=9?)#QYdQ0OEssdHxzTmBhqqpc7+o zjez6IRLPO%0KFtyk3zbTPm_%SXgb_D@jE+8HPCl!D>aTGsgb^3?nDXS*Rje`^MXi+ zZ@K>D?8D@n?I5s3r%`Sggg{J1_+{G|TPoR5f{R9rV*{|fAY?8vzyUenV*XFC4m47T zuIo^EGlWE9Mq3=6#Q|3WhBWWo$kr{Z4x+my$(OBNE9jpXM(WiVs-z(GPk2S{~akLypBc5b%7k$Kafl5>JxcpZ826ah5Em;~juza=3StuP98Zot z3sNJk^GyY#_Tq1=#S??i^b=x+T4}|)unXM|Dd>`KSQj_iKb>f$wJzyJfjrok>ITIw zLEQ+VLy!k*Fy$fEjgTLdguT~KvR%B5E7tAUy#@yC+NhUHCOTfGVgiyMxq<==QKZq` z*&(YgWj<2mxwxw?weSsfC2eHq8Iev+L|uI*H-522Y=gxKPV^|}kx0@h@uTFa-3enl zIR_6V-dV|cT~yJ>IRcBM7da_YxNfx^sssWZB}uHx!FYzGj0~b)(iI-&vJ&r2Qjuj* zrE(lL8w#S;)fxzlmg@<>EHnzv@+iKN0!3!A{A;qCh8jLKKq8bYYGAJ+n-H&4%ZpbP z;8LAKDqP1HbC*~HLFQ8NIcg>`;ZkUrI}Ll%DwfUNTm)$gl7UXputV;(^<%~BTDKv# zB}~iq6CH^YP#zd3t*--Z8{^tFMAwl-@N-=3#0~;wj#k}e((2y>QH^7oC1?z4ib)lTp0xe z>Tpy;ADwCdm@^>n75vAX5{5-kujOaf)`lcH5|;k33YvP>&DPsUg#QJD%w3i%t2 zopRej6oIPnL83~foTDK=erTx@_do(1Si}WB6*P;3S8=vt7Ywp_U>(}M&K@nLQN$;l z5JkihNoI)nsuLrr)5I2nfC7LW;sXB+WFA9CKiH(*cxi=@fJeGQNZuu3U;8U zSm6je?Zdi~Fod9G<=+&?>G*D39R8-{qM0NpRm$Et#Pj@lZp4-ID-kZQ+;zR|;W%RSm8X}V9SSBkOrjHZ z2Zm78kfR33)xtXhOEp{-oH{({F>F>2LKN^wWIc7vO7V}`ie4FgwI^C0nQX{|pT@O+ zQL2e97K<=zrZJuy7T-8Y6NUj(>qK*MRcR<>@!Y2bvA%OPxK6%>mGPSG&C%9XP6ojg z&tQA)R8AYIurW>UcI5nB3A2$C6d+Lr!&N0n(q%*{+7m3tai|hz31J=O+znsCZz0Vv zUlMI6zSPi*;8Mt!co1^rw9yG0poIF`dOY%UM+kX5Rurt)WL^i1q6$-|SEKq!={?j9 zVn^$P$GMl|=CF-}dGTwT0C?Gvhoe$ zePXKKz9cIUpcv3XIQTN{06%na z8dDjZkf4sB3Mv>%=u(J1kyLYdDyF{S4&7Au&UHa1jpJeog6shvjhK_XN(wxR%nD#I zk%VUHrFl-&c#5~C(Y8@axyIcX*?+z?j4t-f8A)?iLk*`M9z|{1=Gv5 za?@}aMvMrUKs(YOYP@jl1254;axpEgbD_h!zwp9WgDJtBDk&XvV|mZ z18MV3&F`~AKyF3|w<2>wi5OB*z~Z$8B!q$9mB1m@5TO<_QOqbdw1s2$|iWS98RfoRfkFWFJ&CC(2k@L0u^wo*w3x z*eo2~ziZuPH|W6b!*8OiRNW8Mh9U>oy>G!2_lF!7M7%7SS7pdj1vjH%D@Td3(v17U z?o8}lPnD|wNodr^{)ptPQ7_`HkxdPq15PngC?-LjPAx*ffh3TXK5!k9ltcRCpVdofaL)s&`5rH~s zZk!+tOiVNj`TN-=V!g;#>SE;3eVMh*&u*{JBADj0OS7mi}Qpb|#EJ1WyJFXo8%Gz>MwfF|-A|M>g~~s9&`29+k;#3){zWc8TfbJLj3&}4dWn}$wqy<4 z*xgCYA|;_m*ak3%A+IVIJ8(iws$T`#y;fxtn@jj;AhMFB% z%&jGEChUrbgChdl@zFr&_oceMt5GWryZxt zv&*w~rb0qT>++l4&D1wjEzBvK9y2PFK8UYC?ahq z*9OU^n+5l)^$5rrwdD4FXK}oTD`(rU?%5xh($R?c~kRS1{C zaq;@)wE>F`%G4wx$P^+BVT%XTx9Ub65<_KEc%)K^{V9 ztd+!cWneLA0Xe99M_oCr&0IB-a|rT4ir z%u!iUK}%r_l$Dlr!B*IFGhH9W`T$I8;XwD3q%EUv$+C?_?7*qwB&$5&AGWcfJ~}vl zT(|7uNVY}lh=>n2&4k=%NTJC2Tai?sp^;_9INryPO} zGV94)8W`(mr0!uiXcC@z#9l&xK2X(V(e6Iq&Oi*P4Xas{tZ3J;05(=Fr6$=bC%ZDeh@@Ms_oNAa(bo$cjTHiues=pEG*QD*|uLd;}W zY&-3VqNg-qXvpe;Y_m*^OE2F{{8H5TC;5{kLH&8=F7J_eLA*1)U?z#7OFG-hX(d*J zN~L5kMJ7sG*bVDonb+>(byQseu((DxfXI==iOw|kXAfj3+-2+G#=#6u0bt#uyB5JX z)kE-0CRL@@gK@ufabvQld4~8V*`=KE6|Nk|s#~p~3aV=ywW8xk`sLU}wbd~cgtQp^ zn2=e!Gk}93;(P1#5~;*%iifg~F6_CRa~7l?NUoDjkR%x6;QR=?Z)n*?TH<^p)ed`f zd;Fxiexi!TpV{kOX9kq|Xc>{sZaEiJ9J?uz)J$0=4{ zst=)YP((0{zuV(D-!geA_|Jvf4mCKYnuAi3+f4LOZ_9!jIwZX{vS7lq+8V6c zQK7&cm}`Wbcerw(?Q&UXl$nz=vSs~3<1LkozV^;d)2*2Miy)G#(fk~oR@Bq7lEWb( zgo3m8K`B#oyQG)!cx%G<5sp`B@vW)`u-JfKIc-8lo2+L*%gC{i%?>RG#X)ifb{Y|~ zE*v>1-{9;%Sw5g`93V8DuZ~R8UlC2aa1lZR>-p1mP@!d09l$M{TyMqEs2(zOJrMmZ|^$fB&B-@QfDwzdP>OJ@x#X0`to&=1hG3UxB%N=k8VMwQ2L^%?l>J zW76ibFD;mOekE;kEr)hI?X79^!#^L|x_UHiGP|ah&c8P>7ruDL>W6m*X2##?Q@0$^VaO#ZG+EFo7(QV6Gy!~ZHiYf zocQI1fw}WJQ(JCapEhq?b#UtiXQa)Cb{$;w{2v6SdgksekG>&ozV_JM?Mp5W%x6Az zXw_%04$MiPUbypfD;dv+7Nj1#ComnC9$wX*4$Rz3XH4W;1M}~9OijLXd0<}s)Y&_~ zcuZhU>3Y{AFE}YMC)~MzQRW|k`Q#V(?s(+vwE5+(eN(SEp8pD+m!!?p7hiYz<1eDU zl`~sTq~D3NcQ1O$3295mW7Fm}!?Pzod3|7>(KCBz<%qz%_A~RhuQ@U>Ph30C9Qilq z_x8h+-~Ucvvaf#G8K=D@Fr@_txBhgGF~558;iXToPKWbXWv+hEm|dIZPaI-B_J4K3 z>aLFj<`ugaY8c-Gdh2FKuT5#ATr-q5m;QdfIjNjB^`FmP{Sn5ycxwLY)1Q_$XMJz(&W~?NoBfZ@ z**^M*z&v=t)a3mqrtN=O$6J3oYxQpy@%!iZ>{#5NHb;JSYAVRnet!1E8|e4yUmcoy z?b*;JSh(|nRA35+4^L&^?&#eexOEH6Ur%dkxvecQpS^X)w%SpFx#&GJTJ9?c=0ESB z)zUu0&Eq-DTgLH(F>Bs2r)B569G^1Y@`~B1vlpk$yH@Sn@@eSx)UO|y{1trc*HzoS zDzNl92mU;zW!ok92j-(U%-s2!vB0!{bN803ryPImbKk8=n-l+ac-6D%@AK!*TfJpp z!R(uHc*mWaI?WHhFvGm{-$nD@9W!@+=r=|4@oRthtJ8j2G%J6Y{nw*EE}Gx9u3a+p z)1rCWZ>FZU?J1fUJaBmOrAL&^RsWp5ZTByVrt8K(&EE0HqRD?{{_0C-cbdjmr%7$! zxAf<~E}BK3*)?_OXGL@DN%K=9-{>^g{Bi%*>-f9n`?I$F>AsS=Z1e8P(n+1>s@KkF zIU-Xuw>)@Y%Q62fn%n+6Z`+l>Et-2iR6pk2?M3tU)w6b9eR|2PUe_|QctNN6ME_k6 z)-F5M{H5o>mZ#9(jH73pyBWXA?H`J!?HLPNKJ*CRJ#b*_YiE_r_l}yk`up38rgY(~ zow*nA_mxwN=Dwt4M&EUK>X=&!=6U<)tp4&_isnrpXxVwj(VgbO<+E1bbjhh^?7_oZ zk6c$W&w9tMRqL+nw0zWFGTTm@mHOt)lIgy6_V%+((R}QQ!%K^=FIhP|xn#ckt^+&X zknXg64E?tpx4``88s;tkV;%myc45m*==IBQAKE$tdI!&%xARoq%e?O3)??c`%^$zG zYjRhqXx{p{{fi#ry*rMZo0|GF^gn9P}L-yeer=#v+BKjw@y4zFdsYdz}BHJ z70vRoW552;!$ouR?+)*H`7Fmz6Q`Q*{BO?0z@0_&#IY?ctG-z@&)9r$>W1?=&BkR@ zOP_jA(Y*BX*%SZ!B7FFR853WkebonVFIauKtY|hYoVD}O@shb~&z>ERwRD>M5AU7) z^UVcwtdZ$5lr%h|0(bJw<6t2ay*&75!U z+xnTiisn5x9p3uA9~G_qLbppUJ+QQ=zi3v>J3RTrB_;IZjMTX&l*|u$=j?nD^in&) z_>~^K|JaWXEqy)TcOPs?op*bu+5EhgiQ{IUYWDXX-g5H@`&X8%9=fB`t{?m}`+{Aoe)5x|dCsxBw-#?Inyrt|oVbnt#t!VBTn|0e zzASY7KUy%)x?q0l1o-jUx9^&I+uNPIezIu(JL}-&N0{GpPu;)cC3hFCUHnzi>dVVI zEFX3iO`-kTi*o6r`TGOAR-OODqIvl7sZ~Gw+NtIx*L>oNN85`g_x+ZM$KY?J(}se% zv2(%18Sum2%MLC5?VpO~z{Yp|_1asD=KJqFG&T6@lDQ(cXX>P96_k(m|6kFp{_4RU zop%(?P5<6KHO4xqTp}Mw9vU%6gcCk=b*I&5 zuj({|eY3Y;&bp*OGPU)$sgn8T>sz*e>iCk?GpzGzub8vCfPQ-86?>F6{U&R$?H z`C*6o`rT8DzBHp`%AabPxF}$}6SGp!c!G8Q>D-As-_3kqJ3IB$`6X+gFD{zFhYxP~ z3-f&1r)F(C5Bd9Nd1h)if2;j?XTiMxeN#KGcwNz4{H5KK-?)Z#>igd<=Y6JN-uKd} zrC+sG?F|L1rzbkCoH33)b5~v3!MO52 zI{S$!)+xPl+2@{zJl<~ZyKRDTnbP1N_CW9Yzu$jX_s@%FddXYi z^W&GzTz&YmqPg>9dzS8hxM2SNvAN&55qyVK`{0d5 z^UAj^Gz+1t<%g2_`K$L$8s_=7H&1PSA@8Yugs*OS`*DS5od`diHrIUNhN5|V!=4?# z_)gK7frUHY0{^IAaCxV-11~RGIX|Y;ygxf@;#~M>?8=#DFY@`&j}I(5gxtUU=`**l zI|9C|&f5Oqn@Z;3#WS~`&vUOY{&V?(MOVDFXdd|Ng6%K8!^sWwQM>=24$DU?JFPv0 zKUDA5k%uoIp86nq_WWP$-I4oV(F`BAd&`F&D4Ly1=Wag{JwI~#{>hcd-;18vvhAe% zi#XY<4RX!netoOt`Ua@eU`_OEJZ9%^S<*M(~~JpWeY z_dSR1ySawGIPU|8CfC9j>USXr>WA$>FNnX2{!n|1JYN3e!%H8>9-MZ{p)EW6OXktf zyrbu}Hy6zj?>#U%{LGRWK68O7eWGYiIREfu3b}r)zF_<0+d9n$u9=k@#7>`g(aq}? ze6nEbPo1&-Tc0YLWyLwG|4}ZPg+H0O`YiOKwEvCQmMp#T55D&013NxBvuF-JaMjWS zTTjJC@0#p}e(Dz=Ty9>lb>`|@o?0@;Jvd|g&(1&9$|ZdL%T)_f7cFl$-`qWG_3Jhj zt(|Y}G>5;nXG`ThomPMT+v$OuO6E&*4oxmYZ*_fr@75jv>NIz6oMCnx-C<@H=TBS# zz2CcS?nM88I;}put<(A`@XzdX4lUhys9@gwnnOFT#crtGZRs$t`S-!4N8V5}v!9qf zaovMO^Pwx|Z`*bga`nL(JD-goko$4%B_DZqyLraz0{Hfc7uN3i-j%1CAKmxzOTPWXQ*B%^QnY+9ztj33mtemaTzUJ~KaXAd z+5V~Xt}B{%e{BD%e|)-VuAMct7aUlc{YchaweHZWQ|`-|d+u1U{ayde+4rx{naU-zw;x=UGkf1VC-vT& za#rvDBWLZ<_j1b;GA z#c%vZ&V2diIXi!UWzN3$hn)30X!pwX2QTlYTl6&Or2X9L`uTR&eB(RwTAuyBoVDY}X3d}P zIpL8bK9aM)Uz@XflzFP&t>(Seqqjhsde9?ftH*(wQcXzKcUZ@^}~Cwd`8xsaKb`! z%@Vi1SLe(nE2nlWePzzd;r^`o>+@%CyXZz8j?fa6wqUYRuqH!R%t`VTukr~mO!&)fdh zH)gHhHalna80)R_((Bd%I{e~UGq(Mc@hd;3b2h$XT{R9pHfQ~aUqJuU7C(B-(wx<+ ztoO@Ko_+Cb{;U4*=iOPzVp@#{4?E6>R3tL~rK(ph)&q5Uf! zzxqe*i*j}y);M~>@9GD_-%3B|qjBBWa^{A<8QZS8F>Cd94fzy*3c1nv@#vf}f1kPS zJ->4E{eXM^6!$yrsegeyeDo=MR(*a6axVH~Yu57b6ImPYY|oj0{$|1IZ!OB2`}^nb zyz8W_rFR*=)A&1Q?P^EXoV#!DjxVte@BHq;E$`i!wfbXj&a^B&xa#E(<;)xYJZoob z$&HWoSGlJDcg>&E@^aQ$`TmDl%Riq*pX{ACvGbywsek8{^ZxPQthp#NXWI>Yckj^$ zc5M2LqyJa3=G!+eNG<<$&U~9T$9h*0~EO&Vhc4H#{wC7T>#T>qocd%*t!`Prl%{PG5aJXZ^~{Tz@;W<~fh; zTl(7Dvo;P{pSA0YoGv-AZ^x>?X3bCUoVP7|Mb_MK+pa|~Ta~qb&QUpY{zndOdF3AH zeOAlPeSUi;GvA$> znfmXttT|_R#_BJgnzQ!$l{xFb4nZG@U*HpshyUXECy)NQc+Sqv$j4DL=9!nmw=a3e z{M0==ayG6$oVEDHWm&WIhlf{P|J9uNW5*0L@kq}4Eqt$W{EOW0@P+ETS@5mk4KK-A zfAV-IuP?}&9WR_Y(TiSJ|Gb=2f8wd|pZcBXJ@xB8ku$SCJbUN%Z#g>=WUamYpri99 zCpRnLd!gfZoPPbX>$iZsiQW4*a&_6a~5YQ<}BWGM9!S@%Y8dq-jFk2_{+SObN-PvU%7Gjst4baGmpGw{?4=4 z<;>S=Q(H#fnl+`4c@qz9W;}ly{pr(bPvffJii%%t4*96#zXA9~;#2gV z_<>JFpLqY`rWY;Te#+BxX6}85cJ#M6`QDi`JAOYW6};NnwVQJ0;Uxzr|8)W56FH&Z z{NHA8|L!(tCqC=tKWpCd(wVEbKF7&5^w<8rg**%137;q)cxlf3?#PzaufZQszImIo zJOAh88~Um}gum6FZp)dEPfl$);c@5hz|ZP`LVv~0kn5|yx^MFB2XYn-P=D!F*b%`A z?_|8MTrjb(FK7PnszX!XT#fu)z2O62d8f1MTiiOJZ`3YgKTdhZ?xn9d(edpEBEC?+ z;Z0fdii`Gd`R22*)AMKUJnq7*wMQp7`=0Uh%3AyxTvy}U{|juK^R&Rm_qD+4MetVj zL*_fY{HuXka`Nt_@A+KWjo>fgT)+*`&AF0T0Y zOVj4$=girD#1Uz$FHZ?9z5WweKBb@cjL$TmIXSTQ{EvZ^_eTPUPX<=bUy!zTZ%bhH z>Yl)y_R##6*L=|7{NVPA%iJ7TdH!i&`+YR9^nFg+{QRy9JGS2$nBNqq7PWmeu;cz! zVC~k6(`Np;`*)lRF8;Lg-pPlr4jjJ(*59CC^(U_htbG18u>R2V()RZs2IfPr+qdOS zbJNxjI_&Ur@(+rWzJYe$)_vjmdjpH}kUYfJA1xEhk4#&9WouyV@&}kt z8C(N;oO1GlmPZ+v^=Hy%>-qyrXZ@Qz%h@Mvy7UWysb4(5WqmHNxDWJDy6z9muUqzP z{mRU=#b?O3{A9<}E2&-!*?<2UH9eDKP&)kmza$_4YdCo^;62lRjLpIf$f z{VT9?I{^J_Gq+WbcXWbZ-jzDEXpDXpkEdPrN3RXc^Ix`b+s3D+EiOU6M{(Gpz~(Pl z7sbI31?Ipr7q+yX8CV>w?&!8LF#mh@{GCsEEU@;S`RO=56S^*tI^XBQ4=ZN0Y$AVgb$O2Y8*-%n z9(0`g-GRyDpOv=s{sj3q@%u7?x&Mp{#!vs5n?G`*{=~errQ>VUwq5v7@uWWm=7Ikl zTKWn2R`nryjO%C2XgPU~%g4cQBfEM(eh~gT@f$N+{>^$Qj>LF>^5wfLEw=q;aao_&Q4ZjF%{P8*DT5yFgyLI`W%fBHv%bv1-%g0$) z)xY0D-w7ToBCVDpXlJ9+q@v2w%v>R;bU-cIrcX9X5t;5)UC@W*%GI<@7w zN2P5%!MgP9oxS>B&{gGqBCz?`ZGrje+}SPte5d&w*7;+9n43EAprdzz{FdZfSTD_& zyb*a6zu~)qx%Swe$o=571y+XK`2mp!WvlAmmS@$8BF zPEMPp@0;23u|e{d$C95o13fDFox7a;AP@adpV~V92=tabEcDgyFLimkdz>C*9vUxP z5!n3ZZev!iKfG$!pPjs*chs-@Nnr8D8w2yQM-FZI++PCgzp-r(|%H+&#ulSF%$LIs~J05WQ0y=9R0(-0Sj{K`V-XHO&;$!b}`swwK z@2*47ow{f8HRvVH1D}VS3r>1@VE*yi!#j>bZ>fKDuhZx7K*8-xc#iOIqK7U7QNx1(>K?<_1q5MOP&LNK;r=Hq1vsbX)C`A(&nvy*u7=$GqJCd zhy0$i?=MQ*ya;@z&sPWL9WU8Cbur(oyuvrnc*XpQrGE;n|2c%c5nL8IRzDnmQ+ybG zdE(IAZ9nII#edO@z8#H&^W<+$%fv69iGF`5d(=+)S9@O%Y&*2Ca&DZR8*_dN_Dt=} zP4LIF4{tf}-@y89=mX9FBTt&wKhoJV*7p^!pWAW@>!terv`8M*Z)N;CF64CH;Tfqn zeIqb`8ksZE`CGGMSyt9SYxU;QX;aUv+PwIUvvz$tfoi$G1lQtjx;x(fi zsh3dv^sO25v%8;G`29*p5BgO+`A<%7u};eW&_VIEFVU{xC%;PDaWKE#qx+`jekX0? zl#LndkFzf7@BiEB?_a=QFWNJ8Z(GK^^I7ZfyqEE69CTL3>XlP7mQUdijq^G(77scp zW7mOkC{B1q#+>xqxn`1eRz0~cW95bRF0Jod^i#&EdJFzgKZtcy{COSvB{P5fRTreK z-ThD6;=%B_>d8yf)?Ya>WBr42#?%T2rY<{>HZQ+>&gy0Gx#n#@lD6^V^D{PI0Y9nV ze_Y1mgK55#dZCluyk=zVxPR;X*#}%*$%``9ZhwXG{i-Fk=-RZ)ucxhF{rR+&&rT;t z$cN&-n=-Zz>aWB=vHrmIZhn7Gn_s_X;p+Ms8Ox{NO(ka z>2SVkm(L@vka+nF^qt@o@V(YwL2s=yfFCsv!MfYJsEn=Sx*=`-^shNPirlMTiu@`L z+T-}UJ!5g}^U=4Ghr0qkZ`-xwzy%o__d_q$2lr6tB!1Db0tVgNik~$XtR{gskZ~l83x4ZSyVEF)3bhQQG1(=vn2*FFO6y z=lbbFuL<7Ex~pD#2lJQu5#&hYiJ^?G+j(Ec+`6!3`yTjGf>_1=n;6V_SrZ{%L}5`3(o(_%IR_V zT=fxpMd?1y`iq?3>h$$K;$E2_e60QgzpH&lu5>;4uj0`^Mvjh|nfml3^LuRfqLZ1g z>YYEjb!J|hyASU8*zL%%)QkMg$tirO;~UL5d^T;@^$F~u#7j#Y-+qI31XurH+UB{? zr}`c3OI^_Z){Mmqk?VhLp1b-E_)ziMW1Ss9Zd4!iXDnYGcKiZ8HE%|H`rU?%%}+g) zw*DRZNbv&rU-9Q$+SVf;OxwCi`cu1v{#N`S{jNCV$I}+SLJriwdY|L7cDD}9N9!6t z=kT3#(DzbTvn_4?nxivT?>q*7e174!Pr!#-9}53#ozNr5m(&-q?#G?I=bDyr?An=Y zPT6s1+Q!KXGL{d&nYMB2&z-+fYO`_Ts=P@*ZSShHzLK|fPmA(4Ki|@3TI7GL^OpX* z^R|9rUf%j$E#CEZ*Ip@a>zB^R+j+k)Z}m=B z-p=QPd5hPdoj12!G_U3QU+2x+UN&#y{ma|ze?OGBe#!lLQ+(Ad^SuA%&8DGQ6Mxv2 zw|M8QHjCHyyYWuuZ9Mklyw&5(Ygb{{>Aj1t zyF72^K7aqx3opvM_$P0+e|*=XA6%8Uapqt0)_-8U)<4eMylIfPIMHz4+WSVux<}~#=C9389rL5St^56&qkAE5?Lc3fm4{d6ElvmBwGQ~fyu~eV&)a&S z1#RY>ljgL%oAGG9!L#$`>Pu#9TX-AuyYb-G{Jy-!h4@bMy-VDBell;zKajV0ST=9{ zfmLl*{to3$`8Nl5eElu%_bqLsiif=_Z|i#DW6h_0FK@OC&e`@H=%vr0&vULlv}3^;ZMLrP zwRs!=(EhehOl`SmgKHmte9gC7c7Er$HcN-E=goaj99Z3FQ0hq|FQS}QC3gi|M;yY`lV7Kq#3CsVI=)hcb?3x86?#mbAQat zo$1a*Qlyd)b0tYgsDw15l1h?<5FLaN^1FnFmmf(g{gRrR&*QoGV~_QI{rCB<^;zGw zKI=1Uopt8<>zsY|ud~nI`^vd_;s8s{CI)LC*%9P9G%|*=WVwIGKP-L)%+aL zLGrVPqCY>Mq98~8FmL6kzu>A|^&j@grJpNT^Uwz7c*|$hbC=+GovQu&VuukWW8<75z$F2Y3>`0e^@;>Q%}^9mwIhx+O)xx8%cqm!ovVb@c87<+)kl zZ$FUPrt??xI$M-X0{Nf*c8hH2prr{jT_XAuq&w_s>&WCYJ z{P5)*T@NRLH$OkBL5}8?fd9p>_c!J3s~puE(1YUV%Fk6l68J&#{&(hh(>FFu-2^(y zz5~E3c{{IAKQznLd`93^#?dWT^Y)g?G89BOcx+6#TBcNT$+k!q9yyCvhi?`-z90l;p zK8`7zpC?iOen)=7JScuK;7j5Tn5SiZ2>BNOJ?1mnpYm~z>M^`8>n+3yC9V?B(e)4D zll>XcgDa!^%g-yMKF0iU`v(mwYcg@)-%kPk@Yd&lmH*r>sP^$-&zsue&*C+!f{NeM zJ@2O8d(&rlS>AQ$?<*d1P0(vU^^clYdk1wrlM~eSda>ti>(JbtG&|@uZ`{0O$J)NS ze*ZM+t!VUT&5VIT@0AbstX=d$Q2jA;gI?FkyRtf88dSU2^EB`7NS4>AVpqjgSwUUT zG!A-Ky94Q4{t0^NcQ+|{sz0tJ?iW<~Jlfa$d(U5MFaIX!eN)ufTlZH``TU8X>e)2F zceqLAdx!gaM-nYkKOGy?_0EQ%_v5X5D-ykenxFb{U$6Y6<1^+h&r&|C2zrUkmX&n| z1ikZ`o{;+d2lPAY_>97upf}}&mfqLHf|}p*RM5M1`;N6|ec0FQcvsWZ=0AhlPbBDh z&mQBId=*st^)}CI^zF~PFWuVLTe~NtZ@+m#FS>5e))ChQH4p80;Pc>L75BUw^d_9# zEO0g8EPbkZ)r5cgs(yVfOZ_G534foUcTRahy(fY14R!aI-}pyg&DWS7^v=xNk@aLM zsQG9c`g#i+Hu1bOg5Gtbcds3X+UO^K;4YrGw9#?vR)T)AKkDhA`rn3m-gRGWN;Ez( z=zWp3x8|cyg1W!trJ(ojq(9Q{SkqVeq+}Tt3 zZugX4fJ@dt`=vVM`9-b2PrayEXHum*Zf6#4& zKO?AlKcj-0ue!4@^U?b1dIo7q;?MQ@anoPL8K;wu1-SP2gUt`B+#}8S_XB^HZAZEkr}@4Evy@L?4{~3Z$G9cN~tJ7b( z*3)$#u2(HOQu8tR!#ny%*478Jbbkd>4Eqe+Q_&A}`~11%D?2aF^4`tfwYDH5%bWV^ z?wZGw#z2|K>r-9ewte|&Co1GPR+?VAY{_MEQ z(}O{;{+1>s#Wxe**`DULm3iJr&o@i$0UwBcGSc&Q@7q<;(gnSaU+*oCMuX~aEAez4 zImGiG939_1znQ0YL7}H|ezK?g%UXgT&)rk}!;O7aF7BpWy%O|(nbWu`e@&Km_LM)< z_uLrNek!RqYO*vQ&?Tt$E9igRb-TCr{3XkKIUd1u@fMsvOd4i z)Ac~>EcI7FjwF8cQeW@=A&0jjT*rM{p7+ziKZ+NC?vgh>8T@+M{;hL|QqO>oBoDL+ z#(l!>t+!4NdPkpZT9r04sQKcT1XWIfM~OpT;i-S>Vm@C9fc*UQB|-1iS$k{lg&u5F zvN!933#d;{pq{?eQ-9P2p2o$;WO;v|zcc;%Rzce5z|W`~ANX_-uIIG!o{K?``FS#T zn%)emeN@*|e|Zf0>6-S|DZi3uTe!r3H0si^6@BZ|(@sy{YL9fdtt-M{UgUWx)z`t9u zf31V3^KvIo*T2B0?9=KOR5=Gvx_e(-|cv3-x0$Lj^X)U1Y8Kh1_7@%MA=?W=x|TuQJ`#PTA6uyhYh+Kab4z0uOxtbonFMnr|^Gr2Gc|^Ot4sZMp10KVI^~ zjnh_Ud%0_GKdomZr0crr^q=*^_x@jINa632&2=NI6I?f!Rh;F^%~AN-=S-{y&I<=1Dj z)!%g^;zYim1LIA;+90q2@jS6ZL07Sl;UAQ1&`5qRaeBby#pOiZT4~%`?(~fdCYx6jCT?5qe#E9kgm^f%hq+=XP2nFgFpH= z8usHKXNEMt@@x2)Kf=DQ^EsYlLKsXyVWkQY0*Zs3cr zvUPm{JW4)9Gd@2qr1G*$4%hT~mT{G9vgwxzX?_LZ7k#ubTm5p-U*cy0 zKM3A{AJMn%KxaQ+rzTtdLKi}B_;fe|e4c^*g5XPee?Q``-=_uMnG3i-#XjdP*}9MM zb@FXDj{Ev-&(BMJ9sNt*@>=-O{r!xuGv2f{Tm1q{v$;Md9yU;J0H4V1Ov=-TFuZ&_ zVKDjNcIw9gA@!F6KA8`}AL5tl_b<$itY*WPR&dO`dI;BWDVVZ7qMg#TOk z<5SWJ@+jYb%(ye;Mf?^?#P$6AOYpzo5p)y%SDCHn5qz7ibUFt40k2~}KH`T$_wWAI z3-bLf+3M$chkpIEY?c4cA#HDv!Ardg`pZ5pz#;jhfKTXy@ymXil90v|abNtNo53f( zyn~OV|B0bmxRj2JH@?QWCiITPNBU%IobrZj^?yUZNgh#K@?lxF`g0LK5xK5Id>}3( z`@~AJ)xHLtvj4kINb}h-uJyg^xye5xKI88XgB}+7$%Q`g_d8Z(t6vIulYF68A>C&R z{0QF<3@QI0ZYOcC>q6eDPW8Qe?+vMZy^DG}^6O_3U*BP#^5c8cL+a1M{uR;FONm#= zpYYp`kj9a_^;19TPQp70a$Sl2)jdM$heO`4?5p1wqWwjEczsCus6$BgRu1PE@U!p_ z=p*w)C+sKk&!t$%d3p)(tI8hK5v+$Jlf31{UB^#`Jo$dX@%=Qef%{^AyazkTm-CZ({U+zf574jV%Ti7=Nav!E>XBX{ zjX#Ybe;yywb5iaIc@xe*HsjT@klGiR|9?LAV0k*^K-T^9L*CPO?Ju7Wcto!N4w+Z) zA{?)B{Ihs{I`(z==coWbLbp3Znor!G_P`nB1JFh2e?my-v&$$4b*VofH=?It2T2?a z^S96${fK@6-84Q!dAI@n`+oRec#U~l?JdmXeqP`UppSpvLJj!<{4L{w{uOxwzsR{Q z53~Ia#AEAz>WBO`r1KBtLEZ;n2p-Um&9~Ct2=W`|U!ha1pW0vNhcsRiCjLJo-mp(a z><{cmlz7C`#6QNX`;g#Hpshd z#PQ@pF0VM6KK)7ZPXhZf{WuroN7hyIz}GA5RNV+Z7k}qVg!B85<_}*9`^~olpx^p! zK3EYvlQr-!@tDg)>Tf}Ra*hM;i=G}I(s(ZTQ1om|*u8#yYfeb>GSHu#Ytpu#o}=&> z<>ynj^C0j(^w>Zi@LjR&?}`o>pX4dtg8TkC6&RQJ6+VHTHxK@K=s$_09maaf&zJiV zcI@711BOA)DYfbM_RNu}LHIo`ng zC-EBcBJ0aXLtF>^tA9lQ;4DUUtGxI|8_<{2YSBYt|sUBymc zo1^19BS+^S>{Al`P(N4UM;uY~58`SfFFP1#*`A~8wNl0_F3Ht%ArLnZdj@flz*{&E z=SA-KMchLC7fqY#glb9hGPs$UEH!o;4tI9KEOJNv6&1o2_%7jfad zI~tVqLVQm4hYn&s0G`V}8N~U-U$TMkBc3RF4smLUuVDYB$Q$A(0sk+>{D+N*zxeBf zGjqHSr$6-aU!b$ZpE@ue^#JIJyt!TYPWT4#Avu2u@kGg^yb$z%Zc^)QO_0yv`*8s0 zF;^X^c&=xT%3TxW2edd`-0;W#8czg$^n8#U+JlS>b@~@B*&m7cpyZ`vf0pDkX6I;r z;`uqco@<$-e7*tuR{ea=H+bEO?abgl+@_4vBkm-A2=IyQb4&Esa}YpR-G_*Ho4+mu zK4iXG(qHp#e#3h^AAaJhr~7NXcO&@IKgT8m<311P6K%%+N&nmv;7jr|!T+*8ThBQ8 zI_&@R+x7nCCpj-@BJw)^-{1cy3^Wr44g@4`;>C!Qy#L3e?yKG>VqG0`G9QhLxh|X1 zGVXaV>iVp%<3??WIyrA+b;Qa3ly4$V@_Cm;oaE0OiaI}TP;*YS_Ilgvfy!MsM4g-m z_ej+F=cTM)8g)OuakTuE>WGtl9EqrtxJJXMlYJipqfX90yEf`1f8m*kYx`ZGD!)(E z2_K&wb)DK**Bm%2>Lh;UBF^8hH1?mUs~@YM@pF09N&f1$5jVeAb$Q1<5$CU8@3|`K zULSl)#ytaL&Ohg2()H};;;57J`~HbI*&hjbK5Sc^{`%gCll+mx9QT@tlkx}|vbJnq#7%D2 zA-?ClsPp}o6VaaF=beaa{Nlz>uFZ`)KYsD!OA(=46YGC_#NE^4^R<_@iYcAmjyiw; z%zs8jou4PMc5&4C=g9q$7Ikv&)#RxAa@*1J6YnHl`|}!j6Fc#isC%Ok@x>fhDi#XZW_jOe1hg$Lxdq>^e()n?z|GbrScMWZnam{+gr{xqK!m{CB|V?zKTAs(EbJ;SqBiE~w3dh??xBcN8@Bev2(jDsa$J)J1lJ1{J zcdo5?nd8QDZ|$zF6K_kpb4L7HKKvZ^zc%T_Zn=){jbXdHIj$ju1N{uy+_>bIK4ose ziGQbW9$4mNzfh-Aw_x1w#Vy`XIyvVHk=6s@-_>jB_J==WaIz4=7TjPvlGwI5&nN7j$qlWuJ1 zlLJd}U*PyK=|1^9&AV?|(tVk_`13P=Ou9{zo24GvIMj)~v98RG-LbvmuWyr1@?KXZ zoy13;PpUowAN*c&q#_&qG5e=|S&hz1x)G-}cKfS{_ZO1xk~cCJU)8QUs(yz zSI%vFG3f+9;8)o%hFakJC#n1o`U;zh73A#ikNnaamj;O(nlYp&WuetI+Mde3SS z_{vd!Fpi96%_~QP-nY-&zxAIJOO=k@%Uq}1c9)L?eudA_{;J;_RCRop{eo`7xA;!r zMJ@e<{~iw|?q-2I zpCaF4Tms+5q`S1`uE3|z2Qm)>Z$i&kO5Cn9T2x*6OVXW{@n^XM-bB8>PrCcBZ(Z^l zYCqq8Ioc6?KSlgO9@-w;sZe)!k()2fE5o;tf!^~a~B?r6MTVA--VrO(KulXZsC7w}8o=E72U z`rzX#*DWI-&Y(Q}HdOWFxn;^%I|*NJ>X+A&PR{)T9Yk(%ZFG?O$nq+-p)ngkMLO*R!>vnwi%afRQ+kY|*-^;rB zyP=BL!%4UC%Rf%6^JUWgdB+J=hfgn4ej1i^^ZTFvL6LK*k^`Xy4w#`nu#w#0n4ZsiIH#|`M8{iUoFu94Ay8AM>*VHLU zx|w|sX1$E(qHn>cG9N;|MUO8`x~EV6wfO4GN>%PKe@T0wqv*G#)VrI>=g^BHANO(o zT2QL;_9XQR+Ecw;>b5T5Q+yHRUgQP%75xA_$Tj9m!4u$;_do~H@8Exx-=Qk6n6Lix z^b_kc0B?)Cu#E)#Eb|%UPVoCJ^z6B754py7qW5-{xnoz2t6zX?k@KgMs^4%e_&@uZ4=qPr_N2S_6=p=Y;Cv7Hx#W|>H9b3X{yISX&r7#;R))opOdc1akq9@`yu4(>SHdt687Aj;t%>r)+0lbsxK?clpmoFL|>ynvES}a zxUA^u-jA0gbpFmuxa7dItNuw8xgDEZS3NU5p?bAR!o5-S%i8hzMXtjQ9jYdNns9GD z^TXPa4Gef7zJOdGM8l z%0+3yb$zc(#^z5FZp)F*?(h4G+<@mhrTTuJP<=9_Na?qwNbQ&>5^m{DT>{^Hkx+Z) z{e)}%eWn}tPQra2?^5~fN9f<5p9dz?Zpco!8R=CuN17D7#wTyyy1*se`0hVfJoXmH z)0E#YNGM-DnQ+ZEwoAE2gb)2mp5mJc<@b{lI-jlpyfeN{ziUpyt$uuC`G_t>F4cJD zuz!{()ZTfDc$}V4y90Rp>%8yFv))L!HXA=bVdRn`T}M?V+$X)h*xC{A3m(%GE_U&0 zmHpmJxU*huTh;#Sgj+S}oAS3GDAI91n{aZj+Bo7L?a6%pS;AdXwqxtYAqh9{g)h^O z+01cWo^Zu!U8@GKPEh|Bxdk(uFIze$q4PezZ?}3&R>|!}I=;aPx462w8#A>??aId! zivPn2ck;6z*F4)Qq4OHXFZ_k^N_#8$exqV{Ff$_~tv})Vr%2z&IAz`cbCL4L$K|2!#oMGO=-jH~Z|TukLiKtd;t70q%b(|X zFM}`CzG3^{5#IF)*DLZvMVp@z?&S>^co%F*s2m(hxM?4pT5@%MLiG*!SFX{X@C(M- z;*>V2;lOA9v@dEpRTD1AiQ!%N9N&u_4mkJUJ!9|D{Y7qcRXWbo2A+R9vibMn%K1R_lvYUi)$!z`NLMkOQf2DbjTX+EF`-atD4BJ#hv3 zu8?pJqkO(bJbqrJ>$G_ZUH`A)d+1NxK?jTU{wj>uUspoEi2d?2%gl>PsrQk z^_$i{^&IsG_)O2Q{uh4&_p8LiC+v4(Lg$r1MJf;9vi<-3OMmfCtb#r{?(c^RvWncq z9%p)qr9~=#-z3~`d0hi}pquE$5ky&%>qBldaH4<>bVKf zgLS{kYS5l?e0`DXxw8|xPWprV4E-YOZ_r)zBj6P|e>&mLop=Gx;ZC^AF4(Yk1I8oz z;q+qFGobr7{eMi~0=kJ@bf)}NB;0drI|Rznp2#osoXG12^7Zqi`wr4~K!WSYBIT!j z)XyIDlCLKx6e%BJe9~Vp)^&;%o`(|7KNh+(^tkYIETQW%(81;fq1Q7-s#n23VsBiS zP`ZyRat%J+y7e&hpzs^`LhRGi`5gQydi>=g)n{m5_yKxD?9$VyuU{%s{c&YN=Z6Ix zcej7_pzs^u5dm3Agi?|CB$9 z_MUn3r{dRsFH*gM_C!B?Nqzlvk>cl5%u9D|*!s!MMM@8hOV{rSwa?0ml#adsy|3r6 zkq$i*E_G*yH|6bwuAes*sXT!{WS#>3)vxfcp09c9vx=OHDVLW~??6w89ft9X-hQu0 z`TW@;oyTTyUSC_J^8)4r!GHH6h5wr()!&ngl#X~V`g&QBt~d)$}#2ztQupy<2mBGvB&|LQ-P_c0z>mx3>(-6fm{ zmr}kk9|>K6cavA)L-3ExN05*A7oT48pX2_WuSM>balXNPB6iTggwEf7Kfb>O@JgO9 z#wYVS?u$GE-?FZN{t$o5l|?#_&nDkJnoxW_Mt<%`zL?4WcT%71CEhSUh@1egy8cOU zy_|4DXW(7z89bNy#+O&5SvLY+#BWlM`UUNXeYJ)BjPC?K@TbT(@GkpYAkSity;-F8 z-q9lUXVfoNJ%@IMf1$4y-jf!1_tCJs@U@zX3x|c>$J?umf4C*=?i_No=HA!C?v)n~ zRkX~^bCS<+TAuoA-wHeb_a2U!ljr0-qMERie6aKK+?5Ls*F07dcHJI1TzvJ3Veyk6 zzA~(S#L}>n^Jju#C-J||VJG?Rv%*e(KjWG_C%->(TiC73IhytGGhrv^7gUFxoFDyZ z*v%@dF2B2Lo|Cw2!?4S%#_uc)3cC|uIaGe-?64c<1yY~1$#at5(>%}ZI(RhwvVuG} z^XTENk7Vbm-}n2l`|h~;FU{W^b}wH$^7;DB2yfdwC%;$mXIRI3PM(u^TZcUL^A68* z@;fZE@|^7NyCBasud1&2_1>`hsZY++I6^G!{PVr{bjouRp0C;37kHC+Mn;~SIw+9w z_S<21PO!dPeRtT+d1K^7qbe1TCjrm?xzueBg|**Nd9L1ufOkgcJSXw}Q}Ud|wNdZ< z?9kR*LwQbqpX01N^~>kxIse>+neT?(uxY&-^j^aDR))n7Km7DOSN-wP^gpJB)!&b6 zfdk*md51+|jgOp^=Olk=RapJk=uiCZXXZKC&w6Iq$$9$&@|>LekR5h%Zu`7ErThG_ zlYPB-U-sFYkf;3tE*anFVJGJ;-4NEe1;%Ielix)etnhZi`x2)-CF~@gJSoq;|7G2b z@b`J{r=RP(DR<>5pZ+K8$oVEC!Ww_*6;`{qb)J*op&A|5_z(C|;ymCd z`Q4rG!me>{e9UVJQ#Lz9^#k29MrEmt#O{lE0$4?z<(0g?~>=__g;2{o$Sj- z`!eozVR!KpZGyjl8g_EN{fFQWUtZJ0Zut14*S@wS?EHNmTh7jNa*i|f#gc<{ygrbF zj608P9f9v;|IirXw=k^o1$gA#e>|7pfB81-Y#&&lsqZ4A42 zkndZW%G3DL6JaOk(&9ZmXFN~iK+rR?{}_BP`2f%l{&~HDPr@RvIsX7pfnVwest&&t*7@;|u*UKB zgx&pb9VzaG_9RXQ{K~l0KdZ)rp&VNnI)A;G7 z(2IV4{$*i}>-`XRy3anW@yI)%S7rZgp6hUOP4NqmJIS|BLNDX|*c)4-o!jbpEuRiM zIUnk_JSX{mam9nXJ*@FW;6e2HR?Y)Yg*9HaJS_O_0lG^b%w>?fmUSzi86Fn>b7)T3 zNuD+IrGNjL%c0Nx_}MpM=jW^3wPT3;;;lnjIiQ0dPd*)bUgkB(iTJ@WZ-^ef7<#_} z&Vz-V`upb^*MXewI8rStO^p}kLK-fwC1LQ~I&y%U&`sO)3 z4=3zopUit<=l`C?qK0`ICj{OkPCF^=G;e!|>LJW8l6PH7c^w*7_=XYhKZf16YpaXP z(T>EO19{3<+rmzMA0a2t{eF5K@5f{EoSXv+`U^cV+o@kLFUjv%1@qjy&mG-**K&T> zl6qufSmV;|p>JNUS2YZL^i{KZ?ib+wg(m_fQx}At=8=;x}tGG76ooYMN1Sj)>X-k*Bz9)bHW6s85P-WzuQ z?^^9ytMd7GI`k8MKktIu2tV|`MYrI$GmLr=>2KD$(3KY{OkzPss{u#Z44*2*8zteYki2Bo?A-EQ}WdIu-dON;sbV_ybnDj zas8?xwell*4H$>m)1_gxCjhV5siTQU$hU82#;y%(o=RTW?d^yTryYcVfRtsJp$ z1n6t@lKdUeUF@uJr0X8oHNy`VANyul*AI|W$+syFtG)v~qVMhttK9~Ekn!$pZqt z#ZDTJ^@pD~2fWJf5>;xyze27g&!;f#HjGTGd~7J~v$uuWQgTiVbV0@SDty2Jq$jRbuylpjz5w< z_E^q84f33vw+s7Q*7LWAU4yc^?kvEi@zb!AeNE?+??F$oqc9IXu&qvIgWrZIeL;7z z!?sY4Cr~~x?}^?*zk=Tg=f$w{OZghkZ{5P~#utvPtv`_S1p1Nl!W*hyYliv5*Kd9; zzkmBJ?KQwFcEOkYu8jTMMt=e1SLP$giLA%!a=i!q$$GyktodU%QtqN*_uIrY?_00j-@>Z{VDm7z?;|~$A@*kX+b*(^bsjRE0B*Wai3#i>gRnlrvB6dcKIM+x#ALFE=?_Q8PTMe#x#e zwX=WIJje5pw<-S2E;02(o*Ps9CMT-?&u%fzo4PgT=Husg(vV*$e$9AH{d|=%C+9}R zqUx_MiE11t6jS@~d*)dpuTk=w9t1poeC-UvJ3FT93$!bK`(I+}hyH{33db})i+o^- zQyz>t$>+Z`s@FYZI`05p@f#LK)ow#A`NKn^y1uJM-mCX*P3pOrt|KsRiKhY{`JKWw zQ76BnbWK$Koxq>?4I^mR&o`?ZSN_h6s$b;FsOpmt;P8L%4SBV~|D&T$^5c=;`}J;C;RCkH*cPw7C08|@84YKn-f5P zktek0|DO95+oNj#p+CtRTuHe)ne>>ae76SU7XSNWkSjk=;b=_!Sfe3te%$J`yU7m+ zqE7b9fbS&kHZ!Jn`v;WwO6E5|jQ%I3Wqbho`Rn&qz@zLp*d5h)(#0{IzmXR%ejnt6 zOCB@y$8R&Mi!<(ws(u9j`TpFIKcRg;KlQGd@_VzGlk@b}Q@$Zr&o`|ufB%-Kli#!c zG^%lB&{yIC&{s14Q=tF+{pXtjmmjzO0{HOr!;$|icGhG6@`=O^ZjNaj<5lWA@VlII z0eKQT;o7LiRg*Es`C=Le90qyB?^|!nimIOnawc)VIx&rdZq$7N?@x)Ue(ME3_2ZG9 zV(Nc~o)P_bFX-g+kr!3J3Ggm)Gw4V0zZB?xfvh*7AN+mE(0{Uz;O(f!doJYoA#dWB zxQO~=KjnB(RQ;QPPvSj$C>LkNn129%^z*o1=KKJ9$?x)R;k+@Y#`lbxU3=BEPO>{y6wo;_6;Z?deTX)$jOD z;=j5{q_&v|C;&`dP?NEnEiq8Wj@%5dCt!tIhOMX^svOUVw}HnW31{w^b*Lced?QZLXD z*D_xu2|wmriBmSlJnH8&9O1kOJ44QshF%apf;`LmDkrM%pB>Y|^~a-+i&9ZpOZK`5K4Wk+19Xwh{HG*TKF5f4}vc`QkTx`i*?I z@V!9EZ#PHOKlVz#`VF4X*L7->i0->+!2K%qBI@t>Az#;#eIibNU-D?athbhhBkuD_ zN4K^=CgNI*s*`%ACf~{LZ?})Qldr2+xivo`ag4q#B4Q6c*E*u>$f|rN=ZEjfck;U^ z_)hfX=@HfQPvpA=71im{3nOaB0S>|6>U`bLb5%s=kFELY-+4P<{oEhttKV=-zWP%S z=4%`g@XCB}cfQ&^jUw7_W5Nx5YJ4JJ?F4);zi;pp#+lyuv(tCyyM6`u{leM#swV*N z=2Re1G+4*=X8`#0f43Ix$vF(acdrlqsR?~>uW6jwA1=v5*u)5;D zPxD>n7l*fY!?pO|`$e4mZt=i~lXE6YaC@aAJ9s)v9#@vDsccl`1@a$_Uzq|*+k zUwnJS{d!d(a1_sFen9`izo46(TQ>^(hWy_fKQ7`9ypmQ`d??@f=RTjhIbX*;G@|n} z;E{M}2f*$7BQgH{GXj+}{?6C&g3jGD0^T*55%=vgX0PE3!k1B(fJE}C4Py# zh?C#*Jc)S4eK{`){3>w;&|l6C_%>hV=FEu3kLTt)ITv74zPt5=KYupxm>93bh%7`fcwu!i@$EUf9?fDv~!Fa`Q zdr!X7Wpu>J?|-Bsx-L(rTo*@l{y#gSaRTtStbh7OoSc8`DgLfVMAT0RddYgNOT@|V zhmXrwy9e?kb_?Wuc5vLqw*xN{H$EZaB<^)C_OT7B=dFU?5j@TSfBOEa$Me>Ui^8bKlG=JI|cc` z{<9u4NypErpTMWm-$>#+7ybIbcYO-?J5JBneT?91@fThcQU5ORFY6A-o2;J!uf#9@ z$d`E1*{|lS{|)-$z{)>YT?jc=ziGbfIVDgP{UTrWZC%PsK}7vpkjMMaUorhZ8}r?D z-_~rMdlU8WhzR5Upp(C^5qJ>&ivDFC0{Fzf1O8>78v2# z6?Bli0?2jI4~HwdK%WWSp$8>ie|$vajnE^azwf2ofj?y2;5)%L`V;w>oUeAn`}u0$ zp?|S=@LcQ`$g$`x@SE)a#C^%r=mt6U?Hb6T{9eTQ*r(~o*I&rj^~pQ=DmUQQktbJY zt^F+D{qf$BtP6t?wXZ=xe_vF+wSe2t|9CiG=`kUqb~f6P{s8wiza1)Gx(|A6=i#gp zv?J$ML5{`#!2Brs77QTKAM}ym--JAfpC9rd>#5r! z3J3J5@tgR4!4E&wZ8$9*;}`t~{u4fhzLRsXZ_U?y+Y{qzx8D`l_1AfE7kao^=2`c} z-M%do*9WrV>Ypf$Yu?rluD?%>>-q}oU)iSxe}d#?HI1wN-H_|zP+Zq@IdNU@wTo-M zBG&U_*Bn=%dC^{6?YT*Dz5hT=^RM>BHGj2t+;#bS^h3ARFK|ujo_)`Wm&Dax>=9S{ zrYpWX2EQAW>24k|%c|>2`ix*8{DI=MUqW-vzo${^CRQ z1E3u}ry#C&=H9s4%V))PU4?b7?%$1TzT6|^hXZlVGj2}$4q^RMoOzmYT}QTvD?h#$ z(|kO%EB+wBE9=dR3f#?i4S#NUW?a_?eL;UeU$z^^0e+M9U7Z4L5BwtbIOr~ZHLMdP z-x+*XbltA-RhPzf-SRZ-X+J+5d?t7~j`DzhWqkoY6MsvT<2XouJ~OWCu4>xl;QJ0A zUE1mPW8%85fE>v_&2!?KC%X##<>yzTU-3(v!giXGkHK$}zZ)RjfJ62}HsHAaAzYWo z)t|DQ>tgVm?2qVKp!uoS#Fc+h3%`NRk`I0|$I~dTas|A}zKphUmD^x};`s^U1AHWS zLH*TlBhEf>0^w*_p!t413e<0aek4!!O}@X7-!F?P{xD9-pIi`E_;zvq4E)ME6yp=R zpq71>1Hl*mzFzbvd7*>j>Ua7&u6ggd|H5_9-!ITHuKe;;T=P@GZ{ipD3v%u6GkGbl ze7TNta(Z0-3$L+0ME_=j_yHg4K9IQPjY2O3$&lEluOJ% zlHUt`FZt-7a@{_g@I7OG^0?;Dz8F(FfS<+heh>9e`vS#tT7l|m@QdUZMTqy;^?lc2Bo({APa(7QtShv|=~is^VS(Y^>MQS}UlV>F$rox8brMg4UrF~5&@X)3zkYs^$2(&h z_rm!L!UvEac^~tt>>s%xrhaxjm-Dt)Mb(~7r{5BOS9{O=hoa}<=MsM`;v~vv zPnLX2`0r%>06)>#la3buT}Hpx+?e7O_z`{`6H`9}{QJW9m&Y{EX+QnuQ|SjehJJJ4 zMeGLnL(cYp7v@>|OW`LLKB~|0L9faFG5GyN{>Rc^41cVw7h6U(4`n?4fumxo7dFH+ ze*Pu#{aIA=;AgR4=q1U&sYAc@Q}j>4za#Kp7t^>O{J|3ED50Mj{vpY0{W_{}l`>vo z{@_bv8h0q9yg(m|-ve}(xDV(fc@gMW{CDs#`R7=Cb~4Y+crmK*k0ktyqqG~~U-HkJ z*oJk0?>|GFK>WVIv+xJ{6@AyA@f`S<#sAbbru$4T!}oq3*w(1#ubfFf!hON_3B+3& z{dWhW>IVS*B#*XX)X8~ur$;pp`3Tl4*>zKO;cpas<;R%nmk9i4ex4ZkWyH9etY<-& zz1LP3-|3=iM*&X~-`PihE&PdcZp*}|t_zQkYP=Ej6~7Dcr1k^iUHbn%NcihopeNhvMz!D^R)2+uY<+Cz+d9GdxU>q->$?rwMuP6I* zz|VgE+|xIxzi~nRDEB{5U$rHDAP=(M+7;Ej{)=NezalOs=gQ!`8S$sw%{T(|g8W`9 z{E?FPac)%oDQlyer_qRbga1|H+=zonJO_G1=9?QyckrF;Hv}9KAD@JH6Y}AwPtbEu z`nKgcB^aOhJ>O=$1O7_U_mE%7-~1cr;`nhyoU0;!m2&7U-w$>y{Iq_aFZvaK68!Bl zkHOC>`>z_&{~rMV9bc#NIp9I`-!BpM>tD}!LqqztG46YBPAho`bQOI65!1Y3=q2$Z z2BU8JnMZ3nqhIldV%%c4VZ1Vb&5mh)$1?hX4@ERS^)uw~$)j0=Iz?6g^r!r^hrZ}~ zbZxRR_~_w}%GYP}{G!=W^)JjKzdXS>*&Q*>F7`oW&$IXC?n zS6vlTzCDh7+ztBQKewYtOyfa)qAotOZsj`gqpZ8XC7%Ni!XKcM#PQa|)Zdbfx+Oi1 zRwM?K?h7anX955IK8+rTe?M4L@pTtHk0zAKI1l(s&gpB`2-jlpW z;Cp*+{nUyMJTC`$m-Bp~f8<;nz$5aAc4Ym13fm1ub>B=8;)#BK`k7J9D+k`?yq_BQ zOZ+@i$d#X8y7cC##I-t1=DY{EWql5Ll)SIb(DVMf5ppbc-lziZdo5J^V^@K$%Yub! z=k6?UU(Nb-PoE0f&Bqk#JO%qx)<4|})b2UCQ0sdO)t>8KpzEe*3w7PJxlr{~MWN2$ z@j{jBd2DBHf$Gm-fC(H=PicA39V z@svWfTmCN4xL67M{jfmiHj|7kvIn`n@r(=SvHfE*Q7q?dJk_YtK7>Uj;bjoE`9mtp5P7*!iHVtY3k5 zStqS$yU_yf=Ppowd9Q%;EBWA=xbC}qzChanTw;fxPk!rBsOx0d#ggZMYnjKvXR;1} zUqbQ$u+EfoVa_LhOSwKfm;C!rq2g~x0qyz%wO0?%aszs(%^D)qYgLt20Nu-2{k zUTTV7PvHHk`}8_GUF$(Jwa%QV^*Xj2V4ZP4-{W^l_UG8%;>r5l`dLFbMn0qWTeF>w z5AgbKtuy%jjA?qkoA55S?^$QEu6j`4t73aL{z~?rIa{BPzDH}1?R#v$ig*n0{Xwh^ zzUG9_>P+G-gLtVT+`HM{Cemj(uUE5P%&`&)qHMvs3IJOS8Hbi+nYnU?D=rwHOld9yi?l^5uaUV>Gejon@fIh zgga&Y$#Itv@2iQg)~q)Xzg-BgjiZ`)7)1Qocy^ON9pTx?_C2;|_%-@Wpxn4?6y6fT zHRD#j4qU5sYNXc9$MQbMy_Ixpad?E+YQtmYE&Bd?(j&$3 z82)O<$M?Kp`hN9eS`Q*#Q~7%BhG<<$I&Zv<_ep=#d#;e*6Yd$5huVIJ>vO}yX!7fq z&*=Rs@~4f@@E;&v0$tcX_3Zj3dL3w`wTtkY<8s7f>Po$D__20t;Ua!K&MWr3@(#9V zwc)E+?|YO7gV*@4i@|j*zYp?#ewP}|`}}?`<-*2MNx7>cT{e=BN8ha9tsp-d9X+<2 z!S7O+>w8tBS^t;(*mL{N=uwNG9)yp0X+4YAMu$9Jm$9ZiWRSi_C*udhkKx-RT$$tb zdy@kJ7ynPJ1N66>0ol;mFW9+ zo#K4dgmPr~2!!-K?<%crK3HM;nsf`;AICqM^NQ&?)3XOjhn3{-jT~2+>D~6)kIfr4 zF9inaeQ$);0qVz84zD@B-K1}TbP8m!J-bgmZR0Y$nH(CO4X=S)^!pVir`NMT@^O3G z0Y<-#l&?ADk8P&kDL-Zp+55HlA$*yWwEfg|S{wZ{jBkhN{aSe{{!8$pB)@ut)8HMa~x+T<^W*Lbdf)V58}^qX-v#>W^EOZM zy#W8HKT;R#{nr+1ZE`f%@DS1aRUFrhae5u-q_xqrgnA|L-+#UIz4o-XOs+FHpQpn5 z+#8~GYACNu{^xf#KQ1Ocjm~C&9$KOAH<+Sz>!n%;cy054^jW>%bF$XP2c|FYcv0`~ zdtU1_&PU_fUMBg%?Ec|~C(2P%epgkl-@ib(I?mT?k9-rQooM>r^qAFNg}&cprPihw ztFC1`)Nf{A+Prm;;vM*-rG(7NL{V(wd1%< zZf(4_UP{qE=rmp5KbGU@#CF^Ax{~eLygZunYwLppocCsuuY>IOAn|PTdKb=<8y9JR zElB4}j1Ri&{SCaHVfV}Q{#4pIDbn};7xex|tTQI*^`PZi8=gui$CcElj`T5nRN6J= z*bUR~7Zd({21iKmSKgqt$(QL*!_UUq`rP!s>Dzt8ONisP?^f7)4EEoM{M?1t=C81Js%f{Fy=Uu@jij^r8SMTV-oJ_c8y&WjZdKF|z4_ia z%9q&}CdWM~kG6h%nQ&H--bT-<&*}KK6aQ5s^xEiP^0=D(vw`zjfbVCLPL(tDyK44h zcB-voR&ZT!{Au%eRZ_n@o8!5I^+e7)>p9*xDQBxm-;;@Nv$xmry$^{u$8nf`YCt{k zJ-=(ekmDquY~;Le^sO{GrM_)IKF?q~j`LuJ9m=jIpNM*OYgxNQEognVLpbpCvWXE?__gmkN< z9GD+v0_ke=mCa`x9@6h;5FcizrbxGLq(_SUX7jn(LxX6K+kDcAcrGc`b~8vv<0F&% z0}J%I@vYJSPU6A%t%USne80ZGZK~F{lJ3^7%_oC+|3u;;Fj3!+k{&-$PO{ifG4Wi* zx(nsAC+TB&UPbv|%;ycrCsm`geZ%YM8}+)1{9x^8g;znSFE6@)YM zPHoSz|4o#eD$aj~PviI6^-B-^E|dISd9z+`r`+!*f4oV2MIY4XCTEWDZ{qxB@^1E* z&1)uKDdM+w+{91qI{6lDKZ9_zW54FNa~!YD-{w!SdBg0O8DrTF?S$I?|4aU=DR+S~ zec#qAm1FeU?4{9!+vKA+>9UFZkqYVishhNZn0mtT+8e~@7i(R@{%n4<^;ikv&Lm&j ze6ago{m%RZrcVPG{m=XO-Kl{5Ww9oGZJsiF!i(s0^DCKNsO^XIxY_R}Kek?4KUu$T zJwt2r!`r-T{217s74ZM;+SXUbM~lg~=3gH~`7%GT(Z&4fE~fou+@rPGq~?tsNiv|G)8Xc8;yL%|Eq* z&1ZJ)5kIB}%{~jX)9+1>nZ29x^uEQdHd2nO#b2>2i+>n?%~A#rcsKED z`qb!RcC7i+O)r_>yNc@piz}p(?Dtx&*OT9J*@KHj(o=pEi2Jy0j;~h==D9}^e@kl>gf0_K)bq3)M3}e5ov|d5{)bdS; z&j)I4@@;m1?K*;ZPUH6$SG9FqpuK)?{+2<+WA0?V-o350b~yRQ^u|VBXVCsIKYW02Ei=8vd3KZWA)nj)HiP)jn56JnoYwfm z^w?s4-<*ylw$L4bz=OE5o7DtHM{M1R`PfjuP!*OOcm>WTX&iN)by~~8HNwX_C^~$ z68ilL>eHU&1M^RrKf&xw!=KHEW@lBI{-(V=eZID9_J`ruCG~z2%B#&2W)Iie=^6Z< z?@u*;>7(~&P%do!ZuW7C>xn9^8@?ue4Ijqu8%bYVr`h`f&To~}uNGgodBgl9&CNgC zMd7K%%Z++n@_^PBFS5FX>!N_C&&}_i8l=~Qs27b67H?QVc+HPxa%XumW~a{J_ueFJ z&-@p)aU<#tn{O??UhB8NM87jR2z1nIv%}1;wK$OZi;eHCAB$_%@&)C^qup}Q0e|!E10Vo}%yDddT7fmJcvzl0LUMqWN!Y^)TlVv$L!=zji0`*9`Kt z(LIy%@#oKI`<1t8ZT6CE?;a*6wehTp0hDzOnog<8PDaz-&wK);d7ETO7sKd4p(2Z=~I4ameZg`rUBKoyD1|Xm6Ojjv;<( zbyi~t4`_=Tk&G*JfZZzMcJ!bOjQI0I$WO-*c-`V=rp4)esoTqI4 zVE%dY+XdQbf98Lwg@<}MK>F3@*OC6I0s5WA4FmalZT9x=NxY^Wo0`&V(|cxjIQHX= zUL*89k9ySRBb#qbU)#KEcDc!Oitq(EKboF1KdISE<|odj{s?d$F?qA~Xn=BTcKUAW z3B#Y+X}0cI!G3Gym-?%l&Euv&$d8uCW$`f6JH}VFdWZNhKCF$KvVF^oGW}zD169PQ z*`LOjwRRBoyv~+C!!{=iH_AG5u`u7ULtEFHDaZ{#SGUF!(J#X7jQ6(yhT$dfl3KoZYuPI9q3#f7keB;XM5=liyF6qu2YW*VeP&;e=-s z=RwQcYcf~gpFzE2^fNnZ0^zm11M{bwf5zZ8IWD1}((*EFeQN$os{_-tUyFxXJUGDq zc08`nN6+Vbgxlid7Duu;-T>NnN#eoedBOty{^$R~b0yzvPkdRPU~|5oqP|%}{4M17 zO$bLP!e7Yyb2#qBY}e%de$wY4>mB^Q9q~Pg_UniI&g}c)e6N!F#NwwWwO4bJ(cY&CLS6P9?LH*3c`|k7Mm|zAYjB<`VDL{s7L)<{vS-WD>4ce19UxZR40qxwd)# zJL);Ji_IVTHSyGj{TLsce|;S3m&WJS>~9_6x9=(mPbbRdwpq$o9_hA$e6^V0o87mM z-&GUe>-oL$naN)teitI$XYf1IPXXdDgK(NXIE4K4Cg~gHcaC^pPx#jHyLQA|l=z%O zcx-)}Nq)M6?Runh3E`W}c0A&34aeP@@?rMLDt>3{MdLH8P2UCBuI(2%$ac&wvwZsv z)GvJ&E8gw+A_T&!ok;#X_JBaVwx*>BB`HA?PL%1i}eZpscD$BPEkq(8#xA`3!P#>E8YIF_rlKj`XNv`z9wl z=PO=DlD}V#?^XV zYZrFo^8{=DFQZb;>r9G_P*Jj2Din9YS#lj{%3!+?_I9tzKKcq4j5cP@88ynC}_B>^ol9`t$8R;jQJn5$yLu)*NSTKS|yv zKctHE+USkbWCHTnmG`gXb)MFi$7A-s(XIA7>(BVq@F$H10=4wHh3$4@ZG3l$URRcB zT`MmpH@)<}BcGYSsW$(cc(HX$>MDKT{B5Z?zt89WOxDDsm*jODty9FO<#pQnyOs~h z=N6ar#_4yKM`H55do0`iFZ`r#V?SKCdc<>}Q13g!Yw}|8juPq%!-Hq?J(~R(9T^`t zzm55w?0t*R1O^Ze(?68!O7>%U^d-b^pdH~ec!_7@gIamzd!spi&-kf5zmI5LOXvQ2 zZFn<2tBog{9Fh+zhw**37ohx@hQoY_dPV15}gu`PUW6g1nzJ=G+i?x2H=6e5!m0GWTL+kt( zwSM?bt;g`X6R&sh`ny;4dDTl==dI9s@yl9wXWeX-UUy}EgmsMldTaIh!)*5r!r?uy z_ZzaG(XZ(B7yN!I-~W}@eR;i}@4xn%zJD#BuO^%e31?6C^XO`Q&&D-|&#k}CZ|n1k zPV4sn)z9_puMhjlU8C+M1!S50r?=ys__gnh@cYJ>q?_0g*b$y<}c2}{VKJ2%I z@SebSCvw~)`CS)Ye@XnkOuWx#J7ZZdO5376GDj$<3|-^+Rc@taA$+eP>dZ)JS%1iqI| zc!m?sZEW`+zV{}dzsC26lm0z9o)x@b&G$zU?wS9^_l*o69Oocjx8Qp#*j|d?TWxYU ziSJJ)d>^x4%llqNyk)U{8}CuVYkX{c^Ar1P!~Rjb{Hn{b-` zI>hS`+q3aG;_E2eX+=F@cqk-(IUB~vjEmOHWhHy7vdjp7% ze+a*|Yx%#+Nmqksrj4I)nEtWnFTbt*7~fn(dSAx+TaNQD;$h-aec$AN3i)an+h0!o zvzK^S#Bp>YyqgK%6C6(k;akn;1E1CQXH(A|$M-vO-2F+HS$w|^@zaR!bz^&%vi(xR zb3XZTA8W(g32e{w!e;g}RmY#I&-dFur*PfIe(z>&eE2&1nL&IkB)^ZQAIJO|)$_HT zmwDg(2VXv}_jkS zKBjd?zGrzgt9jj;wZ(zbIBwhTx{Tj*cQ=gkZ%kVap z{q*Md3ChDn(z8pYe%GJ(r*d4z2cL6%JBcUTKWA`vdQiWQ5YHAbSTj%WkLULm2bsWY zkKdW!Esg!3Lbz<7@=n5UbnZ=h7@qCC4D*xP{-*Bi$Mz#!Px`HSNa3=)B!k2JXvUA7 z`27s>iTT<05nlneXLM=L_e#iL7N4ENYs;q%k^V;S;T(4+>1Xt?@r@=PjbDTF6@K$? zHh)sD&EGiL^cVXbO}ZJqOiqoylZkK3M`=U)ZzA8;P(Cvr(0&Rjmn{g#GRmdxw>+2l z8P4&no1@=V@%~8S$@VvmBt3T!pR1`CHW7ZqlgIlD*-nVh2XcHCpU!wh`|CnDR}l`| zPh#U-M?8JUaZKm9XRuv2UE6t^^f}7sHtucIdqK`4Chz8#9yx<>5Z-y@r^#&3;s_fb z*7xFs!{D9zsNVmU{L+N&nfweQ-TM$P8%T$VloyMGntwOM_bk3(@n4JUPBFeAzBUq% zCU>^K<>*T{GK`2Bj0dmQ^SdD=&QwS2!^(tR8G#J+dLpXr-vY~S`X zy~p|WAnDVc^0k!LGkI5oZ8)ZL}dA*sAr77_^kK@|S?*Dn_?`Gm-GN1p-_d65*Ji=%DxSMkvW(SPp`?nIGDYid?@U$V`mk{1} z3GXJhvuUCCfAkQ#|BD-M2KKeTy7(szpfp8kj?x0970QVytx--vX@k-h zB?F}$N_&)!D4kF`qjW(z7bO#=D@r$%?kGJ`dZY9~38Hu?m!O1D`lIBcT!u0LWgyBR zlp!d2DETN+lsHNuN&=+>C5cjoay80ulo2Q+QLaZBjWPyh9Lji<2`IOsOhmZ@C518x zWirYXl&L7wQ0_;Wjxqz~VU(FDvr*=tJdQFKWgbc;%6ycCD2q@Qqbx;PhO!)G1`L_DBV$dqVz`jU+mp~RMz$3 zKYVlK9GN*IG9pKeh!`0$XT%thF(M*jM2sELd)dc+`sn8X2RX!H1~|e|j&Yn5oa7WkhWbGS!x&B^BN)jjMiWIeV~8P^vBVKi z0*NG%ObX*jC5`b+Ae{^{$s(JHZqrIMw)1* zg;pjrg*MvhU@DzVV>&aK$t-5m#T@1`kNGU1n}sZ5F-us=GM2M~m8@blYgo%V*3-iV zHnNFcHnWATY-2k+*vT$-vxmLxV?TZLbAW>!;xGdo;V8#A&IwL(iXoqI{}aJ5h7-vM zMly=gL=nvxVu)odam15AB1t5Z!Z=b%V>}Z`Cxc9~$YvrrS>^nCYouXmB~z@jdnViN+;8p&J1QUi`jHBhq=sSJ`3n(A&Xed5|*-z z<*Z;Ot60q%*0PTE^ss@AY@(OVY+)J2!=77NJcP{QH&;vXvPpjEMtiyo&*v}BAFD%kxCllnLs)jWRgWT6UiZ$ zJn|`^kRpmHp_DSpsi2ZcR8dV0wbW5h1C2D%Obe|{W(sYz)4^0anZ|TxFq2u#ri(eu zWghccKsO6n#A24Plw~Yu1uI#_YSyrpb*!g{4Qyl+y=-O+TiM2TcCeFO>}C&p*~fnR z=;r_jImBTGIKokmahwyJKq5&blfpPs zNn<<{NGF3#vdCs4IpmT@J_Qs~L@_0lQbsuyR5FPws;QxtI_hblktUjHp_R!@p^bJr zm`W$pn9dAlGK<-CF^9R#V?GP$W+97M%o3KejODCgC97D?8rHIo_4KfTjclTq&1_*S z+t|(ycCw4z>|rna*iRq*9N-{_ILrV?ILa}ObApqcV#qM}KM@RLIFXECB%>Hj6w!_9OF1AILRr7eAfL> z1j86kBqJEfC`J=SG-HS%ma)VUPXdV~kxUBXNF|N&Ody>MGRY#FiR6$=9{ChdND;-9 zP)Zr)R8Ywzs;H)hTI#5$fkv8WriE4}Gle$V>0m0IOk+ATn8_?=)5RR-GLQKzpqqs( zVlhit$}*O-f|aadHEUSQI@Z&}1~#&ZUN*CZt!!gEJJ`uCcC&}Q>|;ND^mBlN9O5to z9N{R(IL--9a*FT={-H!LjNwEwf{~13G*Lt|h8SWQOC0eekVq2Aq%e+D(iqPK(#ar` zEV7wM4!Pu!PXUD#QA`P?lu=Fvl}w_FYHFyZj(Qqsq={x)Xk{`}XrrADrqanYrZav5W$tqT}hPA9?Jw0q-Bb(@DGh5ioHny{ao$O*a zd)Ui9_R~i{2RO(f4l}?Jj&h9SoZuv<81gyyKM@RLIFXECB%>Hj6w!_9OF1AILRr(H~WSX!7zps$p}U= ziqS+7%@|^cWh`;TlRzR#B$L88Qb}Vx6G$h6OtQ#kB01!eM?M7xtcj&p*O zoMOls?tdZ}#&9AT!AM3inkb?fLkzKuC60I!NF<45QW!@nX^dwA>12>e7THWBhg|Z= zr+`9=D5iu`$|$FTN+wZ7H8s>yM?DQR(nK>Yv@)3~w9!rnQ|V+H)0x3cW-*&C<}jCe z%x3}JEMyUjS;A75v78mGWEHDf!&=s{o*p)^kxlfnnJsK(8{65zPIj@IJ?v#4`{|>f z103WKhZ*1qM>)oEPH>V_gm3f@C4ylLCz272WE7)`BAPM85X)HNh$n$Wl1L_naio&Q zcqWie2AO1$%|vp@C69axD5QvDN+_j_aw@1~5>-@FLoIdG(?BClG}A&WlbJ#r?Q}4e zPNp%P8O&rBv*}_EbD76{7SPQ?7O|KmEM*zXS;0zHv6?lkWgYA3VFMf4L@%4!!dAAi zogM6C7rWWRUiPt{KKePpK@M@40giB#V;tuMCppECGu{70FpS|uGJ=teVl+`iGlm#q z8A}}TB#=lF$)qrjRMHsF1k%YMlPt2CNDjH=kxv1I6j4kGrIb-l1(i&qifU@8rH*?8~7PEw- zV?8}=U?ZF8WiwmY$~LyMgPrVRH+$I2KK9c`KLj^k#&{->P6nA|k0tvK*+eg!*}_(~v7H_4WEZ>H!(R5WpFa9Iz(Edim;sJ( zlw%y{1SdJg5HAD|C4ylLCz272WE7)`BAPM85X)HNh$n$Wl1L_naio&QcqWie2AO1$ z%|vp@C69axD5QvDN+_j_aw@1~5>-@FLoIdG(?BClG}A&WlbJ#r?Q}4ePNp%P8O&rB zv*}_EbD76{7SPQ?7O|KmEM*zXS;0zHv6?lkWgYA3VFMf4L@%4!!dAAiogM6C7rWWR zUiPt{KKePpK@M@40giB#V;tuMCpkrUfqy6w3}ZNvj9?_A7)=z>j3I_t#u7(72_%w4 zGAWEBl{CgPfpjv+B#Ue&l0zma~GD ztYS55Sj#%r)58WfvWZ?cvxTi}V>>(8$u4%YhrR4$KYjFbfP)<3FasRnD91R?2~Ki~ z5bhaD1j86kBqJEfC`J=SG-HS%ma)VUPXdV~kxUBXNF|N&Ody>MGRY#FiR6$=9{Chd zND;-9P)Zr)R8Ywzs;H)hTI#5$fkv8WriE4}Gle$V>0m0IOk+ATn8_?=)5RR-GLQKz zpqqs(Vlhit$}*O-f|aadHEUSQI@Z&}1~#&ZUN*CZt!!gEJJ`uCcC&}Q>|;ND^mBlN z9O5to9N{R(IL--9a*82myZ?z`7{iHV1S1*6XrhQ_3^BwqmN?=`Adw`JNnsqRq%oce zq?17=S!6Sj9CFDcp8^UgqL>m&DWjYUDw#wT)znZ+9rZNONE6Mp(8^?{&_+8QOr?`) zgpb0j2mcy8fx#0PJb}Rz7(9W&6Bs;!!4nuffx#0PJb}Rz7(9W&6Bs;!!4nuffx#2_ z?>>S5g)6xKt-rMJ(%z>Zq2?8;9wF`>BA+4l6`~*E<=^lUQ1~`*6w!_9OF1AILRr7=y(n#f?*6Nk`at# z6r+hEnlZ!>%UI%wCxJwgNG64Gq>{#XCXh}BnPid8L~_U_k9-O!q=;flD5Z>YDyU=< zRa8?$Ep^n>KqE~w(?TngnL-=wbTE}prZJrv%w!g`>0%CZna6w<(9J>?v6v++Wf{v^ z!Ae%Knl-Ft9qZ{~0~^^yFPquIR<^O79qeQmyV=8D_OYKn`Z>Ts4sn}Z`Cxc9~$YvrrS>^nCYouXmB~z@jdnViN+;8p&J1QUi`jHBhq=sS zJ`3n(A&Xed5|*-z<*Z;Ot60q%*0PTE^ss@AY@(OVY+)qt_A{fSSA{oI*MlqTwq8URBv5X~-coIk?iDXh3M=EKI zX9DSDkVzKVOeBX~^2n!vLW(G+gi^{Vr-Di*QAIU1)KW)14K&h3GcB|-nJKiPY-JnU z*}+bBv70^YWgq+Lqn`sDKq5&blfpPsNn<<{NGF3#vdCs4IpmT@J_Qs~L@_0lQbsuyR5FPws;QxtI_hbl zktUjHp_R!@p^bJrm`W$pn9dAlGK<-CF^9R#V?GP$W+97M%o3KejODCgC97D?8rHIo z_4KfTjclTq&1_*S+t|(ycCw4z>|rna*iRq*9N-{_ILrV?ILa}ObApqcVu+6CP$C${ za3UGONJcT5D54od46%$Qj(8GCB#C5F7)L5;jAsJrWROV~*-RvdT=K}LfI^BWri4<; zD5ru-CQ(H-HPli^Jq0}zynZZnEF`F*tFqe7EX93+TWD$#5 z!cvy8oE5BO6{}gpTGp|i9yYL%P4u#vEo@~Q+u6ZRcCnj1>}4PO>7$%UI%wCxJwgNG64Gq>{#XCXh}BnPid8 zL~_U_k9-O!q=;flD5Z>YDyU=KqE~w(?TngnL-=wbTE}prZJrv%w!g` z>0%CZna6w<(9J>?v6v++Wf{v^!Ae%Knl-Ft9qZ{~0~^^yFPquIR<^O79qeQmyV=8D z_OYKn`Z>Ts4snv5W$tqT}hPA9?Jw0q-Bb(@D zGh5ioHny{ao$O*ad)Ui9_R~i{2RO(f4l}?Jj&h9SoZuv<2!G%oN(93gP9!53$tXq> zMKoiGA(pYk5l;e%B#}%C<47fq@k}6{3^K_gn~CI*OCI?YP)HHQlu$|;Vr-4SAXr_f$CNqUL+UZ~_olIjoGnmONX4AzS<}#1@ETEf(EMhTBSjsY%vx1eZ zVl``6%R1K6!v;38iC#9dg{^F3J3H9PE_Snrz3gK@ee`pHgB;>8103Nf$2iUjPI8JN zI-Wy`U>L)RWCSA_#b~04W(+aJGL|^vNg$CVl1X74siZNU38a%jCRt=NksNZ#BcB2a zDWaGXN-3k93M!dI71h*GOC9wz&`1-_w9v|ArqD(^9ZaQ@X-sDZGnvI~x|qXU<}sfI zbhD5}EM^HyS;lf!u##1*W({ju$9j6$z(zLF%VxH)m2GTi2RqrtZuYR3ee9=?ehzSu zLmXy+BOK)z$2q}CP7%J@HCW>gr5JN0ui6fo_5=kPN6vmNC8snKj zIvHe=MK%-3A(uSzDWH%diYcL#GRmo-l1WriO%1iwQBMPnG|@~8txRSLZM4(DR63c) zbY?JW+FM{l1DxT6jDSnC6rP|ITchgi7Kk8p_V%8X`qoN znrWex$xNY*b~>0!C)1eD3}!Nm*>o|7xy)le3+QGci&)GOma>fHtY9UpSj`&NvX1ri zuz`(iqLj3I_t#u7(72_%w4GAWEBl{CgPfpjv+B#Ue&l0zj^k#&{->P6nA|k0tvK*+eg!*}_(~v7H_4WEZ>H!(R5W zpFa9Iz(Edim;sJ(lw%y{1SdH~c#&@?5e#EEk&Iv@qZmyT(TpL6SjG}ZJP9O{L^3Ii zBb7A9Gl6t6$RvwwCXz!gdE`?-Aw?8ZLMdgGQ$Zz@sG^!0YN?~11{!IinHE}^%oN&a zr-P|R%RJ_@fNmDDh{Y^nDa%;S3Rbd;)vRGH>sU_@8`#JudfCht zwz7@w>|iIm*v%gHvXA}r(a!-6a)`qWaD<~A<2WZc$ti|-A$TYe3}ZNvj9?_A7)=z> zj3I_t#u7(72_%w4GAWEBl{CgPfpjv+B#Ue&l0z*l~0tzXj zm=a1UqnrvVnM4)U)KE(u^)%2(6V0^H%4DX{Mmrr$rITq)X9hEw#caBm!(8Sup9OTY zkVPzJ2}@bVa#paCRjg(WYgxy7df325Hqpywwy>3LY-a~M*~M=5u$O)8r;mOPaF9bB zW`H9cR%RJ_@fNmDDh{Y^nDa%;S3Rbd;)vRGH>sU_@8`#JudfChtwz7@w>|iIm z*v%gHvXA}r(a!-6a)`qWaD<~A<2WZc$tgm(XDAU2V>pqFU?ig$O%&0LA%C9jzvzSd6bC}CK=Cgoq7P5%NEMY0jSk4MovWnHLVJ+)ePY)Z| z$R>K(%oet?jqU7UC%f3q9`>@2{q)h#0S; z-+coAttHt1h5yIHOM9PwgqVMbdWC-%#d(b7izIO=XI zzD4L6zC-91zE9{Ae#}r^vd=Pt&lAo0#BmYHT*i2=B#Udv;|7ZPCKcRD4R_GU517mY zgr43{2;IDg34OfB2pzoN5PEmNBXsRvpoc#YI(4rSdUSs!bm#s~=*#_!(2@I)(2F}w zFKQTPFp6`C;R_^i3FG)O>3ofeTuTApppe=zYCM=z9H!Auj&YiR3JzIFGS>kt8l9 zjVs9HYI3=rB5tOf?@-P6Xy9&Ixu4LX`Z1w5^>ad3>QTCRg3yV2n$UxKp3r@Inb3Fo zGoj=32BFvVHlfS(E}_5l0im<>2@yIgpJOCvGlmO@=VDU0oC$oDY`#uDH&Vj4sN^PnJ(D`|s(DQkc(CvAK(C2xP(Bb(bp||rIp{w&I`}hZ;lk;yv z59cF7_vSPD7sEM|(VR;x7m~=ANaZVJa1}XRMmzb5omo+5Nqo+I>9eoyG4yh7-oyiVwxyhZ4lyhG@gyie$pe9TZ?g3mI7&lAo0 z#BmYHT*i2=B#Udv;|7ZPCKcRD4R_GU517mYgr3Gv2;Gc_34M&m2px>y5PBECBXliZ zAoMH#K7|2!f4{xTu&{%1nQ{S88{{cS>){ar$S{R2W~{SzW& zmOsZx&Snf35YNS=a5)qBD%pIUd~T$KZ&Ar@)N&_H+`|-pNXUZ!l#u`a1tIhOI3ef# zBq7`V3?a|`A|b>5M?!A_)j|kc8&&b~n=S)U(F0oulB3~kv zuaLo2x9hlTZEkPJA`cU`-D94#|)Jv{VXH+Jkgv_92b$yWsK)avbcskZlIWNQo*g% za0iY2fXO^S$m#xskj;IVkjH(Dkiq>8A$R*bLe};LLcaD7giP(LgdFW(3EA1d6Y{eE zB4lJgB;;aGlZzb28I0l_V)z0HT*5fMOgdj4s3HiTY5Hf#{6LNk}60&{I5b}I45;A;$B;@v9BV_g7 zB;@n{LCEC&n~=l%h>*SejQrJb&SW&_63c}o@+DIF3K?8Q4%bo0O_Xs9ReYCv?xKbJ z2>G@L37NK^5pryg5VC8(CgjzgB4pH_BjnP4PspOZLdc)JPRN|SMaY@GL&%oBPso#f z%urdP&oY9~6V3U=aS_Q}#(1tIi)+Z^28#J672HY z8LZzBa#z12WUXEx7EzqXSiVRSmy*U6 zWO6mRTu%`-e3=J)6csM z@Bt_Igotxo|BU2p#&7}gTucg=Gl8#?&DY82MoRb=mE1-xchbZ?OyP%g@>6E<3+C}S zi+GadJi{7ZWCMR>3$L-0H`&KOILN;_%14~yGtsVp&SW&_63c}o@+DIF3K?8Q4%bo0 zO_Xs9ReYCv?xKbJXy-wu^E0}5ga!PXB|ODSo?{)qXA`fmjn~=DTlDb`hk2jle9X{u zUH^>W^F(t#aa=?)moc6z$>JLFxPfB6Nd>o3!yPp8119qTQ~3!qd6>C8#zKC>GJeNu zUZ96Ru$foc!C%?S-#Ng)IKqdVT(!@PX z;fHkcQ)clC=J7a-c#`Ej!x~;>1Ak--ud$Oi*~dRP$iF$tN1Wm_=ezznlhK?@EEkf< zmq_I+WN;NZTt^`{QN}G)@m=bTD|nW*yu?QS#8&>oF8;=T{>dTU z;~4)Te53z#A~}mF&SNZJB#BE&;|emlnq01@h?^&B& z_!gDiMlE;J#63*mhjj8&X7LN=@i>cklI1+Z8eU`re`E`Ta zu7A#CH0Kh_g(UJNQuzuQTtyDoQOHe{aSK&^mwN7^h5KmdL8kLFx_E>I{F)^^#Y&!I z9lvK2udt2R+09$@@eYT1pW}SY&3ofeTuTApppm-Gv$1TYQ9GUchk!K zbns(l@N?$yDBV24Ql4fN&$FJF>E+LC=MDDoHvPQI03UFIPl!lx{WFrY8N&s{b1^Ag z&IGv@@8{>*mXU=MH8&$|rp0Vnu`h)Z1m zjO1*_Z~^gLObVAXfv=Ly*U9HbO86F)+(s>T(!@PX;fHkcQ)clC=J7a-c#`Ej!x~;> z1Ak--ud$Oi*~dRP$iF$tN1Wm_$*zCSWHjdz%Y`KJB~tkc8C*pU*HOq#lyM7He3yFe zqJ{ft=Rv0PGrD+$1^k*NJjF_$V;#R|6R)t1*V)Zm^zjadd7tBa%+N2n{u#mNiROIb zxQJvfV?0-q#Wmz{1I2uk3T~x_J80wwOy&Wm@)KtAFmri~h5UwP{EpSUKo5UlGq19P zzp|IVbAW$wgbz8%X(_IM&R`Vh5W^Qp;1b61WzzW?6S`P7k^_v|Kt$wag6^E!ab)G$yr2k9%K0;NnA=A zSCGloWRKOOv-8T_0%JW4lDu#~4+#q+G^WqSED+j)aMyiGsv zGQbC%;1eRox&9f+*^J==;<=aEx%(;up;0 zaTf6;%Xx-1yvPRr$QE8>CvUQke{hh0bCi!b#b+*a{c|RxIhR;2B#|$X%2&wXDss4v zLT;jrTd3l@)N>at+($bPGM%5%#Um`>*DT>FR`ML{_&u9=g>AgfZr-AgcR0-Z9Oq+( zrn>$a!RLwQeB!u>WG-VoSCYjwUm~!87KBp9%jvp9ya) z4qt-|ei}T3!NVDPEn|JG;1g78Jr;HSYe7_C?^?mnm!F-=QxVj}<*X&_4sT%xy9t}a2RO`8{zKRr9!c03jwgjQ z(z%Ljxsk9X9Cn27J8iYrMf*^z%Mp3;1)K#kqtH;AFz~Zzk7p zBR3QFe!oX6KW8aV^8#VFcME&zV}Or1#b-~~GbEOHE+Lf(WHOOYw|Gn4uHZKA;4a$e zE9vV*X-`ZoXMUwptP3>)EbMigHlfv~HZM%Ysg8>(SH^;YV*o3NQ0_EP8Y zIAJ4o1uyb4VH5QY{?5A`E~k2wS7i zv4Ks5jnS|#8n#8ld&>Wt&*#4qb~nTOIfuQ?u(cU>Hp9l|xm-XJX!(lfwyvJ~OPvP)>!eK8nyk~IO$PD|KDWs9X zRpd}a8MjbP*urd~lNodob}yH(lII9pmz&waZr&kmTb?3pTAoP^$%OsND+$|`H&DVY z+)5oy+)LQ1{1FfF=|1I?Zij8kHN40MHnEf4yhYff3|o{(30st>`Qq@ioJABdT*PHu zLD-!Po0B&Y_9kzkim){qb|!z!Lxf$)g)C(yFVMqgwy}%7^l^yyIl(ZSi;+YVL)eT= z=5oSbWG2^e10|GGO&xa=wjn#1$vnDQ%re3j^>%vLfCt}id^!!iLmo{I}NmOKOIbCHuDIZj!Ox9j?eKDVaIVBd+29?k2u}d z;YiNrJmR^Ou+Nyq*9qH<#oR*JWUQx=u*W!+u)+8!VSh1fFFwQX>E$)T*5W??#c@7i zm`%d737d*>ggwPnt|W(I!fxVi)Dbol+Xy>}VIwi@BR)ykMtqJQwh;CZ!xrLx!Vcn5 zPO}+!2BV4Pi(E?BI=q_e3Hye(5Vj4&u3;-3Oygm~j$zm^4Eu%8^D=)TY!-&S!hbTr z2~IoTHAW2aBykz(gdM_s!Ukd3AFQU4d--&8aF*MT5jF{yTe1lSMA#Co2y}f&A<3WDLaDj&q8Lc=sjIT)@SoawS)D z9XE3;-zDt8g$=k)9wzL*{hF}(_6%X~?PbEw+v~i|0ge#9ArV2?bUT~#Ng$b2!iHNO zVY}_q-L|mV7WUfiBW$((l!tkQU$K~{Sj~%sUAArPVjsu&n9nBo8i=sDmdIsXK_(L^ zp!k1d?%o6ADCJYDE7xrL( z+BlHq3={5!77^})R%D)V|FdxKv(xx27jXsO=Vor_4}|-gJ;;+h%Zv9C6WEd6*q0{W zN*Aj+oEbK93?Je&!ad2($`Xj;XY$;_XNpbGeX9_!?JoEkEK`YWIM;$IlP&cf!4&w%T8PWjkKap1hf*bkap1gRJ6E zBJz~kM7XchNrd}3oyoa`dpUiTZ}1&{$SwSaKk^WN=U;5SL>=bkyq0jUracMwX$tpf zI*@RGrU6C>_hvejadL$FGKG6G9mmOpdoi6wxEIqG_!5`#O}@(w+{`Zs_g}i32Y8%+ z^Zcdya$d(S?7{xD6Yj6n$1tmS7vtn9GtaSvdnujDCpd>Ma1r4iN>_3n;r>ZK;Z}al z?|Fbnd77{={zA6pHN1fa_GEurIglPwj4;MKnIOk3^Blzo`6!>_TrT9Re3S3+18(Nm z+{L{-$fG>NHck3sUdiidU?29Ug-+fzvWi0)Cr_F8avUe|QO@8T&gWvj&bPRh8@PpE za}N*jDF5U?Jik?4;nnQOuI$ZzETx@;Sk4fKGQ$Rr;y6Cc>3oW_`68F{O}@ho{F2{s zFAwr4|6;2)`N6ilmR;C`{b=GqdKutg##m30d5-2pPT}KxhV!_XuW=1G@hk4;0iI^- zc6EaPVS9FAFB&<3UWORsFpi+eW{&0rPUACN$k+KUKjdb9#hu*CgZ!O;@xl)KWCwO* zZyM>Ohatvz7Zc2|kq_`O&g6W)!sT4e_qmzd`6Ku9S03jXp5JMoyoQ~5BX6OJ4&F{L zDMmSragLzGCO*i?oWW-}pD*)OuHt*##Lu~tKk*Qc@g&dkg11Ts+wppK=glwJ@Ixq(~wHTUo!kMl2{|2A=m?RXu#@FrS0faPR3oM~p+ zzE3$y4FI ze1H#eGNG2$CvpA-{D4X;^*AX zo!rZV{GF%Sx?9}irM#TivNvyGDeZKTBFz}@WP&5u!29_iALT5*z{Px>>$!=ab31qQ z0FUqw{>}4ylmoBf_3X+X>`yyyr-v1!Ig~8Z%(8*^^I=ZoY%budT*-CZz|XmZKX5;f z@B~k>%`)|YZFv>1XHWK{nFHu$h%qK9P-Zhna{?!G24`|M=kX=J&Q*Mmo4AcX@E0E9 zah~P*z3K+9U`KXk58llFbaD{A46vHRSkIBnR~_r|WIoPWe4elHb-u$7xRIao3-032 zJi@yY__#|g@0hjW1zRmafF}LwM?&W?S z<{$i<7xt-_Y|qZ@!9Fz7#sTz_VvIwHm|~U<9K*?cjB_}jFLOCpa~(Hw3wQ8G9_DeL z=0*L|!1lbJ-FOp?baD_YIhc2mrAUQ&j^!jy=NvBN628VaxP~9_Gj8WD?&D#e;6FTn zg?hm&*?~8(2m8`QJMUlx!>r-mOi`f1dpUuVIfJwLJQwm+uH?J?kej%Tdw7t?c!n3Q zG#=%3?85Hs!~V2!5X%@~HHVUAhBBLZA0OaDe3;WYi*xxhmvc4OaU-|zEB?R(Ji_BV z%~mOCVq3OnC-!82I#@UQxvFh6vuHQr}7ET<%@ioukmfZ&yC!|?cB+|Jjma9 zivRGu0cFH%*@ZoL3vC=kFDXVC<1nTuvVr$;Jg4#r&fyDuiEr{fe#$TS4R`YZf8$BQ z#a1t3J9c9q8fmASK~`}XS!UVD`#7FcID^k|5m)dXuIFZM<1X&wAs*wOJj*si`g2~z z>)4$)(@ZA^(Z>jf@NU*K%lkNvlQ^BT_#$8Cn|zlW_!+lxH}~^5{>fIuj+Ms5={N$d*R4o2H60(ehF@J5ih&EEY@Id{mei%tbS~!Ag0$IGN36=5qOs*?hjg z7&b6ciY6=Bf$-r%b}&1!zF3+Vp3Y_q*|BUiHrtnVrcMig~*(6)O{?(NsQrWF?yF zE#=0ihjN8Nb~>6`;SJI7#;9B_4rDjkw!`W#7N@hNk)r+eIHc*7(fIUSabsb1wiNXh z^AqKD^Szbzk`N^a)8qZ+VqqZK=)=jsz4;lL5GSce+6v=S*|8`;mo1eCilpnv4q7g6q%9 zlX5vbA5zy{oF1Rb%@qgZ#Fr&~;isYO#_3#XS`LjT**+Fkri(MV@)lbdsDy&-3FTcV z$7x7Pr+OS?(R6MuN;yui_e^E;c{DaJ zp&N_EiSCk;Dl~MJ98^y9TekNNQi^_hBx^t5a1JQK0_BfKu7v~x>bJ3jRRL|$8Y{Vy%cPASd zR5_x8j1F~iFq%((Se+Z6E0*RPx^wIDDq1u%+h4SwI0+4dq1+3bbJ=CtLX^){H@7UC zpNkq+I@++e{$eE@e3HDLs4y2=XZ4+SwIMfdvtgHNOu4)XEcD~Tp`L#XXAf2 zW(yu`$8&Hc%H@-fjYfG5+H1?Q(S+P7*N$q?@5PPr#>&YNW-4=`7`8~>a}Ff5l66sG zy4{s&Z zv-ydY(X^1WzM(r3q&1U;I$BS`pr?y*uKa&F&e2jdAuGZL7aGpOPg~}H(w>sUcjvW^ zhIBNWn<)282{(~wTWvwJ*;H|IGFK@~rou;x>yzVBtxI#8lLJa=D!KAhAqwx9D{Gii zP^OG!pmTVwT2 zVv|T1zp`aDa2Pt*+NR>#Sp8*GXwjMrx(!Da&D7d=_2t^Hwa4nyNlq$)S>ZCtm*lB> z!>E0J%Nm<0>J%E1Ozo@Wr|mj94g-dbx#>(rmdep;K&&M(wB5Pz!od|sQ65qo7YaJr zZ(Psgkw=o6Rg>a>ZhEvRwCYlF+H>53MvK$wO1Yei3Jrrfj~c+d;6A-&c0IQYYQ?RFZ~);>2XO z-Y)8UsQ<8KYO9gF`cQAj3t2QcKCb>w%_pBvx~WT5|e zFKpDaPAB1d%e^Q0U+wFXmOZW^&l}3by`q}@oN8Xp#Uwz7POE;TLzUc-<;vVLxhH4U z#(H(?nW{|YqUl<#5=!*X)!*uGs^&nC!DMkmR6FYD?0w+?CrgH!3%OKJMfHdl$BYqO zb3<3YyfJjq_5E$}#^BA?lin-2YaLne|VQ`z;#tv0mW z*gA}L;{HsI8b0Sz8*`IMr7KQnri6dJ*idMbp>ONYMn;BHxk+IpDOLqGK2o`-;VKHgt9MV(->KsasCX2kV{Z;CO?;Z-m;=UCIe|nOxrZCVuzmRJLJRnA(*`OU3yx?VBIWDQiX6 zTd)mNz;f1HtWYfEA`_Ub>J!h02F)-{L~@HaHkd7y9DOnZiVr+3;uuoTgq|p5t_(DB zjN4*^ncqZh%c}~WR@~+=a$}{KqD>`JP9Lur5X}uo({bVl=fjjBDTqEJ$gGOCE?b)H znh9HuLNP5mz9ixpF-}xtkNOunwRrF!|2&+}ZW=CS%{t<=E&8!59{#CZ>Fh+9DXq+| zUvE+wrk&G z$T6rP6Um%@ec0`im67&gn5)mp&ZqLxj0oMZTxBRr+{WrOav)OP_M5G4z>H?DV%8Ue zQe4Z7SU2nQ=b{mzC1kWFwQfF{Yo&|h(>=u_D=Nj}deSwKHIXi7*HucB%cA*sx|%Lp zqevo?iD*`YuUt3UbGiv`n%N_o(X%baz6f&3r4N0aZ&RBOq7T8p3!& zJj&LZP+TW#`&m{rJ)BrpSzjsjMPW9$MV1>HPO9aL+GD+Cj#!3K-{j$#63mvmi(y@+ z+oC|W5SQdaOYPI{%Ok~&(v$2XW0hyzQpH3mDpxB<^&zZH=ofmdZS*K$3qxXAw6Oo` zVTD#&&6K#tCL3H-QRC5?)bE&v0Pamim%JECGp4V zMS0x1$cAh^r9Fx)UgfIh;!5>%b}Doqp*8O}SW$nAwb-WHFORDQacH)jFr#VqmggdS zw7g=iX|lQ+)iWh7&&@=&b-7w!S1q)#ozUwpo^3mLIgSU|cafPi_zQ{t=d@bCX0%QwGRbEv87Cv4p-gYqAneIA?m8kBrA8d0*vcLJBr8dK ztulmubFLf@#l5Z~Z_ymB9^}d){c1z)C*@WSp>**Z>jQwe_eT^3#$(AiN!F3WjKNs3Cn^=g0JYle z=k|9z&IgP|o2>f}WH;uLBDVKvLJnAz)5kp7XQ8!iM-HMOfVTdsm2kbGdP= zulW#0pf5cREOXG6A) zh`@3F#cLDEX6v7h+u;^_?5-3FV|r43X48lsz+ZL&>mR-MbLa6`B(3VDwsLP6|!7<6( zWjZ4B(1~nZd;?w!4YN7}3tdV&Ye_Xuwlh6p02&`(91slTmSqb*zi_mR^LufwhAuMn zQekiyqCvHu2{U0>uqM>Gq%~McHC;8ilV_rf!Kg)3OAFo=Ct@%+AVs3xPZm>LF=g+fwlLR6t*{w^!J3X|sLwHCG} zny_FN?{}e!kJ??*LUrw-kesKkqG=p{=R+fI=+0NxuV1Ks)lbH; zPYbeO8%+oUAvDxuOxo~SpI_AkWD}UU9?yzqD~x!noxyCW;$%*k{Pvo>r>3 z(M-j54alnTHCfx}%9ZAmE;6&x!G&06YGBbWMCzW3er3)w-$;HwUKt6~WG|^SwNYTL zaxQA*ayedNSQ0PmTak$~zN{MzMG|VF_3&y_OBXkVT~^zHVOn-3ECMEhCP|@%z75&o z@sj#Boi%xK@+&IM#09dbC*C4DCiP}fqYV3w2MH_9Vj?+WepDE>1Q{g_p}PNC!%MoA zes!wa%~(nhdE$K<8VckM64I|;RzJRQK%rR_x@NPRx+{*E1N!_ePzfj=ID(mbi znaQbdwLY^RzLSuVj02KS_Zg{0u0RRP{>h%>S(^5+5JX+zU{W5&2XWF=it3=x%Fe9w z)ZzLI%T^0*!kVYk=Gk&jKJ?4h=&cpFmLp%BH;0L@s0j;m`tG@G^`oIt&nKrH!sybW zPt+d0BOW{T<%1z`wYDkP@_yRFR#LsOAO<}j4dgx1HslL9Qc{-9ge z=3{oM^Q#_S7#O=kr4UX}B(bX7vB#T9Ug(-PCYwu#%YfqHsHQm=^_mlus>76wus837 ziBPfla94#(4Xo`)`N~9mjgJ~#KcrRRlxMB>m?aepq30XcorP1jCD%qR1nRDJ_8it) z1kd%+rusJi&p+72K-M73W|K-5mN5-pCdx&Xz$uYgr{;?xjJR57b*?mN`dFI`nKW0g z_leK6CfT~>dy=KDP#4A&bQ1T%bu-eLbA3}uOxDZ`;bJ1oW!36htuAAh-W1gMbeH}j z&eU4Fu2rOTZc}x5rd@_mpk_Ja9hHs7!mkU3mE`zTs9$!kDkwRN0Oo3j4)M{a%p{Da z?QWqpgq|Q2M?E3QUP2U$3uSStIxUT0aY#N8EVQ_AJ~5iYc%)nPCfS+?AqovSs|UU57Wo%0$-RN*QmN0*P3SE!{r z)P)9+RGMmSUTAq;Gb(m@ZlSd;i;{t*6wTDeS6wB81nbLUKvG1DUmOhA&~3C9Seg!t zfuWO;FRs`b%jQZUNs8E9B{cKClIzjt&6SHT;E3`IW8+01G8&KPlu1(!t-N-ymOj=O z^V19Mws*#m-D#OE%CVMn_3nJ3;?-(LUzCqF#nXlQ(IgQhd^Qw#d`2RSc0%6Pnnyfj zj|Q_=+8v)^?2@s0NB& zt4-Pvab0}!XTYh4`7MH2IK3zy%3f7T#Ho$bLdp*o!PWCorv;pqDTKP6nagHPQyNC& zt0CjTi&cx|O30FYJ{t#gr{v;umWx`1F>TUHRO$Rwabr%DUesVsq{IG9@>J1ej+*3b zPn;KV7P&AonZqf+k_*vlW3}i08rC$bA9k+6@==(PS3AmuqVExmHz)s8j4O;OlYVO< z&9$ZxhuwN*kX6$S&bEb>19Q}w@|KmSFCUdBiyNJPOe%s1B~m5H3DK(G7+LVBKL||K zn7m?xt7Jr}hQ4g*ot%g(g&?z0HpSWl%3n6hVnzud?CQJ2-myASe%_l78HmnMl$b@-lMYZTxS1W;YBcr{j}@+Jw&PKTFce!T;(EfWIiW!2rot#9{7_wMOKOKBn~6eiQymS+ITr@&U&%_JG55U0|`em%VMXXr93LG zW=kQCho4-xZvZC@i!$*E%-VKLuCisXhO;U492*o|7c#atbg=PiT@>bXrQ~|ZP$s?V za~SeP*66b;bG&Z;lNFJotr$GZ-=r}tS4SJx zg!Pz3B^j6I>uCyrj_U0$zA!IEY#&LGgh0=4m#o3-5q#TNaNfPFhf8$`O z8!(J3`znBIyX9aUrd%T-wmM-m6)yXVk0WUbaon;h<@%*KO^c4DdSc7K$)kRIvp3Zo~d4U+jvf(@_%NlI~_~N;L?Px<3ky%HSXzck*vR zzPOws=}NoiOWjUss?4?U8%oD@FSSDr%X7NPq$lkuPR3VAEYai6%*v1@^-ixlR~B!k zwaBnC9G2E4PzPAf8Zr0g&DLE}zB%d**%gYXz6xrst6~%Mjy`cS=Mu{PEtvohZwU@7jRe4 z8dx~eyj&U*&ra94sChCu!cgAE08z%wz(^w<20AHY02OSmA)F8xub#TiYiZ8@aJFK$JR`a-ec-7_9vmz2!fjp6iNn4$UFk;|IL zjowPx_{>QBM(bE*d60Bf;fP&bv>`0*k7t!a=m?XULNYZqRj8ieaPjR_zt9tgb1uTp zhyH6(N{mUZq?wY(^{iekCv~84z6)^ zh21TjR1tBcFxf^jGO1qRrkhR10XiEATWFQx5}oX_Fpduk$GJ~a$eI~OTJo99E>$xvtqA?!?eb) zU6}%@Ym^;H9mrTesh-QI*TW=4RZHBtA`6ruT&{3Uqtgf`aTOomB0)(NjH|sx8PnG| zY1PP6FXU=PtUknnvDY=5)c{{_?J8R1TbnAK9Rez5OTB#6b>nn4 zY@D`*o^o;7Jg3J9M-uAe3R6q%E$$$@W+IoKgm~|Ak5V+BWP&1z3uB?otEsJ5uX?Vz z;7s<%DXAZEJvH_wv0ks%q30xMA(k!b!W5I4T5>VSh^sV0_ZOzQ4Px_zX|l^utUpY~ zLl0etuiZNLXw_{#zWUkdLoDCuAJtSQl|yum566T`XPER(aXDoyE$C!jryGUKZ!B2) za2PwKaxzM@naXT*mCKrmhDsLJKEfJ)7z@^yOB__cbyo8P=L=ka5l;x>RS#Dg`+n_6Hgx3m)3gKT zVXhBKo=t`YwKRllft-Xbj8wAg^2I*GP3I-Dy65oS316J>C5pItmS?3UImtW{B6e-n zBiUxipYV}*=khihc2SF8>CMsKzh2mLTfs(&I$MI3CSdBHhkjSJvi z0B+W4c_GvSb+o!_WXNAO@C@}V84<*D#QMf0D*l4R=*D6)D=~elFEuB#k%q9ba+lDW zD|8#43+V+_v*g0>++^rW;(>`%Cn`kOv}KC^it}IkTu~xkr4Q#dt&@k8#IuNSAyT+7 zCnV9g1&mrk%ZWGL8@>fUw`AB-qDC4IA{GuMJ~f}!JbbMnTw)r&QnIj}c*&zOk#c2w zEvJ)QsaD#s^pq4`{os>?F63l&x1l*Cne5QZz9t?@T{#))EUK8b8eH9c+;qmY!my^9 zJS;TI_}J>Z9m;Ji&aDw;>qQ-|*GjT6UPaIy$2~`~8lIllT0*;vcafwHs${7Fa{#?m5`X~aU|zQkXoQD9$;!h(83LzWLd5Wu`X_@{?`%nuIv91lyTVZk6Q7=@rVV}4bOtVu0i9=?!KTIni- zg)M}(5T=h|^-aL*)!@SPe^L0hFgabGH6bwoHtyC8jq4|pk!A=w^K2=Qe<^#pF3t5l;vG7k^;jtDo8m>kpXhRUWg7;vW*em1`-Fm#tRJ=X&z zaYH&Ax(YcL1WA5_j$kgEbPDm%S@_wwUN6vVR$Du=?uvnQ()kTl#`A7y;INY_v5<`+ zTumfVI0>;KGQ@>rzGDexS$y?ll5Y-czUU?p^c6TanH z?H21-533FFa$a(Nd0n^^(doPp?#1AwFIqJl+Ukgr#7xvDD2FfH3ctnaB@6F#(q*IN z&2WC-@_=jPtB(tFq-F6}CA;SZ`1)#x>fy*N3{8f1AHLyYUhQh@c+p}`@lF)2A1Lg+ zAm5u09eHw6u+J&9q%V-q@#^j+J{211g!-)ggVF96b*!_Z!MY7?^u*tk? zWcaUeO7)8ullgUjd?87w9SYD{kjd=I$ahteFW-e^4w%^%HW!CyoZ7W$5vulFuMyB> z^7;Cy3(Hj6L#TQ#JBug#T`qJ;o;50P|*@ z>nveC#Hd2qhO%)>7$q-Qds5TxE@rL8rzOY0e8RU}LvdQxOwPenzoFt|3qOq}s~W4r z)sW(8xC*X%#-*D1!m=F27%HrgQ zp=Y=rV}yH=cu+p!Alss`VtEUnS$tSnB2 zVQICTlZ)|^@rC)qtTWHPkQl0wHaqTpwJCA^v35=*Sp`(vi&0q1GJ35BCn3fXL|AzV zr8VzdM6Mj7UpbnOYr{e|*YZ0#_mbpC_~K?YuWJpjs}gE~-@>Ks8hH33p5MYkxIKjL z^n~xTRc7PE9?g#XUQ2drl`k+j2NG5tT(4(}QY=-|vQQk((&e04%Ny9rfn<1_5qEP% z6VlLUg<-8r$|@7Ji|yomE*Uh1Axu1CA9CWzf})G2d|)h^Di)Kv7-zU^JLRa2>*`#k zZ#tdV0@tbWE@u|@`LxoUguN7SwFiDhtMBipHNQD1XVA?u5Hv^n0&KeKnfwRH*W#X zEGY^amQ>%fWKfuN`AfC$5jrHQR`(W;K1{#03>}cGi`^I^UaoZAWGU_;wPBNp@D)Z2 zV_}U{V5mOPQw(2PDD=)bhoJh@t_2C_J4E)$Y*)p3XyXKNI82fUqR`(tP8G0rqBi;Z zaI$*2-1)8Q?T6y#-|rmhy!FAbY*4)uRs8*-Fi07&;gTbcJH1p0$Dt-y*G5&?Y6`+? zRk)c;e4V8(t~<=?!b+KkFaq0U6?$gZev?k+9U%0Nmx4!jm7m|sYnRrAN zPb#a=R1dtC)LLq)r7-ILW~MAgAikbcO=uXIH2BzfymVZBvbr^aY9dUImX#{;5?dUD zM|`=*q#%q?tGQYo{EC_mBgv%hXx%!CT$9FX8n-hlMRNdU8_s>NaMOf2-+wlqP+_Ly z9A7WPlN?CuYiRl*+VzENT#Qzn-z>xn4E^pA7wV%L;1+V3@J(_%ar!zQJT1|)O2CqE z-aeegv_!w~ZMkZq<9w}-V+>o?Wz|Z0bLFJj zR2MvJ!zJxnrAlrW^MCQDb)S8I_07Bf-+bu*Pw&0&|D2d>|IaUP@#-tW%@nKud%njP z^FO?j*YG;tKm&X5Cf>qQ+&X_Nw^rZEt+ls$2X3poRX^eOnBg{!qa4CJc{dYGas)HX zQf3459K|sl&xw45(>Q}OIh%7ipNqJJ%eaE8xQ6Svo*TKDTe*!pxRblNkNbI;M|py$ zc!sUFc8_*m!nSP3_Uy>c?8ct#!+tcMK3EDCC3a$QemE>IELdn zk&kd1XK*HGb1q-tLN4Y~F6T&m0-*6ZAa3A;cFpu&CPw@;}KTjU; z61HVKw&!)cfd=;AO}vGrw9vr;yn|)*GeGzo%%gV2V7m z%(030ax@>{1Ww`@AD&m!q4~xxAR+m&mZ|S z5Aq0)@gz_4EZe+5e(*A0!K>MUo!FJ#*_(Y?LNo2Wjf3c+j}*gX7~@b5XPn8ZX^%z9 zY~($>pAYasKFq0{&L=sGv-uq7aRC?e6)xlJT*RF`8Qj=Q2pS={130>HH5$A{RSG?gE#ROmeN8yZ{zKB5&q71A1j|@(C;IJzX86Q zHH5zfemLvMGQ~9E?}8sm_}k#~9L3Qb$A|bZr*b-<{)z5IoT_#2P&Bv11!+q_7f;iYWLc5Kg%ynzPx;7z=RrL@q&0lb4A z!rvudN%-63X;!nA!&t|9j-Wt^3Y&N@M{^t>;$%+cbi&^-|1_WFJTBm3F6DB<-!%Ug z;qRJX$MxLEP29pS`8B`e58TUNc!d@F%IQ$#+hWAB4sx69^TIfIDwNmh444jKfzg?!{_-TU*ao# zjc@QRzQc9=fE&1pTlgj6Z>|51KX5O9;UWIUm zvJd;wNGqKjNcbD=y{ur6gIUEI-bF-~95WnAg?WzR7>?&eKEi37!I_-Rxtz~MT*75s z!Bt$tbzIMl+{~@q#vRmvJd;wNcfxa zog7FPy{ur6gIUEI-bF-~95WnAg?WzR7>?&eKEi37!I_-Rxtz~MT*75s!Bt$tbzIMl z+{~@q#vR(-KJ3R*TIk>a-oY~ZNij@@F%IQ$#+hWA zB4swPnfGxlCvXy{@G(BYS)9$eoXM#4Y@iU-LWuz`gv1hxi+h z@gz_4EZe+XAIZyj1+QiYc4Aj{XK(gp3C*nav1Aa&k+&m0-*6ZA@F(u)VIJiPp5hs{wh-|G zUc$C)$M)>V&g{mX?8AOE(n<#h@D7&I&j2HgatQC_-Aph=o>}JD#CtiKf+_OMGRG#~%h4Rihd7y!@^L=JXZRdn z;6lF4SNS^M2$`d@rGi?28ZGe}sE!(j@JF+vou_ybmAC0uq z$$@my%L)cLm{qLdT|{KbF~gBmnCB>t;doBuBb>$=oXOdo%lTZyC0xc8T*Wn9$MxLE z&D_du+`*mP&3)X@!#v6pJjF9?Z6Wdnyo7CeC9mOiynzPx;7z=RrL@q&0lb4{^fSN+ zqa4CJc{dYGk!O}UHt}AL<~TmY$$XTL^C>>V=lB8_axq`wGOpk%uHiba=SFVkR&L`C z?&NOn<1akK-*}vV@^7}HSEAn?8@%!&Au$5nRedB+v#RGD;XlqYSwZX z>&Y?0kyM!HD30NHPUK`x<#ayDr}-?O=X@^Y%Y2ou^G&|ZcliM~a1%e{7u?Qoxr@8G zkNbI;M|py$c!sTCt1j>owq-lEXGh+^uI$d&m0-*6ZA@FyPN zul${V@Gt(u^L8*+`&& zv!lL|m+=Z-%?|9uuI$d`x;tbZ`LgU>W@kFv2K@@J`;%1d~itq|8R%!~6LFALPTF%ISQP zPxD#M;{q<`QZDC8uI5_4&yV;CKjRnN&TsiWf8@_R$Rj+)lRV9{Y_pR(z{_|AuVx2! zVpn!&Z}w#g&9w724x)!XQVf$}j6*q`aVD9jNSTeihxhXVKFEhTmDBkoXK^;?ay}Pv z372sNS8)y3aXmM3Gq-XZcW@_nb07EfFpu&CPw@;}J3;vZUc$C)$M)>V&g{mX?8AOE z(n==>(nT*T80279v4(dMktN3rM^a&)qd11+IgyWW8fS1OXLBy+a}k$t8CP%>*Ki%z zb0ar%E4Oh6cXBuPaevjr9%~-;^AkM9zu9VM^??`hGG4)}*@2zdmEGB!eOW>??YxbH z=%J4k!(it#ooAUG%boK@MgW zYj_tCS#r#9Bo*d4ieosQ6Zr_IaRz5{Hs^9a7jX%faRpa#4cBo!H*zz#@JoKp@Aw1v z@)sWBZ#>RF`8QkbYOKhMcp0zY)$G7d?8@%!&Au$5nRedBLG;i^ieWO0aVUo~&Lq=H zc{$s$Jv*{9yRj$xupf=I(#e5z(aQ=3Iha+f;hnsj38u(1%N(0{FGq76AL3*_%ISQP zvp9#(^F_YISNIy=;9Fe7clka)RysM5E_zwPAP2LGHN1<638u(1%N(0{FGq76AL3*_%ISQPPxD#M;{q<`QZDC8 zuI5_4&yV;CKjRnN&TqMkd-xL%@K^rMKlm5_;dy(i1H6=%vmM*>I(A}Lc4sf%%ziAT znKn8(fP?6!mwr+VaWJEdv6jP#m|&74m|>PVHt}AL<~TmYhdG7Q_&A^9GklIOa3Npj zt9+er@@>A$54eGwxP@QxYktQcxR<~15P#!w{>i`DYA<~!FDCpiwKB6hwQ{U4m1=3B zGnHy@PYo_xo*G;+oEl6Gr-mCFQ^U=zso|FP)NrexTbonEZGKq@2lKQlCt%A|W!nN`bDqX+j7H#QG9whT9R3^#WSx3mnmv<|nm4X2harI99D zXeB(~PRDSn(d&&~Z}hq?q--M9=sk_z)95|6mum8!ChuwTo+j^U@}4H|Y4Ungc)fEt z)$BdZ-qY;0W}j{LTC?X{Jm2DTEj}kzsTQxbc&)|fTD;!s^;Vy2^;)ZKwtBwR^KCxU z=DBbTZGLa}bGye5@9*&b4zG9EW{1yo*j|Uvb$Gqg>z!Wj^jfFSbb7thHafkhvtxK* zY3J~OV;yMp=(q+P&p>C>Xv@;2OS@!L*U}~rt+dfWC&_;v8fl`LR@!K%bLrZq@LFRd z&9q=EjkXe=qKOvT=m^_rS{gssWQR>Y(&QseKGI~TO?Dd6L1TECmXWTN!yen|ptC8} z+O)Q*X>D^zOS6qOd$!qznr*1rew%Hm*@i-L!uG>Uw9rO79dtI2wluG8Y_XM)ycSyt zZ)vfW7RhO`rIvPVt;N>DfrXTYozO}f?R3!DlIm(%+tjkQwPkH*$e~u-Y;9cIYO}32 z+iH`oHrZ-(tv2V^klW$Fo5M@A(LrZxcdE5#S!@5WcF>y2v<{_O5AJDQ+uFLeJsd#T zZFp~+)Y+o{LT)z^jy~+9oenzN((P?)8$&_0OHN2@yAOt!J>Ty0?UK_jIeuJ96U~GJ zZzb%agU${g54j&QEA!|G1t@zD{I=jM0 z{TJ$3DDqHRA&*1Gv=LI&(Ydz0b8TmrB9s!xEiE?fWrri_cG0EkcFDyqb+$`g=~5%Q z6m^&U?+OR$xU02Wl^W?oGYS>SF^ga_B$`<8pdvRHNPn`md+<2u zxxo~NjC2hRvJ&Y^R0bbQ|pmujx*GLRz2DM_Q~TqiaYvwq^7P>BjbqP9ZITrW;qT(J!RK z-o*ZN3u1Y?jrPWjC^ww;dY^tHNH?`)np#&iwfRjd^c<|xd8ECrkLYU+DUSDNdmcTP z)(@oHn=(yJnYNJD@N~1ZG&>sIOjtYG+cK>_tdmN|*=dg< zA@OFDcj%AOovoQhduh$IhHMSF(Iyc#+ZQ(7*6z_p+H6G6mX;miNJ7ErbkiYgbdqTu zpQt4jbhc$$+A?jSfZ9XehCH#wkjQphv9VC3p>TA`ah`-j3_EE@_n7W%&oqa!)pe$I zopC00gkzN4@Vf3Zt@})S2<2i35g%koV|#~>W?FQrX&tJA3+V}49PT5nQ)RTb)2IEX ze~qg~$lH$2OmolLlxUF=msg4KndVGOsyWk{QWFe{)_Ckpsg&r?GHrBf_!-?lEu>nF zl`^UJj7P6^(!Fdb)t_FG8f;yf8Xg)>rF(}{nZ~A6rnxgE*Xc-QM!JXljD7ml%|3Oi zPa*ed0)4W%PiFP0|9$FtpZeXW=JXl&^cnZ`DS|#3*{6#4sp5U=a9>=9y~ntxPkD#h z+b5&@eE(2o$qV) zITf!@Eg6v30j+jGdI#brtI*<>EbHUnWqrNjP25$D(`cuq3S2d2@9F#rRwR@ zr9(YS8)>GEb~@-}sHc&3I>HZ)O?Y2p3$1v6qxUy@f1~#|?!R@PhFWc?)rMLfM#!jeU?GW!a!EFX;|U21TW<52HlJzpnKqwk>#~(j zPlh51*&MPZ9AHRg*g-oTbheGPgz{;3L?Ly54TaTANM6`o zcvlCV9ZP#UY$cRThh&9=?69SYt)=GzI z#7aZYj#T?tTdGUM>{>ozjMks(%B)OvuUeDpF&J1jGLY)+A5Qfiye8E<+LP)%Q0yBdPSNgHxFm%Tq=wrkkUw z%K)Tw0Z%~Pqw zO;oAG%~U>z%#E9+Qu}{vnsIaUzPQQRM%>J7Ka^u!KuSNf)3{M7zIuc5p1AP5{$DM| zYjJClj<_L&M&Pq?1F+pt`9piJS91HUS9GuWc)jZSXlS5YR$sq+TfI_-D(^EIaZkva zP=CY+1CsFUSVzawrK=6@SFc#w=&^~G)jBbcZM4%tC#$;}X`-1HT4|?)PMc^9Z)j{> zt;6%!g6%Z=Y}hnj>T0Hyb~@&{QKHuc?Az5LQG|@~eZFJDt6t=Ot z&+~olbcCIRH#OUq|CZ92Y&L$X#m}v@)6wj+cx#{M`#jgz+2XS;_TOUvE%Kp79{5$( z#D~=!UZRyYI_Q*bP2s@8hFj%ZtIzm&E1hkg4~cE_e4FD5SxZycG@T(6+r8HAGvT9j zwkwAAv6hgxA)mr=c6h$STRLpQLnBRu)V0a~ke4AZOa%#P3i}S*@`g^I@n0y(P$JE= zbUIZ3rTUhwNiAL7LSL$5tVvinIMubfC)KkuEi9x`J%{wBdIwjhde;gCJu6bnS09pE zzGh{rzgHL-I3(3SwkEZ5`P$UVzP{ATHN&Za)T-3r^8bguy8w^mI2VPzhQv%U^V)01 z;ps7tG_!)9k+d3(w36+ZnJKnoW@dKGj4?AaGcz+Y+xM-O*VoQX&XYg)k>gw*Q8mYd1eM+5iy{|v+8e5IK-EO+;?Qu^dj(hrA^fI-@z4flRF?L+s*VYmD zcXq@B+4O+A)j%9Tvidx@mD$0_q&6}RAu%1Nc@eqE8EqH0ueudZZt!%2=RP{nJqGI#Te zJGSIqm6DoD#lziC#gn;`l^iS357Jf1tLIeQtt+|VN}5N!DQ*Pz7Yn-yNE&u8q$J8| zg*Ec(HWhW7N_cEyqUfHg#Q6%`Kx8>VDxIAb`TQYBZa6w*3|DmsRUDtddGai%qjGZj^r_EMZ}*Lds6>cy$VxoR=ajn$BIZ_1}D zalS=WM%uhI`I-h@mugLgS{9AB(2%QT;;6GIt1J5CsCYk^j%7BbSYe4P8g))BrsWG1 zW95xp+*Tf|n$xSA)9U`Fsxws8lb%ymX;DRKi}fyO1ZLvFbSWOp6yw1x>X1pH3?(fT zpKyZ1xe7TR%5^A(YS(T=$U@~bDacA$HxVosE)FNr%>(OnBEz-i0g;@-P|>Wokdmvye##psEL?6*rMh#) zepZs}Ns&sfC)1N_O1g0MBo|I7z@hv}o3m`V2-SBgS_sLtpp-e~iiv5ilZv`ca$P6o z+_H*Qaup^;*8HT{T3;x-NkNpx{#R60l7blS4ffx~@^euuH8Rm)F+Et)BCF|g4ZI+R@7#!l6=@A z;Z=83t&uSi{YhRepUHZ)3_0=?D27>Nv&nx}W*aoJc0XGrO6YR%YI*F6LSj7>h$uOh zWJ1pJxk92byeb92d^?uxWZs9o`FZQjkIm=DM#K4}nkFMCh209PEl5?6%8P?eRvH#8 z6!ibtSkVfLX4}UU@+8?`brpML6=AQ!mLtnV()rPQqr{nCvTVr$B?sjvO@>1FSdzEo zDaEOJgxB6IDkr`9IPIcO_om6k8SgXRXL<`1;^H6bjXSEnam@{*=7O(fvqY5Qny=7mg+g45 zvT?mwitABIWv4&x)_&^g>xz3DDmFdsadUjF=IlfcE-9PxB*`%OBhQn(4Vjk|7@srp zD-_aDsuYUkOecjR6o_yh%*&YOs6Wo&YCea>6wFDKYK!%0@S-7W~H)UJH}H9f}r6lf~!m0-EpL`k~FRrgRR=r!Ajut)$72OSg7= z?amV3=P43pER)GfWDhdFLZUlk*-WduW2+~5t2>odg=CoK`&QcuZ?cxj<|MSutmU${ zo3+2;U`U5mlA{0iTL_sMGK36aC&LaDiqaR8UGr*!mO{wAlFgLtQputvi~2gH+fRm&U*Y%)6bWlA>8@$@ zP($|1N)LTXPNyOuTRq$`&CVu8BRPZ7@F}xKH8Fg))=Cskp>$!RzbS8aCMjj6C#A=+ zB_+ttCZ)&@C#A@Nq@_^=lOiyogk(+6Ik@DkI;aU}^Ov*cJmjq-Z#yAVlA{dg$##;{ z=Y5j@<`+YLPRL*Dj6xAGJ;@Ezf5}ACf0L2!bv2E?V!uk5ua5hD1J|!D5U2Z9#Zvuo zre6)d;LF^8SCBaScUL(b zSM{B%NyTI9^>}PwTin*wqG~lR?&x!OZ66=k>VEy8zawt+`EtCgsuERIiK?n(S5>5{ zsiJ-KQXzJ%Rhz0F%c^QvRYka}Yp1Gfry6zwwVA5gi}YR9qH0=ITcfJ_Q&m-~ssdHj z->a%XRh8V4@}L8_`CC970Hs_K-isvK2w6}9K&Xv4m%vQ@R+ z3$ipETiDmIeNBm~T7OkjqN)~E4M!OEIBXp)h^k6rRi&`%DejF`NUDNWwUoMORa>E| zE>$h5ELOD>lKoQQs;X>N!-0o2CyUsu%41cJTCz7$ZcwjgvaEVoRb8^GE?M;w@+us& zmOxcYAlX`2TS+^|b_TTuydRV}oQ069Dz?cnYt>X$Qj--aMOvU5nV$3722t$0YFa$< zTk+^lwVBnaDjm z{G0M8?Jwob8Th4)Stco8<|ie|8B9u%@)FK|C`tcEfidsbg+`k)DIuXmCb=KZwDtVG z)2o{8+@(_WzEqk_(3i@3$x)z4M7=Lfjywg5lv1h)UelILTP$s{bRLVQEtEuSR5{sF{kI>8P2F znz_hQ%~HwwOZKE>PfGU0PZVBCjbf>pZYiePGw!U7tlzq5_`Mk-nkuPHmD8pQYcq~Q6-O)ASCoZ@7O&|=>n)n+t8xk`{ZW1Rx4}mK zAIX7{92m)gksKJwfsq^-$$^m^7|DT=92m)gksKJwfsq^-$$^m^7|DT=92m)gksKJw zfsq^-$$^m^7|DT=92m)gksKJwfsq^-$$^m^7|DT=92m)gksKJwfsq^-$pPbYj{N(V zazJR9U;a(v-R}`bEQwtk<_Vh-LM9~fYYh=SDh!Kj7|8NEKIU`2=6gm>WIRJAXKJQrCT3$UMza8mummY`L@dWjRA{G04}FYh z6;@|$)@NfjXKS`&M|NdT_T>N$;c$-TcuwLp&f;7yr6X$+g_bt=!4IJjkOw!P7j)i@eI4yu$~C zn6_W=4L>lEi{*Dr!8FXk%*@W*jAjfWrtP9E!P11dws|6!VsB;Q}t^a<1ljZsvCG=6)XLah~RRUgmY);ypg( z@5Qv8WKv~=shEx#nUy)2moY5FqAbDEWXKb-EGtl^LOV5j=wm#qusUnA9viV4Td^%W zunT*z4+n5ChjTQ?a}uX<7U%I-F6BzD1rLWptu72om$6M5K7%4AH*G)&Ko%);!<&1lB35Q`FG-Y!jsJQ4pW?roQOy-bL6 zyQ=qVur?va?Z#}*)@;X)?8=1rwg-BDC`WQE6XM&R=KWcm%Y|IR6Q#q4!xsXe^f@`>e5a0F=?%@F*A;hld6}ODS%k$|iZppjEKiv#9n={|lR;Kx4c1`;Hen04VS9FB zH}+yb4&pG5;y6y^RLas%W@cw@ zMl*(mSd=A6lc&V;l&R7|opCf7WL4H+9X4PSwqP5!XD4=JFZSag4&x|}<3vv7OwQ#( zF5wEU;d*Z7cJAhW9_DeL=6PP?HQwSqKH@XJ;yZp~lBr!2OvQA}$gIr4Jj~BREXGn~ zD6kAG(85?c>7ti@hFF!=S&Q}9h|SoFZP|fc*n@pIfI~QfWB3avb2?{pJ{NHrS8*LT zatn8G4-fDNPw)&c@CtA6Ht+K>pYt`}Gb+S>WiqB>I%Z^6=44*RurQ0W6d4LE!wR%8 zmQK3prO6i8uT;BDy+tuti$?j#HMV))@;k4*@<1*gMB!F zL-=>c(f!Oez9PiX{fS9*288&zQ!yPgGAna3FJoAk#aWsxMV4hnT4^Jun+5}{%xbL3 zy8LIw&%MODuHYJO;1=%S9vas%W@cw@=3_w?Wl7THDX~0ds&r7Nhd%yY@pCV-?#sB6YX~uPZ{k+& zAjHwVj|X{#39)pa_5KB3CdAWylXrNZ5L5S4zTj&@T-_g;NGI8(gxI=MG7Zxc;_J@B z?94@ou{%EtvIrs0?oy=55wRRAQK6k0J@hf2Ral+1S)YyBoUPf89odyV*_Q)3lp{Ho z6F7x4IEM?kn9I4E>$#cRxtsfWn8$gV=Xsged7Jn7n9uo|?-?c5?4(T2)J)Gz%*I@d zW&svq2~y;USdNvb&`ymW`WVkDtj1cb$3|?%R&2`-?7|-G!vP$^5gfx`IGNKqoAbGd z%eac`xQW}ii~D$p$9Rh8c!}3|i}(15&-jXO39)uZ%_I+)oT-_fnV5~a7|jAK!V;v& zQDj+Gq?I;ex@j=L%B;p(tjmUM%9i|zKeIEtvp4&55QlLT$8jR3awg|;AtBE0)m+cb z+|J$H&%-><(>%wEyvm!r%ZGeIh_(9_-|-WZ=scc`shEx#nGkDt9`EO8Ar@mvQsjtO zj+Lm;PK_S=7|$xK&f2WcMr_KK{E0uaGrO}l`*Sddb2P_u5+UC1S)9j(T*4Jx!wuZR z9o$2RxBD=U^E4se?n}JJTf9q%xBD@l@g*VV?)Ut}#Iv}MGC5N*Eg|;qOw3A%yE{J% zvIrse?oy=55#sMI!}6>|h`~FS4r+uryuCCT&xBaKYk0pl>k;DdZo=klMTp6}Jv*`s zyA$H_?#lrj%wdGsyvJ}nClX@wp2@jf$R%9CHQc~0+`&COz#}}tGrYhnyumwsz$bjc zH~hdvV$=SPDVT;Cn3>s`oB3FfMOl(Gc}gr#nJOLB8Ap>rR%H#=VFNZ{3$|fnp;2l2T6TaXZeqf^696wVq z4Kpw^voR<0Fh2{i7)z0%z%r~r3uEb|i(dK};*YG!I&8ouY{52c&ra;dUhKy~9L7-` z$BCTEnVidoT*4Jx!wuZR9o)kMJi-$^!wbB^8@$5@e8Lxe!w*a(Htp}2f@zq6nVFrr znU4iolqE@%r^ND#-4=u@&301G}&X|9{5j{lxY@=PN>d-X9n> zhkGd@M(-3%&2)q~y)!c#a}r|p&c^~QOo-RJBq_2KC=p`zu1E`2Lfqb%F2)gJ_YN?` zs)YExYq2gHurZslCEKtaJFqjmu_ybmKL>L-M{_(UaT;fF9)IOhuH;&7%Si0P)m04uW^Yq1_1u^C&jEjzFa zd$11&a0o|m41eKdPUmdS=OQlSDz4)uZsRWQ;~^g7DW2mcUgIs^<0C%fE573=CK1DS zGNxiWW@J|8WM0OwFpIGyY4Vg<(>%}1yw2Oa&&Pbu*L=^v62mv^3;rU@vLdat z5z|eB0aj);)?z(2Vl%d4TXtX<_Fx|l;1G`B82-Y^oX**t&qZ9uRb0nS+{Rtp$3r~E zQ#{8@yvAF+$47j|SA54$Od^KuWK6|$%*d?F$-InVVHRUaQe-JmVmVf%g(~gDbTN)T z1{h*hR%b2NWdk;5Gqz+Kwqpl&W;ga^ANJ=U4&?}r<~UB^6wcrrF5qG==PIt_CT`_U z?&U!q69MPB7i-sM9+C@j^r5r!pWS@*__9PT*4Jx!wuZR9o)kMJi-$^ z!wbB^8@$8&e9Y&3&G&>~Y?+kFnVRXDiP@No(Ja6sEJ2DK|7wiiO)a}6+ps-5u^W4_ z9|v(5M{z8FVM3hWGrT{W^SF?Uxr{5hh7j-fCT`^p?&dxoa5NB{IfBEkCgUUPT&;I;2bXCVlL-uuIFZM=Wg!jVIJpcp66v==WX8SV?O6= zzGu`J`N8B&&2-Gjtjx*0jA3CGXKAt&S(g9T@qn+l4>xlgcXBTe@(54xG|%xOukbo= z@h%_mF`w}z-|#&@G4TTG?t~b@Q!^cZAjAotjX9Z@F)YmDEKQaIAy)8mtVj!0+KK5R z#0>6ZfFVNM;MG}+b=iOrJ9sm;WE(>K;2qeR-3T#+_hEkyVnQ6@qrDIRgslxxYXz+p zv$j|iu~xuZA%cXfH8`@NgpIju=ww6R3RG*LSYc{KsTHJFj9MXTMW_{^R(#r#@U;K! z!_$U9o*^J7BjIU(6Sh=n(h#{+097(%$x~z`JgxY%egg4cljzIhxBj;bPa6rxI~+Oq zUy4xM(bDyIa6dN2}@ zR-8<6FGm8>%7p(S0cpjf6^?c|8m(ZoV$ljkD-x|hwBpbTLn{icAhcr8iWVgTtpK#* z&k8>)`fN+3OYB*pXGNYBcvc`9VKhRlU&BO?#GDm-R-D$6n6n`?snO;CrI@oJe5@Fg zq9TmMn;j0hDaz)5<#@9pn5W1L|K51B!p)|0<+KP^xpKz;ZLI>$=CWmBW<{A5WLAt> zA!bFG6<}6;S>a_xmla%AY+0dYMV1va?wlNC%> zELovsMUoXrRvcMjWJQq`L{{y{=MUE9XR@_)&V?~V> zG*--5A!9|1{hu2!R=F4n7&{U$RshlA7^wdl0b|9B6)sk^Pr+iviWMqWq*!6q#EBIq zR+LylV#SCRB36W00b<366&_Y}Sixb%h7}rCY!!iF#f23XR#aF)Va0^)>2DJeRzO(s zV1n5WMR*n9HNezvKf(G1$GtJbtJ6o zNLW_^Dg~Y#3G4cw71mW$S3zCHbQRK7L{|Y_#d8(TRWw(@T*Yz~%2gy+fn3FL6~e*>fm_9G6}DB>RzX|EY!$Lq#8v@Y#cLI= zRkT*YTE%J&+mHJNY89u|mq((sjs$7_Hw0-d5446jt;2C^#d;TuawJ}>Ae6{=OF*5N>{!*N=N!?cRhDoCpstwOYlttmjO_^iUS ziq0xHtJti=p;<*{6_{0AR$*C1WfhcFOjaRTMPwC_RXkSVSVQ32k&vwa!$Y!)$SNSK zc&x&)ipDA!t5~c;v5Leh5UV(>!mx_MDhR9ilR~hHz$yT%_^ZONioPoNs@SVSuZp}X z@T$10!mf(CD(I@1t3s}dxGLbPc&oy#inc1)s#vQ+t%|fN(5g7A!mNt2D#)rBt0N&+ zM?$RrCd8@;s{*WwuPVH%=&FLNimfWNs>rGWtNOxBSXEI~eX}N}s*tK8stTwoo~m%F zqNxg|Dwe8Hsv@Zhq$-Z8@8Oats$sCN^(RUG%q;mmrKv~FGV1rEem81zBX@;A{~k5T zB*~av7r!!TGT(3N`8@TgNu@AUKr+^nKkFQIyKxgH{QLP=o|2EHiH4`H^z-XX3lD!D zzsT@wX`$iQW4nI-{BydeyN5qdNdNJlhChG4^YH82U;H-xB47PB{Yvu;ujt`Bho?{f z#_;C}`_uF0@aNG#Z+G+D#7V*l^DoX1f1WV^;XQskfBLQemWz^U644>Z#`xA{G{ybrSdfJ9RzqR0S`e>8irr&PU-=;tG zsNv7Usr^3O&z~o(|KX#5oBr(^hChej8=UaZpVt4TT!rbsE@%HQKM&{L|K6W)E&O_a zChX^g*PmyPj4${vjV}1pPt#4vK(C>sOis8zg?o=b4^8e-{#0YsXci#cUX~zS4ml#0 zVnhbGBwXc4SxfWM2;CP>$qSPT&;I;2bXCA}%G2A9yv_aVuf$z=wI9r+J>2 zd7Za;pO5*RulSDt+i?R|bPH~!jhJp446rh*u@>vG5u33U+p+_@5FP_z%)kRUgd;eH zzi=|Ab2jI55tnfl*YS_W41ChOXZiJbf$#eKA)oREU-Lbq+;}{aM@`05gvZE?%*q_h z!~BHt0vBT`!dQU?mSF{27)yAh)EP&UK~`lA)?ovFJx<_uKJUQJ?9Sfo&%qqdQ5?sK zoWg&`Sb=X_&-;AL=X}lggqy&mOwQCy&rHn5T#RM`79orgm?B3QA8v`&x{Rth;&DA41eKdPUmdS=OQlSDz4)uZsRWQ;~^g7DW2mcUgIs^<0C%f zE573=CNcKiWK6|$%*d?F$-InVVHRg;vJ_dC6=|i7m~MLMCyWcYHtVx7o3l0Bu_L<@ z#su7#0}0~+9?7wUu>eou48k~o7cgNQz$?7Jn(O%WSb%r?d_Q3vz{h!-Fb3euyw2Oa z&&Pbmmwdzb{KUk+_xAxz&Qwgtgt7nT@O~cVCye{I7)y~RN0DV%o-$QBs56cxgRH`8 ztjW4;$R>m_|F+^!Y|l>Y#)NVI4)FdEj^JpH<3vv7O#az%{~nR{37+8vUf~Vi;R8P5 zpB?jW?#cX#5(}~@OOhr}iRCF%rGq;EXuQ7-%-e)5*oN)diQU+X{WyrjIEv#qkyH6+ z$NGCf+DCYTXLx~Ec!PKNfKT{>Z}@?UCRZkyf@zq6nVFq1&fk12NEqjDah4)Y80)Xd zGAz$Zv@(_s!kB;E^wK1Z`?oTGWDVA4JvL+$HfJmT#P;mSF6_bI8w2oU(@*DY&gUX7 z<4XRc@&BGM{~5yAf3NU5Z}Bc462|@el5hB)pO{#i?e~N+|EA>+{Cd2<(LRr1Ar>Qy z^_QW*GOR$EDjn1rN0afa!s@KedThw1Y{AxS$ByjEp6ts39L!-H#ortA?*h{=;!>{Q zzuUNf`)W)a$e|p`v7EpuoWVIc3R5v1Gcqf4GB07=zlB+xrO8rcSyrT#He$MIFu=;J##*e$Mr_7bY|9Sp!XE6+ zfgHl&gmM3l732^T*PHu#dX}oZQR9uJj7!>#dEyGYrMsKe8gvb#drL~BvZ=+ z{&w8IIZd0FF)YmDEKQbwH11#Bym2%c&nm3W+N{sUY|hqf$ByjEp6ttk9LkX#%L$yq z8JxofT+HQM&Gp>GZQRAZJjkOw$+Nu3tGvm(e8{JK$+!H-#2VkfXG*5!56r?G%)|UF z#A5ujWB&C^JH#JZlXcmUP1%w^@n?2sclKs~4(4!<=6FuxG|u8Y{>r6X$+g_bt=!4I zJjkOw$+Nu3tGvm(e8{JK$+!GS7}M|fOi38e?+?sE7|U-S<|mBfw-`$i#_%h!3}O7f z7RD0B?(3qLFmB%ve`HP8WkbSveOvM;{>;wo&fe_L!5q%f9M4Id##x-lU%8Ykxt1Hb zl{>kY2YHkyd6pM>l{a~p5BZcY`Gy~uNQ3)#Ou;nFz|73f+|0*f?#wOOBy*_^G}jvd*RJ=vE7Ig}$gmJ>LIGdPC}xR}ein(Mil+qs+jd6>s} zn&)|$*Lj=w`Iyi7n(ql63zITAQ!_m?F&lF+ngv*dB}kDYVmVf#LOV5j=wm#qusUnA zJ{z++TeBTIvMYPCF9&icM{+DDa0+K|4i|7Smvc4Ob2GPdH}~@}kMlIo^D?jVHt+K> zpYt`}Gs<{$lQKC|Gd(jg8*?$51z3b7NRcCAIaZ=VJ2n2@{%mL1rIJ=mN5Iheyan&UZ%(>ROs_$!xkCD(Ezw{j=< z@*t1$B+v39ukt4E@*$t{CExNR6YHz~JyS3ZGcYr=GdJ_GAd9jjY4Vg@9w{ti5^DvL|G|%%guk$wV^D&?EHQ(c_u~Cx}#@w5l=?UZQ&Bk1e zW&y%@drOcajI|fB9ATWj3hjh3_Il_ejIXx}tFt!ivoT>@y{*}fFs9zF?8&|y$e|p` zv7EpuoWVI<(>%}1yw2Oa&&PbuSA5IAV=TR%S>*xaS%uYE zoAud<&De@<*@0cygMB!FLpXwC_zNd{% zmL1rIJ=ll+Iheyan&UZ%(>RL>W9eP&{bgLmb=<^l+{Jx7#A7_gbG*cByv2Kb#AkfP zcl^X8#*&+ishEx#nUy)2moY5N;w(*;BFnNOt+Wx-#W( zC;M_BhjJvxasnrFI%jh}7jYR^aUC~tD|c`=_wz81@f6ST60h+V@9`0z@fF|k6Jad9 z$(V{Tj^2#SN*F_LUd9l{&s&_O31jCKS(Y$vUMp>cG4r}<5XQ?}nbla6Fjn4%Y|57W zi9fS5yR$d@b1;W7L-M{^t}aw=zXE*EkMS8xqCa0_>E4-fDJ|IFBU-%B@YF6W=gn38Fjo*9{i*_n%Z znV$t&gvD8!EJc=O1^ONLsNJMY&QwgxADD$Xn1}gUh{afn3<(>%}1yw2Oa&&Pbu z*L=??W57+yCT`;{?&BdI<0+owC0^q# z-s2-a<14}#ct0>|wEF_TX9}ia24-e<=4Lbtun3E@G+Bx)%ZjwpMoc#i1{mUxtjW4; z$fj(;)@;k4*_qwhoBcVM!#SGcIf>Iai}Uy^mvSZ7awE5LC-?FokMbnX@*=PDChzb* zAMqJq@f|-g$$ajSOvQA}$gIrCyo_OC7H4U){HtT(ZD!f6*p?mGg+17Z12}{uIEF9| z-pQQK*__WsT*g&g$4%VEUEIe*JjPQz$4k7%TfE0de8yLN$4~rze&v8LzTFJW%xuiX z-;Qm!glQ>qL@djSw9-aQHw^|@nblZ}_1K8b*otl0fnC_0z1g3GIh><8o|8C@vpAOv zxr8gYh8wtrJGh4jc!Vc-h8K8+H+Y8+_=GR`h98({jAsK=Fby*>GqW)#^DrL^vM5WE zCQpgwDO06`I^$?E$f~TtI&8ouY{52c&ra;dUhKy~9L7-`$BCTEnVic7T*PHu#kJhX zt^9gyyGMO~l4l9y+P%sfyu zZs88@;Q=1uah~RRUg9<0;ypg%Grr6npOnUi@L!@?}iQe-Hw49l|; zt&F9EI^$?Eo|X9{YqBmIunAkR4coI5yRjGhaS(@b6vuHQr*bCeav>LU8CP-*H*gDg za1Rgg2v6_~FYpR)@D3mF319FHKQPfkt`DYQ8fIW-W@m2ZV?h>WNz&w*@cXlI)JTzz zqhC-m5JL2#>KV1!ML6)#Pwo6?ir}W zz12$GNTuUOrWiM}xww%p#Rl-fYti&5ANRG_<7O&Psos}LlOaovJOzqGNRyT(Elt|| zwE1cC)8?nmPn(}fAx%b_j5HbZGp1)v&zhFC?yTuq)3cV#S}tpT&itI^a?<3a$ys+! znw&H_X>!u!rO8W^mnJVw-g@%p<;^RYS1`R`dcm}!bVZ+wJ{P4cT3^xn4BFV|59|8; zWnEt+O(c!Kwd;$diKL07iKOvs)qVbgudgIs$^4S}CG$(>J0X3gsHZ#K+nQ>m{Nx&` zQnRsSDqW0*Uxq(LDZ{t*8oG_~evjL0k#cXE3|WflOxcgWCmi1}U`cOUas%V_rX@{B zl&}FY_ZEmKh4qD*Mm_5_2ps|ouR=I5*?XEiyi z2}c$7h#Ywe6p^jYVifi!OwO0{;qb$*huxrv^O6q78MYS|ESOfXUaJq88geTfsUZY= z3m8JM*J+B1A$KhjR#9{$MMq+(a1KJ|W(WtVgel;KV!dcQx+E{d3Zze=SZ7Kmm%<^I z%GQt~yx56qSdXajKq*Q@w>aQ_kS8UJQYe zE%wFPdMQ>4;#@f&=f)O^;#@sVhAgExpRdRHdX79%T(GW!`GtBhE=pVUz9?-`nxZsC zX^NKfSF3SLWnA3aT8>-$-KGW_aiuyg_E)lTyW3EEHXpaQ48`r$YFtl8l;XNuR6U!) z?W>R??>6SOn8m!Jbdhu=szY(Tr!%gPFUQ@zaop2pWYv~>+}qt2_cq-S+xp^0Z)@D& z(pN9$y2hu{;hL0XUP7r%r8+99G#Rqw$Wx$5L{VyGnZ}_(oNU1 z?OH`9XN*iQ!=JKV^Asp%nyE}PmucoRP48XB)^1~28_GI}tb?%q4F1R@m2IZ8%}m&I zPNKZsw`9J(PzZlUQjp$O(#3phv8|ep@=X(>l1XKGlVpjtC)xJ5*<~yL#~~-HGTpq4 z4JOACcEz$8S&tNLR3Y!Mei{6+noX8vaXW(CG$f* zl!|fMLpj|n#)iX-%iXPUrK2;hHfwQbwKuNUJZuXdw8acr@HuL_VC>4rR!JiT-BDto&Ac~63C{j+9v1TdTEcuJ0VzXpQ$@%qn z(B#Ndpu|$CRCV!`%b~208RW9VUukxfWqmnH4dzmV1tq{!3`;BQ<+LT8{c>0#PGZ?f zDwooO+4NvOJy=o{%9$c2X8OyS!IZHqGJ_eXy&Tp-jy(QAFO?n4<*YK-TFiyBRt}3R z5oKq$96pyq!h9%PL78aVRh40`k;PsVIH1HCt@W+XoO_wF_J7~ZjvizxkQFD zA!K+l&J5<_>|h2Dj8+ejSbeos9W{!}m1bNvP#D)ltYrXFIRaM-M z0r!8;fM%a(KzH0-8!`a5XTi7u&x6*udwhS~Q!U3m-R*HtZ+F~ViR0ehadD$kjvMVY z73L0qtT`ArdIsXYu4dfl8P(^??C&r$+pOv00ISNFSa+V7Vgo!!( zkjvxwD>)gmVJanc<*++>OQ>Llbd(DIvz;_Kij<0`742v^maxC5B3Q2_Bddt)l%F)2 zuz%#pQ=mvlQYvK>3a{aPITMbW@EVRNN1h`7KDV4Dhxe)yDOHJ-szgdv!hXl;a*8Z& zx;|%oR!fdE(q&XHvZ^y#>5Y+L9O+yfNn0KqAGfrPjVtl^xH8xqj~%SWZ9|Q?y`oqR zRpQQaGwvMdifhfbxb6mAR|HjA2~`l)jf|>A*7U3@N8Y@Acr`yVzhrvJ=N3h--VxWk z`i<@Grmwj5^jG8Fcp&aow0rxz;@+X&xY0U3ZgjP)hP1?uLB(xoFz#z>jhn55akINI zTpE(XBePPnrcvpX$9$%6KTCg>j|Z?D1A|yq+Hm)q#T$RN@1kDM3##z7lqSlS}7Dc z(|#!cB?D-<$m`lhMED_%CZeiSy-`FntWnaY)TC^rvq+wn6s<^ABS|P}PB#2#(Rt$e ztU0MQsa4DHk{PcWmkkZWhDM<0u4Gz}jj#h~j3&u*UR@CljY0$5T9yo1G&&oqy~ew> zyhSx`HJ-g{-878JT{k8-ISNFS=v7)xv!+;6IMxhSYE>0_-6Jhy-;G6$`57fVBfUM1 zbG_-EeRm70>OB&L^;N=|M#bIA#_T*&s2 zz4`%?tjvTomUjY^)0Lb-^YsTb^auFMXw26i(9j>y&>zsyACR0H{QwR907>D|2aufV za4N$o%Uf1ofIg1lQll>*DFy}e!|5zozkUIIAHxMt|3Fd%^b0if3#d&w<+d40S13B# zoJkST51@91>7f*aBBOEHD23@I!?X`+S`29k4rvJvY5fhEqyadjJwBvCJd_U~v<8Q? z28|7lbXvGWnyo_`_(K}_LuPAG4r#v+MQJI+^5L`OTFpZm!$VrQLmG@j8jM33i-fhI zMK`1+H>3qUq%A+BZ8+rWFvId1>q8osLmJXU+Vn%3yF=RaL)!F1Vby5I4@F@=HQbXG zX`%ZW(o!1I4js~dAIe!IXAzUbL27~zX}ep@rnFO&ZHM(}!4GM_4{5Is-DT;6hF z>u9zQX^Rh)3YO8HA1at1jw&Q4(pVo}alSuU(xPP#PFuA=@+v`+&DNsjpJewhS!#nJ zE0cUP|JV7Ivc%Ar)?;1ZLh?w_1;+HB(A!0tC@UU z)!ePB>{m4&s+zi075=K{O|_Jd+giHfwrVqO*V9*Xb@zB~^=LHocxLrzHuqS6kGnvR zXIGDBR*wNwddGPl4R)#SsOq?LXqnbB`C7KvlZ(RXN|g;`MTT-s;jB6OS}E0;QYg)k ze>P<*ZoOHBMDdfGHKotkb(9sdWCaSKp{t}tXHrc8G;ozFuoa_B)b!cZoYyd(mEuuT znrm{lCP!<^Pt8~d(n*doQgc>nicn2CsYUr-)vj__v8^k=wStpTvp^{?Y*$zEAcI4ChJYKlrtQK=~^vT*o7_0!b!)6~?GYWitvC27^6od(Yn zgeTB3<(Wc>vVlxG)rL9?o-gUx4J1xyIz4Cb%t)&_r9C6ky^&|ka2SnDZ{BmIQ|%~C zQSB(ylGMvBoAZpxSti%3uHGwrO|K3f9Xk2&4D#6_#Y%gu&n$L0bc&sjLI;mdqN3#^ zpCjuo*}i6tihV{+OIU??Fm5YX)VA8=&avY?lS1uDjYj>&<>5RL^R^l#|@2+tz zaZjyR#asz()nu;LYo5r)!zg66j5YMgk*7$6A2gITHRHiNx`qZLt>!_G!ojrkDsU?6 zSjL4hn3g8(;U`_jd)LUI>uoS&b*`1cOox5c-i!xzIt}J<^$bR;e}k%jgLLb z5Ng{bI~6t*))HoW#tyn-2Q~8tOJSG73OsbRhmxHSI}|>uJsOtLdc!V<4X9Ek6O98o zsGUFP0X=9l?gGi?a$e=zpw6#BjUdZef5ATKv>zUdMY5nsmSS6pGaV}I9a+_#l)glxUYcI$&|j#L7l4)Osth#aYJ0CDq<^q&eB9pO8h6O~uz?P_)*;6_>_SJkHlUNKE=4Ym^^nwkt~YX=mJefwT$ONrMQqd+QqC}-(u7RWc7vAK^W0ur; zis)o%ExAi5rmb0X$WhE$nu1L zyOi^t^2D@4r>dVzz0he$BI!ycqh4vFR$A*Wua?-jSMk`&K-@k!5O)rF5NK}H#>Lvh z-5N74w-9JbtG3?N5%&zX#Ri7KS3IhE4a1r@wWXUw<#>Eocf;5*t-oZ6BM{y}=LoVS z6|zJ=B-vzM+EJy=|0T;po=nIm^MA=J%V#W~v3$rk!`rlG&CgmsYk4Er=w~5hp7}ZJ z$jK}t-Xysga!N0y1q({0wO->g+9Y-`D~CHq{myr>tgCFx4im82_` ze2J85=nQV?=xpc+Zs>Gu=mc(5tXHR~>11(S75lA2(!9)YubHSBT0#w-pwi&Dbxel& z4V{cSR7^&J(tqiG;cZ?Yd5@ob-uGbrY8i#%SeI3?IIb9}JLspZl%j53I@W|EF_diH ztbClRcyRQ)5-T1W6;0@hCbVhUvCTN!uLKTwAe36-T#pCAc#V%9rLUTg3+5I2mBM~E z`?gXX5uiuwD%~HW8+4%JMLEv8oseQ;E=T;8&mQ?k<@LD>8?=y$9V6u)K@&5 zSBjNBVv56A9Jwkd#sggHOG16y@c_HJ%DGaA6oE}A~;+mDUGSswi zdWx0_C!=Vd;-v4GFyFG_w1?9dNfSwkQ{pG16a*>7|m#iKe3iL&!L9HJ*H@ zP}jd*w-0F(3iu&Ql-6-Gkky8A*p#p!+Q|x$CD8=3_flsDGGSU)610{auvw^e*`a}K zNUrr%$w`9Nsywv>p1wvIt~*xA(ZES|HEdYJ%JG{XHWPLc4LNylIW(N~n>&bbSZMvq zr!dWWY))e_*{p_{yfse?s^VbW6bC#U+O&lSe7U3@T@fvz>PFSo?9hSN68CDW%7A!4 z8&L5eyjnW!ev*?mt?@k}*FwI8qY8VV8LH&iQ;TVey6~`QIAYDuB!{*3eZyey%uh1M ze69cFsPw1}@3rMaMuuF-+ngq*lH*7$lVpf_A?GwLE1H#V2$&XfGUQswiK6XkQYI%t zlhQXnNaK6YB&U6qtb`1tQUht@)0YNvnSoq1pq8HQs;B(m3*s(K{$N~~n#p(7vwB=K zaq?yhF`=?Wky2N^;B&#}LS#|zO-@HCEt9T#A2rRYuL`Rk z`Hs~K(VF*l!EOLrpuB(zB&+(9tAEu|Hyn>9ace%Ab~`8o4*=I6}MSx3&ioOwC( z@}?&_YPlp=Et}-3=>^jY(icoCSSI9f!7@ebE1I9=wlqa)iuS80T~V5%G?6qDvOY3h z2oxQQm{&5dWO-l5gfA-dDlPhRyE;={olbCP!MV?5yE+}FBXocn9mrjsN=2t5>{(t42|L59kDa={x;n#3i1K0SWL0K{^hL}=rgqw)PF1C@&Y})KNeQndJJ%UWR$^;6x8ad(TZ)B3nBg+lxwc@YjIWoN>UDCAT~$8GPO%_RFm{^T7+viB46AY_tdTqns9Idh%PTBoySXm&@K#^;jHrI0z1dvDe4 zr|S0O0ti=5ODgi?U5OU=nrhBXsHzjQ>PA%68CZ2Q@>OcR>gJ=hU$469RI_@-LfTx5 zo~x=`OEq6?ac8OKOD%#>Wn0`!t1a3;sTS8}i)*t*hI*fE z@eNFiukf=iae*j}`7N%$7FFXG!=hGu>Z*$RyleWd#j@xg@RfO&>(NlERd?3m!wQE~ zz=o2&4}0#w>_#{;cTimwNa9IT)q7d>>=-_vFwJ7_rg9)08Pa+_RNYCd;RpjC!;iJO ze^%W;tL~ju_f8!jSc7|L)jhQ8{#kYZtok*bs_r*87@1%hU2twx6x=oXeP6C9^t*BN zE93pCsF~7m5AF3Rt@Ym3pLW6YOOeTp%V)-wvg1<4)>`DE>#u59rD_`AHI3+0GfvlJ zYt7dQHNXAPsAve+{E}5s*Nxv+=xdK_8h-U^zw#NOX6@UjW-2nAzvg_GTayc@-$mP> z>`>U5JYiZ98&p>N)5$J*wZmy?TzJOD4ZDYF%5Z- zGKgtcf8MJ*RDa&QLT=RXzkhL9w*T>qP4{#Dg%`sHjPfTjqZTIQYnd)qW_`9{cMjnM z&gDvO<6&OlUA|({iTn;A^RPG(ReD*CFgDxv?9CCJ!i8MRU4(JfUg1N+*lCkb?Dq+o zpQTxj4*FS(&Dn|l3FDca!6n?teLT$@gz?CJV(Ll!ZXyejWhKH`VneL=zu3F$=(w(X z0n`ptQ@*|Trb(-`;ly^RVUlFovMt$)q}YK5#?nZdSkfpX$rPpr8cxH^%*>1pGpAu_ zn3D$Hx6e64l6>D<@836F>sz&?nFIT5{O!F@7+`P0yTMN4e6Hb69_1z8<0}?g*cw=t zV>Q+%yqjxFc3>uR*q@^~jf=T~dwG(7@gd)_*do@`vOHr5@4KpJD`t>oHxA-h&f;=z z;X$6|O+MvE!aJq@hZR|y&1oRK7b?69D!l(`FAn8I&f{wC;1OQrUBdgB7F^6)SC(Z} z)}xjtwr6K%vmfD|NvCoV*K-d~@G2h=-gUI7_xSvVDn=9DTQq@I!uyDN*_8u1hBFE8 z6uOxQc!oFlgdYg+0{U-OU@gKsekK#%=aVMKo*Y7WH_y3T#qB)I3%tV@EZ}`IKj-(X z!e6LiDt{%zEcPY5>*f?L4f*Q?7|-Wo$&6JbGVZ5ewBxKp70Kp&k2Qp zX_jGS)}@*$Y)2P^g!h^p&dFRrcxTC7JjTm}_mO@AwmA*@THqqm4dx=U|TGY_8x|{z-Um##?+wcp2x< zyd&a&S&4Pnf=0HblL7YTFis-8r{Ws!i8O^!VY`_E6{T&^PQEq|C7c!#iWe1ZQ~{`ozt@E2;BO4#e2 zVHROO_Ys`Jg@nD@ck?)}5cXkz!y@(_|C&Ft1{*S-7IvbCd4#>u|KJQRCG2^=pQm}9 zu%G#Rmau>KcZ9vlYqBYmm`*!k&+#7oov^R?9Ihnn9S-}2pXY7Dp5V~%FU>N9{l4o` z%@o33-Yy0S`*jcJWG*1=#l4Hic$u)z_G=dYz4A}kL%TW~P)FDwyCdDqCG34Yn$rpU zTW{n(p5iq=;y)~If98J?_MwKor<*X5X|&PD?i|cOz@Cjj`){=i#{#k*r z|7tTPvo&FFRgOJ5gs^YwT*4ly+j*F<59%Glo~H#?Q2q&fnpWX2gndg>`70U1o}_&_ zg0S!CLayU(!k(g62>XY=VUZP;f5P6NHQ11__os!O=wTiQ@DI-5Qf}gY!hW3B`Izqs zdu@KlpIMVlnZ$J3*@Zp$JI8YlS8^K<@jP$yIib_PG|R9u>r%}Wwxf$d_Tg|&<^rze zE*|4$-sfu;UPbxm53J4x)X~h2bTgN~aWtoM2{&>dPw^Tb@gEjnRr%*njAauhGL1I+ z*qwtpj*Ms zSdH}=$Cm8COy;mZM{yb#a|8GCB>&<=zGJa9lz*0I3>#C=R?HyFZXCq1oWpKRAO+xrzIEn%DW5?^$9U<)1&ZCYv&e>9n&8d+>LT=Nzu& zHXh=6-sW?{fPZP0VP)2(nkj5Y7lZ7>;hf9`T+3ZN#>>3V*DU-O<)1&WIvY?&Gdt4F zT>i$0!=FP|E$1TY{q1^CQXh#IfN59m#es)hk1c__<{vC zQ~voqtMC_Un95(tFpGUTf>XGV>$sc8d4+%T4U259{PRcFU_-{!!cO!sj|2DzXK*Pu zaX(M_5{=n*NKpoBONH=r&8%J|GmvAHZ@f5G|5&vQFTIHWV zF_ul3$TZsMV|NbbIL_t@Zsngm$6I{HPyB40^3O`F!xl8MEu9RoH-~W&=W`8r@+dFy z9$&Fgo$}9etj79`V@q~mCUe-Iqd1L=xq*9ml7I0b-?7+u<)7sl!^YIJ6*I`P8wYVL zXK^{V@F36fCZF;nOHEMzS&_BboCda`gMRknP)_7LuI3IN;YHr%OBSqG{#lk)S&v$p z*q)u4&3+uosa(YM+`|*R$_ISQq7#*Wsu;~iOrVt%z3j??9K)Gh#?3syGrYkk{J@fv zlz&!WEjD8^TazZoo*cpnoXb_*&cnRGJAAof$8k1Sa4Y}hIo{$k ze&T0aD*vp+I&48B+tSGZdvh2kaX!~@Cy(+H@9`B2H7oxt$7-z4IJRU5W-^EUIf~P` zm>am4C;1m2@*Rt{DE}EILj3 zr;5>R!~|MN(aWwJ$T6JBW!%gIJi{A&!VfGtUHNAP)?zazvo&dQ?8zaVz`0z-?L5p2 zyu%kPu(k5f?^%VvP{UOIN`_hN%MqNygp zKRAO+xrzIEn%DW5?^$A7<)1&ZCYv&e>9n&8d+>LT=Nzu&HXh=6-sW?{B;V33!^*5n zHB;D*E(Y0$!#SA?xR$$kjF)+zuUYu7%0GW#bvB@mW_F~Tx%`czIh{+mk^6Xx*Z7G4 zu=w`MKYwB@n=p}Sw9&`z9L#Z?%@y3rKY5O~_>7tO|18I9tj{>MWCvz4hy6K<)3}%$xR)pS7a#H+i|wTRvpi$in0mHi z23dCFAdclMF6R~=$unisbvloYQBIj{6ckl==@-APp;0)!T zWm%Q=sHKVR*_qkw$B~@MMO@E4Ji)7cz_%>gruR}SPD&g3#~<^i7J z4L;!qmTXu4S%J0KjLB?GnjCv_2q$nZS8+QJ^8)Yi1q-B=e}2y@{Dm5(@>epgfPZiXmvR&L^E9vXG2gR9r}EFAS(8nf z#B|!(g+2H?$8!!>avKlvJa6+kVS;~YmSJVqrJ5;hM;C+a!{MCF1zgKrJjTns&(|!R zQU3V@tFr-hG_xb!%;j$!&FNgijoimmyv9fThsAeR{`nJQ*@THqqm4dx=U|TGY_8x| z{>gK^#b^A)&t@wBti(EOK_lDJ$pCwE7$MWCvz4 zhy6K<)3}%$xR)pS7a#H+i}fh~EYBD=rk<^sL6+S(h+{d6%ejRId6qZ%lpk5DSNUf} z)@E}W*oF@J*^5Itk@L8kJ9vZ_d6zF)FsuBtEUU5}wKTCkJ2RX8IFeJji0iqBCwP?) z_?AWclz*xi%|=Y1l@z_~%7GlinOw%rJis%&!6*E{lDjDXtiW1q#$>i8O^!V|gcCTI ztGJzqd4YHMf(3HQKfh-c{z45?`70S_u`fq(3Kw!6ck?)}@Nd3hk$&Z$Ke7fJGM*N8 zqKA1Lz&|*HOSy^rd79VxnD1F)K>6p-tjVTKVmj^Y!XEsc<2i>bxs8W-p11j&u()Sw zmSJVqrJ5;hM;C+a!{MCF1zgKrJjTns&(|zGOZn#ytj-41(aer?Gnc<{G^cY3H*z0O z@fsiT9~Pgj{PQQqvI!HJMjL(X&cPhV*<8V`{FCQ+i_iFppUqMJS&4Pnf=0HblL7YT zFizrpuHjA|DkG!H$fz( zBcsa5s4_CDjEpKHqsqvrGBT=+j4C6e%E+iPGOCP>DkG!H$fz(Bcsa5s4_CD zjEpKHqsqvrGBT=+j4C6e%E+iPGOCP>DkG!H$fz(Bcsa5s4_CDjEpKHqsqvr zGBT=+j4C6e%E+iPGOCP>DkG!H$fz(Bcsa5s4_CDjEpKHqsqvrGBT=+j4C6e z%E+iPGOCP>DkG!H$fz(Bcsa5s4_CDjEpKHqsqvrGBT=+j4C6e%E+iPGOCP> zDkG!H$fz(Bcsa5s4_CDjEpKHqsqvrGBT=+j4C6e%E+iPGOCP>DkG!H$fz(Bcsa5s4_CDjEpKHqsqvrGBT=+j4C6e%E;*dS0kfQ{`XVmfB&CS;1?nBlK=g; z|6h>}8P7D*^m7m=b0K%|7;o_n%PlZ!)H>ACM2Z}HaV%$Z1$XcmZ}KUNEjVh_ZyC!L zY)OhN`)~xOa~XH?C@=6Ki!U^4)bfmBQznsOS5D$O?&KNX<8yvusf9<4`ZH^@IoptC z9)IUVF5wm)=NMpE>17-w-i5Ah-&@-2(~a@45bvnti> zNH6Ju`cy&#SG?h43}~buk$_2 z{+G|P9ewP|L7c`-Jk3We@jLgydQ4yk1~`dpc#gOEiDgw_tFb;?(#`&y$ql^7fB5hJ zac)|e$=;mERXoneEc(BmF&nZa9qh?zT+d5<&Qi;$6WD;MbaN1Ab2IO-;O{+m)})4M z^s*1fb2hi}Ft73fOE2r0vo2FfF^|JJoy++rAF|kTj!zA(?8t5$%1K89%G?%vg&$n(1V3j^}dj z<2C-na?2}A)UY*a4&*p4=5Ai#Lw@8pe;PGvb!yp$Ih?`;+`yx}!Y3^9XKBMaOre84 zIFvKEl6!cX5BS*%@-gdB$8<8x;xJC(dLHLJLWB8B{=|ArVp}@cjiWe=>$#6-`GAF2 zk`GytE!dJl4(2qj&X+Y{X8?^XYnu}vcPEdG^?=@Thhfo9LAMAz;nFL7mOOC9pw*0%E1aRe7}50CN=U$Vej zo)^oqDjQPAPR!;2PT>ab<5k}0YZhDEIjN?RG`;M@5uD0J+{)8@$inN48udrUP{)?+ zz#R7HR4(T>p5YBX<_CVY?x;~!tVuoF&_N%2aRjGwF*oxlZ}2HUu=HQtC#$kC^|Y`P z-OS?v&f<0+;7R_)S1hvLs8PS>PpnBbO>D<5?8%W_!i_w{yL`){>#Jv2mvJ=H#%>(I zKRBJsc!ZDm`3A}n)oeqK138;3d4zXZY(xDnHeyS9IhYH$hgbNDUu-1*QqPXe<}l9V zUfyKkjXfVWqJ>@#;#}_FIlf@2P1N61vpusof=juNSNWc0Hgzo8*^Lvpf_r#{uUULE zX~P&cq@L+y*n>kkmCL!62Y88h`IaR&S2kImHK}C^J?zQRoX%C;%?o_Yf?G&qs#upg zwqqu$=g~xgBtiXCqrj0!~nhUs#r}>26)~Vx} zL?`=jJXiAoZ?WijX~ufg(L#p3IGVG$o#*+2Urf+;vnHFcEjbS19B$+lzTnsOqeiXF zCTvNXy*Y^+c$D`THBnlyIbH0|QC!IbJjFXKFv+#D7S*(nBFo+!#;M%FLp;y>jGC-n z#w z8_>WEa_r4foWMqu!k)4>!iCn?`yv)B@s6`#drfkDroX$1e&r5v8f3<3t8P6a`aS3nuGptQL z+p`ZBa3@dlF+ZQCU13coF`YpU;}Y)Vb$;O2(>+(}*q%8Y#%Wx{joioEe8xgs%L}Z| z=1irVIULIc+{gpG%~$-_Hrgo0vI*0e!2ri`4ma=$U$M-#(w0q_%1(51Ag6OR5Aq)t z+fF^p7&fGat(n7-oWcd%!K=K_*DUZ?X~gPm%y_mU%WfRUSzN~*Ji-fn%1`|F_WF}F zumd}@JI8YoH}D`&^CgS!pd7F^Q`w1L_T(h4=MG-t-z>DFHi!+F%wOqaKhEY#9^!3& zxs&vznyIANjl(&ME4YVe`G&<)`p%4@p6$r6Cr5KSH*h~M@C6IZFwS5-YMI774&->w z;TrDcCEn*-7He}Kti={=&+Z)01>DAye86}7yj>rIzfjF|`q`gjIG3AwgctdgrP9h5 z>rumY^syU9ayGZ~G@r9bhx=z$HeoW`ljUz5&&52-n|#fRovw*-Y{M=b#@XD?3%tiy zEYu~>Gnxi6?90jA#KXMDPb`yB{@92K?8s~m=K}8F89rypoz;!3!vv<2V?U1K94_My z9_2N@NnFJl=_LQ%v zqJ~zw*n_jVn!9;{xA}%8_wsyMnN66?46^LYaoogne8z9~mJgXkh9kL*hxv$K?Bn{G z#P;mL(VWYzyvWBays!LEJ=5u6A5P&OUgS%b+E1BgT^gCm!JNg-yvl<6%S$vfgI;#$ zC@$qep5tx4X2HKnYnEjVYG|R0y*ZrIxQu&vl=t|WMGsI9vI?6qjV|`$aL(j<9_3vY zI8eD@T^iV)JvoANxQ2&$gD~+_#X3x42D@_tH}V*tve?0{opsof6#X2+iQLA&_>o`# zU72J(>Y2_U`*9Q(@jP$y1q&YH8B@hrHenKJ_U0d)$~D}_yvQdkbfogd3T!|v)0xTc9Leci&!fD~S1f*%@39(d z)5zBB!U3Gd#oW)o_=aB{?f$4?TRPa6Q@N2R_=xXW>L1dB4cL+%_TeP1;t}3u!DD=m zb!ecIy*ZVOxtEvtoTZLcCs55+bn`b(;X0n;eHJ)Qe~a~)LMOX%G*|K{Z!_w6^)@R} z&GzItoXfa}7kHbmSn34Ni1nC4if-m|G-q%%ckwKr@*|6%D6OfYnyu(%9tUwUmvb{u z@h;!6^hxSLR%1QtX{DFFIEFL0gQt0e?^xty`JF$q4z+AW8-47-pFMDtpr*jQ=@;o2&9ZQ}ejaY+CX`zj|9L{N6 z#mg*lroJf~QcoxQa0F*?C3o@!Z}BZloTXpR@@&XNwxgF_IgYcrmiu^$cleHkQ@hyv=s~j?xYMSYypM5xr zv$>iFc$N=Y>^%Kc)~1fF>0ob;;e2l30bb{O{_A}82sLcY&K$@E+|HA{#WyTJIt#M8XVSN!H;X~`zE zk|D<)9LDL~#8Z60!k4&S)~BAW$+9QMav?YJ2ru(Fi(V>^um#&Oi$get%ej{q`G^HB z(=PF6)?qw5uq#J!4)^dBZ}T-vUG5&(oCZ4BgQGcv>v@Q`_<^5YA$?efTAJzPAkN@g z9^z%*=R20TQoBwSYtldmb2xz0xR!f(lGpf*ANloFzQ@|sGmV+d<8V&nCLZHu-e-ZU zJ#Ut01I9CrEPHb-=W+|r@Bs^4Bk!>Sn=pkP=x1L};u7xUDc<25mb}*WF@_qNnL$5? za5C5NBp>nvzq(G}fxj?;>2xuN{WzQpxRJ+rhf&w-1F}40sb?B9nad%Z$mQJ2OT5ph z8=Q|7*pz14*oA#Lmh-um`*@!BS@=e2&mUQnacsp-?7_ht%Vpfh6THZe{Ng6{J?k)$ zt>|V~4&!`o<^kT~OBT3U*10<9;dHL&8NT9Ix5%@MV+Uq&G#BtBAF=4I>VDQ_ zDmyWoLpYI(xr--wna^0@Hf|nRTgU3fs`jo*cvZ+{#nD$9F7#r|V=a8`DS|S$5@c&gEwA=Q-Zy zdwy}3Jj>eDFr97=hDNUr=gA=%#SNN1s_sFaKk#(qH8~XSg zCv!D-^8z2S#J$>3R%b&dFr74m9K{*jz+;5}wG5PY9Rw(9Tb&;PD9oy*NF{NU^T>E8DI&vi3X-Km+W{Esbd*%|4= zhZ{4!>0GM2sx~{=J5cy-YgaCvt{R`s%`Bc`Fz1u`gVdyE`k`^KH`A8s^Y!G~YP+%n z>C|BU$GYC$On+5Prn9PLX5rZ5ZKCSTIbC~v>{M>%^saPjpgZM~^OrGDRiDarXJ-!- z@4F#0Bb{@J`H#e@Q7dgi8s$&fnCc!V-fEYNoSw}VlA<}?Ue%Co?@Z@EUYqUBr3!zZ zoa)Z>_ocffN2ZtjDqMdp5mX!cW37g`F`Di-02L_rML8C2D;*ZPKq*Utz0!Tf2!!lJmp*_%G|l0 z=)O8aveXQAbfmhoRjs*HraQU7mhhCP59S8u8omK zo!Ss;naSOmbaWQCEa7WY{R7=;1+ZAnguFE?lb)SFL}PkjURud1+`6MA>Ag+))p+vl zEB9BmWCvxB}}Jz8HKz%MNL)JnCUM3qBfO_icUzz>FLz0Vz!@>F3k%Q zQn~h$sw-sbq+00@x7Hf!gu##&O}Wgh)IhqB1`X;!ch#2a?x>oQ8pvdO)pXM{-R<3( zj&xOXx?`|dkwmpjlvH)?{R(sZbnDYfvLcbc%i2^=s`%_OGqbt=nVIs$sTov)dKI#= zlt_wFD%Vr^dQ)0P4GB>G!KfCEoQP~mWf?P8=ATv&J%tHRD8SL(!-KCTl^LpG=H)mx3!U3nw z3)#74W>SPhL7$ZE>J6EtG2N5RWr{6!jmu3HtDwfL`nbC!ed@DX^te7OFR+c7{{E1u zq8u^0F_lwcWriKTH8r<8n^V}Of1Fpg(cEPFRLn^Ztj^6$%~D{BU6Kh}*le-EZETY` z+5VY65a&LLIa-656tVnq#-(PvzxYhyIn<{W(tM>`_E2kb>2_UvisLG|s;*x#FP5O@RH1TjnW+X$ zjcwH?Mh#ox?A>bpOjJIj3!IS4baaH<@62V|2D=9aL&q?AOwH-^EC4GU`LE;6kJ4*HBekRj*T3(tT;_(l73vlfTN) zB4#ta149!s)a*0j=N_FqE}UA_{@+yw(1^`R+-MOfspm0>-I=f(ftl9ap|-M zp{%^Cq`E!(k7`O@o%;}rm%s<`)3^8ED_JJYjuIHD`7o!h6z=`TO__^eJ$ zRFRKRzqM-rwE0mBpPMTKshmr5c#^53qbC`+%_;Ipw&h?(%13{lkm^@!6#mi>uD2#m zwQ24yRct9eyV<36T74?hIXm>x^NAT|`Z#hCm@8&b1#`q@eL zDmtHSy)sAs)8PfbrPtBN->Q5UECb?un?hfqNjE%K9KnoBJNZbr)Y_G34NOmmG8NjOQ1l8}YIyFJ7FC2vp<`Y6OMR-RC;ylH#Y~q>#e18ku}_C)HD6|uvosI(s?d!bM|}2CU}5E!{2}9p zH8*#xM!%%R*T#hMH8fK;WjZ@Y%*dLAd{K#dsjez2!4tA66>{OJ8tEDJ&ni6nRtFnW zL|f#YxgL5)N6C;n6x6a-YigJJzCD{O43+X{RUd@xl=Rc{DH2s0p%F=b5w|x{s>eZ$ zk<+R+9gbEwag=)|4ECmb;s+MGQz1kVk}5iuQP)6R>`MFS$*~)ygn|@3;OI!9`;w}f zmQmxzU!Nd9_0AT%P!IL=8NuZ*H}1++=iAKEOdX|iQ@UgnR3k>?B>4|dkgG!JO748R zwjtX)IEj2x3uUNz z%(OB7rlHJ7CaQaiL6hlS8Qtu%Zdr1!3FS5W@t`M z6@HbnpZ{HLSIRGvkLP>-Q8uj(k&kG&RNdd7(#MOhxW=_9j3ZWRYNKetG^|DlF&58h zXbl;DJ-2E?RMv-mXI!c`E>pw)Qmg+YE)fl{CK|sKV}Ws?PX(yG99}Oqrn_h8;)K{h zp~{L%XI<#^gtjcY@fOcSH;+s$s64u=uM^ zd`k$6d9q~@^}24o5uxU+|C{Z^vwKHJsjR;42uG+lkn5jc-cq&BoZlboLsYI1Q5beN zg#eG<^Nf-(c73*QgzPmXJv-E`!xP0&*O+aD)QU1!C)M3Ob8{o)sQPTk!b6U4ia-Z?gnJp6j>2Cx+CziO z&`m8|aa@O}qFh;gwPU9nspbnuTKS2(A3gaH!my+euFDKmO-jqA(I`I2PBg$ou2j29DLQqH%v3eGSA=BPQH0-%qv~x{ zxA`(2)iRR4N8d0G5QNTnHVOiibRNc~!}L!}R|vi3zuF+aR5e1_P36!zG|rl|{6hlP z+UBlQ(u>i|M%DQUeWC`JRE!=)`9TLy=OSNE&Fv|MZQJa#PfCvxdRmnsgAYYAqS z_Zqg<5f7cVrI6o zNpgZI>3LO#E+aKm;f{Kw$NU4K8uXq*y%ncs;ku*wlA2V1F*O@Q+1J~MKlpz{SGz-K zueI2RY7`wwjvHFI!f3uww39!EICB1bQ6F98p}lykNix?Y36g(cQGYLt$Wud7%5;(W zfzX2}4tZKkt?4!AFDL(aN&_xh%E39wq2gj{uqnKrd`p6c>C+in$S4DJgr-B_Dyor1JUc;g?)%?vaWL&|RsQXyxwIvTC8YU$Fjz(C8>6*|q8F;7q2ZjD740adi zRVL>|GIe=}T~7XLw8?58O?yu+#P5^CH)M?06{TjkRERppB`H+&Wrd-|OhDn$HHe~X zxuYjko0@A@;{QEC;whXVv6N7=N2A^0k3ug!G@4_>Jbxio^%>(JYTPLft-JQH?143= zN;WuMU3=oBj}39aQ5BuvxCcU?B^P~ANvg!+eFV+d+Aq(XK|_vfo+|36Vs zv~bR{L`*Wp2$gZtz5hQlRDK*&b}LbZ7Kb#VvQU#9j3PpX4@E^;gWFT6S4|a$ahw^d z`R11Duo$7ZjG$Hn(wiFW>{1d7IXWpwQU9lODMoXuFB|ot%5Gc(JG7~pn#*?P!k{mo z_|d>zGM9a^CEMK|dXr&_t@Jbv>Dl_B)nUm*=pBY*M7NsMQ}yLX8JC%3a5~@ntxf4a zBza`MAF3amQ5a3t=If}WAWa(GkeWAlbYuBh>rGUJIy-#GH755ZI+4HQDVeq|>o>~3 zHPx)w@Oe#l8vS;3Q}0g@|>I&X1)ERBn_W_m)$z1YZw zr&tnsnQACuElvCIDb1$nu{X!HPkn0kOo6CSyCvrnY?>*Xh76PZCd_drH=O*Ybx;5} z-(Iu~sDz>sYIy}cLGBEpk>oq|rZ@88-LUMSq?VZ+eLLUvozQK?Njz5-tx$%4kq+iA%B6)oYa9YAAJuha#>O0)P4v#pN1Xj;R?_HMQ7% ztjW#})nHU%N8|35`&TZ{c1gjh9`f7drV1w$-%j^tXO(}dB@?gWNm8m=wvI;5$b8;&Z2e#~`YgNb^dDbHY}Ik#|1b;w4g11{!v#>1ox=2n!U$@~L>1 zH+h^5A>ZpxCO=jS8q3Zh1C%VtYiw&1-qVsr^+(NMSNHIXZ&F}OW>G>%E$Y}sU#V8r zw~O!(|5|gVQ%_`Q-pF50h!v&hj;)`omoW5^CiQ$iTjmC%ctu$kyAYbI4^MblB2|lI z3R+dQX2b~!{a?Z3&@zQZk7Yd$L-UZY;uFlbmk_dKn?-xWP8QA5>oP}6$cFtjT%f75 z5iU|U$(n@h@B=oQQ!YHWvM%R*FK)7a{!Eh=!%kmohO<+beuQ{OsI^MV!T5|h=cu&) zAAQxvjM!I3GP5PEuUDHr2UF&;rUyVneGk&jPj4kBi6SVotVnYme$!; zDvlWZ6)-Fub7H%gL;URLdy|&Xws)s2-?DBhRqQ7U?S?LA{;Ac4F;Y|!$QXhOGfU=p zTKY_cCPT^4aY*_oQL~k(RyaxtG?L2AH2 zXV@yX@!4<%3Sp8Rk__2W-c3wm7jga=QnnfdLAwgywmUdvyGf2PG~FuI9&;@i58bg@z~ z%@=C_B+VPc+U3ytM4vBPsi&8qr3jTmeB1J=fr(D^u$*GqVcN9U@ZaZBBh@oavP766 zNwtR*3jOdxy0&zM>ZI^vSb=KhH#4NpZ;*KTl${oyY#~tR!vnfgQ6m|z+e;pJwGMnC z|4a`n$w#`8x~RKUYwVS;rS%QWY7~mjB%|t{;YW|-Z24N(>X!V~B~irWFU`VIGtA+a zHsGGsX!$w+1q(F$qjit@uVl=ug}CRC?AV&Mz~3B5p-`Y1N>_&GK29AQdVctG}DW%sL##PA& z3x75!OdHDQI;&QasiUWp{H@kpbaWy4V@*zHY#zx!nb4VtClaem=EKH~{OiftuI{ds zAb4_Yi#JP#VXaoE8tz6H-4S(0(qYAH2pZ-?2Fdrr>e8g5vy-TpC{xnf?&Qky@yfzi z+Ga+B>X8?5Oh~(Txva{LyOD;qR&a*!NIHz5Rd$8IK>kib)P02dyQW(_BD$C1b!uY> zZJS~l+SfMHi%u}C60RO>AGFwh$moB%$1Y?tVh=ft_Dk9e?mJ5qHz{<9)7O*u7@!IncuZ5jcEZe1EY~9U#okydg5h6E}$i& z`#nMnJ+)USa`<&MNYJpRZ&>2QtDYx}sR})aIB=|03L&Mast8}QwB7(~_6TMbj3aW5f^7!xiDwQI){9bZE|rV9Pa;Gx)Lq@9exG*7L)c>@8ZmU*xuwq<_kpIXMYq8 zYtF`7Si(3-{4K1wjXE>Y5~8|LsmEUk%VUtXHur60H#%hf zup=?73MxFO=~>%4%OXuJ(FUy=jkP7q`IORsEY2Jac6vnd($?hfQS45UE2MoAi5#-U zZ+h6gq}OQMNV1bd3Qx9}a7c*5WYz3a8IIr)W$ zKeaoWV;R=H>9_Q(*wv4|7AO9=u)(ss+tnrCDfFc*FOYLeTKhO^7F}JmV{U{ws1TOw zx9g*r&~cnTK35d*P&^7<;-;_*LhmS^Gz|IN*iW`Dy?i$nqQ_B*h|V27y0WRH#x`^5 zvqQJs?C0DN^GuQ~%mIdp%%pd!K!w3uNglQwAVevWg4Ak7L-njoykE9Fme?|25xFq6 z<wat%;gmct~mO!Y?7=aWb)`qnbs+t zIcu_fouS?+3>uP66w#GNL(Z}y6?T5Xrzx+1V1Su}?n zvcu#s1sxrxkR_7kOO|~YzoeUd!C~^1-85ZlyXK={pl)Wg(=eX3$gh(KM{P`Z<+{R9 zJWfFsL!ppY7q^<4oG)3>*D5qsV{LPiaM9HNeEI=}wJM=m^#HrWIrCqv>(0ze%}5V) zjo3)WgN5j_%;a@<*nb;0O37)Xwe8jNd3c7=$KsWj`L1g6vHHQDJ}>c*ugfFsTC8q^ zr7)!))U<<6slp3oP#)EX{8bM7Dw(28mmR? zY@3sxpTCu_4tlzbVMVgA4Qi zg-B#WG=tnf;`6G`85Bp=O=w^A#$}qcR%pJ%qGI#~Nhyy0iWSrB6%rY#+t%6LBGVD*ug3PLhcsP+3W6E~|;;wP|C59JOgyJ6EYLfQR zzgq@-LSveIdRWS70-{X?P8WrMi^XJy$2Y<_q#-SOKJvYU=F-UA1c=ad?F$( zDGTj-4PHVX4pmWEDU7EcYX{@mX_ZgmsL9<5$>n>{!k?kbH=pV`enM5rcsTjC*A5JS zW_7}Xx+h_;hIy8-(6M|>Kflc?#qMiJn&JYjD2F6Hw0xJLWL=bwap$0`(6YxnILjx+ zqR?=(%_h0#unQ%s0F$5VO=QKzF<&IbTirnZr`FNQ%IN4i!Z1OxESXcx&pbsXD!+_L zmW?8zO{r*0T{27nD%IpQ5^JrwW>s})0;h*qUh?@c%{IC^4ol}RXcHsP|Z{4)KJe1ZfNr(b4e|#N-l^ zOq@StGyoRMj30u&OX2L zVT3v3IA?OkWQ0)`i!au~rS}|`^(2G7C{0WxCXHQ3)PpUoa7&JCmuVP-$!GbS^Kzch zEJWWf*#aaq?DbLkVw>MoUsAM_b}mU^#V{FH4Sn52p+W&gbt$7K4j5MU%t#HXbVpc@82w6$G^P5z zBBVI~*Btf*M3>Q;GCN!7Jr!P5lw3~~lnn!#P_mQX>948Rry4vqSg$<4)U?&BNnir!KYb<&$dC_MjdI|{tQE?cM?@-wN$>ZZ;clUzn21;W0L z=yh6U4`-|1kt68w#^A87v+T5%))kLfcmqLO{vjz|8eoqux_C9Te2}lNKVpKAQkHh?qujg1Nj8^g*oFw$)5f3djtzDT; zA@t-Xlp3o%dpj-oDeH7tIN9YFLw;K~sH!Stl`xChC2}^}VnXr8AqR-ZFC&f};#{9e zh1VyA=Uo2Hu#s9m4TXDHuX$ovz@6mVcp==dkJOH-svcu^cFF2S5y*KX20vx?tW85! zk&m_~rY*d}u>4vqHgtW%&e5b|Hgzd}T%KrQs68|xn!}QfLZx8#z^43Av3H88=%gk$ z69vlV(-~IX%2Y`mHtbp^TFGea)n7Gf_)gQQGehvSBtSem>D+{NSj&=(Cp5l3wRy=^ zmEYIYwy=FO-)~ER5Z>E0srE5yd*K>sipcVE9UaAjj&3* zR|qeDHPz68N3$9vKAQkj@l}K)4UppZ667DA5*JNU4ZVJeIuI5b6<6fOt9Ht7AU~8F zmiAL;+QKlyI=g&+4*4vU{gKA9A%tO)H@xj5uII~7VlkAuBVR++L<@Wi1NW%vEv(-d zb{#DuN5$4qSWSn^wt3^lZ8&=ju*D8FW# zU)1XjVZM9B{8Stg4!h*~FjuReRknpWnL}^1Drs)9{Rs>0s+xo!LhCg&OC-(su;Wh) z!HFoWGVD*|vSDvi)ztFFG;AnKp^mkmrl3JY&g+KzDS!9K0f&Vrix!$+g8nyg8a5IYz#sRY1nhtGc@9&eRr`)FDtG}c3pU;v;Qj?bMO ze4C*ik?2i|rg}^ys3xpA>aeV9=wy|d_9)_;f7GE@(BOn2uS9*Oq@;LQh2e1FogKau zMS88sC?sn`I=p>#VF zVsoLQ34x-huhY|05@KyN72usbQMHz|@MaCdbc`NMp{dMow2D4fvYfIx|2o}i)?=$N z^C^>0t>~=)L+-U?Y!*$#X*28Qq}v7uWWf9*YcL`TqqalruLub4^|k<#Y5iwf=kz}=#Q8Q1wKQtCb}|t-*RtX3VRLX zE2<8IxcHwfmVkvHl4~0FKGs5poEqL~ng5t~UPKj|7C*m1C?7@eD$THrCc1O)0}XYc zxr1mrC4LYVzsG-#qfN=;zK~69Rf;|m0*m45Tg$5gGt(9@<}aZnYM$@iM}@xd4wE5G zN`9U$xlyx6_D1Iqrcel<*j`#F4y7+MEbJLHcuc;YBzu_G6fi5x_sJ5*F!0EKI;=Mo z>`%UHb=^RS?G}FF>)|~VVF97hj~&4YS(D!(|y;L&b57~cBan6_r6 z>?*cN&00CUv?aB2acgpz!%045fTe{9vE=+!g??;$-e7TQbffo#6jMlCDqdvkCZg&g z^aAX>%Xg8=P9D#piZ_OLONVi1ct5Z&Mi0mMy^=6r{5fB& zll0bX8qFnv&MI%%a?bp5!WM|+SsCOeOD4lwtFXnPf|NA4Hbjv)Qn`oM{*Yq8Tw&8(ThIK$%aO=WI3Lxz)-g)AKu2Gr~HPaug5*| zq1`6$Emptiy~QUCr%xVDd3A53TFidB_%pI9PHSGmoO_hL8w^dY6rPzXyfS&KFaca0 z7L$3ymraCT8=b5vN-ng1Q1{YAQvSlDt;SIS2p^CxVOxL77^Uo~SKFAS$cN~4Wo|?1WO~aHGV@*!c93}+A577t0a#fvTqm$C0P4wo8eC|)a=Xb>fwcaEgwm03^ zQU1;5Oxb%SqBUA&F}M&r&yQTa__5?6l|_eLS184yB}~pATELR564fXrzX*@1L4T@H zi-l9mjivFDtw*nwTx~pqGSc2$Yh{e&^Cu0<9Lin^8A9F~_vrbWQ}RlJV&QL)Ayu>T zWw>My%ZzPb=$IGMHmW1UV|^*#q~sScBwuM1M6g&exo0VmOZCn(!x<02k?WJvW>Ot+9s78cqIR;Zhtt9XUs@6$8=`O0*x6{@pJ-qcbpq*@le%GX87 z3!9Vc_8(6OHC*Ao!%?Fjti}%m6)!<6KG+Gi9M~3-e6=AnZ=Nuwg#pFxTU4tJ|1SVk z57~UKVhv}Fo{esYx~1fWK~b`J)tPwwxG)$9PqFMjfDxuRQj%g^#_U#0Xs<%0UHETC zc%0)zU81h7ON|SUNh%AshU_^|E(XhQy}GBTSagzC84h_bMQvCbo_wqPX+^IsZi?#K zLRpxgF^{gG{51c;Vn^~G;jFMAH`(6BL`YkOM*;Wov}cp#Kg?*oc_&9=k$$tzW4mN#aZ# z`U^v@Lqnivm^9rkT*74SSJLPdh9%x66fWPLMMs%1rg2R9y+p5-j#p`!5oZ7h4SC%v;r$XOcmJc1_Aw9Erz>|N=L)rJduW@Me9j;l7dUgns z7*eV`!q&a{HHwYd&XD$TZ6PgM?Q`lAhzd6qlDqiQtKtoWP5K&bFC+4 z2a5|@#k-0bI2i~GJ4n(y8ut6*d8_qP%s3?}KOw*9aM(AZj;*(@ScDfZold@?iVuOL zq??@lvQD=rs{BoF4LeepSqU56q6wzr9ETDoh~(#CUl6V>bU@{PixsO{Yz7Q9W&XM) zhTZI1oa6#pZB>d#C&P|b@(zXM!={i*dM9BzI#hFd75Sqzhd^AMCBnXzc%gFgUw1bL05(u%z>>HMHruVfk18 z*!X=}$pEW7IHd9(-BA8Um%8r$(l?&h6bFaND-A<0wmR3|Q!;tul^g~hh0$zdo9U{; zwI|aV;rgRHO_YQt&}Po2aFA;Md7AK@VKgj<)dc_V5c%2v=*!WMVk%~h@}0i$pvPyd+8WXT z$Lmx>i#7bRlPbHUNexFSyvVj>%CI%`H_ZTt1}tff-B1XE6gs+EAhGOZp;YNOAw;A~ z`>PXkvo(Qb!zBM%mBM0@2K#F@c|&4S#*rm?uhm1#g)BHV8}3t=lmW){+a_C$B*d&!w!=uGg3q>X;fUKEt|;vQ&$2 zGFlI6XI6+L7DGn{p#9<1p{1FpS;r*gosdv1dbT!#YW2pp^e9OA-xn*G@bco)Z?~ko zilZtW6Sp41mnHwzy4vpSpb{#NBnc|$=`6*4;FD#gF7tUwBD4(5&A-Rd&6@=X)8=Kv zitrM(s=C5vl2E}kbQk{nNlkuMaN_&vGZ2a=3c~G;G^7i&OA<9>#`phW@4Et{s=9C| zJwXsezy@S&fC_@xTV_uW5Q>zHq>uy%O?n5>1hE&asMr!KVi$YOu`6OlL_|qcuz`Xi z>B-!0l`|#bzYq8M@?e~qbN1PL?X_3=Rypre9Zxt46=g-@Ff!HLy z1%#i7ZlgS|v!4zUu_nQGls_0#&@&7vFL?WkO;P;Jh0$?@0(dx+;vYQts8Z@oMDiO? zi;-m>Qpho%;l4vKQ(-BumopG~0QQceh^HUfmO5{y17gFp;V~mYH&2~9fCDHzfb?@7 zgA|+y&B%3ErE?H@4EvMQZu#y|=|Zd+i3{!24VvCSC&11q#{eU+<{f{y>3TvZh1VyNI^K#};dq>$MdV`Ue3^`c8l;L ztio7Ko4nNlI)9#-e-ULJw7XZMqBbA~*+)iXo1GB52Z3nV`VpQOEia3*r^;qxoBU=J zLMdK2WWhvOw6a{g+MwNBvH=r}flh_Mq!R)6#a_9uWD(-p@Id2iKEz`eF2Jy*cvAv* zc~+CGtrJCR4!ln->vgsu47RD=1iU4)$are^J>qQ(ojx>tM931z$`ZI+Z4)dg7KR?4 zvH6vZG#=c9;f|)P@p*4J+3tVj!{k6;BQDu)P7pG)QP|r42lx(1@u5Smi$(SUfIeZY z2x+vbEMCDkf6=U&)3sLwUVcItU|VCDvIi)55lJ2WA7vaGnBz4O_zNq&-MoG1syi2c z&q3TI5A1h!{Wcsfot7f934)ZAr?P>E50mhmwh3*!Fr`oq z#*W;k->I>URE34qh>_RSri4ElNkpn5+FVbgcM2deNk>2c1uPqzY=QCxERU1DV!!4{ zZ0r~E_NQrN{l6_QONal1LJ+ zv9q6qR(gC+ZTF6g9e8>J$liwt=_|a1!ajs-#5kdc#pAzZ7M2beIe-tBJ@&}RyMIG- zv^y^Uj)AFT%9u%n=IYuoX?~Mp)-l*io<8GkcRa@v6ihA~+jM;uaw9?^G7Z7whl z`Su6>&L9%Cq@rp;7_!&Zs-Nb+u7 zpv{0Lb*jSwy^#|i%Q#?CtjP@^H$p8mG+T}cX8d&+0!o}a)97e%t%_o^qhP;t#YbD& zP7DcDDn{j#*I63!v8vW4t`>DDwd&%q)7T$h*-azVY(lsD=|?_00H)DhXR&B zu_=?CK@1!Gw^dF*O54#)hls%s69k+SL5S?ZAhpT=!0`ZrjQ0jaF+W65P_GKA>ddnN zpT$S=$PJ50bMzxr9-*})m(Z$-_ic^cL-$MoMwB=zi$yt* z-91I`vLXGrZKimgJuGJutMNKE3TtIgM`?}>s$B=b*>U=S3bkY2&zQ4l5|At5^a$Xn zsFol`2Msw;P7qrA#B5$R-mh$T60;{sVM8q}is1@YVv($6c-s`lh8q|ktEPIQ$WZ{P z;bPC`n43~aOsbML;>;tJ2D~0Ga0%kPXrczR-DK34QP@XEiHKbNjBepT8k8U&IAvt` z(auFS7i)^NfWV1|7+wP37rj5@UQO!efSV2q?`|=L&GDM;h$F%2aCpZ(cf-=_M$v@D z@*ALSZaI;103z>5z~e>1%*N}XN+u5&jm}nWodm#!sO~_XyKrF4t2VvM(9Zy|t&#ya zE~xv5xQth_V0nnC_Fa(0yko;yUIrY08zYHOWsDwDk_1|d;FC>WNtR;_Pf8K>?g50; z!&tKY5w+_6hiy2Tdq@hV*8Uj)01(GwkI8Pn96!f6!&5xS_zN%>t_ncL1@{weOB=gH zRV3aN!ZYjzj+}u>X20Ppakq%cvF%4|roC3!6*mlRxnnM7QHfxbJ_?$XrGvekZCIwVPU z+6Vn;b2pR_0dR2x^J|``>ua9le-fz!7YZ+Wqe%n!)6#|b>q0~ZFi0j_8Io$^mJ)%Y=$Nx@01qx=u|~8X z^=F|9`+aS*PJ2+)y;JULNTD5kW{I(A!T zQP_l9M{a=HBVA7USX#3Y4eP^5r=BV{`ivKgMfuN%%kTmPD0h8G5O}^iAtPb#Apwh5 zjD3s2R4EZCR#iu0E^)a&pdZywkA^5#6E))6U=?l&++%_7(7z(8Gu z3Zr-;k>dxxjPQ&bo`6)TwYiQvO1G6taWbIoX(ca;^%6y