From b15f79e8ce41811073f8585ac96ed377a1e40b7d Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 28 Mar 2017 13:03:28 -0500 Subject: [PATCH] MCOL-597 Fix up Windows Functions --- dbcon/joblist/CMakeLists.txt | 2 +- dbcon/mysql/ha_calpont_execplan.cpp | 48 ++++++++++++++++++------- dbcon/mysql/ha_window_function.cpp | 27 ++++++++------ oam/install_scripts/post-mysqld-install | 10 +++--- utils/querystats/CMakeLists.txt | 2 -- versioning/BRM/CMakeLists.txt | 8 ++--- 6 files changed, 61 insertions(+), 36 deletions(-) diff --git a/dbcon/joblist/CMakeLists.txt b/dbcon/joblist/CMakeLists.txt index 7fac3a859..0a7880413 100644 --- a/dbcon/joblist/CMakeLists.txt +++ b/dbcon/joblist/CMakeLists.txt @@ -61,7 +61,7 @@ set(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) diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index 93499aa4d..5180e03ae 100755 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -496,6 +496,11 @@ void debug_walk(const Item *item, void *arg) '.' << ifp->field_name << endl; 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) { Item_ref* ifr = (Item_ref*)field; @@ -563,7 +568,20 @@ void debug_walk(const Item *item, void *arg) ifp->field_name << endl; 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; } case Item::ROW_ITEM: @@ -700,7 +718,8 @@ void debug_walk(const Item *item, void *arg) } 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; } default: @@ -2407,18 +2426,19 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp case 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); - } - else if ((*(ref->ref))->type() == Item::FIELD_ITEM) + case Item::FIELD_ITEM: 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); - else if ((*(ref->ref))->type() == Item::FUNC_ITEM) + case Item::FUNC_ITEM: 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.parseErrorText = "Unknown REF item"; break; @@ -4390,8 +4410,6 @@ void gp_walk(const Item *item, void *arg) gwip->subQuery = orig; gwip->lastSub = existsSub; } - -#if MYSQL_VERSION_ID >= 50172 else if (sub->substype() == Item_subselect::IN_SUBS) { if (!((Item_in_subselect*)sub)->getOptimizer() && gwip->thd->derived_tables_processing) @@ -4403,7 +4421,6 @@ void gp_walk(const Item *item, void *arg) break; } } -#endif // store a dummy subselect object. the transform is handled in item_func. SubSelect *subselect = new SubSelect(); gwip->rcWorkStack.push(subselect); @@ -4595,6 +4612,11 @@ void parse_item (Item *item, vector& field_vec, bool& hasNonSupport item = (*(ref->ref)); continue; } + else if ((*(ref->ref))->type() == Item::WINDOW_FUNC_ITEM) + { + parseInfo |= AF_BIT; + break; + } else { cout << "UNKNOWN REF Item" << endl; diff --git a/dbcon/mysql/ha_window_function.cpp b/dbcon/mysql/ha_window_function.cpp index 33e58fff2..7361dfd51 100755 --- a/dbcon/mysql/ha_window_function.cpp +++ b/dbcon/mysql/ha_window_function.cpp @@ -212,10 +212,16 @@ string ConvertFuncName(Item_sum* item) return "MAX"; break; case Item_sum::STD_FUNC: - return "STDDEV_POP"; + if (((Item_sum_variance*)item)->sample) + return "STDDEV_SAMP"; + else + return "STDDEV_POP"; break; - case Item_sum::VARIANCE_FUNC: - return "VAR_POP"; + case Item_sum::VARIANCE_FUNC: + if (((Item_sum_variance*)item)->sample) + return "VAR_SAMP"; + else + return "VAR_POP"; break; case Item_sum::SUM_BIT_FUNC: 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); srcp->asc(orderCol->direction == ORDER::ORDER_ASC ? true : false); // 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); } 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::AVG_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::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::VARIANCE_FUNC: case Item_sum::SUM_BIT_FUNC: @@ -569,15 +582,9 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n break; case Item_sum::ROW_NUMBER_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::PERCENT_RANK_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: frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING; frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING; diff --git a/oam/install_scripts/post-mysqld-install b/oam/install_scripts/post-mysqld-install index 546945b22..7fa634c54 100755 --- a/oam/install_scripts/post-mysqld-install +++ b/oam/install_scripts/post-mysqld-install @@ -28,11 +28,11 @@ for arg in "$@"; do fi done -cd $installdir/mysql/lib -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.18 -done +#cd $installdir/mysql/lib +#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.18 +#done cd $installdir/mysql/lib/plugin for file in ha_archive ha_blackhole ha_federated ha_innodb; do ln -sf $file.so $file.so.0 diff --git a/utils/querystats/CMakeLists.txt b/utils/querystats/CMakeLists.txt index 935898818..940749a6b 100644 --- a/utils/querystats/CMakeLists.txt +++ b/utils/querystats/CMakeLists.txt @@ -8,8 +8,6 @@ set(querystats_LIB_SRCS querystats.cpp) 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) install(TARGETS querystats DESTINATION ${ENGINE_LIBDIR} COMPONENT libs) diff --git a/versioning/BRM/CMakeLists.txt b/versioning/BRM/CMakeLists.txt index 2ce60254d..de392d6b1 100644 --- a/versioning/BRM/CMakeLists.txt +++ b/versioning/BRM/CMakeLists.txt @@ -32,8 +32,6 @@ set(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) install(TARGETS brm DESTINATION ${ENGINE_LIBDIR} COMPONENT libs) @@ -45,7 +43,7 @@ set(controllernode_SRCS masternode.cpp masterdbrmnode.cpp) 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) @@ -56,7 +54,7 @@ set(workernode_SRCS slavenode.cpp) 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) @@ -67,7 +65,7 @@ set(dbrmctl_SRCS dbrmctl.cpp) 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)