You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
MCOL-47. Fix so IN string lists don't mess up
This commit is contained in:
@ -225,7 +225,7 @@ void debug_walk(const Item *item, void *arg)
|
|||||||
{
|
{
|
||||||
Item_string* isp = (Item_string*)item;
|
Item_string* isp = (Item_string*)item;
|
||||||
String val, *str = isp->val_str(&val);
|
String val, *str = isp->val_str(&val);
|
||||||
cout << "STRING_ITEM: >" << str->c_ptr() << '<' << endl;
|
cout << "STRING_ITEM: >" << str->ptr() << '<' << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item::REAL_ITEM:
|
case Item::REAL_ITEM:
|
||||||
@ -553,16 +553,21 @@ void debug_walk(const Item *item, void *arg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (str)
|
if (str)
|
||||||
cout << ": (" << str->c_ptr() << ')' << endl;
|
cout << ": (" << str->ptr() << ')' << endl;
|
||||||
else
|
else
|
||||||
cout << ": <NULL>" << endl;
|
cout << ": <NULL>" << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item::DATE_ITEM:
|
case Item::DATE_ITEM:
|
||||||
{
|
{
|
||||||
String val;
|
String val, *str=NULL;
|
||||||
Item_temporal_literal* itp = (Item_temporal_literal*)item;
|
Item_temporal_literal* itp = (Item_temporal_literal*)item;
|
||||||
cout << "DATE ITEM: " << itp->val_str(&val)->c_ptr() << endl;
|
str = itp->val_str(&val);
|
||||||
|
cout << "DATE ITEM: ";
|
||||||
|
if (str)
|
||||||
|
cout << ": (" << str->ptr() << ')' << endl;
|
||||||
|
else
|
||||||
|
cout << ": <NULL>" << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item::WINDOW_FUNC_ITEM:
|
case Item::WINDOW_FUNC_ITEM:
|
||||||
@ -1016,9 +1021,9 @@ bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip)
|
|||||||
// @bug5811. This filter string is for cross engine to use.
|
// @bug5811. This filter string is for cross engine to use.
|
||||||
// Use real table name.
|
// Use real table name.
|
||||||
ifp->print(&str, QT_INFINIDB_DERIVED);
|
ifp->print(&str, QT_INFINIDB_DERIVED);
|
||||||
//IDEBUG(cout << str.c_ptr() << endl);
|
//IDEBUG(cout << str.ptr() << endl);
|
||||||
if (str.c_ptr())
|
if (str.ptr())
|
||||||
cf->data(str.c_ptr());
|
cf->data(str.ptr());
|
||||||
ParseTree* ptp = new ParseTree(cf);
|
ParseTree* ptp = new ParseTree(cf);
|
||||||
gwip->ptWorkStack.push(ptp);
|
gwip->ptWorkStack.push(ptp);
|
||||||
return true;
|
return true;
|
||||||
@ -1095,9 +1100,9 @@ bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip)
|
|||||||
// @bug5811. This filter string is for cross engine to use.
|
// @bug5811. This filter string is for cross engine to use.
|
||||||
// Use real table name.
|
// Use real table name.
|
||||||
ifp->print(&str, QT_INFINIDB_DERIVED);
|
ifp->print(&str, QT_INFINIDB_DERIVED);
|
||||||
IDEBUG(cout << str.c_ptr() << endl);
|
IDEBUG(cout << str.ptr() << endl);
|
||||||
if (str.c_ptr())
|
if (str.ptr())
|
||||||
cf->data(str.c_ptr());
|
cf->data(str.ptr());
|
||||||
ParseTree* ptp = new ParseTree(cf);
|
ParseTree* ptp = new ParseTree(cf);
|
||||||
gwip->ptWorkStack.push(ptp);
|
gwip->ptWorkStack.push(ptp);
|
||||||
}
|
}
|
||||||
@ -1154,10 +1159,10 @@ bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (udf->result_type() == STRING_RESULT)
|
if (udf->result_type() == STRING_RESULT)
|
||||||
gwip->rcWorkStack.push(new ConstantColumn(buf.c_ptr()));
|
gwip->rcWorkStack.push(new ConstantColumn(buf.ptr()));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gwip->rcWorkStack.push(new ConstantColumn(buf.c_ptr(), ConstantColumn::NUM));
|
gwip->rcWorkStack.push(new ConstantColumn(buf.ptr(), ConstantColumn::NUM));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -3781,7 +3786,13 @@ void gp_walk(const Item *item, void *arg)
|
|||||||
if (isp->result_type() == STRING_RESULT)
|
if (isp->result_type() == STRING_RESULT)
|
||||||
{
|
{
|
||||||
String val, *str = isp->val_str(&val);
|
String val, *str = isp->val_str(&val);
|
||||||
string cval(str->c_ptr());
|
string cval;
|
||||||
|
if (str->ptr())
|
||||||
|
{
|
||||||
|
cval = str->ptr();
|
||||||
|
// MariaDB doesn't always put a null terminator. Trim to proper length.
|
||||||
|
cval = cval.substr(0, str->length());
|
||||||
|
}
|
||||||
size_t spos = cval.find_last_not_of(" ");
|
size_t spos = cval.find_last_not_of(" ");
|
||||||
if (spos != string::npos)
|
if (spos != string::npos)
|
||||||
cval = cval.substr(0, spos+1);
|
cval = cval.substr(0, spos+1);
|
||||||
|
Reference in New Issue
Block a user