summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/item_strfunc.cc5
-rw-r--r--sql/mysqld.cc3
-rw-r--r--sql/slave.cc6
-rw-r--r--sql/sql_string.h1
4 files changed, 13 insertions, 2 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index d3493e1fad1..995627766c0 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -984,7 +984,10 @@ String *Item_func_left::val_str(String *str)
return &my_empty_string;
if (res->length() <= (uint) length)
return res;
- str_value.set(*res, 0, res->charpos(length));
+ if (&str_value == res)
+ str_value.length(res->charpos(length));
+ else
+ str_value.set(*res, 0, res->charpos(length));
return &str_value;
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index c81a888d2e9..48a2e1fbc71 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2535,7 +2535,8 @@ server.");
if (opt_error_log)
{
if (!log_error_file_ptr[0])
- fn_format(log_error_file, glob_hostname, mysql_data_home, ".err", 0);
+ fn_format(log_error_file, glob_hostname, mysql_data_home, ".err",
+ MY_REPLACE_EXT); /* replace '.<domain>' by '.err', bug#4997 */
else
fn_format(log_error_file, log_error_file_ptr, mysql_data_home, ".err",
MY_UNPACK_FILENAME | MY_SAFE_PATH);
diff --git a/sql/slave.cc b/sql/slave.cc
index 7e46fb81053..0fe525d766f 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -1236,6 +1236,12 @@ not always make sense; please check the manual before using it).";
/*
Check that the master's global character_set_server and ours are the same.
Not fatal if query fails (old master?).
+ Note that we don't check for equality of global character_set_client and
+ collation_connection (neither do we prevent their setting in
+ set_var.cc). That's because from what I (Guilhem) have tested, the global
+ values of these 2 are never used (new connections don't use them).
+ We don't test equality of global collation_database either as it's is
+ going to be deprecated (made read-only) in 4.1 very soon.
*/
if (!mysql_real_query(mysql, "SELECT @@GLOBAL.COLLATION_SERVER", 32) &&
(master_res= mysql_store_result(mysql)))
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 01329c45a98..0179b3ebadc 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -98,6 +98,7 @@ public:
void set(String &str,uint32 offset,uint32 arg_length)
{
+ DBUG_ASSERT(&str != this);
free();
Ptr=(char*) str.ptr()+offset; str_length=arg_length; alloced=0;
if (str.Alloced_length)