diff --git a/mysql-test/include/have_lowercase1.inc b/mysql-test/include/have_lowercase1.inc new file mode 100644 index 00000000000..1b33432dbe3 --- /dev/null +++ b/mysql-test/include/have_lowercase1.inc @@ -0,0 +1,4 @@ +--require r/lowercase1.require +--disable_query_log +show variables like 'lower_case_table_names'; +--enable_query_log diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index 016caa95889..ce206a35727 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -238,7 +238,7 @@ sub mtr_report_stats ($) { } if (!$::opt_extern) { - print "The servers where restarted $tot_restarts times\n"; + print "The servers were restarted $tot_restarts times\n"; } if ( $::opt_timer ) @@ -358,7 +358,7 @@ sub mtr_report_stats ($) { if ( $tot_failed != 0 || $found_problems) { - mtr_error("there where failing test cases"); + mtr_error("there were failing test cases"); } } diff --git a/mysql-test/r/lowercase1.require b/mysql-test/r/lowercase1.require new file mode 100644 index 00000000000..0341f838f7b --- /dev/null +++ b/mysql-test/r/lowercase1.require @@ -0,0 +1,2 @@ +Variable_name Value +lower_case_table_names 1 diff --git a/mysql-test/r/lowercase_mixed_tmpdir.result b/mysql-test/r/lowercase_mixed_tmpdir.result new file mode 100644 index 00000000000..e11b5e4c286 --- /dev/null +++ b/mysql-test/r/lowercase_mixed_tmpdir.result @@ -0,0 +1,6 @@ +drop table if exists t1; +create table t1 (id int) engine=myisam; +insert into t1 values (1); +create temporary table t2 select * from t1; +drop temporary table t2; +drop table t1; diff --git a/mysql-test/t/lowercase_mixed_tmpdir-master.opt b/mysql-test/t/lowercase_mixed_tmpdir-master.opt new file mode 100644 index 00000000000..3d21ea72f6b --- /dev/null +++ b/mysql-test/t/lowercase_mixed_tmpdir-master.opt @@ -0,0 +1,2 @@ +--lower-case-table-names=1 +--tmpdir=$MYSQLTEST_VARDIR/tmp/MixedCase diff --git a/mysql-test/t/lowercase_mixed_tmpdir-master.sh b/mysql-test/t/lowercase_mixed_tmpdir-master.sh new file mode 100644 index 00000000000..95c26e3aa02 --- /dev/null +++ b/mysql-test/t/lowercase_mixed_tmpdir-master.sh @@ -0,0 +1,6 @@ +# This test requires a non-lowercase tmpdir directory on a case-sensitive +# filesystem. + +d="$MYSQLTEST_VARDIR/tmp/MixedCase" +test -d "$d" || mkdir "$d" +rm -f "$d"/* diff --git a/mysql-test/t/lowercase_mixed_tmpdir.test b/mysql-test/t/lowercase_mixed_tmpdir.test new file mode 100644 index 00000000000..6bd3a6f2acc --- /dev/null +++ b/mysql-test/t/lowercase_mixed_tmpdir.test @@ -0,0 +1,12 @@ +--source include/have_case_sensitive_file_system.inc +--source include/have_lowercase1.inc + +--disable_warnings +drop table if exists t1; +--enable_warnings + +create table t1 (id int) engine=myisam; +insert into t1 values (1); +create temporary table t2 select * from t1; +drop temporary table t2; +drop table t1; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0756d59507b..1047b1ec35d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -209,17 +209,20 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db, uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen) { - uint length; - char tmp_table_name[tmp_file_prefix_length+22+22+22+3]; DBUG_ENTER("build_tmptable_filename"); - my_snprintf(tmp_table_name, sizeof(tmp_table_name), - "%s%lx_%lx_%x", - tmp_file_prefix, current_pid, - thd->thread_id, thd->tmp_table++); + char *p= strnmov(buff, mysql_tmpdir, bufflen); + my_snprintf(p, bufflen - (p - buff), "/%s%lx_%lx_%x%s", + tmp_file_prefix, current_pid, + thd->thread_id, thd->tmp_table++, reg_ext); - strxnmov(buff, bufflen, mysql_tmpdir, "/", tmp_table_name, reg_ext, NullS); - length= unpack_filename(buff, buff); + if (lower_case_table_names) + { + /* Convert all except tmpdir to lower case */ + my_casedn_str(files_charset_info, p); + } + + uint length= unpack_filename(buff, buff); DBUG_PRINT("exit", ("buff: '%s'", buff)); DBUG_RETURN(length); } @@ -3440,8 +3443,6 @@ bool mysql_create_table_internal(THD *thd, if (create_info->options & HA_LEX_CREATE_TMP_TABLE) { path_length= build_tmptable_filename(thd, path, sizeof(path)); - if (lower_case_table_names) - my_casedn_str(files_charset_info, path); create_info->table_options|=HA_CREATE_DELAY_KEY_WRITE; } else @@ -4751,8 +4752,6 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, if (find_temporary_table(thd, db, table_name)) goto table_exists; dst_path_length= build_tmptable_filename(thd, dst_path, sizeof(dst_path)); - if (lower_case_table_names) - my_casedn_str(files_charset_info, dst_path); create_info->table_options|= HA_CREATE_DELAY_KEY_WRITE; } else