diff --git a/dbcon/ddlpackageproc/ddlpackageprocessor.h b/dbcon/ddlpackageproc/ddlpackageprocessor.h index 6b3ccdf07..6d5171019 100644 --- a/dbcon/ddlpackageproc/ddlpackageprocessor.h +++ b/dbcon/ddlpackageproc/ddlpackageprocessor.h @@ -863,6 +863,32 @@ bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&) return !(iss >> f >> t).fail(); } +class FormatStatementString +{ + public: + FormatStatementString() = default; + ~FormatStatementString() = default; + + std::string formatStatementString(const std::string& cmd, const std::string& schema, + const std::string& table, + const std::set& partitions) + { + std::ostringstream stmt; + stmt << cmd << "(" << schema << "," << table << ","; + + // There must be at least one partition to drop. + for (auto& p : partitions) + { + stmt << p << ","; + } + + auto res = stmt.str(); + res.back() = ')'; + + return res; + } +}; + } // namespace ddlpackageprocessor #undef EXPORT diff --git a/dbcon/ddlpackageproc/droppartitionprocessor.cpp b/dbcon/ddlpackageproc/droppartitionprocessor.cpp index f5fd55747..f01fa1ade 100644 --- a/dbcon/ddlpackageproc/droppartitionprocessor.cpp +++ b/dbcon/ddlpackageproc/droppartitionprocessor.cpp @@ -119,7 +119,8 @@ DropPartitionProcessor::DDLResult DropPartitionProcessor::processPackageInternal return result; } - string stmt = dropPartitionStmt->fSql + "|" + dropPartitionStmt->fTableName->fSchema + "|"; + auto stmt = formatStatementString(dropPartitionStmt->fSql, dropPartitionStmt->fTableName->fSchema, + dropPartitionStmt->fTableName->fName, dropPartitionStmt->fPartitions); SQLLogger logger(stmt, fDDLLoggingId, sessionID, txnID.id); try diff --git a/dbcon/ddlpackageproc/droppartitionprocessor.h b/dbcon/ddlpackageproc/droppartitionprocessor.h index 6c0b66d39..914df8f56 100644 --- a/dbcon/ddlpackageproc/droppartitionprocessor.h +++ b/dbcon/ddlpackageproc/droppartitionprocessor.h @@ -33,7 +33,7 @@ namespace ddlpackageprocessor * for interacting with the Write Engine to process * drop table ddl statements. */ -class DropPartitionProcessor : public DDLPackageProcessor +class DropPartitionProcessor : public DDLPackageProcessor, FormatStatementString { public: DropPartitionProcessor(BRM::DBRM* aDbrm) : DDLPackageProcessor(aDbrm) diff --git a/dbcon/ddlpackageproc/markpartitionprocessor.cpp b/dbcon/ddlpackageproc/markpartitionprocessor.cpp index 6c87d5e0e..a5c166022 100644 --- a/dbcon/ddlpackageproc/markpartitionprocessor.cpp +++ b/dbcon/ddlpackageproc/markpartitionprocessor.cpp @@ -81,7 +81,8 @@ MarkPartitionProcessor::DDLResult MarkPartitionProcessor::processPackageInternal CalpontSystemCatalog::DictOIDList dictOIDList; std::string processName("DDLProc"); - string stmt = markPartitionStmt->fSql + "|" + markPartitionStmt->fTableName->fSchema + "|"; + auto stmt = formatStatementString(markPartitionStmt->fSql, markPartitionStmt->fTableName->fSchema, + markPartitionStmt->fTableName->fName, markPartitionStmt->fPartitions); SQLLogger logger(stmt, fDDLLoggingId, markPartitionStmt->fSessionID, txnID.id); uint32_t processID = 0; diff --git a/dbcon/ddlpackageproc/markpartitionprocessor.h b/dbcon/ddlpackageproc/markpartitionprocessor.h index c3661a81d..ed3454f94 100644 --- a/dbcon/ddlpackageproc/markpartitionprocessor.h +++ b/dbcon/ddlpackageproc/markpartitionprocessor.h @@ -33,7 +33,7 @@ namespace ddlpackageprocessor * for interacting with the Write Engine * to process create table ddl statements. */ -class MarkPartitionProcessor : public DDLPackageProcessor +class MarkPartitionProcessor : public DDLPackageProcessor, FormatStatementString { public: MarkPartitionProcessor(BRM::DBRM* aDbrm) : DDLPackageProcessor(aDbrm) diff --git a/dbcon/ddlpackageproc/restorepartitionprocessor.cpp b/dbcon/ddlpackageproc/restorepartitionprocessor.cpp index d2883222b..2ff559626 100644 --- a/dbcon/ddlpackageproc/restorepartitionprocessor.cpp +++ b/dbcon/ddlpackageproc/restorepartitionprocessor.cpp @@ -82,7 +82,8 @@ RestorePartitionProcessor::DDLResult RestorePartitionProcessor::processPackageIn CalpontSystemCatalog::DictOIDList dictOIDList; std::string processName("DDLProc"); - string stmt = restorePartitionStmt->fSql + "|" + restorePartitionStmt->fTableName->fSchema + "|"; + auto stmt = formatStatementString(restorePartitionStmt->fSql, restorePartitionStmt->fTableName->fSchema, + restorePartitionStmt->fTableName->fName, restorePartitionStmt->fPartitions); SQLLogger logger(stmt, fDDLLoggingId, restorePartitionStmt->fSessionID, txnID.id); uint32_t processID = 0; diff --git a/dbcon/ddlpackageproc/restorepartitionprocessor.h b/dbcon/ddlpackageproc/restorepartitionprocessor.h index 8e77c7eb9..d2b6e74f9 100644 --- a/dbcon/ddlpackageproc/restorepartitionprocessor.h +++ b/dbcon/ddlpackageproc/restorepartitionprocessor.h @@ -33,7 +33,7 @@ namespace ddlpackageprocessor * for interacting with the Write Engine to process * drop table ddl statements. */ -class RestorePartitionProcessor : public DDLPackageProcessor +class RestorePartitionProcessor : public DDLPackageProcessor, FormatStatementString { public: RestorePartitionProcessor(BRM::DBRM* aDbrm) : DDLPackageProcessor(aDbrm)