mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/mysql-5.1 client/mysqltest.c: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/sql_parse.cc: Auto merged
This commit is contained in:
commit
94814c6f5d
8 changed files with 121 additions and 157 deletions
|
@ -481,9 +481,10 @@ my_bool mysql_rpl_probe(MYSQL *mysql __attribute__((unused))) { return 1; }
|
||||||
static void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
|
static void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
|
||||||
int len);
|
int len);
|
||||||
static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val);
|
static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val);
|
||||||
static int normal_handle_error(const char *query, struct st_query *q,
|
static int handle_error(const char *query, struct st_query *q,
|
||||||
MYSQL *mysql, DYNAMIC_STRING *ds);
|
unsigned int err_errno, const char *err_error,
|
||||||
static int normal_handle_no_error(struct st_query *q);
|
const char *err_sqlstate, DYNAMIC_STRING *ds);
|
||||||
|
static int handle_no_error(struct st_query *q);
|
||||||
|
|
||||||
static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
|
static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
|
||||||
{
|
{
|
||||||
|
@ -2071,11 +2072,12 @@ int connect_n_handle_errors(struct st_query *q, MYSQL* con, const char* host,
|
||||||
if (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
|
if (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
|
||||||
CLIENT_MULTI_STATEMENTS))
|
CLIENT_MULTI_STATEMENTS))
|
||||||
{
|
{
|
||||||
error= normal_handle_error("connect", q, con, ds);
|
error= handle_error("connect", q, mysql_errno(con), mysql_error(con),
|
||||||
|
mysql_sqlstate(con), ds);
|
||||||
*create_conn= 0;
|
*create_conn= 0;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
else if (normal_handle_no_error(q))
|
else if (handle_no_error(q))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Fail if there was no error but we expected it.
|
Fail if there was no error but we expected it.
|
||||||
|
@ -2964,8 +2966,6 @@ static void append_result(DYNAMIC_STRING *ds, MYSQL_RES *res)
|
||||||
static int run_query_normal(MYSQL *mysql, struct st_query *q, int flags);
|
static int run_query_normal(MYSQL *mysql, struct st_query *q, int flags);
|
||||||
static int run_query_stmt (MYSQL *mysql, struct st_query *q, int flags);
|
static int run_query_stmt (MYSQL *mysql, struct st_query *q, int flags);
|
||||||
static void run_query_stmt_handle_warnings(MYSQL *mysql, DYNAMIC_STRING *ds);
|
static void run_query_stmt_handle_warnings(MYSQL *mysql, DYNAMIC_STRING *ds);
|
||||||
static int run_query_stmt_handle_error(char *query, struct st_query *q,
|
|
||||||
MYSQL_STMT *stmt, DYNAMIC_STRING *ds);
|
|
||||||
static void run_query_display_metadata(MYSQL_FIELD *field, uint num_fields,
|
static void run_query_display_metadata(MYSQL_FIELD *field, uint num_fields,
|
||||||
DYNAMIC_STRING *ds);
|
DYNAMIC_STRING *ds);
|
||||||
|
|
||||||
|
@ -3049,12 +3049,13 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags)
|
||||||
(!(last_result= res= mysql_store_result(mysql)) &&
|
(!(last_result= res= mysql_store_result(mysql)) &&
|
||||||
mysql_field_count(mysql)))
|
mysql_field_count(mysql)))
|
||||||
{
|
{
|
||||||
if (normal_handle_error(query, q, mysql, ds))
|
if (handle_error(query, q, mysql_errno(mysql), mysql_error(mysql),
|
||||||
|
mysql_sqlstate(mysql), ds))
|
||||||
error= 1;
|
error= 1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (normal_handle_no_error(q))
|
if (handle_no_error(q))
|
||||||
{
|
{
|
||||||
error= 1;
|
error= 1;
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -3169,14 +3170,15 @@ end:
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Handle errors which occurred after execution of conventional (non-prepared)
|
Handle errors which occurred after execution
|
||||||
statement.
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
normal_handle_error()
|
handle_error()
|
||||||
query - query string
|
query - query string
|
||||||
q - query context
|
q - query context
|
||||||
mysql - connection through which query was sent to server
|
err_errno - error number
|
||||||
|
err_error - error message
|
||||||
|
err_sqlstate - sql state
|
||||||
ds - dynamic string which is used for output buffer
|
ds - dynamic string which is used for output buffer
|
||||||
|
|
||||||
NOTE
|
NOTE
|
||||||
|
@ -3188,85 +3190,83 @@ end:
|
||||||
1 - Some other error was expected.
|
1 - Some other error was expected.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int normal_handle_error(const char *query, struct st_query *q,
|
static int handle_error(const char *query, struct st_query *q,
|
||||||
MYSQL *mysql, DYNAMIC_STRING *ds)
|
unsigned int err_errno, const char *err_error,
|
||||||
|
const char* err_sqlstate, DYNAMIC_STRING *ds)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
DBUG_ENTER("normal_handle_error");
|
DBUG_ENTER("handle_error");
|
||||||
|
|
||||||
if (q->require_file)
|
if (q->require_file)
|
||||||
abort_not_supported_test();
|
abort_not_supported_test();
|
||||||
|
|
||||||
if (q->abort_on_error)
|
if (q->abort_on_error)
|
||||||
die("query '%s' failed: %d: %s", query,
|
die("query '%s' failed: %d: %s", query,
|
||||||
mysql_errno(mysql), mysql_error(mysql));
|
err_errno, err_error);
|
||||||
else
|
|
||||||
|
for (i= 0 ; (uint) i < q->expected_errors ; i++)
|
||||||
{
|
{
|
||||||
for (i= 0 ; (uint) i < q->expected_errors ; i++)
|
if (((q->expected_errno[i].type == ERR_ERRNO) &&
|
||||||
|
(q->expected_errno[i].code.errnum == err_errno)) ||
|
||||||
|
((q->expected_errno[i].type == ERR_SQLSTATE) &&
|
||||||
|
(strcmp(q->expected_errno[i].code.sqlstate, err_sqlstate) == 0)))
|
||||||
{
|
{
|
||||||
if (((q->expected_errno[i].type == ERR_ERRNO) &&
|
if (q->expected_errors == 1)
|
||||||
(q->expected_errno[i].code.errnum == mysql_errno(mysql))) ||
|
|
||||||
((q->expected_errno[i].type == ERR_SQLSTATE) &&
|
|
||||||
(strcmp(q->expected_errno[i].code.sqlstate, mysql_sqlstate(mysql)) == 0)))
|
|
||||||
{
|
{
|
||||||
if (q->expected_errors == 1)
|
/* Only log error if there is one possible error */
|
||||||
{
|
dynstr_append_mem(ds, "ERROR ", 6);
|
||||||
/* Only log error if there is one possible error */
|
replace_dynstr_append(ds, err_sqlstate);
|
||||||
dynstr_append_mem(ds, "ERROR ", 6);
|
dynstr_append_mem(ds, ": ", 2);
|
||||||
replace_dynstr_append(ds, mysql_sqlstate(mysql));
|
replace_dynstr_append(ds, err_error);
|
||||||
dynstr_append_mem(ds, ": ", 2);
|
dynstr_append_mem(ds,"\n",1);
|
||||||
replace_dynstr_append(ds, mysql_error(mysql));
|
|
||||||
dynstr_append_mem(ds,"\n",1);
|
|
||||||
}
|
|
||||||
/* Don't log error if we may not get an error */
|
|
||||||
else if (q->expected_errno[0].type == ERR_SQLSTATE ||
|
|
||||||
(q->expected_errno[0].type == ERR_ERRNO &&
|
|
||||||
q->expected_errno[0].code.errnum != 0))
|
|
||||||
dynstr_append(ds,"Got one of the listed errors\n");
|
|
||||||
/* OK */
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
}
|
||||||
|
/* Don't log error if we may not get an error */
|
||||||
|
else if (q->expected_errno[0].type == ERR_SQLSTATE ||
|
||||||
|
(q->expected_errno[0].type == ERR_ERRNO &&
|
||||||
|
q->expected_errno[0].code.errnum != 0))
|
||||||
|
dynstr_append(ds,"Got one of the listed errors\n");
|
||||||
|
/* OK */
|
||||||
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_PRINT("info",("i: %d expected_errors: %d", i, q->expected_errors));
|
|
||||||
|
|
||||||
dynstr_append_mem(ds, "ERROR ",6);
|
|
||||||
replace_dynstr_append(ds, mysql_sqlstate(mysql));
|
|
||||||
dynstr_append_mem(ds, ": ", 2);
|
|
||||||
replace_dynstr_append(ds, mysql_error(mysql));
|
|
||||||
dynstr_append_mem(ds, "\n", 1);
|
|
||||||
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
if (q->expected_errno[0].type == ERR_ERRNO)
|
|
||||||
verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
|
|
||||||
q->query, mysql_errno(mysql),
|
|
||||||
q->expected_errno[0].code.errnum);
|
|
||||||
else
|
|
||||||
verbose_msg("query '%s' failed with wrong sqlstate %s instead of %s...",
|
|
||||||
q->query, mysql_sqlstate(mysql),
|
|
||||||
q->expected_errno[0].code.sqlstate);
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
If we do not abort on error, failure to run the query does not fail the
|
|
||||||
whole test case.
|
|
||||||
*/
|
|
||||||
verbose_msg("query '%s' failed: %d: %s", q->query, mysql_errno(mysql),
|
|
||||||
mysql_error(mysql));
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
}
|
||||||
return 0; /* Keep compiler happy */
|
|
||||||
|
DBUG_PRINT("info",("i: %d expected_errors: %d", i, q->expected_errors));
|
||||||
|
|
||||||
|
dynstr_append_mem(ds, "ERROR ",6);
|
||||||
|
replace_dynstr_append(ds, err_sqlstate);
|
||||||
|
dynstr_append_mem(ds, ": ", 2);
|
||||||
|
replace_dynstr_append(ds, err_error);
|
||||||
|
dynstr_append_mem(ds, "\n", 1);
|
||||||
|
|
||||||
|
if (i)
|
||||||
|
{
|
||||||
|
if (q->expected_errno[0].type == ERR_ERRNO)
|
||||||
|
verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
|
||||||
|
q->query, err_errno,
|
||||||
|
q->expected_errno[0].code.errnum);
|
||||||
|
else
|
||||||
|
verbose_msg("query '%s' failed with wrong sqlstate %s instead of %s...",
|
||||||
|
q->query, err_sqlstate,
|
||||||
|
q->expected_errno[0].code.sqlstate);
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we do not abort on error, failure to run the query does not fail the
|
||||||
|
whole test case.
|
||||||
|
*/
|
||||||
|
verbose_msg("query '%s' failed: %d: %s", q->query, err_errno,
|
||||||
|
err_error);
|
||||||
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Handle absence of errors after execution of convetional statement.
|
Handle absence of errors after execution
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
normal_handle_error()
|
handle_no_error()
|
||||||
q - context of query
|
q - context of query
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
|
@ -3274,9 +3274,9 @@ static int normal_handle_error(const char *query, struct st_query *q,
|
||||||
1 - Some error was expected from this query.
|
1 - Some error was expected from this query.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int normal_handle_no_error(struct st_query *q)
|
static int handle_no_error(struct st_query *q)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("normal_handle_no_error");
|
DBUG_ENTER("handle_no_error");
|
||||||
|
|
||||||
if (q->expected_errno[0].type == ERR_ERRNO &&
|
if (q->expected_errno[0].type == ERR_ERRNO &&
|
||||||
q->expected_errno[0].code.errnum != 0)
|
q->expected_errno[0].code.errnum != 0)
|
||||||
|
@ -3370,17 +3370,17 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
|
||||||
{
|
{
|
||||||
if (q->abort_on_error)
|
if (q->abort_on_error)
|
||||||
{
|
{
|
||||||
die("unable to prepare statement '%s': "
|
die("query '%s' failed: %d: %s", query,
|
||||||
"%s (mysql_stmt_errno=%d returned=%d)",
|
mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
|
||||||
query,
|
|
||||||
mysql_stmt_error(stmt), mysql_stmt_errno(stmt), err);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Preparing is part of normal execution and some errors may be expected
|
Preparing is part of normal execution and some errors may be expected
|
||||||
*/
|
*/
|
||||||
error= run_query_stmt_handle_error(query, q, stmt, ds);
|
error= handle_error(query, q, mysql_stmt_errno(stmt),
|
||||||
|
mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
|
||||||
|
ds);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3413,7 +3413,9 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We got an error, maybe expected */
|
/* We got an error, maybe expected */
|
||||||
error= run_query_stmt_handle_error(query, q, stmt, ds);
|
error= handle_error(query, q, mysql_stmt_errno(stmt),
|
||||||
|
mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
|
||||||
|
ds);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3449,18 +3451,16 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We got an error, maybe expected */
|
/* We got an error, maybe expected */
|
||||||
error= run_query_stmt_handle_error(query, q, stmt, ds);
|
error= handle_error(query, q, mysql_stmt_errno(stmt),
|
||||||
|
mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
|
||||||
|
ds);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we got here the statement was both executed and read succeesfully */
|
/* If we got here the statement was both executed and read succeesfully */
|
||||||
|
if (handle_no_error(q))
|
||||||
if (q->expected_errno[0].type == ERR_ERRNO &&
|
|
||||||
q->expected_errno[0].code.errnum != 0)
|
|
||||||
{
|
{
|
||||||
verbose_msg("query '%s' succeeded - should have failed with errno %d...",
|
|
||||||
q->query, q->expected_errno[0].code.errnum);
|
|
||||||
error= 1;
|
error= 1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -3740,71 +3740,6 @@ static void run_query_stmt_handle_warnings(MYSQL *mysql, DYNAMIC_STRING *ds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int run_query_stmt_handle_error(char *query, struct st_query *q,
|
|
||||||
MYSQL_STMT *stmt, DYNAMIC_STRING *ds)
|
|
||||||
{
|
|
||||||
if (q->require_file) /* FIXME don't understand this one */
|
|
||||||
{
|
|
||||||
abort_not_supported_test();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (q->abort_on_error)
|
|
||||||
die("query '%s' failed: %d: %s", query,
|
|
||||||
mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0 ; (uint) i < q->expected_errors ; i++)
|
|
||||||
{
|
|
||||||
if (((q->expected_errno[i].type == ERR_ERRNO) &&
|
|
||||||
(q->expected_errno[i].code.errnum == mysql_stmt_errno(stmt))) ||
|
|
||||||
((q->expected_errno[i].type == ERR_SQLSTATE) &&
|
|
||||||
(strcmp(q->expected_errno[i].code.sqlstate,
|
|
||||||
mysql_stmt_sqlstate(stmt)) == 0)))
|
|
||||||
{
|
|
||||||
if (i == 0 && q->expected_errors == 1)
|
|
||||||
{
|
|
||||||
/* Only log error if there is one possible error */
|
|
||||||
dynstr_append_mem(ds,"ERROR ",6);
|
|
||||||
replace_dynstr_append(ds, mysql_stmt_sqlstate(stmt));
|
|
||||||
dynstr_append_mem(ds, ": ", 2);
|
|
||||||
replace_dynstr_append(ds,mysql_stmt_error(stmt));
|
|
||||||
dynstr_append_mem(ds,"\n",1);
|
|
||||||
}
|
|
||||||
/* Don't log error if we may not get an error */
|
|
||||||
else if (q->expected_errno[0].type == ERR_SQLSTATE ||
|
|
||||||
(q->expected_errno[0].type == ERR_ERRNO &&
|
|
||||||
q->expected_errno[0].code.errnum != 0))
|
|
||||||
dynstr_append(ds,"Got one of the listed errors\n");
|
|
||||||
return 0; /* Ok */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DBUG_PRINT("info",("i: %d expected_errors: %d", i,
|
|
||||||
q->expected_errors));
|
|
||||||
dynstr_append_mem(ds, "ERROR ",6);
|
|
||||||
replace_dynstr_append(ds, mysql_stmt_sqlstate(stmt));
|
|
||||||
dynstr_append_mem(ds,": ",2);
|
|
||||||
replace_dynstr_append(ds, mysql_stmt_error(stmt));
|
|
||||||
dynstr_append_mem(ds,"\n",1);
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
|
|
||||||
q->query, mysql_stmt_errno(stmt), q->expected_errno[0]);
|
|
||||||
return 1; /* Error */
|
|
||||||
}
|
|
||||||
verbose_msg("query '%s' failed: %d: %s", q->query, mysql_stmt_errno(stmt),
|
|
||||||
mysql_stmt_error(stmt));
|
|
||||||
/*
|
|
||||||
if we do not abort on error, failure to run the query does
|
|
||||||
not fail the whole test case
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************\
|
/****************************************************************************\
|
||||||
* Functions to match SQL statements that can be prepared
|
* Functions to match SQL statements that can be prepared
|
||||||
\****************************************************************************/
|
\****************************************************************************/
|
||||||
|
@ -3901,6 +3836,22 @@ void get_query_type(struct st_query* q)
|
||||||
q->type != Q_DISABLE_PARSING)
|
q->type != Q_DISABLE_PARSING)
|
||||||
q->type= Q_COMMENT;
|
q->type= Q_COMMENT;
|
||||||
}
|
}
|
||||||
|
else if (q->type == Q_COMMENT_WITH_COMMAND &&
|
||||||
|
q->query[q->first_word_len-1] == ';')
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Detect comment with command using extra delimiter
|
||||||
|
Ex --disable_query_log;
|
||||||
|
^ Extra delimiter causing the command
|
||||||
|
to be skipped
|
||||||
|
*/
|
||||||
|
save= q->query[q->first_word_len-1];
|
||||||
|
q->query[q->first_word_len-1]= 0;
|
||||||
|
type= find_type(q->query, &command_typelib, 1+2);
|
||||||
|
q->query[q->first_word_len-1]= save;
|
||||||
|
if (type > 0)
|
||||||
|
die("Extra delimiter \";\" found");
|
||||||
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ $(top_builddir)/include/mysqld_ername.h: $(top_builddir)/include/mysqld_error.h
|
||||||
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
|
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
|
||||||
|
|
||||||
bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \
|
bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \
|
||||||
resolve_stack_dump mysql_waitpid innochecksum
|
resolve_stack_dump mysql_waitpid # innochecksum
|
||||||
noinst_PROGRAMS = charset2html
|
noinst_PROGRAMS = charset2html
|
||||||
|
|
||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
--require r/lowercase0.require
|
--require r/lowercase0.require
|
||||||
--disable_query_log;
|
--disable_query_log
|
||||||
show variables like "lower_case_%";
|
show variables like "lower_case_%";
|
||||||
--enable_query_log;
|
--enable_query_log
|
||||||
|
|
|
@ -152,6 +152,7 @@ mysqltest: At line 1: End of line junk detected: "6"
|
||||||
mysqltest: At line 1: End of line junk detected: "6"
|
mysqltest: At line 1: End of line junk detected: "6"
|
||||||
mysqltest: At line 1: Missing delimiter
|
mysqltest: At line 1: Missing delimiter
|
||||||
mysqltest: At line 1: Extra delimiter ";" found
|
mysqltest: At line 1: Extra delimiter ";" found
|
||||||
|
mysqltest: At line 1: Extra delimiter ";" found
|
||||||
MySQL
|
MySQL
|
||||||
"MySQL"
|
"MySQL"
|
||||||
MySQL: The world''s most popular open source database
|
MySQL: The world''s most popular open source database
|
||||||
|
|
|
@ -369,6 +369,8 @@ select 3 from t1 ;
|
||||||
#
|
#
|
||||||
--error 1
|
--error 1
|
||||||
--exec echo "--sleep 4;" | $MYSQL_TEST 2>&1
|
--exec echo "--sleep 4;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
|
|
||||||
# Allow trailing # comment
|
# Allow trailing # comment
|
||||||
|
@ -592,7 +594,7 @@ while ($num)
|
||||||
--source var/tmp/sourced1.sql
|
--source var/tmp/sourced1.sql
|
||||||
dec $num;
|
dec $num;
|
||||||
}
|
}
|
||||||
--enable_abort_on_error;
|
--enable_abort_on_error
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
|
@ -1175,6 +1175,7 @@ extern bool opt_using_transactions, mysqld_embedded;
|
||||||
extern bool using_update_log, opt_large_files, server_id_supplied;
|
extern bool using_update_log, opt_large_files, server_id_supplied;
|
||||||
extern bool opt_log, opt_update_log, opt_bin_log, opt_slow_log, opt_error_log;
|
extern bool opt_log, opt_update_log, opt_bin_log, opt_slow_log, opt_error_log;
|
||||||
extern bool opt_disable_networking, opt_skip_show_db;
|
extern bool opt_disable_networking, opt_skip_show_db;
|
||||||
|
extern bool opt_character_set_client_handshake;
|
||||||
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
|
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
|
||||||
extern bool mysql_proc_table_exists;
|
extern bool mysql_proc_table_exists;
|
||||||
extern uint volatile thread_count, thread_running, global_read_lock;
|
extern uint volatile thread_count, thread_running, global_read_lock;
|
||||||
|
|
|
@ -339,6 +339,7 @@ static my_bool opt_sync_bdb_logs;
|
||||||
bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
|
bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
|
||||||
bool opt_error_log= IF_WIN(1,0);
|
bool opt_error_log= IF_WIN(1,0);
|
||||||
bool opt_disable_networking=0, opt_skip_show_db=0;
|
bool opt_disable_networking=0, opt_skip_show_db=0;
|
||||||
|
bool opt_character_set_client_handshake= 1;
|
||||||
bool server_id_supplied = 0;
|
bool server_id_supplied = 0;
|
||||||
bool opt_endinfo,using_udf_functions, locked_in_memory;
|
bool opt_endinfo,using_udf_functions, locked_in_memory;
|
||||||
bool opt_using_transactions, using_update_log;
|
bool opt_using_transactions, using_update_log;
|
||||||
|
@ -4423,6 +4424,7 @@ enum options_mysqld
|
||||||
OPT_EXPIRE_LOGS_DAYS,
|
OPT_EXPIRE_LOGS_DAYS,
|
||||||
OPT_GROUP_CONCAT_MAX_LEN,
|
OPT_GROUP_CONCAT_MAX_LEN,
|
||||||
OPT_DEFAULT_COLLATION,
|
OPT_DEFAULT_COLLATION,
|
||||||
|
OPT_CHARACTER_SET_CLIENT_HANDSHAKE,
|
||||||
OPT_INIT_CONNECT,
|
OPT_INIT_CONNECT,
|
||||||
OPT_INIT_SLAVE,
|
OPT_INIT_SLAVE,
|
||||||
OPT_SECURE_AUTH,
|
OPT_SECURE_AUTH,
|
||||||
|
@ -4524,6 +4526,11 @@ Disable with --skip-bdb (will save memory).",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"bootstrap", OPT_BOOTSTRAP, "Used by mysql installation scripts.", 0, 0, 0,
|
{"bootstrap", OPT_BOOTSTRAP, "Used by mysql installation scripts.", 0, 0, 0,
|
||||||
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"character-set-client-handshake", OPT_CHARACTER_SET_CLIENT_HANDSHAKE,
|
||||||
|
"Don't use client side character set value sent during handshake.",
|
||||||
|
(gptr*) &opt_character_set_client_handshake,
|
||||||
|
(gptr*) &opt_character_set_client_handshake,
|
||||||
|
0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
{"character-set-server", 'C', "Set the default character set.",
|
{"character-set-server", 'C', "Set the default character set.",
|
||||||
(gptr*) &default_character_set_name, (gptr*) &default_character_set_name,
|
(gptr*) &default_character_set_name, (gptr*) &default_character_set_name,
|
||||||
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
|
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
|
||||||
|
|
|
@ -879,11 +879,13 @@ static int check_connection(THD *thd)
|
||||||
DBUG_PRINT("info", ("client_character_set: %d", (uint) net->read_pos[8]));
|
DBUG_PRINT("info", ("client_character_set: %d", (uint) net->read_pos[8]));
|
||||||
/*
|
/*
|
||||||
Use server character set and collation if
|
Use server character set and collation if
|
||||||
|
- opt_character_set_client_handshake is not set
|
||||||
- client has not specified a character set
|
- client has not specified a character set
|
||||||
- client character set is the same as the servers
|
- client character set is the same as the servers
|
||||||
- client character set doesn't exists in server
|
- client character set doesn't exists in server
|
||||||
*/
|
*/
|
||||||
if (!(thd->variables.character_set_client=
|
if (!opt_character_set_client_handshake ||
|
||||||
|
!(thd->variables.character_set_client=
|
||||||
get_charset((uint) net->read_pos[8], MYF(0))) ||
|
get_charset((uint) net->read_pos[8], MYF(0))) ||
|
||||||
!my_strcasecmp(&my_charset_latin1,
|
!my_strcasecmp(&my_charset_latin1,
|
||||||
global_system_variables.character_set_client->name,
|
global_system_variables.character_set_client->name,
|
||||||
|
|
Loading…
Reference in a new issue