1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-05 16:15:50 +03:00

MCOL-812 Escape slash as well as single quote

Previous attempt at fix only escaped quote
This commit is contained in:
Andrew Hutchings
2017-08-03 20:35:38 +01:00
parent f2e7feffd6
commit 2e2d7f3289
2 changed files with 19 additions and 3 deletions

View File

@@ -26,7 +26,6 @@
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
using namespace std; using namespace std;
#include <boost/algorithm/string/replace.hpp>
#include "returnedcolumn.h" #include "returnedcolumn.h"
#include "constantcolumn.h" #include "constantcolumn.h"
@@ -171,6 +170,21 @@ void SimpleFilter::rhs(ReturnedColumn* rhs)
convertConstant(); 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 const string SimpleFilter::data() const
{ {
string rhs, lhs; string rhs, lhs;
@@ -182,7 +196,7 @@ const string SimpleFilter::data() const
fRhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY || fRhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY ||
fRhs->resultType().colDataType == CalpontSystemCatalog::DATE || fRhs->resultType().colDataType == CalpontSystemCatalog::DATE ||
fRhs->resultType().colDataType == CalpontSystemCatalog::DATETIME)) fRhs->resultType().colDataType == CalpontSystemCatalog::DATETIME))
rhs = "'" + boost::replace_all_copy(fRhs->data(), "'", "\\'") + "'"; rhs = "'" + SimpleFilter::escapeString(fRhs->data()) + "'";
else else
rhs = fRhs->data(); rhs = fRhs->data();
if (dynamic_cast<ConstantColumn*>(fLhs) && if (dynamic_cast<ConstantColumn*>(fLhs) &&
@@ -193,7 +207,7 @@ const string SimpleFilter::data() const
fLhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY || fLhs->resultType().colDataType == CalpontSystemCatalog::VARBINARY ||
fLhs->resultType().colDataType == CalpontSystemCatalog::DATE || fLhs->resultType().colDataType == CalpontSystemCatalog::DATE ||
fLhs->resultType().colDataType == CalpontSystemCatalog::DATETIME)) fLhs->resultType().colDataType == CalpontSystemCatalog::DATETIME))
lhs = "'" + boost::replace_all_copy(fLhs->data(), "'", "\\'") + "'"; lhs = "'" + SimpleFilter::escapeString(fLhs->data()) + "'";
else else
lhs = fLhs->data(); lhs = fLhs->data();
return lhs + " " + fOp->data() + " " + rhs; return lhs + " " + fOp->data() + " " + rhs;

View File

@@ -180,6 +180,8 @@ public:
virtual void replaceRealCol(std::vector<SRCP>&); virtual void replaceRealCol(std::vector<SRCP>&);
static std::string escapeString(const std::string& input);
private: private:
SOP fOp; /// operator SOP fOp; /// operator
ReturnedColumn *fLhs; /// left operand ReturnedColumn *fLhs; /// left operand