diff --git a/dbcon/execplan/simplefilter.cpp b/dbcon/execplan/simplefilter.cpp index 8e31fea4a..ee2302015 100644 --- a/dbcon/execplan/simplefilter.cpp +++ b/dbcon/execplan/simplefilter.cpp @@ -26,7 +26,6 @@ #include #include using namespace std; -#include #include "returnedcolumn.h" #include "constantcolumn.h" @@ -171,6 +170,21 @@ void SimpleFilter::rhs(ReturnedColumn* rhs) convertConstant(); } +std::string SimpleFilter::escapeString(const std::string& input) +{ + std::ostringstream ss; + for (std::string::const_iterator iter = input.begin(); iter != input.end(); iter++) + { + switch (*iter) + { + case '\\': ss << "\\\\"; break; + case '\'': ss << "\\'"; break; + default: ss << *iter; break; + } + } + return ss.str(); +} + const string SimpleFilter::data() const { string rhs, lhs; @@ -182,7 +196,7 @@ const string SimpleFilter::data() const fRhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY || fRhs->resultType().colDataType == CalpontSystemCatalog::DATE || fRhs->resultType().colDataType == CalpontSystemCatalog::DATETIME)) - rhs = "'" + boost::replace_all_copy(fRhs->data(), "'", "\\'") + "'"; + rhs = "'" + SimpleFilter::escapeString(fRhs->data()) + "'"; else rhs = fRhs->data(); if (dynamic_cast(fLhs) && @@ -193,7 +207,7 @@ const string SimpleFilter::data() const fLhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY || fLhs->resultType().colDataType == CalpontSystemCatalog::DATE || fLhs->resultType().colDataType == CalpontSystemCatalog::DATETIME)) - lhs = "'" + boost::replace_all_copy(fLhs->data(), "'", "\\'") + "'"; + lhs = "'" + SimpleFilter::escapeString(fLhs->data()) + "'"; else lhs = fLhs->data(); return lhs + " " + fOp->data() + " " + rhs; diff --git a/dbcon/execplan/simplefilter.h b/dbcon/execplan/simplefilter.h index 944c5e25a..d68d27873 100644 --- a/dbcon/execplan/simplefilter.h +++ b/dbcon/execplan/simplefilter.h @@ -180,6 +180,8 @@ public: virtual void replaceRealCol(std::vector&); + static std::string escapeString(const std::string& input); + private: SOP fOp; /// operator ReturnedColumn *fLhs; /// left operand