From 38404d90bec8810e664505678b039d8de8a10fb9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Sep 2004 19:58:02 +0300 Subject: [PATCH] ixed table and db name of fields incase of lower_case_table_names (BUG#5154) sql/item.cc: fixed table and db name of fields incase of lower_case_table_names --- mysql-test/r/lowercase_view.result | 9 +++++++++ mysql-test/t/lowercase_view-master.opt | 1 + mysql-test/t/lowercase_view.test | 11 +++++++++++ sql/item.cc | 24 +++++++++++++++++++++--- 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 mysql-test/r/lowercase_view.result create mode 100644 mysql-test/t/lowercase_view-master.opt create mode 100644 mysql-test/t/lowercase_view.test diff --git a/mysql-test/r/lowercase_view.result b/mysql-test/r/lowercase_view.result new file mode 100644 index 00000000000..233ca9590b8 --- /dev/null +++ b/mysql-test/r/lowercase_view.result @@ -0,0 +1,9 @@ +drop database if exists MySQLTest; +create database MySQLTest; +use MySQLTest; +create table TaB (Field int); +create view ViE as select * from TAb; +show create table VIe; +Table Create Table +vie CREATE VIEW `mysqltest`.`vie` AS select `mysqltest`.`tab`.`Field` AS `Field` from `mysqltest`.`tab` +drop database MySQLTest; diff --git a/mysql-test/t/lowercase_view-master.opt b/mysql-test/t/lowercase_view-master.opt new file mode 100644 index 00000000000..62ab6dad1e0 --- /dev/null +++ b/mysql-test/t/lowercase_view-master.opt @@ -0,0 +1 @@ +--lower_case_table_names=1 diff --git a/mysql-test/t/lowercase_view.test b/mysql-test/t/lowercase_view.test new file mode 100644 index 00000000000..ed19c2184ab --- /dev/null +++ b/mysql-test/t/lowercase_view.test @@ -0,0 +1,11 @@ +--disable_warnings +drop database if exists MySQLTest; +--enable_warnings + + +create database MySQLTest; +use MySQLTest; +create table TaB (Field int); +create view ViE as select * from TAb; +show create table VIe; +drop database MySQLTest; diff --git a/sql/item.cc b/sql/item.cc index efd94716dc7..a1b308483ab 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -421,6 +421,24 @@ const char *Item_ident::full_name() const void Item_ident::print(String *str) { THD *thd= current_thd; + char d_name_buff[MAX_ALIAS_NAME], t_name_buff[MAX_ALIAS_NAME]; + const char *d_name= db_name, *t_name= table_name; + if (lower_case_table_names) + { + if (table_name && table_name[0]) + { + strmov(t_name_buff, table_name); + my_casedn_str(files_charset_info, t_name_buff); + t_name= t_name_buff; + } + if (db_name && db_name[0]) + { + strmov(d_name_buff, db_name); + my_casedn_str(files_charset_info, d_name_buff); + d_name= d_name_buff; + } + } + if (!table_name || !field_name) { const char *nm= field_name ? field_name : name ? name : "tmp_field"; @@ -429,9 +447,9 @@ void Item_ident::print(String *str) } if (db_name && db_name[0]) { - append_identifier(thd, str, db_name, strlen(db_name)); + append_identifier(thd, str, d_name, strlen(d_name)); str->append('.'); - append_identifier(thd, str, table_name, strlen(table_name)); + append_identifier(thd, str, t_name, strlen(t_name)); str->append('.'); append_identifier(thd, str, field_name, strlen(field_name)); } @@ -439,7 +457,7 @@ void Item_ident::print(String *str) { if (table_name[0]) { - append_identifier(thd, str, table_name, strlen(table_name)); + append_identifier(thd, str, t_name, strlen(t_name)); str->append('.'); append_identifier(thd, str, field_name, strlen(field_name)); }