From ec69dc6bc1ada803407f0feb5cf8cfdea9d305f1 Mon Sep 17 00:00:00 2001 From: sdk-team Date: Mon, 28 Jun 2021 07:42:56 +0000 Subject: [PATCH] Support GetSQLReviewOptimizeDetail,ListSQLReviewOriginSQL Order API. --- CHANGELOG | 3 + VERSION | 2 +- dms-enterprise/CMakeLists.txt | 4 + .../dms-enterprise/Dms_enterpriseClient.h | 8 ++ .../model/GetSQLReviewOptimizeDetailRequest.h | 45 +++++++ .../model/GetSQLReviewOptimizeDetailResult.h | 86 +++++++++++++ .../model/ListSQLReviewOriginSQLResult.h | 3 + dms-enterprise/src/Dms-enterpriseClient.cc | 36 ++++++ .../GetSQLReviewOptimizeDetailRequest.cc | 45 +++++++ .../model/GetSQLReviewOptimizeDetailResult.cc | 113 ++++++++++++++++++ .../src/model/ListSQLReviewOriginSQLResult.cc | 6 + 11 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailRequest.h create mode 100644 dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailResult.h create mode 100644 dms-enterprise/src/model/GetSQLReviewOptimizeDetailRequest.cc create mode 100644 dms-enterprise/src/model/GetSQLReviewOptimizeDetailResult.cc diff --git a/CHANGELOG b/CHANGELOG index b17aac76d..d5fea1bb8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +2021-06-28 Version: 1.36.802 +- Support GetSQLReviewOptimizeDetail,ListSQLReviewOriginSQL Order API. + 2021-06-25 Version: 1.36.801 - Supported new features for outbound. diff --git a/VERSION b/VERSION index 76bc82c16..2de3f5ad7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.36.801 \ No newline at end of file +1.36.802 \ No newline at end of file diff --git a/dms-enterprise/CMakeLists.txt b/dms-enterprise/CMakeLists.txt index e7d0fa784..400945530 100644 --- a/dms-enterprise/CMakeLists.txt +++ b/dms-enterprise/CMakeLists.txt @@ -101,6 +101,8 @@ set(dms-enterprise_public_header_model include/alibabacloud/dms-enterprise/model/GetPhysicalDatabaseResult.h include/alibabacloud/dms-enterprise/model/GetSQLReviewCheckResultStatusRequest.h include/alibabacloud/dms-enterprise/model/GetSQLReviewCheckResultStatusResult.h + include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailRequest.h + include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailResult.h include/alibabacloud/dms-enterprise/model/GetStructSyncExecSqlDetailRequest.h include/alibabacloud/dms-enterprise/model/GetStructSyncExecSqlDetailResult.h include/alibabacloud/dms-enterprise/model/GetStructSyncJobAnalyzeResultRequest.h @@ -268,6 +270,8 @@ set(dms-enterprise_src src/model/GetPhysicalDatabaseResult.cc src/model/GetSQLReviewCheckResultStatusRequest.cc src/model/GetSQLReviewCheckResultStatusResult.cc + src/model/GetSQLReviewOptimizeDetailRequest.cc + src/model/GetSQLReviewOptimizeDetailResult.cc src/model/GetStructSyncExecSqlDetailRequest.cc src/model/GetStructSyncExecSqlDetailResult.cc src/model/GetStructSyncJobAnalyzeResultRequest.cc diff --git a/dms-enterprise/include/alibabacloud/dms-enterprise/Dms_enterpriseClient.h b/dms-enterprise/include/alibabacloud/dms-enterprise/Dms_enterpriseClient.h index 325e08996..090f011b6 100644 --- a/dms-enterprise/include/alibabacloud/dms-enterprise/Dms_enterpriseClient.h +++ b/dms-enterprise/include/alibabacloud/dms-enterprise/Dms_enterpriseClient.h @@ -102,6 +102,8 @@ #include "model/GetPhysicalDatabaseResult.h" #include "model/GetSQLReviewCheckResultStatusRequest.h" #include "model/GetSQLReviewCheckResultStatusResult.h" +#include "model/GetSQLReviewOptimizeDetailRequest.h" +#include "model/GetSQLReviewOptimizeDetailResult.h" #include "model/GetStructSyncExecSqlDetailRequest.h" #include "model/GetStructSyncExecSqlDetailResult.h" #include "model/GetStructSyncJobAnalyzeResultRequest.h" @@ -315,6 +317,9 @@ namespace AlibabaCloud typedef Outcome GetSQLReviewCheckResultStatusOutcome; typedef std::future GetSQLReviewCheckResultStatusOutcomeCallable; typedef std::function&)> GetSQLReviewCheckResultStatusAsyncHandler; + typedef Outcome GetSQLReviewOptimizeDetailOutcome; + typedef std::future GetSQLReviewOptimizeDetailOutcomeCallable; + typedef std::function&)> GetSQLReviewOptimizeDetailAsyncHandler; typedef Outcome GetStructSyncExecSqlDetailOutcome; typedef std::future GetStructSyncExecSqlDetailOutcomeCallable; typedef std::function&)> GetStructSyncExecSqlDetailAsyncHandler; @@ -566,6 +571,9 @@ namespace AlibabaCloud GetSQLReviewCheckResultStatusOutcome getSQLReviewCheckResultStatus(const Model::GetSQLReviewCheckResultStatusRequest &request)const; void getSQLReviewCheckResultStatusAsync(const Model::GetSQLReviewCheckResultStatusRequest& request, const GetSQLReviewCheckResultStatusAsyncHandler& handler, const std::shared_ptr& context = nullptr) const; GetSQLReviewCheckResultStatusOutcomeCallable getSQLReviewCheckResultStatusCallable(const Model::GetSQLReviewCheckResultStatusRequest& request) const; + GetSQLReviewOptimizeDetailOutcome getSQLReviewOptimizeDetail(const Model::GetSQLReviewOptimizeDetailRequest &request)const; + void getSQLReviewOptimizeDetailAsync(const Model::GetSQLReviewOptimizeDetailRequest& request, const GetSQLReviewOptimizeDetailAsyncHandler& handler, const std::shared_ptr& context = nullptr) const; + GetSQLReviewOptimizeDetailOutcomeCallable getSQLReviewOptimizeDetailCallable(const Model::GetSQLReviewOptimizeDetailRequest& request) const; GetStructSyncExecSqlDetailOutcome getStructSyncExecSqlDetail(const Model::GetStructSyncExecSqlDetailRequest &request)const; void getStructSyncExecSqlDetailAsync(const Model::GetStructSyncExecSqlDetailRequest& request, const GetStructSyncExecSqlDetailAsyncHandler& handler, const std::shared_ptr& context = nullptr) const; GetStructSyncExecSqlDetailOutcomeCallable getStructSyncExecSqlDetailCallable(const Model::GetStructSyncExecSqlDetailRequest& request) const; diff --git a/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailRequest.h b/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailRequest.h new file mode 100644 index 000000000..b33b14615 --- /dev/null +++ b/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailRequest.h @@ -0,0 +1,45 @@ +/* + * Copyright 2009-2017 Alibaba Cloud All rights reserved. + * + * Licensed 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. + */ + +#ifndef ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILREQUEST_H_ +#define ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILREQUEST_H_ + +#include +#include +#include +#include +#include + +namespace AlibabaCloud { +namespace Dms_enterprise { +namespace Model { +class ALIBABACLOUD_DMS_ENTERPRISE_EXPORT GetSQLReviewOptimizeDetailRequest : public RpcServiceRequest { +public: + GetSQLReviewOptimizeDetailRequest(); + ~GetSQLReviewOptimizeDetailRequest(); + std::string getSQLReviewQueryKey() const; + void setSQLReviewQueryKey(const std::string &sQLReviewQueryKey); + long getTid() const; + void setTid(long tid); + +private: + std::string sQLReviewQueryKey_; + long tid_; +}; +} // namespace Model +} // namespace Dms_enterprise +} // namespace AlibabaCloud +#endif // !ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILREQUEST_H_ diff --git a/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailResult.h b/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailResult.h new file mode 100644 index 000000000..a42c98228 --- /dev/null +++ b/dms-enterprise/include/alibabacloud/dms-enterprise/model/GetSQLReviewOptimizeDetailResult.h @@ -0,0 +1,86 @@ +/* + * Copyright 2009-2017 Alibaba Cloud All rights reserved. + * + * Licensed 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. + */ + +#ifndef ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILRESULT_H_ +#define ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILRESULT_H_ + +#include +#include +#include +#include +#include + +namespace AlibabaCloud +{ + namespace Dms_enterprise + { + namespace Model + { + class ALIBABACLOUD_DMS_ENTERPRISE_EXPORT GetSQLReviewOptimizeDetailResult : public ServiceResult + { + public: + struct OptimizeDetail + { + struct QualityResult + { + struct ResultsItem + { + struct ScriptsItem + { + std::string tableName; + std::string content; + std::string opType; + }; + std::vector messages; + std::vector scripts; + std::string feedback; + std::string comments; + std::string ruleType; + std::string ruleName; + }; + bool occurError; + std::vector results; + std::string errorMessage; + }; + int instanceId; + std::string queryKey; + int dbId; + std::string sqlType; + QualityResult qualityResult; + }; + + + GetSQLReviewOptimizeDetailResult(); + explicit GetSQLReviewOptimizeDetailResult(const std::string &payload); + ~GetSQLReviewOptimizeDetailResult(); + OptimizeDetail getOptimizeDetail()const; + std::string getErrorCode()const; + std::string getErrorMessage()const; + bool getSuccess()const; + + protected: + void parse(const std::string &payload); + private: + OptimizeDetail optimizeDetail_; + std::string errorCode_; + std::string errorMessage_; + bool success_; + + }; + } + } +} +#endif // !ALIBABACLOUD_DMS_ENTERPRISE_MODEL_GETSQLREVIEWOPTIMIZEDETAILRESULT_H_ \ No newline at end of file diff --git a/dms-enterprise/include/alibabacloud/dms-enterprise/model/ListSQLReviewOriginSQLResult.h b/dms-enterprise/include/alibabacloud/dms-enterprise/model/ListSQLReviewOriginSQLResult.h index cdf762d3b..617195bfb 100644 --- a/dms-enterprise/include/alibabacloud/dms-enterprise/model/ListSQLReviewOriginSQLResult.h +++ b/dms-enterprise/include/alibabacloud/dms-enterprise/model/ListSQLReviewOriginSQLResult.h @@ -34,13 +34,16 @@ namespace AlibabaCloud public: struct OriginSQLListItem { + std::string sqlHash; std::string statusDesc; std::string sQLContent; std::string checkedTime; std::string fileName; std::string checkStatus; long fileId; + std::string reviewSummary; long sQLId; + std::string sQLReviewQueryKey; }; diff --git a/dms-enterprise/src/Dms-enterpriseClient.cc b/dms-enterprise/src/Dms-enterpriseClient.cc index b6c3ae985..69557a51b 100644 --- a/dms-enterprise/src/Dms-enterpriseClient.cc +++ b/dms-enterprise/src/Dms-enterpriseClient.cc @@ -1491,6 +1491,42 @@ Dms_enterpriseClient::GetSQLReviewCheckResultStatusOutcomeCallable Dms_enterpris return task->get_future(); } +Dms_enterpriseClient::GetSQLReviewOptimizeDetailOutcome Dms_enterpriseClient::getSQLReviewOptimizeDetail(const GetSQLReviewOptimizeDetailRequest &request) const +{ + auto endpointOutcome = endpointProvider_->getEndpoint(); + if (!endpointOutcome.isSuccess()) + return GetSQLReviewOptimizeDetailOutcome(endpointOutcome.error()); + + auto outcome = makeRequest(endpointOutcome.result(), request); + + if (outcome.isSuccess()) + return GetSQLReviewOptimizeDetailOutcome(GetSQLReviewOptimizeDetailResult(outcome.result())); + else + return GetSQLReviewOptimizeDetailOutcome(outcome.error()); +} + +void Dms_enterpriseClient::getSQLReviewOptimizeDetailAsync(const GetSQLReviewOptimizeDetailRequest& request, const GetSQLReviewOptimizeDetailAsyncHandler& handler, const std::shared_ptr& context) const +{ + auto fn = [this, request, handler, context]() + { + handler(this, request, getSQLReviewOptimizeDetail(request), context); + }; + + asyncExecute(new Runnable(fn)); +} + +Dms_enterpriseClient::GetSQLReviewOptimizeDetailOutcomeCallable Dms_enterpriseClient::getSQLReviewOptimizeDetailCallable(const GetSQLReviewOptimizeDetailRequest &request) const +{ + auto task = std::make_shared>( + [this, request]() + { + return this->getSQLReviewOptimizeDetail(request); + }); + + asyncExecute(new Runnable([task]() { (*task)(); })); + return task->get_future(); +} + Dms_enterpriseClient::GetStructSyncExecSqlDetailOutcome Dms_enterpriseClient::getStructSyncExecSqlDetail(const GetStructSyncExecSqlDetailRequest &request) const { auto endpointOutcome = endpointProvider_->getEndpoint(); diff --git a/dms-enterprise/src/model/GetSQLReviewOptimizeDetailRequest.cc b/dms-enterprise/src/model/GetSQLReviewOptimizeDetailRequest.cc new file mode 100644 index 000000000..8c29ee2bb --- /dev/null +++ b/dms-enterprise/src/model/GetSQLReviewOptimizeDetailRequest.cc @@ -0,0 +1,45 @@ +/* + * Copyright 2009-2017 Alibaba Cloud All rights reserved. + * + * Licensed 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. + */ + +#include + +using AlibabaCloud::Dms_enterprise::Model::GetSQLReviewOptimizeDetailRequest; + +GetSQLReviewOptimizeDetailRequest::GetSQLReviewOptimizeDetailRequest() + : RpcServiceRequest("dms-enterprise", "2018-11-01", "GetSQLReviewOptimizeDetail") { + setMethod(HttpRequest::Method::Post); +} + +GetSQLReviewOptimizeDetailRequest::~GetSQLReviewOptimizeDetailRequest() {} + +std::string GetSQLReviewOptimizeDetailRequest::getSQLReviewQueryKey() const { + return sQLReviewQueryKey_; +} + +void GetSQLReviewOptimizeDetailRequest::setSQLReviewQueryKey(const std::string &sQLReviewQueryKey) { + sQLReviewQueryKey_ = sQLReviewQueryKey; + setParameter(std::string("SQLReviewQueryKey"), sQLReviewQueryKey); +} + +long GetSQLReviewOptimizeDetailRequest::getTid() const { + return tid_; +} + +void GetSQLReviewOptimizeDetailRequest::setTid(long tid) { + tid_ = tid; + setParameter(std::string("Tid"), std::to_string(tid)); +} + diff --git a/dms-enterprise/src/model/GetSQLReviewOptimizeDetailResult.cc b/dms-enterprise/src/model/GetSQLReviewOptimizeDetailResult.cc new file mode 100644 index 000000000..95d99b1a0 --- /dev/null +++ b/dms-enterprise/src/model/GetSQLReviewOptimizeDetailResult.cc @@ -0,0 +1,113 @@ +/* + * Copyright 2009-2017 Alibaba Cloud All rights reserved. + * + * Licensed 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. + */ + +#include +#include + +using namespace AlibabaCloud::Dms_enterprise; +using namespace AlibabaCloud::Dms_enterprise::Model; + +GetSQLReviewOptimizeDetailResult::GetSQLReviewOptimizeDetailResult() : + ServiceResult() +{} + +GetSQLReviewOptimizeDetailResult::GetSQLReviewOptimizeDetailResult(const std::string &payload) : + ServiceResult() +{ + parse(payload); +} + +GetSQLReviewOptimizeDetailResult::~GetSQLReviewOptimizeDetailResult() +{} + +void GetSQLReviewOptimizeDetailResult::parse(const std::string &payload) +{ + Json::Reader reader; + Json::Value value; + reader.parse(payload, value); + setRequestId(value["RequestId"].asString()); + auto optimizeDetailNode = value["OptimizeDetail"]; + if(!optimizeDetailNode["QueryKey"].isNull()) + optimizeDetail_.queryKey = optimizeDetailNode["QueryKey"].asString(); + if(!optimizeDetailNode["InstanceId"].isNull()) + optimizeDetail_.instanceId = std::stoi(optimizeDetailNode["InstanceId"].asString()); + if(!optimizeDetailNode["DbId"].isNull()) + optimizeDetail_.dbId = std::stoi(optimizeDetailNode["DbId"].asString()); + if(!optimizeDetailNode["SqlType"].isNull()) + optimizeDetail_.sqlType = optimizeDetailNode["SqlType"].asString(); + auto qualityResultNode = optimizeDetailNode["QualityResult"]; + if(!qualityResultNode["ErrorMessage"].isNull()) + optimizeDetail_.qualityResult.errorMessage = qualityResultNode["ErrorMessage"].asString(); + if(!qualityResultNode["OccurError"].isNull()) + optimizeDetail_.qualityResult.occurError = qualityResultNode["OccurError"].asString() == "true"; + auto allResultsNode = qualityResultNode["Results"]["ResultsItem"]; + for (auto qualityResultNodeResultsResultsItem : allResultsNode) + { + OptimizeDetail::QualityResult::ResultsItem resultsItemObject; + if(!qualityResultNodeResultsResultsItem["RuleName"].isNull()) + resultsItemObject.ruleName = qualityResultNodeResultsResultsItem["RuleName"].asString(); + if(!qualityResultNodeResultsResultsItem["Feedback"].isNull()) + resultsItemObject.feedback = qualityResultNodeResultsResultsItem["Feedback"].asString(); + if(!qualityResultNodeResultsResultsItem["Comments"].isNull()) + resultsItemObject.comments = qualityResultNodeResultsResultsItem["Comments"].asString(); + if(!qualityResultNodeResultsResultsItem["RuleType"].isNull()) + resultsItemObject.ruleType = qualityResultNodeResultsResultsItem["RuleType"].asString(); + auto allScriptsNode = qualityResultNodeResultsResultsItem["Scripts"]["ScriptsItem"]; + for (auto qualityResultNodeResultsResultsItemScriptsScriptsItem : allScriptsNode) + { + OptimizeDetail::QualityResult::ResultsItem::ScriptsItem scriptsObject; + if(!qualityResultNodeResultsResultsItemScriptsScriptsItem["OpType"].isNull()) + scriptsObject.opType = qualityResultNodeResultsResultsItemScriptsScriptsItem["OpType"].asString(); + if(!qualityResultNodeResultsResultsItemScriptsScriptsItem["Content"].isNull()) + scriptsObject.content = qualityResultNodeResultsResultsItemScriptsScriptsItem["Content"].asString(); + if(!qualityResultNodeResultsResultsItemScriptsScriptsItem["TableName"].isNull()) + scriptsObject.tableName = qualityResultNodeResultsResultsItemScriptsScriptsItem["TableName"].asString(); + resultsItemObject.scripts.push_back(scriptsObject); + } + auto allMessages = value["Messages"]["Messages"]; + for (auto value : allMessages) + resultsItemObject.messages.push_back(value.asString()); + optimizeDetail_.qualityResult.results.push_back(resultsItemObject); + } + if(!value["ErrorCode"].isNull()) + errorCode_ = value["ErrorCode"].asString(); + if(!value["ErrorMessage"].isNull()) + errorMessage_ = value["ErrorMessage"].asString(); + if(!value["Success"].isNull()) + success_ = value["Success"].asString() == "true"; + +} + +GetSQLReviewOptimizeDetailResult::OptimizeDetail GetSQLReviewOptimizeDetailResult::getOptimizeDetail()const +{ + return optimizeDetail_; +} + +std::string GetSQLReviewOptimizeDetailResult::getErrorCode()const +{ + return errorCode_; +} + +std::string GetSQLReviewOptimizeDetailResult::getErrorMessage()const +{ + return errorMessage_; +} + +bool GetSQLReviewOptimizeDetailResult::getSuccess()const +{ + return success_; +} + diff --git a/dms-enterprise/src/model/ListSQLReviewOriginSQLResult.cc b/dms-enterprise/src/model/ListSQLReviewOriginSQLResult.cc index b8f6be670..df4196fbc 100644 --- a/dms-enterprise/src/model/ListSQLReviewOriginSQLResult.cc +++ b/dms-enterprise/src/model/ListSQLReviewOriginSQLResult.cc @@ -57,6 +57,12 @@ void ListSQLReviewOriginSQLResult::parse(const std::string &payload) originSQLListObject.statusDesc = valueOriginSQLListOriginSQLListItem["StatusDesc"].asString(); if(!valueOriginSQLListOriginSQLListItem["CheckedTime"].isNull()) originSQLListObject.checkedTime = valueOriginSQLListOriginSQLListItem["CheckedTime"].asString(); + if(!valueOriginSQLListOriginSQLListItem["SqlHash"].isNull()) + originSQLListObject.sqlHash = valueOriginSQLListOriginSQLListItem["SqlHash"].asString(); + if(!valueOriginSQLListOriginSQLListItem["ReviewSummary"].isNull()) + originSQLListObject.reviewSummary = valueOriginSQLListOriginSQLListItem["ReviewSummary"].asString(); + if(!valueOriginSQLListOriginSQLListItem["SQLReviewQueryKey"].isNull()) + originSQLListObject.sQLReviewQueryKey = valueOriginSQLListOriginSQLListItem["SQLReviewQueryKey"].asString(); originSQLList_.push_back(originSQLListObject); } if(!value["ErrorCode"].isNull())