From: Date: July 3 2009 12:50pm Subject: bzr commit into mysql-5.4 branch (bar:2813) WL#1349 List-Archive: http://lists.mysql.com/commits/77887 Message-Id: <200907031050.n63Aoepj019160@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0301183766==" --===============0301183766== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/bar/mysql-bzr/mysql-azalea-alik-w1349/ based on revid:bar@stripped 2813 Alexander Barkov 2009-07-03 WL#1349 Use operating system localization to send it as a default client character set Fixing problems discovered by Horst. added: mysql-test/include/default_client.cnf modified: client/mysql.cc client/mysqladmin.cc client/mysqlcheck.c client/mysqlimport.c client/mysqlshow.c configure.in include/mysql_com.h mysql-test/include/default_my.cnf mysql-test/include/mysqladmin_shutdown.inc mysql-test/suite/backup/my.cnf mysql-test/suite/backup_engines/my.cnf mysql-test/suite/backup_extra/my.cnf mysql-test/suite/backup_ptr/my.cnf mysql-test/suite/federated/my.cnf mysql-test/suite/ndb/my.cnf mysql-test/suite/ndb_binlog/my.cnf mysql-test/suite/ndb_team/my.cnf mysql-test/suite/rpl/my.cnf mysql-test/suite/rpl/rpl_1slave_base.cnf mysql-test/suite/rpl_ndb/my.cnf mysql-test/suite/rpl_ndb_big/my.cnf mysql-test/t/myisamlog.test mysql-test/t/myisamlog_coverage.test mysql-test/t/mysqladmin.test mysql-test/t/mysqlcheck.test sql-common/client.c === modified file 'client/mysql.cc' --- a/client/mysql.cc 2009-05-29 10:17:28 +0000 +++ b/client/mysql.cc 2009-07-03 10:49:28 +0000 @@ -140,7 +140,7 @@ static my_bool ignore_errors=0,wait_flag vertical=0, line_numbers=1, column_names=1,opt_html=0, opt_xml=0,opt_nopager=1, opt_outfile=0, named_cmds= 0, tty_password= 0, opt_nobeep=0, opt_reconnect=1, - default_charset_used= 0, opt_secure_auth= 0, + opt_secure_auth= 0, default_pager_set= 0, opt_sigint_ignore= 0, auto_vertical_output= 0, show_warnings= 0, executing_query= 0, interrupted_query= 0, @@ -155,7 +155,7 @@ static char * opt_mysql_unix_port=0; static int connect_flag=CLIENT_INTERACTIVE; static char *current_host,*current_db,*current_user=0,*opt_password=0, *current_prompt=0, *delimiter_str= 0, - *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; + *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; static char *histfile; static char *histfile_tmp; static String glob_buffer,old_buffer; @@ -1607,9 +1607,6 @@ get_one_option(int optid, const struct m strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir) - 1); charsets_dir = mysql_charsets_dir; break; - case OPT_DEFAULT_CHARSET: - default_charset_used= 1; - break; case OPT_DELIMITER: if (argument == disabled_my_option) { @@ -1817,10 +1814,6 @@ static int get_options(int argc, char ** connect_flag= 0; /* Not in interactive mode */ } - if (strcmp(default_charset, charset_info->csname) && - !(charset_info= get_charset_by_csname(default_charset, - MY_CS_PRIMARY, MYF(MY_WME)))) - exit(1); if (argc > 1) { usage(0); @@ -2931,7 +2924,6 @@ com_charset(String *buffer __attribute__ charset_info= new_cs; mysql_set_character_set(&mysql, charset_info->csname); default_charset= (char *)charset_info->csname; - default_charset_used= 1; put_info("Charset changed", INFO_INFO); } else put_info("Charset is not found", INFO_INFO); @@ -4295,8 +4287,9 @@ sql_real_connect(char *host,char *databa select_limit,max_join_size); mysql_options(&mysql, MYSQL_INIT_COMMAND, init_command); } - if (default_charset_used) - mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset); + + mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset); + if (!mysql_real_connect(&mysql, host, user, password, database, opt_mysql_port, opt_mysql_unix_port, connect_flag | CLIENT_MULTI_STATEMENTS)) @@ -4311,6 +4304,9 @@ sql_real_connect(char *host,char *databa } return -1; // Retryable } + + charset_info= mysql.charset; + connected=1; #ifndef EMBEDDED_LIBRARY mysql.reconnect= debug_info_flag; // We want to know if this happens === modified file 'client/mysqladmin.cc' --- a/client/mysqladmin.cc 2009-05-15 20:07:39 +0000 +++ b/client/mysqladmin.cc 2009-07-03 10:49:28 +0000 @@ -29,7 +29,7 @@ #define MAX_TRUNC_LENGTH 3 char *host= NULL, *user= 0, *opt_password= 0, - *default_charset= NULL; + *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; char truncated_var_names[MAX_MYSQL_VAR][MAX_TRUNC_LENGTH]; char ex_var_names[MAX_MYSQL_VAR][FN_REFLEN]; ulonglong last_values[MAX_MYSQL_VAR]; @@ -347,8 +347,7 @@ int main(int argc,char *argv[]) if (shared_memory_base_name) mysql_options(&mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name); #endif - if (default_charset) - mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset); + mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset); error_flags= (myf)(opt_nobeep ? 0 : ME_BELL); if (sql_connect(&mysql, option_wait)) === modified file 'client/mysqlcheck.c' --- a/client/mysqlcheck.c 2009-06-03 11:19:42 +0000 +++ b/client/mysqlcheck.c 2009-07-03 10:49:28 +0000 @@ -369,12 +369,15 @@ static int get_options(int *argc, char * If there's no --default-character-set option given with --fix-table-name or --fix-db-name set the default character set to "utf8". */ - if (!default_charset && (opt_fix_db_names || opt_fix_table_names)) + if (!default_charset) { - default_charset= (char*) "utf8"; + if (opt_fix_db_names || opt_fix_table_names) + default_charset= (char*) "utf8"; + else + default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; } - if (default_charset && !get_charset_by_csname(default_charset, MY_CS_PRIMARY, - MYF(MY_WME))) + if (strcmp(default_charset, MYSQL_AUTODETECT_CHARSET_NAME) && + !get_charset_by_csname(default_charset, MY_CS_PRIMARY, MYF(MY_WME))) { printf("Unsupported character set: %s\n", default_charset); return 1; @@ -786,8 +789,7 @@ static int dbConnect(char *host, char *u if (shared_memory_base_name) mysql_options(&mysql_connection,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name); #endif - if (default_charset) - mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset); + mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset); if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd, NULL, opt_mysql_port, opt_mysql_unix_port, 0))) { === modified file 'client/mysqlimport.c' --- a/client/mysqlimport.c 2009-06-03 11:19:42 +0000 +++ b/client/mysqlimport.c 2009-07-03 10:49:28 +0000 @@ -55,11 +55,10 @@ static char *opt_password=0, *current_us *current_host=0, *current_db=0, *fields_terminated=0, *lines_terminated=0, *enclosed=0, *opt_enclosed=0, *escaped=0, *opt_columns=0, - *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; + *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; static uint opt_mysql_port= 0, opt_protocol= 0; static char * opt_mysql_unix_port=0; static longlong opt_ignore_lines= -1; -static CHARSET_INFO *charset_info= &my_charset_latin1; #include #ifdef HAVE_SMEM @@ -282,10 +281,6 @@ static int get_options(int *argc, char * fprintf(stderr, "You can't use --ignore (-i) and --replace (-r) at the same time.\n"); return(1); } - if (strcmp(default_charset, charset_info->csname) && - !(charset_info= get_charset_by_csname(default_charset, - MY_CS_PRIMARY, MYF(MY_WME)))) - exit(1); if (*argc < 2) { usage(); @@ -429,6 +424,7 @@ static MYSQL *db_connect(char *host, cha if (shared_memory_base_name) mysql_options(mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name); #endif + mysql_options(mysql, MYSQL_SET_CHARSET_NAME, default_charset); if (!(mysql_real_connect(mysql,host,user,passwd, database,opt_mysql_port,opt_mysql_unix_port, 0))) === modified file 'client/mysqlshow.c' --- a/client/mysqlshow.c 2009-06-03 11:18:12 +0000 +++ b/client/mysqlshow.c 2009-07-03 10:49:28 +0000 @@ -32,7 +32,7 @@ static my_bool tty_password= 0, opt_tabl static my_bool debug_info_flag= 0, debug_check_flag= 0; static uint my_end_arg= 0; static uint opt_verbose=0; -static char *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; +static char *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; #ifdef HAVE_SMEM static char *shared_memory_base_name=0; === modified file 'configure.in' --- a/configure.in 2009-06-17 07:30:19 +0000 +++ b/configure.in 2009-07-03 10:49:28 +0000 @@ -2017,10 +2017,11 @@ AC_SUBST(MAKE_SHELL) AC_CHECK_HEADERS(varargs.h stdarg.h dirent.h locale.h ndir.h sys/dir.h \ sys/file.h sys/ndir.h sys/ptem.h sys/pte.h sys/select.h sys/stream.h \ sys/mman.h curses.h termcap.h termio.h termbits.h asm/termbits.h grp.h \ -paths.h semaphore.h) +paths.h semaphore.h langinfo.h) # Already-done: strcasecmp AC_CHECK_FUNCS(lstat putenv select setenv setlocale strcoll tcgetattr) +AC_CHECK_FUNCS(nl_langinfo) MYSQL_SIGNAL_CHECK MYSQL_CHECK_GETPW_FUNCS === modified file 'include/mysql_com.h' --- a/include/mysql_com.h 2009-01-26 16:03:39 +0000 +++ b/include/mysql_com.h 2009-07-03 10:49:28 +0000 @@ -27,6 +27,8 @@ #define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) #define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) +#define MYSQL_AUTODETECT_CHARSET_NAME "auto" + #define SERVER_VERSION_LENGTH 60 #define SQLSTATE_LENGTH 5 === added file 'mysql-test/include/default_client.cnf' --- a/mysql-test/include/default_client.cnf 1970-01-01 00:00:00 +0000 +++ b/mysql-test/include/default_client.cnf 2009-07-03 10:49:28 +0000 @@ -0,0 +1,19 @@ +# +# We use default-character-set=latin1 to avoid character set auto-detection +# when running tests - not to depend on the current machine localization. +# + +[mysql] +default-character-set=latin1 + +[mysqlshow] +default-character-set=latin1 + +[mysqlimport] +default-character-set=latin1 + +[mysqlcheck] +default-character-set=latin1 + +[mysql_upgrade] +default-character-set=latin1 === modified file 'mysql-test/include/default_my.cnf' --- a/mysql-test/include/default_my.cnf 2009-03-19 09:27:20 +0000 +++ b/mysql-test/include/default_my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include default_mysqld.cnf +!include default_client.cnf [mysqld.1] === modified file 'mysql-test/include/mysqladmin_shutdown.inc' --- a/mysql-test/include/mysqladmin_shutdown.inc 2008-12-05 14:08:09 +0000 +++ b/mysql-test/include/mysqladmin_shutdown.inc 2009-07-03 10:49:28 +0000 @@ -1,6 +1,6 @@ # Initiates a clean shutdown of the server and waits for its completion ---exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1; +--exec $MYSQLADMIN --no-defaults --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1; # On Windows mysqladmin does not wait for shutdown to be finished, # so we have to monitor this with our connection: === modified file 'mysql-test/suite/backup/my.cnf' --- a/mysql-test/suite/backup/my.cnf 2009-05-16 23:42:25 +0000 +++ b/mysql-test/suite/backup/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] log-bin= master-bin === modified file 'mysql-test/suite/backup_engines/my.cnf' --- a/mysql-test/suite/backup_engines/my.cnf 2009-05-16 23:42:25 +0000 +++ b/mysql-test/suite/backup_engines/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] log-bin= master-bin === modified file 'mysql-test/suite/backup_extra/my.cnf' --- a/mysql-test/suite/backup_extra/my.cnf 2009-05-16 23:42:25 +0000 +++ b/mysql-test/suite/backup_extra/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] log-bin= master-bin === modified file 'mysql-test/suite/backup_ptr/my.cnf' --- a/mysql-test/suite/backup_ptr/my.cnf 2009-05-16 23:42:25 +0000 +++ b/mysql-test/suite/backup_ptr/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] log-bin= master-bin === modified file 'mysql-test/suite/federated/my.cnf' --- a/mysql-test/suite/federated/my.cnf 2007-12-12 17:19:24 +0000 +++ b/mysql-test/suite/federated/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] log-bin= master-bin === modified file 'mysql-test/suite/ndb/my.cnf' --- a/mysql-test/suite/ndb/my.cnf 2009-06-10 12:43:20 +0000 +++ b/mysql-test/suite/ndb/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ !include include/default_mysqld.cnf !include include/default_ndbd.cnf +!include include/default_client.cnf [cluster_config.1] NoOfReplicas= 2 === modified file 'mysql-test/suite/ndb_binlog/my.cnf' --- a/mysql-test/suite/ndb_binlog/my.cnf 2009-02-02 10:35:33 +0000 +++ b/mysql-test/suite/ndb_binlog/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ !include include/default_mysqld.cnf !include include/default_ndbd.cnf +!include include/default_client.cnf [cluster_config.1] NoOfReplicas= 2 === modified file 'mysql-test/suite/ndb_team/my.cnf' --- a/mysql-test/suite/ndb_team/my.cnf 2009-02-02 15:58:48 +0000 +++ b/mysql-test/suite/ndb_team/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ !include include/default_mysqld.cnf !include include/default_ndbd.cnf +!include include/default_client.cnf [cluster_config.1] NoOfReplicas= 2 === modified file 'mysql-test/suite/rpl/my.cnf' --- a/mysql-test/suite/rpl/my.cnf 2008-04-16 07:42:35 +0000 +++ b/mysql-test/suite/rpl/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,6 +1,7 @@ # Use settings from rpl_1slave_base.cnf # add setting to connect the slave to the master by default !include rpl_1slave_base.cnf +!include include/default_client.cnf [mysqld.2] === modified file 'mysql-test/suite/rpl/rpl_1slave_base.cnf' --- a/mysql-test/suite/rpl/rpl_1slave_base.cnf 2008-11-05 15:31:08 +0000 +++ b/mysql-test/suite/rpl/rpl_1slave_base.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ # Use default setting for mysqld processes !include include/default_mysqld.cnf +!include include/default_client.cnf [mysqld.1] === modified file 'mysql-test/suite/rpl_ndb/my.cnf' --- a/mysql-test/suite/rpl_ndb/my.cnf 2009-02-02 15:58:48 +0000 +++ b/mysql-test/suite/rpl_ndb/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ !include include/default_mysqld.cnf !include include/default_ndbd.cnf +!include include/default_client.cnf [cluster_config.1] NoOfReplicas= 2 === modified file 'mysql-test/suite/rpl_ndb_big/my.cnf' --- a/mysql-test/suite/rpl_ndb_big/my.cnf 2009-02-02 22:37:44 +0000 +++ b/mysql-test/suite/rpl_ndb_big/my.cnf 2009-07-03 10:49:28 +0000 @@ -1,5 +1,6 @@ !include include/default_mysqld.cnf !include include/default_ndbd.cnf +!include include/default_client.cnf [cluster_config.1] NoOfReplicas= 2 === modified file 'mysql-test/t/myisamlog.test' --- a/mysql-test/t/myisamlog.test 2009-02-22 18:02:16 +0000 +++ b/mysql-test/t/myisamlog.test 2009-07-03 10:49:28 +0000 @@ -34,7 +34,7 @@ EOF # # Shutdown # ---exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1 +--exec $MYSQLADMIN --no-defaults --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1 # # Delete the old log file, if exists. # === modified file 'mysql-test/t/myisamlog_coverage.test' --- a/mysql-test/t/myisamlog_coverage.test 2009-02-22 18:02:16 +0000 +++ b/mysql-test/t/myisamlog_coverage.test 2009-07-03 10:49:28 +0000 @@ -32,7 +32,7 @@ EOF # # Shutdown # ---exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1 +--exec $MYSQLADMIN --no-defaults --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= shutdown 2>&1 # # Delete the old log file, if exists. # === modified file 'mysql-test/t/mysqladmin.test' --- a/mysql-test/t/mysqladmin.test 2007-08-07 09:42:14 +0000 +++ b/mysql-test/t/mysqladmin.test 2009-07-03 10:49:28 +0000 @@ -4,7 +4,7 @@ # Test "mysqladmin ping" # ---exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--exec $MYSQLADMIN --no-defaults --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 # @@ -19,7 +19,7 @@ EOF --replace_regex /.*mysqladmin.*: unknown/mysqladmin: unknown/ --error 7 ---exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; # When mysqladmin finds "loose-database" in .cnf file it shall print @@ -30,6 +30,6 @@ loose-database=db2 EOF --replace_regex /Warning: .*mysqladmin.*: unknown/Warning: mysqladmin: unknown/ ---exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; === modified file 'mysql-test/t/mysqlcheck.test' --- a/mysql-test/t/mysqlcheck.test 2009-05-15 13:45:06 +0000 +++ b/mysql-test/t/mysqlcheck.test 2009-07-03 10:49:28 +0000 @@ -177,7 +177,7 @@ SELECT * FROM INFORMATION_SCHEMA.TRIGGER WHERE TRIGGER_SCHEMA="#mysql50#a@b" ORDER BY trigger_name; --echo mysqlcheck --fix-db-names --fix-table-names --all-databases ---exec $MYSQL_CHECK --fix-db-names --fix-table-names --all-databases +--exec $MYSQL_CHECK --default-character-set=utf8 --fix-db-names --fix-table-names --all-databases USE `a@b`; SELECT * FROM INFORMATION_SCHEMA.TRIGGERS === modified file 'sql-common/client.c' --- a/sql-common/client.c 2009-06-10 14:24:46 +0000 +++ b/sql-common/client.c 2009-07-03 10:49:28 +0000 @@ -1859,52 +1859,295 @@ static MYSQL_METHODS client_methods= #endif }; + + +typedef enum my_cs_match_type_enum +{ + /* MySQL and OS charsets are fully compatible */ + my_cs_exact, + /* MySQL charset is very close to OS charset */ + my_cs_approx, + /* + MySQL knows this charset, but it is not supported as client character set. + */ + my_cs_unsupp +} my_cs_match_type; + + +typedef struct str2str_st +{ + const char *os_name; + const char *my_name; + my_cs_match_type param; +} MY_CSET_OS_NAME; + +const MY_CSET_OS_NAME charsets[]= +{ +#ifdef __WIN__ + {"cp437", "cp850", my_cs_approx}, + {"cp850", "cp850", my_cs_exact}, + {"cp852", "cp852", my_cs_exact}, + {"cp858", "cp850", my_cs_approx}, + {"cp866", "cp866", my_cs_exact}, + {"cp874", "tis620", my_cs_approx}, + {"cp932", "cp932", my_cs_exact}, + {"cp936", "gbk", my_cs_approx}, + {"cp949", "euckr", my_cs_approx}, + {"cp950", "big5", my_cs_exact}, + {"cp1200", "utf16le", my_cs_unsupp}, + {"cp1201", "utf16", my_cs_unsupp}, + {"cp1250", "cp1250", my_cs_exact}, + {"cp1251", "cp1251", my_cs_exact}, + {"cp1252", "latin1", my_cs_exact}, + {"cp1253", "greek", my_cs_exact}, + {"cp1254", "latin5", my_cs_exact}, + {"cp1255", "hebrew", my_cs_approx}, + {"cp1256", "cp1256", my_cs_exact}, + {"cp1257", "cp1257", my_cs_exact}, + {"cp10000", "macroman", my_cs_exact}, + {"cp10001", "sjis", my_cs_approx}, + {"cp10002", "big5", my_cs_approx}, + {"cp10008", "gb2312", my_cs_approx}, + {"cp10021", "tis620", my_cs_approx}, + {"cp10029", "macce", my_cs_exact}, + {"cp12001", "utf32", my_cs_unsupp}, + {"cp20107", "swe7", my_cs_exact}, + {"cp20127", "ascii", my_cs_exact}, + {"cp20866", "koi8r", my_cs_exact}, + {"cp20932", "ujis", my_cs_exact}, + {"cp20936", "gb2312", my_cs_approx}, + {"cp20949", "euckr", my_cs_approx}, + {"cp21866", "koi8u", my_cs_exact}, + {"cp28591", "latin1", my_cs_approx}, + {"cp28592", "latin2", my_cs_exact}, + {"cp28597", "greek", my_cs_exact}, + {"cp28598", "hebrew", my_cs_exact}, + {"cp28599", "latin5", my_cs_exact}, + {"cp28603", "latin7", my_cs_exact}, +#ifdef UNCOMMENT_THIS_WHEN_WL_4579_IS_DONE + {"cp28605", "latin9", my_cs_exact}, +#endif + {"cp38598", "hebrew", my_cs_exact}, + {"cp51932", "ujis", my_cs_exact}, + {"cp51936", "gb2312", my_cs_exact}, + {"cp51949", "euckr", my_cs_exact}, + {"cp51950", "big5", my_cs_exact}, +#ifdef UNCOMMENT_THIS_WHEN_WL_WL_4024_IS_DONE + {"cp54936", "gb18030", my_cs_exact}, +#endif + {"cp65001", "utf8", my_cs_exact}, + +#else /* not Windows */ + + {"ANSI_X3.4-1968", "ascii", my_cs_exact}, + {"ansi1251", "cp1251", my_cs_exact}, + {"armscii8", "armscii8", my_cs_exact}, + {"armscii-8", "armscii8", my_cs_exact}, + {"ASCII", "ascii", my_cs_exact}, + {"Big5", "big5", my_cs_exact}, + {"cp1251", "cp1251", my_cs_exact}, + {"cp1255", "hebrew", my_cs_approx}, + {"CP866", "cp866", my_cs_exact}, + {"eucCN", "gb2312", my_cs_exact}, + {"euc-CN", "gb2312", my_cs_exact}, + {"eucJP", "ujis", my_cs_exact}, + {"euc-JP", "ujis", my_cs_exact}, + {"eucKR", "euckr", my_cs_exact}, + {"euc-KR", "euckr", my_cs_exact}, +#ifdef UNCOMMENT_THIS_WHEN_WL_WL_4024_IS_DONE + {"gb18030", "gb18030", my_cs_exact}, +#endif + {"gb2312", "gb2312", my_cs_exact}, + {"gbk", "gbk", my_cs_exact}, + {"georgianps", "geostd8", my_cs_exact}, + {"georgian-ps", "geostd8", my_cs_exact}, + {"IBM-1252", "cp1252", my_cs_exact}, + + {"iso88591", "latin1", my_cs_approx}, + {"ISO_8859-1", "latin1", my_cs_approx}, + {"ISO8859-1", "latin1", my_cs_approx}, + {"ISO-8859-1", "latin1", my_cs_approx}, + + {"iso885913", "latin7", my_cs_exact}, + {"ISO_8859-13", "latin7", my_cs_exact}, + {"ISO8859-13", "latin7", my_cs_exact}, + {"ISO-8859-13", "latin7", my_cs_exact}, + +#ifdef UNCOMMENT_THIS_WHEN_WL_4579_IS_DONE + {"iso885915", "latin9", my_cs_exact}, + {"ISO_8859-15", "latin9", my_cs_exact}, + {"ISO8859-15", "latin9", my_cs_exact}, + {"ISO-8859-15", "latin9", my_cs_exact}, +#endif + + {"iso88592", "latin2", my_cs_exact}, + {"ISO_8859-2", "latin2", my_cs_exact}, + {"ISO8859-2", "latin2", my_cs_exact}, + {"ISO-8859-2", "latin2", my_cs_exact}, + + {"iso88597", "greek", my_cs_exact}, + {"ISO_8859-7", "greek", my_cs_exact}, + {"ISO8859-7", "greek", my_cs_exact}, + {"ISO-8859-7", "greek", my_cs_exact}, + + {"iso88598", "hebrew", my_cs_exact}, + {"ISO_8859-8", "hebrew", my_cs_exact}, + {"ISO8859-8", "hebrew", my_cs_exact}, + {"ISO-8859-8", "hebrew", my_cs_exact}, + + {"iso88599", "latin5", my_cs_exact}, + {"ISO_8859-9", "latin5", my_cs_exact}, + {"ISO8859-9", "latin5", my_cs_exact}, + {"ISO-8859-9", "latin5", my_cs_exact}, + + {"koi8r", "koi8r", my_cs_exact}, + {"KOI8-R", "koi8r", my_cs_exact}, + {"koi8u", "koi8u", my_cs_exact}, + {"KOI8-U", "koi8u", my_cs_exact}, + + {"Shift_JIS", "sjis", my_cs_exact}, + {"SJIS", "sjis", my_cs_exact}, + {"shiftjisx0213", "sjis", my_cs_exact}, + + {"tis620", "tis620", my_cs_exact}, + {"tis-620", "tis620", my_cs_exact}, + + {"ujis", "ujis", my_cs_exact}, + + {"US-ASCII", "ascii", my_cs_exact}, + + {"utf8", "utf8", my_cs_exact}, + {"utf-8", "utf8", my_cs_exact}, +#endif + {NULL, NULL, 0} +}; + + +static const char * +my_os_charset_to_mysql_charset(const char *csname) +{ + const MY_CSET_OS_NAME *csp; + for (csp= charsets; csp->os_name; csp++) + { + if (!my_strcasecmp(&my_charset_latin1, csp->os_name, csname)) + { + switch (csp->param) + { + case my_cs_exact: + return csp->my_name; + + case my_cs_approx: + /* + Maybe we should print a warning eventually: + character set correspondence is not exact. + */ + return csp->my_name; + + default: + my_printf_error(ER_UNKNOWN_ERROR, + "OS character set '%s'" + " is not supported by MySQL client", + MYF(0), csp->my_name); + goto def; + } + } + } + + my_printf_error(ER_UNKNOWN_ERROR, + "Unknown OS character set '%s'.", + MYF(0), csname); + +def: + csname= MYSQL_DEFAULT_CHARSET_NAME; + my_printf_error(ER_UNKNOWN_ERROR, + "Switching to the default character set '%s'.", + MYF(0), csname); + return csname; +} + + +#ifndef __WIN__ +#include /* for getenv() */ +#ifdef HAVE_LANGINFO_H +#include +#endif +#ifdef HAVE_LOCALE_H +#include +#endif +#endif /* __WIN__ */ + + +static int +mysql_autodetect_character_set(MYSQL *mysql) +{ + const char *csname= MYSQL_DEFAULT_CHARSET_NAME; + +#ifdef __WIN__ + char cpbuf[64]; + { + my_snprintf(cpbuf, sizeof(cpbuf), "cp%d", (int) GetConsoleCP()); + csname= my_os_charset_to_mysql_charset(cpbuf); + } +#elif defined(HAVE_SETLOCALE) && defined(HAVE_NL_LANGINFO) + { + if (setlocale(LC_CTYPE, "") && (csname= nl_langinfo(CODESET))) + csname= my_os_charset_to_mysql_charset(csname); + } +#endif + + if (!(mysql->options.charset_name= my_strdup(csname, MYF(MY_WME)))) + return 1; + return 0; +} + + +static void +mysql_set_character_set_with_default_collation(MYSQL *mysql) +{ + const char *save= charsets_dir; + if (mysql->options.charset_dir) + charsets_dir=mysql->options.charset_dir; + + if ((mysql->charset= get_charset_by_csname(mysql->options.charset_name, + MY_CS_PRIMARY, MYF(MY_WME)))) + { + /* Try to set compiled default collation when it's possible. */ + CHARSET_INFO *collation; + if ((collation= + get_charset_by_name(MYSQL_DEFAULT_COLLATION_NAME, MYF(MY_WME))) && + my_charset_same(mysql->charset, collation)) + { + mysql->charset= collation; + } + else + { + /* + Default compiled collation not found, or is not applicable + to the requested character set. + Continue with the default collation of the character set. + */ + } + } + charsets_dir= save; +} + + C_MODE_START int mysql_init_character_set(MYSQL *mysql) { - const char *default_collation_name; - /* Set character set */ if (!mysql->options.charset_name) { - default_collation_name= MYSQL_DEFAULT_COLLATION_NAME; if (!(mysql->options.charset_name= my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME)))) - return 1; - } - else - default_collation_name= NULL; - - { - const char *save= charsets_dir; - if (mysql->options.charset_dir) - charsets_dir=mysql->options.charset_dir; - mysql->charset=get_charset_by_csname(mysql->options.charset_name, - MY_CS_PRIMARY, MYF(MY_WME)); - if (mysql->charset && default_collation_name) - { - CHARSET_INFO *collation; - if ((collation= - get_charset_by_name(default_collation_name, MYF(MY_WME)))) - { - if (!my_charset_same(mysql->charset, collation)) - { - my_printf_error(ER_UNKNOWN_ERROR, - "COLLATION %s is not valid for CHARACTER SET %s", - MYF(0), - default_collation_name, mysql->options.charset_name); - mysql->charset= NULL; - } - else - { - mysql->charset= collation; - } - } - else - mysql->charset= NULL; - } - charsets_dir= save; + return 1; } + else if (!strcmp(mysql->options.charset_name, + MYSQL_AUTODETECT_CHARSET_NAME) && + mysql_autodetect_character_set(mysql)) + return 1; + + mysql_set_character_set_with_default_collation(mysql); if (!mysql->charset) { --===============0301183766== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/bar@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bar@stripped # target_branch: file:///home/bar/mysql-bzr/mysql-azalea-alik-w1349/ # testament_sha1: 0f9d9d52381fa44b83271693acb4034f505b9458 # timestamp: 2009-07-03 15:50:40 +0500 # base_revision_id: bar@stripped # # Begin bundle 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 7kinChIQBPDKAA== --===============0301183766==--