diff --git a/dbcon/execplan/constantcolumn.cpp b/dbcon/execplan/constantcolumn.cpp index 3a816b114..786610767 100644 --- a/dbcon/execplan/constantcolumn.cpp +++ b/dbcon/execplan/constantcolumn.cpp @@ -205,11 +205,11 @@ ConstantColumn::ConstantColumn( const ConstantColumn& rhs): if (fRegex.get() != NULL) { fRegex.reset(new CNX_Regex()); -#ifdef _MSC_VER - *fRegex = dataconvert::DataConvert::constructRegexp(fResult.strVal); -#else +#ifdef POSIX_REGEX string str = dataconvert::DataConvert::constructRegexp(fResult.strVal); regcomp(fRegex.get(), str.c_str(), REG_NOSUB | REG_EXTENDED); +#else + *fRegex = dataconvert::DataConvert::constructRegexp(fResult.strVal); #endif } } @@ -256,7 +256,7 @@ ConstantColumn::ConstantColumn(const uint64_t val, TYPE type) : ConstantColumn::~ConstantColumn() { -#ifndef _MSC_VER +#ifdef POSIX_REGEX if (fRegex.get() != NULL) regfree(fRegex.get()); @@ -394,11 +394,11 @@ void ConstantColumn::constructRegex() { //fRegex = new regex_t(); fRegex.reset(new CNX_Regex()); -#ifdef _MSC_VER - *fRegex = dataconvert::DataConvert::constructRegexp(fResult.strVal); -#else +#ifdef POSIX_REGEX string str = dataconvert::DataConvert::constructRegexp(fResult.strVal); regcomp(fRegex.get(), str.c_str(), REG_NOSUB | REG_EXTENDED); +#else + *fRegex = dataconvert::DataConvert::constructRegexp(fResult.strVal); #endif } diff --git a/dbcon/execplan/predicateoperator.h b/dbcon/execplan/predicateoperator.h index 8b3a51fec..8e19aa1b7 100644 --- a/dbcon/execplan/predicateoperator.h +++ b/dbcon/execplan/predicateoperator.h @@ -128,31 +128,31 @@ inline bool PredicateOperator::getBoolVal(rowgroup::Row& row, bool& isNull, Retu // considers these nulls significant, but they're not in the pattern, so we need to strip // them off... const std::string& v = lop->getStrVal(row, isNull); - char* c = (char*)alloca(v.length() + 1); - memcpy(c, v.c_str(), v.length()); - c[v.length()] = 0; - std::string vv(c); +// char* c = (char*)alloca(v.length() + 1); +// memcpy(c, v.c_str(), v.length()); +// c[v.length()] = 0; +// std::string vv(c); if (regex) { -#ifdef _MSC_VER - bool ret = boost::regex_match(vv, *regex); +#ifdef POSIX_REGEX + bool ret = regexec(regex.get(), v.c_str(), 0, NULL, 0) == 0; #else - bool ret = regexec(regex.get(), vv.c_str(), 0, NULL, 0) == 0; + bool ret = boost::regex_match(v.c_str(), *regex); #endif return (((fOp == OP_LIKE) ? ret : !ret) && !isNull); } else { -#ifdef _MSC_VER - boost::regex regex(dataconvert::DataConvert::constructRegexp(rop->getStrVal(row, isNull))); - bool ret = boost::regex_match(vv, regex); -#else +#ifdef POSIX_REGEX regex_t regex; std::string str = dataconvert::DataConvert::constructRegexp(rop->getStrVal(row, isNull)); regcomp(®ex, str.c_str(), REG_NOSUB | REG_EXTENDED); - bool ret = regexec(®ex, vv.c_str(), 0, NULL, 0) == 0; + bool ret = regexec(®ex, v.c_str(), 0, NULL, 0) == 0; regfree(®ex); +#else + boost::regex regex(dataconvert::DataConvert::constructRegexp(rop->getStrVal(row, isNull))); + bool ret = boost::regex_match(v.c_str(), regex); #endif return (((fOp == OP_LIKE) ? ret : !ret) && !isNull); } diff --git a/dbcon/execplan/treenode.h b/dbcon/execplan/treenode.h index 6a49fa16f..42518db86 100644 --- a/dbcon/execplan/treenode.h +++ b/dbcon/execplan/treenode.h @@ -167,10 +167,10 @@ typedef IDB_Decimal CNX_Decimal; * @brief IDB_Regex struct * */ -#ifdef _MSC_VER -typedef boost::regex IDB_Regex; -#else +#ifdef POSIX_REGEX typedef regex_t IDB_Regex; +#else +typedef boost::regex IDB_Regex; #endif typedef IDB_Regex CNX_Regex; diff --git a/dbcon/joblist/jlf_execplantojoblist.cpp b/dbcon/joblist/jlf_execplantojoblist.cpp index d73e79ff9..f15f919db 100644 --- a/dbcon/joblist/jlf_execplantojoblist.cpp +++ b/dbcon/joblist/jlf_execplantojoblist.cpp @@ -1644,15 +1644,13 @@ const JobStepVector doSimpleFilter(SimpleFilter* sf, JobInfo& jobInfo) // type of pseudo column is set by connector if (!sc->schemaName().empty() && sc->isInfiniDB() && !pc) ct = jobInfo.csc->colType(sc->oid()); +//X // Because, on a filter, we want to compare ignoring trailing spaces in many cases - // MaraiDB Server compares without trim for LIKE against CHAR. - if (ct.colDataType != execplan::CalpontSystemCatalog::CHAR || - sf->op()->op() != execplan::OP_LIKE) + if (sf->op()->op() != execplan::OP_LIKE) { boost::algorithm::trim_right_if(constval, boost::is_any_of(" ")); } -//X //@bug 339 nulls are not stored in dictionary if ((dictOid = isDictCol(ct)) > 0 && ConstantColumn::NULLDATA != cc->type()) { diff --git a/primitives/linux-port/primitiveprocessor.h b/primitives/linux-port/primitiveprocessor.h index 366e90daf..a02f88b29 100644 --- a/primitives/linux-port/primitiveprocessor.h +++ b/primitives/linux-port/primitiveprocessor.h @@ -33,9 +33,9 @@ #include #endif -#ifdef __linux__ -#define POSIX_REGEX -#endif +//#ifdef __linux__ +//#define POSIX_REGEX +//#endif #ifdef POSIX_REGEX #include diff --git a/utils/funcexp/utils_utf8.h b/utils/funcexp/utils_utf8.h index 03035957e..9356ec737 100644 --- a/utils/funcexp/utils_utf8.h +++ b/utils/funcexp/utils_utf8.h @@ -166,7 +166,6 @@ int idb_strtrimcoll(const std::string& str1, const std::string& str2) std::locale loc; const std::collate& coll = std::use_facet >(loc); int rtn = coll.compare(s1, s1+found1+1, s2, s2+found2+1); -// return coll.compare(s1, s1+found1, s2, s2+found2); return rtn; }