Commit 3393005e authored by Varun Gupta's avatar Varun Gupta

Ensured that the the element in the order by clause should have a numerical...

Ensured that the the element in the order by clause should have a numerical time, if not throw an error
parent 275ce39f
...@@ -185,6 +185,21 @@ void Item_window_func::split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array, ...@@ -185,6 +185,21 @@ void Item_window_func::split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array,
window_func()->setup_caches(thd); window_func()->setup_caches(thd);
} }
bool Item_window_func::check_order_list()
{
if (only_single_element_order_list())
{
Item_result rtype= window_spec->order_list->first->item[0]->result_type();
if (rtype != REAL_RESULT && rtype != INT_RESULT &&
rtype != DECIMAL_RESULT)
{
// TODO(varun) please change the error name
my_error(ER_WRONG_TYPE_FOR_RANGE_FRAME, MYF(0),"percentile functions");
return TRUE;
}
}
return FALSE;
}
/* /*
This must be called before attempting to compute the window function values. This must be called before attempting to compute the window function values.
...@@ -224,6 +239,9 @@ void Item_sum_percentile_disc::setup_window_func(THD *thd, Window_spec *window_s ...@@ -224,6 +239,9 @@ void Item_sum_percentile_disc::setup_window_func(THD *thd, Window_spec *window_s
void Item_sum_percentile_cont::setup_window_func(THD *thd, Window_spec *window_spec) void Item_sum_percentile_cont::setup_window_func(THD *thd, Window_spec *window_spec)
{ {
order_item= window_spec->order_list->first->item[0]; order_item= window_spec->order_list->first->item[0];
/* TODO(varun): need to discuss and finalise what type should we
return for percentile cont functions
*/
//set_handler_by_cmp_type(order_item->result_type()); //set_handler_by_cmp_type(order_item->result_type());
if (!(ceil_value= order_item->get_cache(thd))) if (!(ceil_value= order_item->get_cache(thd)))
return; return;
......
...@@ -321,6 +321,12 @@ setup_windows(THD *thd, Ref_ptr_array ref_pointer_array, TABLE_LIST *tables, ...@@ -321,6 +321,12 @@ setup_windows(THD *thd, Ref_ptr_array ref_pointer_array, TABLE_LIST *tables,
win_func_item->update_used_tables(); win_func_item->update_used_tables();
} }
li.rewind();
while((win_func_item= li++))
{
if (win_func_item->check_order_list())
DBUG_RETURN(1);
}
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment