1
0
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:
David Hall
2017-03-28 13:03:28 -05:00
parent 324a9fd215
commit b15f79e8ce
6 changed files with 61 additions and 36 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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)