summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <tsmith@siva.hindu.god>2007-05-17 14:16:33 -0600
committerunknown <tsmith@siva.hindu.god>2007-05-17 14:16:33 -0600
commitfde76b7e546f0e8ac66d8c8fb7e4a0e72254c7f0 (patch)
tree65b84a3ddda45fab846e1e9a4dc0d113076d7007 /sql
parent7e2ba658d423adfc5bb3fc01f371fadd01d38d39 (diff)
parentc3c64f1a0a63d25bf158c741dcb8d7e436a7247a (diff)
downloadmariadb-git-fde76b7e546f0e8ac66d8c8fb7e4a0e72254c7f0.tar.gz
Merge siva.hindu.god:/home/tsmith/m/bk/41
into siva.hindu.god:/home/tsmith/m/bk/maint/41
Diffstat (limited to 'sql')
-rw-r--r--sql/item_func.cc6
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/set_var.cc8
-rw-r--r--sql/sql_cache.cc2
-rw-r--r--sql/sql_select.cc9
5 files changed, 19 insertions, 7 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index c6b2fa5cc3e..12bb6571369 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -477,7 +477,8 @@ longlong Item_func_signed::val_int()
longlong value;
int error;
- if (args[0]->cast_to_int_type() != STRING_RESULT)
+ if (args[0]->cast_to_int_type() != STRING_RESULT ||
+ args[0]->result_as_longlong())
{
value= args[0]->val_int();
null_value= args[0]->null_value;
@@ -529,7 +530,8 @@ longlong Item_func_unsigned::val_int()
return (longlong) (dvalue + (dvalue > 0 ? 0.5 : -0.5));
}
- if (args[0]->cast_to_int_type() != STRING_RESULT)
+ if (args[0]->cast_to_int_type() != STRING_RESULT ||
+ args[0]->result_as_longlong())
{
value= args[0]->val_int();
null_value= args[0]->null_value;
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index e5ac91e1814..6bd60280399 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -426,6 +426,7 @@ struct Query_cache_query_flags
ulong sql_mode;
ulong max_sort_length;
ulong group_concat_max_len;
+ ulong default_week_format;
MY_LOCALE *lc_time_names;
};
#define QUERY_CACHE_FLAGS_SIZE sizeof(Query_cache_query_flags)
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 57bb93ef4b1..520ee5c9f70 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -490,7 +490,7 @@ static sys_var_rand_seed1 sys_rand_seed1("rand_seed1");
static sys_var_rand_seed2 sys_rand_seed2("rand_seed2");
static sys_var_thd_ulong sys_default_week_format("default_week_format",
- &SV::default_week_format);
+ &SV::default_week_format);
sys_var_thd_ulong sys_group_concat_max_len("group_concat_max_len",
&SV::group_concat_max_len);
@@ -992,7 +992,6 @@ bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex,
return 0;
}
-
static bool sys_update_init_connect(THD *thd, set_var *var)
{
return update_sys_var_str(&sys_init_connect, &LOCK_sys_init_connect, var);
@@ -1032,6 +1031,11 @@ static bool sys_update_ftb_syntax(THD *thd, set_var * var)
{
strmake(ft_boolean_syntax, var->value->str_value.c_ptr(),
sizeof(ft_boolean_syntax)-1);
+
+#ifdef HAVE_QUERY_CACHE
+ query_cache.flush();
+#endif /* HAVE_QUERY_CACHE */
+
return 0;
}
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index fc03e03dee7..ee26bda3307 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -813,6 +813,7 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len;
+ flags.default_week_format= thd->variables.default_week_format;
flags.lc_time_names= thd->variables.lc_time_names;
STRUCT_LOCK(&structure_guard_mutex);
@@ -1016,6 +1017,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len;
+ flags.default_week_format= thd->variables.default_week_format;
flags.lc_time_names= thd->variables.lc_time_names;
memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
&flags, QUERY_CACHE_FLAGS_SIZE);
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 36a15841065..656d1b5639a 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -3939,14 +3939,17 @@ make_join_readinfo(JOIN *join, uint options)
disable join cache because it will change the ordering of the results.
Code handles sort table that is at any location (not only first after
the const tables) despite the fact that it's currently prohibited.
+ We must disable join cache if the first non-const table alone is
+ ordered. If there is a temp table the ordering is done as a last
+ operation and doesn't prevent join cache usage.
*/
- if (!ordered_set &&
- (table == join->sort_by_table &&
+ if (!ordered_set && !join->need_tmp &&
+ ((table == join->sort_by_table &&
(!join->order || join->skip_sort_order ||
test_if_skip_sort_order(tab, join->order, join->select_limit,
1))
) ||
- (join->sort_by_table == (TABLE *) 1 && i != join->const_tables))
+ (join->sort_by_table == (TABLE *) 1 && i != join->const_tables)))
ordered_set= 1;
switch (tab->type) {