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-597 Fix up Windows Functions
This commit is contained in:
@ -61,7 +61,7 @@ set(joblist_LIB_SRCS
|
|||||||
|
|
||||||
add_library(joblist SHARED ${joblist_LIB_SRCS})
|
add_library(joblist SHARED ${joblist_LIB_SRCS})
|
||||||
|
|
||||||
target_link_libraries(joblist ${NETSNMP_LIBRARIES} -L${SERVER_BUILD_INCLUDE_DIR}/../libmysql/ libmysqlclient_r.so)
|
target_link_libraries(joblist -L${SERVER_BUILD_INCLUDE_DIR}/../libmariadb/libmariadb/ libmariadb.so)
|
||||||
|
|
||||||
set_target_properties(joblist PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
set_target_properties(joblist PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
||||||
|
|
||||||
|
@ -496,6 +496,11 @@ void debug_walk(const Item *item, void *arg)
|
|||||||
'.' << ifp->field_name << endl;
|
'.' << ifp->field_name << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if (field->type() == Item::FUNC_ITEM)
|
||||||
|
{
|
||||||
|
Item_func* ifp = (Item_func*)field;
|
||||||
|
cout << "CACHED REF FUNC_ITEM " << ifp->func_name() << endl;
|
||||||
|
}
|
||||||
else if (field->type() == Item::REF_ITEM)
|
else if (field->type() == Item::REF_ITEM)
|
||||||
{
|
{
|
||||||
Item_ref* ifr = (Item_ref*)field;
|
Item_ref* ifr = (Item_ref*)field;
|
||||||
@ -563,7 +568,20 @@ void debug_walk(const Item *item, void *arg)
|
|||||||
ifp->field_name << endl;
|
ifp->field_name << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cout << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl;
|
else if (ref->real_item()->type() == Item::FUNC_ITEM)
|
||||||
|
{
|
||||||
|
Item_func* ifp = (Item_func*)ref->real_item();
|
||||||
|
cout << "REF FUNC_ITEM " << ifp->func_name() << endl;
|
||||||
|
}
|
||||||
|
else if (ref->real_item()->type() == Item::WINDOW_FUNC_ITEM)
|
||||||
|
{
|
||||||
|
Item_window_func* ifp = (Item_window_func*)ref->real_item();
|
||||||
|
cout << "REF WINDOW_FUNC_ITEM " << ifp->window_func()->func_name() << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item::ROW_ITEM:
|
case Item::ROW_ITEM:
|
||||||
@ -700,7 +718,8 @@ void debug_walk(const Item *item, void *arg)
|
|||||||
}
|
}
|
||||||
case Item::WINDOW_FUNC_ITEM:
|
case Item::WINDOW_FUNC_ITEM:
|
||||||
{
|
{
|
||||||
cout << "Window Function Item" << endl;
|
Item_window_func* ifp = (Item_window_func*)item;
|
||||||
|
cout << "Window Function Item " << ifp->window_func()->func_name() << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -2407,18 +2426,19 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp
|
|||||||
case Item::REF_ITEM:
|
case Item::REF_ITEM:
|
||||||
{
|
{
|
||||||
Item_ref* ref = (Item_ref*)item;
|
Item_ref* ref = (Item_ref*)item;
|
||||||
if ((*(ref->ref))->type() == Item::SUM_FUNC_ITEM)
|
switch ((*(ref->ref))->type())
|
||||||
{
|
{
|
||||||
|
case Item::SUM_FUNC_ITEM:
|
||||||
return buildAggregateColumn(*(ref->ref), gwi);
|
return buildAggregateColumn(*(ref->ref), gwi);
|
||||||
}
|
case Item::FIELD_ITEM:
|
||||||
else if ((*(ref->ref))->type() == Item::FIELD_ITEM)
|
|
||||||
return buildReturnedColumn(*(ref->ref), gwi, nonSupport);
|
return buildReturnedColumn(*(ref->ref), gwi, nonSupport);
|
||||||
else if ((*(ref->ref))->type() == Item::REF_ITEM)
|
case Item::REF_ITEM:
|
||||||
return buildReturnedColumn(*(((Item_ref*)(*(ref->ref)))->ref), gwi, nonSupport);
|
return buildReturnedColumn(*(((Item_ref*)(*(ref->ref)))->ref), gwi, nonSupport);
|
||||||
else if ((*(ref->ref))->type() == Item::FUNC_ITEM)
|
case Item::FUNC_ITEM:
|
||||||
return buildFunctionColumn((Item_func*)(*(ref->ref)), gwi, nonSupport);
|
return buildFunctionColumn((Item_func*)(*(ref->ref)), gwi, nonSupport);
|
||||||
else
|
case Item::WINDOW_FUNC_ITEM:
|
||||||
{
|
return buildWindowFunctionColumn(*(ref->ref), gwi, nonSupport);
|
||||||
|
default:
|
||||||
gwi.fatalParseError = true;
|
gwi.fatalParseError = true;
|
||||||
gwi.parseErrorText = "Unknown REF item";
|
gwi.parseErrorText = "Unknown REF item";
|
||||||
break;
|
break;
|
||||||
@ -4390,8 +4410,6 @@ void gp_walk(const Item *item, void *arg)
|
|||||||
gwip->subQuery = orig;
|
gwip->subQuery = orig;
|
||||||
gwip->lastSub = existsSub;
|
gwip->lastSub = existsSub;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 50172
|
|
||||||
else if (sub->substype() == Item_subselect::IN_SUBS)
|
else if (sub->substype() == Item_subselect::IN_SUBS)
|
||||||
{
|
{
|
||||||
if (!((Item_in_subselect*)sub)->getOptimizer() && gwip->thd->derived_tables_processing)
|
if (!((Item_in_subselect*)sub)->getOptimizer() && gwip->thd->derived_tables_processing)
|
||||||
@ -4403,7 +4421,6 @@ void gp_walk(const Item *item, void *arg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
// store a dummy subselect object. the transform is handled in item_func.
|
// store a dummy subselect object. the transform is handled in item_func.
|
||||||
SubSelect *subselect = new SubSelect();
|
SubSelect *subselect = new SubSelect();
|
||||||
gwip->rcWorkStack.push(subselect);
|
gwip->rcWorkStack.push(subselect);
|
||||||
@ -4595,6 +4612,11 @@ void parse_item (Item *item, vector<Item_field*>& field_vec, bool& hasNonSupport
|
|||||||
item = (*(ref->ref));
|
item = (*(ref->ref));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ((*(ref->ref))->type() == Item::WINDOW_FUNC_ITEM)
|
||||||
|
{
|
||||||
|
parseInfo |= AF_BIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "UNKNOWN REF Item" << endl;
|
cout << "UNKNOWN REF Item" << endl;
|
||||||
|
@ -212,10 +212,16 @@ string ConvertFuncName(Item_sum* item)
|
|||||||
return "MAX";
|
return "MAX";
|
||||||
break;
|
break;
|
||||||
case Item_sum::STD_FUNC:
|
case Item_sum::STD_FUNC:
|
||||||
return "STDDEV_POP";
|
if (((Item_sum_variance*)item)->sample)
|
||||||
|
return "STDDEV_SAMP";
|
||||||
|
else
|
||||||
|
return "STDDEV_POP";
|
||||||
break;
|
break;
|
||||||
case Item_sum::VARIANCE_FUNC:
|
case Item_sum::VARIANCE_FUNC:
|
||||||
return "VAR_POP";
|
if (((Item_sum_variance*)item)->sample)
|
||||||
|
return "VAR_SAMP";
|
||||||
|
else
|
||||||
|
return "VAR_POP";
|
||||||
break;
|
break;
|
||||||
case Item_sum::SUM_BIT_FUNC:
|
case Item_sum::SUM_BIT_FUNC:
|
||||||
if (strcmp(item->func_name(), "bit_or(") == 0)
|
if (strcmp(item->func_name(), "bit_or(") == 0)
|
||||||
@ -375,7 +381,7 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
|||||||
return nullOnError(gwi);
|
return nullOnError(gwi);
|
||||||
srcp->asc(orderCol->direction == ORDER::ORDER_ASC ? true : false);
|
srcp->asc(orderCol->direction == ORDER::ORDER_ASC ? true : false);
|
||||||
// srcp->nullsFirst(orderCol->nulls); // nulls 2-default, 1-nulls first, 0-nulls last
|
// srcp->nullsFirst(orderCol->nulls); // nulls 2-default, 1-nulls first, 0-nulls last
|
||||||
srcp->nullsFirst(1); // WINDOWS TODO: implement NULLS FIRST/LAST in 10.2 front end
|
srcp->nullsFirst(orderCol->direction == ORDER::ORDER_ASC ? 1 : 0); // WINDOWS TODO: implement NULLS FIRST/LAST in 10.2 front end
|
||||||
orders.push_back(srcp);
|
orders.push_back(srcp);
|
||||||
}
|
}
|
||||||
orderBy.fOrders = orders;
|
orderBy.fOrders = orders;
|
||||||
@ -557,8 +563,15 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
|||||||
case Item_sum::SUM_DISTINCT_FUNC:
|
case Item_sum::SUM_DISTINCT_FUNC:
|
||||||
case Item_sum::AVG_FUNC:
|
case Item_sum::AVG_FUNC:
|
||||||
case Item_sum::AVG_DISTINCT_FUNC:
|
case Item_sum::AVG_DISTINCT_FUNC:
|
||||||
|
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
||||||
|
frm.fEnd.fFrame = WF_CURRENT_ROW;
|
||||||
|
break;
|
||||||
case Item_sum::MIN_FUNC:
|
case Item_sum::MIN_FUNC:
|
||||||
case Item_sum::MAX_FUNC:
|
case Item_sum::MAX_FUNC:
|
||||||
|
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
||||||
|
// frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
|
||||||
|
frm.fEnd.fFrame = WF_CURRENT_ROW;
|
||||||
|
break;
|
||||||
case Item_sum::STD_FUNC:
|
case Item_sum::STD_FUNC:
|
||||||
case Item_sum::VARIANCE_FUNC:
|
case Item_sum::VARIANCE_FUNC:
|
||||||
case Item_sum::SUM_BIT_FUNC:
|
case Item_sum::SUM_BIT_FUNC:
|
||||||
@ -569,15 +582,9 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
|||||||
break;
|
break;
|
||||||
case Item_sum::ROW_NUMBER_FUNC:
|
case Item_sum::ROW_NUMBER_FUNC:
|
||||||
case Item_sum::RANK_FUNC:
|
case Item_sum::RANK_FUNC:
|
||||||
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
|
||||||
frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
|
|
||||||
break;
|
|
||||||
case Item_sum::DENSE_RANK_FUNC:
|
case Item_sum::DENSE_RANK_FUNC:
|
||||||
case Item_sum::PERCENT_RANK_FUNC:
|
case Item_sum::PERCENT_RANK_FUNC:
|
||||||
case Item_sum::CUME_DIST_FUNC:
|
case Item_sum::CUME_DIST_FUNC:
|
||||||
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
|
||||||
frm.fEnd.fFrame = WF_CURRENT_ROW;
|
|
||||||
break;
|
|
||||||
case Item_sum::NTILE_FUNC:
|
case Item_sum::NTILE_FUNC:
|
||||||
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
|
||||||
frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
|
frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
|
||||||
|
@ -28,11 +28,11 @@ for arg in "$@"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
cd $installdir/mysql/lib
|
#cd $installdir/mysql/lib
|
||||||
for file in libmysqlclient libmysqlclient_r; do
|
#for file in libmysqlclient libmysqlclient_r; do
|
||||||
ln -sf $file.so.18.0.0 $file.so
|
# ln -sf $file.so.18.0.0 $file.so
|
||||||
ln -sf $file.so.18.0.0 $file.so.18
|
# ln -sf $file.so.18.0.0 $file.so.18
|
||||||
done
|
#done
|
||||||
cd $installdir/mysql/lib/plugin
|
cd $installdir/mysql/lib/plugin
|
||||||
for file in ha_archive ha_blackhole ha_federated ha_innodb; do
|
for file in ha_archive ha_blackhole ha_federated ha_innodb; do
|
||||||
ln -sf $file.so $file.so.0
|
ln -sf $file.so $file.so.0
|
||||||
|
@ -8,8 +8,6 @@ set(querystats_LIB_SRCS querystats.cpp)
|
|||||||
|
|
||||||
add_library(querystats SHARED ${querystats_LIB_SRCS})
|
add_library(querystats SHARED ${querystats_LIB_SRCS})
|
||||||
|
|
||||||
target_link_libraries(querystats -L${SERVER_BUILD_INCLUDE_DIR}/../libmysql/ libmysqlclient_r.so)
|
|
||||||
|
|
||||||
set_target_properties(querystats PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
set_target_properties(querystats PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
||||||
|
|
||||||
install(TARGETS querystats DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)
|
install(TARGETS querystats DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)
|
||||||
|
@ -32,8 +32,6 @@ set(brm_LIB_SRCS
|
|||||||
|
|
||||||
add_library(brm SHARED ${brm_LIB_SRCS})
|
add_library(brm SHARED ${brm_LIB_SRCS})
|
||||||
|
|
||||||
target_link_libraries(brm ${NETSNMP_LIBRARIES})
|
|
||||||
|
|
||||||
set_target_properties(brm PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
set_target_properties(brm PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
||||||
|
|
||||||
install(TARGETS brm DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)
|
install(TARGETS brm DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)
|
||||||
@ -45,7 +43,7 @@ set(controllernode_SRCS masternode.cpp masterdbrmnode.cpp)
|
|||||||
|
|
||||||
add_executable(controllernode ${controllernode_SRCS})
|
add_executable(controllernode ${controllernode_SRCS})
|
||||||
|
|
||||||
target_link_libraries(controllernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES})
|
target_link_libraries(controllernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} )
|
||||||
|
|
||||||
install(TARGETS controllernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
install(TARGETS controllernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
||||||
|
|
||||||
@ -56,7 +54,7 @@ set(workernode_SRCS slavenode.cpp)
|
|||||||
|
|
||||||
add_executable(workernode ${workernode_SRCS})
|
add_executable(workernode ${workernode_SRCS})
|
||||||
|
|
||||||
target_link_libraries(workernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES})
|
target_link_libraries(workernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS})
|
||||||
|
|
||||||
install(TARGETS workernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
install(TARGETS workernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
||||||
|
|
||||||
@ -67,7 +65,7 @@ set(dbrmctl_SRCS dbrmctl.cpp)
|
|||||||
|
|
||||||
add_executable(dbrmctl ${dbrmctl_SRCS})
|
add_executable(dbrmctl ${dbrmctl_SRCS})
|
||||||
|
|
||||||
target_link_libraries(dbrmctl ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES})
|
target_link_libraries(dbrmctl ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS})
|
||||||
|
|
||||||
install(TARGETS dbrmctl DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
install(TARGETS dbrmctl DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user