From 6e58ad4cc26353cd11998b139c0f68615dd75c7a Mon Sep 17 00:00:00 2001 From: David Hall Date: Fri, 26 Feb 2016 14:33:30 -0600 Subject: [PATCH] Add handling of subquery cach item types. This is not working, but... --- dbcon/mysql/ha_calpont_execplan.cpp | 40 ++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index 8453ffc95..9e63f29fc 100755 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -422,6 +422,12 @@ void debug_walk(const Item *item, void *arg) debug_walk(row->element_index(i), 0); break; } + case Item::EXPR_CACHE_ITEM: + { + cout << "Expr Cache Item" << endl; + ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(debug_walk, arg, Item::POSTFIX); + break; + } case Item::WINDOW_FUNC_ITEM: { cout << "Window Function Item" << endl; @@ -2029,6 +2035,13 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp } break; } + case Item::EXPR_CACHE_ITEM: + { + // TODO: item is a Item_cache_wrapper + printf("EXPR_CACHE_ITEM in buildReturnedColumn\n"); + cout << "EXPR_CACHE_ITEM in buildReturnedColumn" << endl; + break; + } case Item::WINDOW_FUNC_ITEM: { return buildWindowFunctionColumn(item, gwi, nonSupport); @@ -3468,7 +3481,6 @@ void gp_walk(const Item *item, void *arg) { gp_walk_info* gwip = reinterpret_cast(arg); idbassert(gwip); - //Bailout... if (gwip->fatalParseError) return; @@ -3948,6 +3960,11 @@ void gp_walk(const Item *item, void *arg) gwip->rcWorkStack.push(rowCol); break; } + case Item::EXPR_CACHE_ITEM: + { + ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(gp_walk, arg, Item::POSTFIX); + break; + } case Item::WINDOW_FUNC_ITEM: { gwip->hasWindowFunc = true; @@ -4072,7 +4089,7 @@ void parse_item (Item *item, vector& field_vec, bool& hasNonSupport } else { - //cout << "UNKNOWN REF Item" << endl; + cout << "UNKNOWN REF Item" << endl; break; } } @@ -4093,10 +4110,19 @@ void parse_item (Item *item, vector& field_vec, bool& hasNonSupport parse_item(row->element_index(i), field_vec, hasNonSupportItem, parseInfo); break; } + case Item::EXPR_CACHE_ITEM: + { + // item is a Item_cache_wrapper. Shouldn't get here. + printf("EXPR_CACHE_ITEM in parse_item\n"); + string parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SUB_QUERY_TYPE); + setError(item->thd(), ER_CHECK_NOT_IMPLEMENTED, parseErrorText); + break; + } case Item::WINDOW_FUNC_ITEM: parseInfo |= AF_BIT; + break; default: - return; + break; } } @@ -4954,6 +4980,14 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); return ER_CHECK_NOT_IMPLEMENTED; } + case Item::EXPR_CACHE_ITEM: + { + printf("EXPR_CACHE_ITEM in getSelectPlan\n"); + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_UNKNOWN_COL); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } case Item::WINDOW_FUNC_ITEM: { SRCP srcp(buildWindowFunctionColumn(item, gwi, gwi.fatalParseError));