diff options
author | unknown <jimw@mysql.com> | 2005-06-10 20:11:20 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-06-10 20:11:20 -0700 |
commit | 871977f26f523a3587c24273e3ebc61ccd26890f (patch) | |
tree | d705e8bae3b02592b69a73dc9dce5f1923786c53 | |
parent | 9b7f8f709675d21e844b1a9ffa9ea4039b26b64c (diff) | |
parent | da4838a0f8026f701c6e16eb0af3816403f3da1a (diff) | |
download | mariadb-git-871977f26f523a3587c24273e3ebc61ccd26890f.tar.gz |
Merge mysql.com:/home/jimw/my/mysql-4.1-clean
into mysql.com:/home/jimw/my/mysql-5.0-clean
client/mysql.cc:
Auto merged
mysql-test/r/lowercase_table2.result:
Auto merged
sql/mysqld.cc:
Auto merged
-rw-r--r-- | client/mysql.cc | 24 | ||||
-rw-r--r-- | mysql-test/r/lowercase_table2.result | 7 | ||||
-rw-r--r-- | mysql-test/t/lowercase_table2.test | 10 | ||||
-rw-r--r-- | sql/mysqld.cc | 8 |
4 files changed, 42 insertions, 7 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index bc0cceda0cc..96b523d8dc8 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -953,6 +953,7 @@ static int read_lines(bool execute_commands) { #if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) char linebuffer[254]; + String buffer; #endif char *line; char in_string=0; @@ -994,8 +995,24 @@ static int read_lines(bool execute_commands) *p = '\0'; } #else - linebuffer[0]= (char) sizeof(linebuffer); - line= _cgets(linebuffer); + buffer.length(0); + /* _cgets() expects the buffer size - 3 as the first byte */ + linebuffer[0]= (char) sizeof(linebuffer) - 3; + do + { + line= _cgets(linebuffer); + buffer.append(line, (unsigned char)linebuffer[1]); + /* + If _cgets() gets an input line that is linebuffer[0] bytes + long, the next call to _cgets() will return immediately with + linebuffer[1] == 0, and it does the same thing for input that + is linebuffer[0]-1 bytes long. So it appears that even though + _cgets() replaces the newline (which is two bytes on Window) with + a nil, it still needs the space in the linebuffer for it. This is, + naturally, undocumented. + */ + } while (linebuffer[0] <= linebuffer[1] + 1); + line= buffer.c_ptr(); #endif /* __NETWARE__ */ #else if (opt_outfile) @@ -1052,6 +1069,9 @@ static int read_lines(bool execute_commands) status.exit_status=0; } } +#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) + buffer.free(); +#endif return status.exit_status; } diff --git a/mysql-test/r/lowercase_table2.result b/mysql-test/r/lowercase_table2.result index 1015990df9a..db833bcd970 100644 --- a/mysql-test/r/lowercase_table2.result +++ b/mysql-test/r/lowercase_table2.result @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; +DROP TABLE IF EXISTS t1,t2,t3; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; CREATE TABLE T1 (a int); @@ -159,3 +159,8 @@ select * from myUC; i use test; drop database mysqltest_LC2; +create table t2aA (col1 int); +create table t1Aa (col1 int); +select t1Aa.col1 from t1aA,t2Aa where t1Aa.col1 = t2aA.col1; +col1 +drop table t2aA, t1Aa; diff --git a/mysql-test/t/lowercase_table2.test b/mysql-test/t/lowercase_table2.test index eff5f2a99ec..51c6f6b5ac3 100644 --- a/mysql-test/t/lowercase_table2.test +++ b/mysql-test/t/lowercase_table2.test @@ -10,7 +10,7 @@ show variables like "lower_case_table_names"; enable_query_log; --disable_warnings -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; +DROP TABLE IF EXISTS t1,t2,t3; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; --enable_warnings @@ -128,3 +128,11 @@ create table myUC (i int); select * from myUC; use test; drop database mysqltest_LC2; + +# +# Bug #9500: Problem with WHERE clause +# +create table t2aA (col1 int); +create table t1Aa (col1 int); +select t1Aa.col1 from t1aA,t2Aa where t1Aa.col1 = t2aA.col1; +drop table t2aA, t1Aa; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d2989bf9b1b..f9bf5a1a7c3 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3095,6 +3095,11 @@ You should consider changing lower_case_table_names to 1 or 2", lower_case_table_names= 0; } + /* Reset table_alias_charset, now that lower_case_table_names is set. */ + table_alias_charset= (lower_case_table_names ? + files_charset_info : + &my_charset_bin); + select_thread=pthread_self(); select_thread_in_use=1; init_ssl(); @@ -6795,9 +6800,6 @@ static void get_options(int argc,char **argv) /* Set global variables based on startup options */ myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size); - table_alias_charset= (lower_case_table_names ? - files_charset_info : - &my_charset_bin); if (opt_short_log_format) opt_specialflag|= SPECIAL_SHORT_LOG_FORMAT; |