Skip to content

Commit 7741d9b

Browse files
Sergey GlukhovSergey Glukhov
authored andcommitted
WL#751 Error message construction, backport
1 parent f8a54c7 commit 7741d9b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+8009
-570
lines changed

client/client_priv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,6 @@ enum options_client
8080
OPT_FIX_TABLE_NAMES, OPT_FIX_DB_NAMES, OPT_SSL_VERIFY_SERVER_CERT,
8181
OPT_DEBUG_INFO, OPT_DEBUG_CHECK, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE,
8282
OPT_WRITE_BINLOG, OPT_DUMP_DATE,
83+
OPT_INIT_COMMAND,
8384
OPT_MAX_CLIENT_OPTION
8485
};

client/mysql.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ static char * opt_mysql_unix_port=0;
155155
static int connect_flag=CLIENT_INTERACTIVE;
156156
static char *current_host,*current_db,*current_user=0,*opt_password=0,
157157
*current_prompt=0, *delimiter_str= 0,
158-
*default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME;
158+
*default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME,
159+
*opt_init_command= 0;
159160
static char *histfile;
160161
static char *histfile_tmp;
161162
static String glob_buffer,old_buffer;
@@ -1384,6 +1385,10 @@ static struct my_option my_long_options[] =
13841385
{"ignore-spaces", 'i', "Ignore space after function names.",
13851386
(uchar**) &ignore_spaces, (uchar**) &ignore_spaces, 0, GET_BOOL, NO_ARG, 0, 0,
13861387
0, 0, 0, 0},
1388+
{"init-command", OPT_INIT_COMMAND,
1389+
"SQL Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting.",
1390+
(uchar**) &opt_init_command, (uchar**) &opt_init_command, 0,
1391+
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
13871392
{"local-infile", OPT_LOCAL_INFILE, "Enable/disable LOAD DATA LOCAL INFILE.",
13881393
(uchar**) &opt_local_infile,
13891394
(uchar**) &opt_local_infile, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
@@ -4203,6 +4208,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
42034208
mysql_close(&mysql);
42044209
}
42054210
mysql_init(&mysql);
4211+
if (opt_init_command)
4212+
mysql_options(&mysql, MYSQL_INIT_COMMAND, opt_init_command);
42064213
if (opt_connect_timeout)
42074214
{
42084215
uint timeout=opt_connect_timeout;

extra/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/include/mysqld_error.h
2929
--header_file=${PROJECT_SOURCE_DIR}/include/mysqld_error.h
3030
--name_file=${PROJECT_SOURCE_DIR}/include/mysqld_ername.h
3131
--state_file=${PROJECT_SOURCE_DIR}/include/sql_state.h
32-
--in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt
33-
DEPENDS comp_err ${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt)
32+
--in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
33+
DEPENDS comp_err ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt)
3434

3535
ADD_CUSTOM_TARGET(GenError
3636
ALL

extra/Makefile.am

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ DIST_SUBDIRS = yassl
3030
# NOTE Built files should depend on their sources to avoid
3131
# the built files being rebuilt in source dist
3232
$(top_builddir)/include/mysqld_error.h: comp_err.c \
33-
$(top_srcdir)/sql/share/errmsg.txt
33+
$(top_srcdir)/sql/share/errmsg-utf8.txt
3434
$(MAKE) $(AM_MAKEFLAGS) comp_err$(EXEEXT)
3535
$(top_builddir)/extra/comp_err$(EXEEXT) \
3636
--charset=$(top_srcdir)/sql/share/charsets \
3737
--out-dir=$(top_builddir)/sql/share/ \
3838
--header_file=$(top_builddir)/include/mysqld_error.h \
3939
--name_file=$(top_builddir)/include/mysqld_ername.h \
4040
--state_file=$(top_builddir)/include/sql_state.h \
41-
--in_file=$(top_srcdir)/sql/share/errmsg.txt
41+
--in_file=$(top_srcdir)/sql/share/errmsg-utf8.txt
4242
$(top_builddir)/include/mysqld_ername.h: $(top_builddir)/include/mysqld_error.h
4343
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
4444

extra/comp_err.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static char *OUTFILE= (char*) "errmsg.sys";
3939
static char *HEADERFILE= (char*) "mysqld_error.h";
4040
static char *NAMEFILE= (char*) "mysqld_ername.h";
4141
static char *STATEFILE= (char*) "sql_state.h";
42-
static char *TXTFILE= (char*) "../sql/share/errmsg.txt";
42+
static char *TXTFILE= (char*) "../sql/share/errmsg-utf8.txt";
4343
static char *DATADIRECTORY= (char*) "../sql/share/";
4444
#ifndef DBUG_OFF
4545
static char *default_dbug_option= (char*) "d:t:O,/tmp/comp_err.trace";

include/m_ctype.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,9 @@ uint my_charset_repertoire(CHARSET_INFO *cs);
477477

478478
my_bool my_charset_is_ascii_compatible(CHARSET_INFO *cs);
479479

480+
extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
481+
const char* fmt, va_list ap);
482+
480483
#define _MY_U 01 /* Upper case */
481484
#define _MY_L 02 /* Lower case */
482485
#define _MY_NMR 04 /* Numeral (digit) */

include/my_sys.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ extern void my_osmaperr(unsigned long last_error);
659659
extern void TERMINATE(FILE *file, uint flag);
660660
#endif
661661
extern void init_glob_errs(void);
662+
extern const char** get_global_errmsgs();
662663
extern void wait_for_free_space(const char *filename, int errors);
663664
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
664665
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
@@ -672,7 +673,8 @@ extern void my_error _VARARGS((int nr,myf MyFlags, ...));
672673
extern void my_printf_error _VARARGS((uint my_err, const char *format,
673674
myf MyFlags, ...))
674675
ATTRIBUTE_FORMAT(printf, 2, 4);
675-
extern int my_error_register(const char **errmsgs, int first, int last);
676+
extern int my_error_register(const char** (*get_errmsgs) (),
677+
int first, int last);
676678
extern const char **my_error_unregister(int first, int last);
677679
extern void my_message(uint my_err, const char *str,myf MyFlags);
678680
extern void my_message_no_curses(uint my_err, const char *str,myf MyFlags);

libmysql/errmsg.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ const char *client_errors[]=
219219
};
220220
#endif
221221

