summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <sanja@montyprogram.com>2013-10-29 22:20:45 +0200
committerunknown <sanja@montyprogram.com>2013-10-29 22:20:45 +0200
commit97ecffc8ee11863bfb3075041b85a571eafa494f (patch)
tree1943b382cfb10d77c564c1bdb1d02b12adb88668 /sql
parent0fdb3bcfdbfa5d7cad28adc1c0f7c0958cdab2e0 (diff)
parentf4d5d849fd3b526d38ca6eb083fd0b290eb0eda7 (diff)
downloadmariadb-git-97ecffc8ee11863bfb3075041b85a571eafa494f.tar.gz
merge 10.0-base -> 10.0
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc2
-rw-r--r--sql/ha_partition.cc1
-rw-r--r--sql/item_subselect.cc1
-rw-r--r--sql/sql_derived.cc3
-rw-r--r--sql/sql_prepare.cc8
-rw-r--r--sql/sql_select.cc19
-rw-r--r--sql/sql_select.h4
-rw-r--r--sql/sql_union.cc3
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();
}