You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-4100 Use correct collation for certain functions
LOCATE, INSTR, STRCMP and FIND_IN_SET
This commit is contained in:
@ -4087,7 +4087,20 @@ ReturnedColumn* buildFunctionColumn(
|
|||||||
|
|
||||||
fc->operationType(functor->operationType(funcParms, fc->resultType()));
|
fc->operationType(functor->operationType(funcParms, fc->resultType()));
|
||||||
fc->expressionId(ci->expressionId++);
|
fc->expressionId(ci->expressionId++);
|
||||||
fc->charsetNumber(ifp->collation.collation->number);
|
// A few functions use a different collation than that found in
|
||||||
|
// the base ifp class
|
||||||
|
if (funcName == "locate" ||
|
||||||
|
funcName == "find_in_set" ||
|
||||||
|
funcName == "strcmp")
|
||||||
|
{
|
||||||
|
DTCollation dt;
|
||||||
|
ifp->Type_std_attributes::agg_arg_charsets_for_comparison(dt, ifp->func_name(), ifp->arguments(), 1, 1);
|
||||||
|
fc->charsetNumber(dt.collation->number);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fc->charsetNumber(ifp->collation.collation->number);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (ifp->type() == Item::COND_ITEM ||
|
else if (ifp->type() == Item::COND_ITEM ||
|
||||||
ifp->functype() == Item_func::EQ_FUNC ||
|
ifp->functype() == Item_func::EQ_FUNC ||
|
||||||
|
@ -74,7 +74,7 @@ int64_t Func_strcmp::getIntVal(rowgroup::Row& row,
|
|||||||
const string& str = fp[0]->data()->getStrVal(row, isNull);
|
const string& str = fp[0]->data()->getStrVal(row, isNull);
|
||||||
const string& str1 = fp[1]->data()->getStrVal(row, isNull);
|
const string& str1 = fp[1]->data()->getStrVal(row, isNull);
|
||||||
|
|
||||||
int ret = cs->strnncoll(str.c_str(), str.length(), str1.c_str(), str1.length());
|
int ret = cs->strnncollsp(str.c_str(), str.length(), str1.c_str(), str1.length());
|
||||||
// mysql's strcmp returns only -1, 0, and 1
|
// mysql's strcmp returns only -1, 0, and 1
|
||||||
return (ret < 0 ? -1 : (ret > 0 ? 1 : 0));
|
return (ret < 0 ? -1 : (ret > 0 ? 1 : 0));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user