222+
const char** get_client_errmsgs()
223+
{
224+
return client_errors;
225+
}
222226

223227
/*
224228
Register client error messages for use with my_error().
@@ -232,7 +236,7 @@ const char *client_errors[]=
232236

233237
void init_client_errs(void)
234238
{
235-
(void) my_error_register(client_errors, CR_ERROR_FIRST, CR_ERROR_LAST);
239+
(void) my_error_register(get_client_errmsgs, CR_ERROR_FIRST, CR_ERROR_LAST);
236240
}
237241

238242

libmysqld/lib_sql.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,9 @@ net_send_eof(THD *thd, uint server_status, uint statement_warn_count)
10871087
bool net_send_error_packet(THD *thd, uint sql_errno, const char *err,
10881088
const char *sqlstate)
10891089
{
1090+
uint error;
1091+
uchar converted_err[MYSQL_ERRMSG_SIZE];
1092+
uint32 converted_err_len;
10901093
MYSQL_DATA *data= thd->cur_data;
10911094
struct embedded_query_result *ei;
10921095

@@ -1101,7 +1104,12 @@ bool net_send_error_packet(THD *thd, uint sql_errno, const char *err,
11011104

11021105
ei= data->embedded_info;
11031106
ei->last_errno= sql_errno;
1104-
strmake(ei->info, err, sizeof(ei->info)-1);
1107+
converted_err_len= convert_error_message((char*)converted_err,
1108+
sizeof(converted_err),
1109+
thd->variables.character_set_results,
1110+
err, strlen(err),
1111+
system_charset_info, &error);
1112+
strmake(ei->info, (const char*) converted_err, sizeof(ei->info)-1);
11051113
strmov(ei->sqlstate, sqlstate);
11061114
ei->server_status= thd->server_status;
11071115
thd->cur_data= 0;

mysql-test/lib/My/ConfigFactory.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ sub fix_charset_dir {
3939
sub fix_language {
4040
my ($self, $config, $group_name, $group)= @_;
4141
return my_find_dir($self->get_basedir($group),
42-
\@share_locations, "english");
42+
\@share_locations);
4343
}
4444

4545
sub fix_datadir {
@@ -197,7 +197,7 @@ my @mysqld_rules=
197197
{ 'basedir' => sub { return shift->{ARGS}->{basedir}; } },
198198
{ 'tmpdir' => \&fix_tmpdir },
199199
{ 'character-sets-dir' => \&fix_charset_dir },
200-
{ 'language' => \&fix_language },
200+
{ 'lc-messages-dir' => \&fix_language },
201201
{ 'datadir' => \&fix_datadir },
202202
{ 'pid-file' => \&fix_pidfile },
203203
{ '#host' => \&fix_host },

0 commit comments

Comments
 (0)