diff options
author | unknown <sanja@montyprogram.com> | 2013-10-29 22:20:45 +0200 |
---|---|---|
committer | unknown <sanja@montyprogram.com> | 2013-10-29 22:20:45 +0200 |
commit | 97ecffc8ee11863bfb3075041b85a571eafa494f (patch) | |
tree | 1943b382cfb10d77c564c1bdb1d02b12adb88668 /sql | |
parent | 0fdb3bcfdbfa5d7cad28adc1c0f7c0958cdab2e0 (diff) | |
parent | f4d5d849fd3b526d38ca6eb083fd0b290eb0eda7 (diff) | |
download | mariadb-git-97ecffc8ee11863bfb3075041b85a571eafa494f.tar.gz |
merge 10.0-base -> 10.0
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 2 | ||||
-rw-r--r-- | sql/ha_partition.cc | 1 | ||||
-rw-r--r-- | sql/item_subselect.cc | 1 | ||||
-rw-r--r-- | sql/sql_derived.cc | 3 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 8 | ||||
-rw-r--r-- | sql/sql_select.cc | 19 | ||||
-rw-r--r-- | sql/sql_select.h | 4 | ||||
-rw-r--r-- | sql/sql_union.cc | 3 |
8 files changed, 30 insertions, 11 deletions
diff --git a/sql/field.cc b/sql/field.cc index 87170b50035..755d2f8b625 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7284,7 +7284,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs) if (!String::needs_conversion(length, cs, field_charset, &dummy_offset)) { Field_blob::store_length(length); - bmove(ptr+packlength, &from, sizeof(char*)); + bmove(ptr + packlength, &from, sizeof(char*)); return 0; } if (tmpstr.copy(from, length, cs)) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index c3d28f91c27..c5466532c6a 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -297,6 +297,7 @@ ha_partition::ha_partition(handlerton *hton, TABLE_SHARE *share, m_clone_mem_root= clone_mem_root_arg; part_share= clone_arg->part_share; m_tot_parts= clone_arg->m_tot_parts; + m_pkey_is_clustered= clone_arg->primary_key_is_clustered(); DBUG_VOID_RETURN; } diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 2bdcf919131..6c196e41969 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -3478,6 +3478,7 @@ int subselect_single_select_engine::prepare() select_lex->order_list.elements + select_lex->group_list.elements, select_lex->order_list.first, + false, select_lex->group_list.first, select_lex->having, NULL, select_lex, diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 86587280d03..712b1606c11 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -617,7 +617,8 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived) { sl->context.outer_context= 0; // Prepare underlying views/DT first. - sl->handle_derived(lex, DT_PREPARE); + if ((res= sl->handle_derived(lex, DT_PREPARE))) + goto exit; if (derived->outer_join) { diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 3111d82ef15..e28d171df73 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2584,7 +2584,13 @@ void reinit_stmt_before_use(THD *thd, LEX *lex) /* Fix ORDER list */ for (order= sl->order_list.first; order; order= order->next) order->item= &order->item_ptr; - sl->handle_derived(lex, DT_REINIT); + { +#ifndef DBUG_OFF + bool res= +#endif + sl->handle_derived(lex, DT_REINIT); + DBUG_ASSERT(res == 0); + } } { SELECT_LEX_UNIT *unit= sl->master_unit(); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index eb0d16ff324..6470dcf7708 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -664,8 +664,8 @@ int JOIN::prepare(Item ***rref_pointer_array, TABLE_LIST *tables_init, uint wild_num, COND *conds_init, uint og_num, - ORDER *order_init, ORDER *group_init, - Item *having_init, + ORDER *order_init, bool skip_order_by, + ORDER *group_init, Item *having_init, ORDER *proc_param_init, SELECT_LEX *select_lex_arg, SELECT_LEX_UNIT *unit_arg) { @@ -779,7 +779,16 @@ JOIN::prepare(Item ***rref_pointer_array, DBUG_RETURN(-1); /* purecov: inspected */ ref_pointer_array= *rref_pointer_array; - + + /* Resolve the ORDER BY that was skipped, then remove it. */ + if (skip_order_by && select_lex != select_lex->master_unit()->global_parameters) + { + if (setup_order(thd, (*rref_pointer_array), tables_list, fields_list, + all_fields, select_lex->order_list.first)) + DBUG_RETURN(-1); + select_lex->order_list.empty(); + } + if (having) { nesting_map save_allow_sum_func= thd->lex->allow_sum_func; @@ -3234,7 +3243,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array, else { if ((err= join->prepare(rref_pointer_array, tables, wild_num, - conds, og_num, order, group, having, + conds, og_num, order, false, group, having, proc_param, select_lex, unit))) { goto err; @@ -3258,7 +3267,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array, THD_STAGE_INFO(thd, stage_init); thd->lex->used_tables=0; if ((err= join->prepare(rref_pointer_array, tables, wild_num, - conds, og_num, order, group, having, proc_param, + conds, og_num, order, false, group, having, proc_param, select_lex, unit))) { goto err; diff --git a/sql/sql_select.h b/sql/sql_select.h index c335836e19b..c413d0ca023 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -1351,8 +1351,8 @@ public: bool exec_saved_explain; int prepare(Item ***rref_pointer_array, TABLE_LIST *tables, uint wind_num, - COND *conds, uint og_num, ORDER *order, ORDER *group, - Item *having, ORDER *proc_param, SELECT_LEX *select, + COND *conds, uint og_num, ORDER *order, bool skip_order_by, + ORDER *group, Item *having, ORDER *proc_param, SELECT_LEX *select, SELECT_LEX_UNIT *unit); bool prepare_stage2(); int optimize(); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 2523e03b4e3..b046b3a4de8 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -327,6 +327,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, sl->group_list.elements, can_skip_order_by ? NULL : sl->order_list.first, + can_skip_order_by, sl->group_list.first, sl->having, (is_union_select ? NULL : @@ -510,7 +511,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, 0, 0, global_parameters->order_list.elements, // og_num global_parameters->order_list.first, // order - NULL, NULL, NULL, + false, NULL, NULL, NULL, fake_select_lex, this); fake_select_lex->table_list.empty(); } |