Merge ramayana.hindu.god:/home/tsmith/m/bk/51
into ramayana.hindu.god:/home/tsmith/m/bk/maint/51 configure.in: Auto merged mysql-test/Makefile.am: Auto merged mysql-test/mysql-test-run.pl: Auto merged scripts/Makefile.am: Auto merged scripts/mysql_system_tables_data.sql: Auto merged scripts/mysqld_safe.sh: Auto merged sql/sql_select.cc: Auto merged storage/innobase/handler/ha_innodb.cc: Auto merged
This commit is contained in:
commit
17c19299af
@ -692,9 +692,14 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &opt_mysql_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
0},
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &opt_mysql_port,
|
||||||
|
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"prompt", OPT_PROMPT, "Set the mysql prompt to this value.",
|
{"prompt", OPT_PROMPT, "Set the mysql prompt to this value.",
|
||||||
(uchar**) ¤t_prompt, (uchar**) ¤t_prompt, 0, GET_STR_ALLOC,
|
(uchar**) ¤t_prompt, (uchar**) ¤t_prompt, 0, GET_STR_ALLOC,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
@ -96,8 +96,13 @@ static struct my_option my_long_options[]=
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0,
|
{"pipe", 'W', "Use named pipes to connect to server.", 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},
|
||||||
#endif
|
#endif
|
||||||
{"port", 'P', "Port number to use for connection.", 0,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"protocol", OPT_MYSQL_PROTOCOL,
|
{"protocol", OPT_MYSQL_PROTOCOL,
|
||||||
"The protocol of connection (tcp,socket,pipe,memory).",
|
"The protocol of connection (tcp,socket,pipe,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},
|
||||||
@ -462,7 +467,11 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
|
|
||||||
if (my_write(fd, (uchar*) query, strlen(query),
|
if (my_write(fd, (uchar*) query, strlen(query),
|
||||||
MYF(MY_FNABP | MY_WME)))
|
MYF(MY_FNABP | MY_WME)))
|
||||||
|
{
|
||||||
|
my_close(fd, MYF(0));
|
||||||
|
my_delete(query_file_path, MYF(0));
|
||||||
die("Failed to write to '%s'", query_file_path);
|
die("Failed to write to '%s'", query_file_path);
|
||||||
|
}
|
||||||
|
|
||||||
ret= run_tool(mysql_path,
|
ret= run_tool(mysql_path,
|
||||||
ds_res,
|
ds_res,
|
||||||
|
@ -173,7 +173,13 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &tcp_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &tcp_port,
|
||||||
(uchar**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,memory).",
|
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,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},
|
||||||
|
@ -760,9 +760,14 @@ static struct my_option my_long_options[] =
|
|||||||
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"password", 'p', "Password to connect to remote server.",
|
{"password", 'p', "Password to connect to remote server.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Use port to connect to the remote server.",
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
(uchar**) &port, (uchar**) &port, 0, GET_INT, REQUIRED_ARG, 0, 0, 0,
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
0, 0, 0},
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &port, (uchar**) &port, 0, GET_INT, REQUIRED_ARG,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
{"position", 'j', "Deprecated. Use --start-position instead.",
|
{"position", 'j', "Deprecated. Use --start-position instead.",
|
||||||
(uchar**) &start_position, (uchar**) &start_position, 0, GET_ULL,
|
(uchar**) &start_position, (uchar**) &start_position, 0, GET_ULL,
|
||||||
REQUIRED_ARG, BIN_LOG_HEADER_SIZE, BIN_LOG_HEADER_SIZE,
|
REQUIRED_ARG, BIN_LOG_HEADER_SIZE, BIN_LOG_HEADER_SIZE,
|
||||||
|
@ -142,7 +142,13 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &opt_mysql_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &opt_mysql_port,
|
||||||
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,memory).",
|
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,memory).",
|
||||||
|
@ -1888,7 +1888,7 @@ static uint dump_events_for_db(char *db)
|
|||||||
if (create_delimiter(row[3], delimiter, sizeof(delimiter)) == NULL)
|
if (create_delimiter(row[3], delimiter, sizeof(delimiter)) == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: Warning: Can't create delimiter for event '%s'\n",
|
fprintf(stderr, "%s: Warning: Can't create delimiter for event '%s'\n",
|
||||||
event_name, my_progname);
|
my_progname, event_name);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4369,6 +4369,18 @@ static int start_transaction(MYSQL *mysql_con)
|
|||||||
need the REPEATABLE READ level (not anything lower, for example READ
|
need the REPEATABLE READ level (not anything lower, for example READ
|
||||||
COMMITTED would give one new consistent read per dumped table).
|
COMMITTED would give one new consistent read per dumped table).
|
||||||
*/
|
*/
|
||||||
|
if ((mysql_get_server_version(mysql_con) < 40100) && opt_master_data)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "-- %s: the combination of --single-transaction and "
|
||||||
|
"--master-data requires a MySQL server version of at least 4.1 "
|
||||||
|
"(current server's version is %s). %s\n",
|
||||||
|
ignore_errors ? "Warning" : "Error",
|
||||||
|
mysql_con->server_version ? mysql_con->server_version : "unknown",
|
||||||
|
ignore_errors ? "Continuing due to --force, backup may not be consistent across all tables!" : "Aborting.");
|
||||||
|
if (!ignore_errors)
|
||||||
|
exit(EX_MYSQLERR);
|
||||||
|
}
|
||||||
|
|
||||||
return (mysql_query_with_error_report(mysql_con, 0,
|
return (mysql_query_with_error_report(mysql_con, 0,
|
||||||
"SET SESSION TRANSACTION ISOLATION "
|
"SET SESSION TRANSACTION ISOLATION "
|
||||||
"LEVEL REPEATABLE READ") ||
|
"LEVEL REPEATABLE READ") ||
|
||||||
|
@ -137,7 +137,13 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &opt_mysql_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &opt_mysql_port,
|
||||||
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,memory).",
|
{"protocol", OPT_MYSQL_PROTOCOL, "The protocol of connection (tcp,socket,pipe,memory).",
|
||||||
|
@ -196,7 +196,13 @@ static struct my_option my_long_options[] =
|
|||||||
{"password", 'p',
|
{"password", 'p',
|
||||||
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &opt_mysql_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &opt_mysql_port,
|
||||||
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
|
@ -1563,10 +1563,22 @@ void check_result(DYNAMIC_STRING* ds)
|
|||||||
and then show the diff
|
and then show the diff
|
||||||
*/
|
*/
|
||||||
char reject_file[FN_REFLEN];
|
char reject_file[FN_REFLEN];
|
||||||
str_to_file(fn_format(reject_file, result_file_name, opt_logdir, ".reject",
|
size_t reject_length;
|
||||||
*opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT :
|
dirname_part(reject_file, result_file_name, &reject_length);
|
||||||
MY_REPLACE_EXT),
|
|
||||||
ds->str, ds->length);
|
if (access(reject_file, W_OK) == 0)
|
||||||
|
{
|
||||||
|
/* Result file directory is writable, save reject file there */
|
||||||
|
fn_format(reject_file, result_file_name, NULL,
|
||||||
|
".reject", MY_REPLACE_EXT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Put reject file in opt_logdir */
|
||||||
|
fn_format(reject_file, result_file_name, opt_logdir,
|
||||||
|
".reject", MY_REPLACE_DIR | MY_REPLACE_EXT);
|
||||||
|
}
|
||||||
|
str_to_file(reject_file, ds->str, ds->length);
|
||||||
|
|
||||||
dynstr_set(ds, NULL); /* Don't create a .log file */
|
dynstr_set(ds, NULL); /* Don't create a .log file */
|
||||||
|
|
||||||
@ -4946,7 +4958,13 @@ static struct my_option my_long_options[] =
|
|||||||
GET_INT, REQUIRED_ARG, 500, 1, 10000, 0, 0, 0},
|
GET_INT, REQUIRED_ARG, 500, 1, 10000, 0, 0, 0},
|
||||||
{"password", 'p', "Password to use when connecting to server.",
|
{"password", 'p', "Password to use when connecting to server.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &opt_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &opt_port,
|
||||||
(uchar**) &opt_port, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &opt_port, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"ps-protocol", OPT_PS_PROTOCOL, "Use prepared statements protocol for communication",
|
{"ps-protocol", OPT_PS_PROTOCOL, "Use prepared statements protocol for communication",
|
||||||
(uchar**) &ps_protocol, (uchar**) &ps_protocol, 0,
|
(uchar**) &ps_protocol, (uchar**) &ps_protocol, 0,
|
||||||
|
29
configure.in
29
configure.in
@ -676,7 +676,34 @@ AC_ARG_WITH(tcp-port,
|
|||||||
[ --with-tcp-port=port-number
|
[ --with-tcp-port=port-number
|
||||||
Which port to use for MySQL services (default 3306)],
|
Which port to use for MySQL services (default 3306)],
|
||||||
[ MYSQL_TCP_PORT=$withval ],
|
[ MYSQL_TCP_PORT=$withval ],
|
||||||
[ MYSQL_TCP_PORT=$MYSQL_TCP_PORT_DEFAULT ]
|
[ MYSQL_TCP_PORT=$MYSQL_TCP_PORT_DEFAULT
|
||||||
|
# if we actually defaulted (as opposed to the pathological case of
|
||||||
|
# --with-tcp-port=<MYSQL_TCP_PORT_DEFAULT> which might in theory
|
||||||
|
# happen if whole batch of servers was built from a script), set
|
||||||
|
# the default to zero to indicate that; we don't lose information
|
||||||
|
# that way, because 0 obviously indicates that we can get the
|
||||||
|
# default value from MYSQL_TCP_PORT. this seems really evil, but
|
||||||
|
# testing for MYSQL_TCP_PORT==MYSQL_TCP_PORT_DEFAULT would make a
|
||||||
|
# a port of MYSQL_TCP_PORT_DEFAULT magic even if the builder did not
|
||||||
|
# intend it to mean "use the default, in fact, look up a good default
|
||||||
|
# from /etc/services if you can", but really, really meant 3306 when
|
||||||
|
# they passed in 3306. When they pass in a specific value, let them
|
||||||
|
# have it; don't second guess user and think we know better, this will
|
||||||
|
# just make people cross. this makes the the logic work like this
|
||||||
|
# (which is complicated enough):
|
||||||
|
#
|
||||||
|
# - if a port was set during build, use that as a default.
|
||||||
|
#
|
||||||
|
# - otherwise, try to look up a port in /etc/services; if that fails,
|
||||||
|
# use MYSQL_TCP_PORT_DEFAULT (at the time of this writing 3306)
|
||||||
|
#
|
||||||
|
# - allow the MYSQL_TCP_PORT environment variable to override that.
|
||||||
|
#
|
||||||
|
# - allow command-line parameters to override all of the above.
|
||||||
|
#
|
||||||
|
# the top-most MYSQL_TCP_PORT_DEFAULT is read from win/configure.js,
|
||||||
|
# so don't mess with that.
|
||||||
|
MYSQL_TCP_PORT_DEFAULT=0 ]
|
||||||
)
|
)
|
||||||
AC_SUBST(MYSQL_TCP_PORT)
|
AC_SUBST(MYSQL_TCP_PORT)
|
||||||
# We might want to document the assigned port in the manual.
|
# We might want to document the assigned port in the manual.
|
||||||
|
4
debian/po/ca.po
vendored
4
debian/po/ca.po
vendored
@ -162,9 +162,9 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Feu una ullada al document: http://www.mysql.com/doc/en/Upgrade.html"
|
#~ "Feu una ullada al document: http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
|
4
debian/po/cs.po
vendored
4
debian/po/cs.po
vendored
@ -213,8 +213,8 @@ msgstr ""
|
|||||||
#~ "se tabulky mohly narušit! Tento skript také rozšiřuje tabulky privilegií, "
|
#~ "se tabulky mohly narušit! Tento skript také rozšiřuje tabulky privilegií, "
|
||||||
#~ "ovšem neměl by uživatelům přidat více práv, než měli dosud."
|
#~ "ovšem neměl by uživatelům přidat více práv, než měli dosud."
|
||||||
|
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Také si přečtěte http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgstr "Také si přečtěte http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "MySQL will only install if you have a non-numeric hostname that is "
|
#~ "MySQL will only install if you have a non-numeric hostname that is "
|
||||||
|
4
debian/po/da.po
vendored
4
debian/po/da.po
vendored
@ -215,8 +215,8 @@ msgstr ""
|
|||||||
#~ "kan blive ødelagt! Dette script forbedrer også rettighedstabellerne, men "
|
#~ "kan blive ødelagt! Dette script forbedrer også rettighedstabellerne, men "
|
||||||
#~ "burde ikke give nogen bruger flere rettigheder, end han havde tidligere,"
|
#~ "burde ikke give nogen bruger flere rettigheder, end han havde tidligere,"
|
||||||
|
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Læs også http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgstr "Læs også http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
|
|
||||||
#~ msgid "Install Hints"
|
#~ msgid "Install Hints"
|
||||||
#~ msgstr "Installationstips"
|
#~ msgstr "Installationstips"
|
||||||
|
4
debian/po/gl.po
vendored
4
debian/po/gl.po
vendored
@ -211,8 +211,8 @@ msgstr ""
|
|||||||
#~ "privilexios, pero non se supón que vaia dar a ningún usuario máis "
|
#~ "privilexios, pero non se supón que vaia dar a ningún usuario máis "
|
||||||
#~ "dereitos dos que tiña antes."
|
#~ "dereitos dos que tiña antes."
|
||||||
|
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Lea tamén http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgstr "Lea tamén http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
|
|
||||||
#~ msgid "Install Hints"
|
#~ msgid "Install Hints"
|
||||||
#~ msgstr "Consellos de instalación"
|
#~ msgstr "Consellos de instalación"
|
||||||
|
4
debian/po/ja.po
vendored
4
debian/po/ja.po
vendored
@ -274,5 +274,5 @@ msgstr ""
|
|||||||
#~ "す。スクリプトは、どのようなユーザに対しても、以前に保持していた以上の権限"
|
#~ "す。スクリプトは、どのようなユーザに対しても、以前に保持していた以上の権限"
|
||||||
#~ "を与えるようにはなっていません。"
|
#~ "を与えるようにはなっていません。"
|
||||||
|
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "http://www.mysql.com/doc/ja/Upgrade.html も参照してください"
|
#~ msgstr "http://dev.mysql.com/doc/mysql/ja/upgrade.html も参照してください"
|
||||||
|
4
debian/po/pt_BR.po
vendored
4
debian/po/pt_BR.po
vendored
@ -205,8 +205,8 @@ msgstr ""
|
|||||||
#~ "atribuirá a nenhum usuário mais direitos do que os mesmos já possuíam "
|
#~ "atribuirá a nenhum usuário mais direitos do que os mesmos já possuíam "
|
||||||
#~ "anteriormente."
|
#~ "anteriormente."
|
||||||
|
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Por favor, leia http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgstr "Por favor, leia http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "Install Hints"
|
#~ msgid "Install Hints"
|
||||||
|
4
debian/po/sv.po
vendored
4
debian/po/sv.po
vendored
@ -165,8 +165,8 @@ msgstr "S
|
|||||||
#~ "tabellerna vara skadade! Detta skript utökar även privilegietabellerna "
|
#~ "tabellerna vara skadade! Detta skript utökar även privilegietabellerna "
|
||||||
#~ "men är inte tänkte att ge någon användare mer befogenhet än vad han hade "
|
#~ "men är inte tänkte att ge någon användare mer befogenhet än vad han hade "
|
||||||
#~ "tidigare,"
|
#~ "tidigare,"
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Läs även http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgstr "Läs även http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgid "Install Hints"
|
#~ msgid "Install Hints"
|
||||||
#~ msgstr "Installationstips"
|
#~ msgstr "Installationstips"
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
|
4
debian/po/tr.po
vendored
4
debian/po/tr.po
vendored
@ -162,8 +162,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "Please also read http://www.mysql.com/doc/en/Upgrade.html"
|
#~ msgid "Please also read http://dev.mysql.com/doc/mysql/en/upgrade.html"
|
||||||
#~ msgstr "Lütfen http://www.mysql.com/doc/en/Upgrade.html belgesini okuyun"
|
#~ msgstr "Lütfen http://dev.mysql.com/doc/mysql/en/upgrade.html belgesini okuyun"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
|
@ -167,6 +167,7 @@ int main(int argc, char *argv[])
|
|||||||
DBUG_ENTER("main");
|
DBUG_ENTER("main");
|
||||||
|
|
||||||
charsets_dir= DEFAULT_CHARSET_DIR;
|
charsets_dir= DEFAULT_CHARSET_DIR;
|
||||||
|
my_umask_dir= 0777;
|
||||||
if (get_options(&argc, &argv))
|
if (get_options(&argc, &argv))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
if (!(row_count= parse_input_file(TXTFILE, &error_head, &lang_head)))
|
if (!(row_count= parse_input_file(TXTFILE, &error_head, &lang_head)))
|
||||||
|
@ -854,8 +854,8 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||||||
#define DBL_MAX 1.79769313486231470e+308
|
#define DBL_MAX 1.79769313486231470e+308
|
||||||
#define FLT_MAX ((float)3.40282346638528860e+38)
|
#define FLT_MAX ((float)3.40282346638528860e+38)
|
||||||
#endif
|
#endif
|
||||||
#ifndef SSIZE_MAX
|
#ifndef SIZE_T_MAX
|
||||||
#define SSIZE_MAX ((~((size_t) 0)) / 2)
|
#define SIZE_T_MAX ~((size_t) 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_FINITE
|
#ifndef HAVE_FINITE
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#define FRM_VER @DOT_FRM_VERSION@
|
#define FRM_VER @DOT_FRM_VERSION@
|
||||||
#define MYSQL_VERSION_ID @MYSQL_VERSION_ID@
|
#define MYSQL_VERSION_ID @MYSQL_VERSION_ID@
|
||||||
#define MYSQL_PORT @MYSQL_TCP_PORT@
|
#define MYSQL_PORT @MYSQL_TCP_PORT@
|
||||||
|
#define MYSQL_PORT_DEFAULT @MYSQL_TCP_PORT_DEFAULT@
|
||||||
#define MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@"
|
#define MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@"
|
||||||
#define MYSQL_CONFIG_NAME "my"
|
#define MYSQL_CONFIG_NAME "my"
|
||||||
#define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@"
|
#define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@"
|
||||||
|
@ -133,8 +133,21 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
|
|||||||
{
|
{
|
||||||
struct servent *serv_ptr;
|
struct servent *serv_ptr;
|
||||||
char *env;
|
char *env;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if builder specifically requested a default port, use that
|
||||||
|
(even if it coincides with our factory default).
|
||||||
|
only if they didn't do we check /etc/services (and, failing
|
||||||
|
on that, fall back to the factory default of 3306).
|
||||||
|
either default can be overridden by the environment variable
|
||||||
|
MYSQL_TCP_PORT, which in turn can be overridden with command
|
||||||
|
line options.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
if ((serv_ptr = getservbyname("mysql", "tcp")))
|
if ((serv_ptr = getservbyname("mysql", "tcp")))
|
||||||
mysql_port = (uint) ntohs((ushort) serv_ptr->s_port);
|
mysql_port = (uint) ntohs((ushort) serv_ptr->s_port);
|
||||||
|
#endif
|
||||||
if ((env = getenv("MYSQL_TCP_PORT")))
|
if ((env = getenv("MYSQL_TCP_PORT")))
|
||||||
mysql_port =(uint) atoi(env);
|
mysql_port =(uint) atoi(env);
|
||||||
}
|
}
|
||||||
|
@ -154,6 +154,7 @@ SUFFIXES = .sh
|
|||||||
-e 's!@''PERL''@!@PERL@!' \
|
-e 's!@''PERL''@!@PERL@!' \
|
||||||
-e 's!@''VERSION''@!@VERSION@!' \
|
-e 's!@''VERSION''@!@VERSION@!' \
|
||||||
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
||||||
|
-e 's!@''MYSQL_TCP_PORT_DEFAULT''@!@MYSQL_TCP_PORT_DEFAULT@!' \
|
||||||
-e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \
|
-e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \
|
||||||
-e 's!@''MYSQL_UNIX_ADDR''@!@MYSQL_UNIX_ADDR@!' \
|
-e 's!@''MYSQL_UNIX_ADDR''@!@MYSQL_UNIX_ADDR@!' \
|
||||||
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
||||||
|
@ -51,6 +51,15 @@ SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
|||||||
SELECT c1 as want1result from t1 where c1 like 'location%';
|
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31070: crash during conversion of charsets
|
||||||
|
#
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
select a sounds like a from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
# Restore settings
|
# Restore settings
|
||||||
USE test;
|
USE test;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
--require r/windows.require
|
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 0`)
|
||||||
disable_query_log;
|
{
|
||||||
select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") as "TRUE";
|
skip Need windows;
|
||||||
enable_query_log;
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,26 @@ sub collect_one_test_case ($$$$$$$$$);
|
|||||||
|
|
||||||
sub mtr_options_from_test_file($$);
|
sub mtr_options_from_test_file($$);
|
||||||
|
|
||||||
|
my $do_test;
|
||||||
|
my $skip_test;
|
||||||
|
|
||||||
|
sub init_pattern {
|
||||||
|
my ($from, $what)= @_;
|
||||||
|
if ( $from =~ /[a-z0-9]/ ) {
|
||||||
|
# Does not contain any regex, make the pattern match
|
||||||
|
# beginning of string
|
||||||
|
$from= "^$from";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Check that pattern is a valid regex
|
||||||
|
eval { "" =~/$from/; 1 } or
|
||||||
|
mtr_error("Invalid regex '$from' passed to $what\nPerl says: $@");
|
||||||
|
}
|
||||||
|
return $from;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# Collect information about test cases we are to run
|
# Collect information about test cases we are to run
|
||||||
@ -35,6 +55,9 @@ sub mtr_options_from_test_file($$);
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
sub collect_test_cases ($) {
|
sub collect_test_cases ($) {
|
||||||
|
$do_test= init_pattern($::opt_do_test, "--do-test");
|
||||||
|
$skip_test= init_pattern($::opt_skip_test, "--skip-test");
|
||||||
|
|
||||||
my $suites= shift; # Semicolon separated list of test suites
|
my $suites= shift; # Semicolon separated list of test suites
|
||||||
my $cases = []; # Array of hash
|
my $cases = []; # Array of hash
|
||||||
|
|
||||||
@ -48,13 +71,14 @@ sub collect_test_cases ($) {
|
|||||||
{
|
{
|
||||||
# Check that the tests specified was found
|
# Check that the tests specified was found
|
||||||
# in at least one suite
|
# in at least one suite
|
||||||
foreach my $tname ( @::opt_cases )
|
foreach my $test_name_spec ( @::opt_cases )
|
||||||
{
|
{
|
||||||
my $found= 0;
|
my $found= 0;
|
||||||
|
my ($sname, $tname, $extension)= split_testname($test_name_spec);
|
||||||
foreach my $test ( @$cases )
|
foreach my $test ( @$cases )
|
||||||
{
|
{
|
||||||
if ( $test->{'name'} eq $tname ||
|
# test->{name} is always in suite.name format
|
||||||
mtr_match_extension($test->{'name'}, $tname) )
|
if ( $test->{name} =~ /.*\.$tname/ )
|
||||||
{
|
{
|
||||||
$found= 1;
|
$found= 1;
|
||||||
}
|
}
|
||||||
@ -144,6 +168,45 @@ sub collect_test_cases ($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Valid extensions and their corresonding component id
|
||||||
|
my %exts = ( 'test' => 'mysqld',
|
||||||
|
'imtest' => 'im'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# Returns (suitename, testname, extension)
|
||||||
|
sub split_testname {
|
||||||
|
my ($test_name)= @_;
|
||||||
|
|
||||||
|
# Get rid of directory part and split name on .'s
|
||||||
|
my @parts= split(/\./, basename($test_name));
|
||||||
|
|
||||||
|
if (@parts == 1){
|
||||||
|
# Only testname given, ex: alias
|
||||||
|
return (undef , $parts[0], undef);
|
||||||
|
} elsif (@parts == 2) {
|
||||||
|
# Either testname.test or suite.testname given
|
||||||
|
# Ex. main.alias or alias.test
|
||||||
|
|
||||||
|
if (defined $exts{$parts[1]})
|
||||||
|
{
|
||||||
|
return (undef , $parts[0], $parts[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ($parts[0], $parts[1], undef);
|
||||||
|
}
|
||||||
|
|
||||||
|
} elsif (@parts == 3) {
|
||||||
|
# Fully specified suitename.testname.test
|
||||||
|
# ex main.alias.test
|
||||||
|
return ( $parts[0], $parts[1], $parts[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
mtr_error("Illegal format of test name: $test_name");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub collect_one_suite($$)
|
sub collect_one_suite($$)
|
||||||
{
|
{
|
||||||
my $suite= shift; # Test suite name
|
my $suite= shift; # Test suite name
|
||||||
@ -151,19 +214,16 @@ sub collect_one_suite($$)
|
|||||||
|
|
||||||
mtr_verbose("Collecting: $suite");
|
mtr_verbose("Collecting: $suite");
|
||||||
|
|
||||||
my $testdir;
|
my $suitedir= "$::glob_mysql_test_dir"; # Default
|
||||||
my $resdir;
|
if ( $suite ne "main" )
|
||||||
|
{
|
||||||
|
$suitedir= mtr_path_exists("$suitedir/suite/$suite",
|
||||||
|
"$suitedir/$suite");
|
||||||
|
mtr_verbose("suitedir: $suitedir");
|
||||||
|
}
|
||||||
|
|
||||||
if ( $suite eq "main" )
|
my $testdir= "$suitedir/t";
|
||||||
{
|
my $resdir= "$suitedir/r";
|
||||||
$testdir= "$::glob_mysql_test_dir/t";
|
|
||||||
$resdir= "$::glob_mysql_test_dir/r";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$testdir= "$::glob_mysql_test_dir/suite/$suite/t";
|
|
||||||
$resdir= "$::glob_mysql_test_dir/suite/$suite/r";
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# Build a hash of disabled testcases for this suite
|
# Build a hash of disabled testcases for this suite
|
||||||
@ -192,77 +252,55 @@ sub collect_one_suite($$)
|
|||||||
|
|
||||||
if ( @::opt_cases )
|
if ( @::opt_cases )
|
||||||
{
|
{
|
||||||
# Collect in specified order, no sort
|
# Collect in specified order
|
||||||
foreach my $tname2 ( @::opt_cases )
|
foreach my $test_name_spec ( @::opt_cases )
|
||||||
{
|
{
|
||||||
my $tname= $tname2; # Don't modify @::opt_cases !
|
my ($sname, $tname, $extension)= split_testname($test_name_spec);
|
||||||
my $elem= undef;
|
|
||||||
my $component_id= undef;
|
|
||||||
|
|
||||||
# Get rid of directory part (path). Leave the extension since it is used
|
# The test name parts have now been defined
|
||||||
# to understand type of the test.
|
#print " suite_name: $sname\n";
|
||||||
|
#print " tname: $tname\n";
|
||||||
|
#print " extension: $extension\n";
|
||||||
|
|
||||||
$tname = basename($tname);
|
# Check cirrect suite if suitename is defined
|
||||||
|
next if (defined $sname and $suite ne $sname);
|
||||||
|
|
||||||
# Get rid of suite part
|
my $component_id;
|
||||||
$tname =~ s/^$suite\.//;
|
if ( defined $extension )
|
||||||
|
|
||||||
# Check if the extenstion has been specified.
|
|
||||||
|
|
||||||
if ( mtr_match_extension($tname, "test") )
|
|
||||||
{
|
{
|
||||||
$elem= $tname;
|
my $full_name= "$testdir/$tname.$extension";
|
||||||
$tname=~ s/\.test$//;
|
# Extension was specified, check if the test exists
|
||||||
$component_id= 'mysqld';
|
if ( ! -f $full_name)
|
||||||
}
|
{
|
||||||
elsif ( mtr_match_extension($tname, "imtest") )
|
# This is only an error if suite was specified, otherwise it
|
||||||
{
|
# could exist in another suite
|
||||||
$elem= $tname;
|
mtr_error("Test '$full_name' was not found in suite '$sname'")
|
||||||
$tname =~ s/\.imtest$//;
|
if $sname;
|
||||||
$component_id= 'im';
|
|
||||||
}
|
next;
|
||||||
|
|
||||||
# If target component is known, check that the specified test case
|
|
||||||
# exists.
|
|
||||||
#
|
|
||||||
# Otherwise, try to guess the target component.
|
|
||||||
|
|
||||||
if ( $component_id )
|
|
||||||
{
|
|
||||||
if ( ! -f "$testdir/$elem")
|
|
||||||
{
|
|
||||||
mtr_error("Test case $tname ($testdir/$elem) is not found");
|
|
||||||
}
|
}
|
||||||
|
$component_id= $exts{$extension};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my $mysqld_test_exists = -f "$testdir/$tname.test";
|
# No extension was specified
|
||||||
my $im_test_exists = -f "$testdir/$tname.imtest";
|
my ($ext, $component);
|
||||||
|
while (($ext, $component)= each %exts) {
|
||||||
|
my $full_name= "$testdir/$tname.$ext";
|
||||||
|
|
||||||
if ( $mysqld_test_exists and $im_test_exists )
|
if ( ! -f $full_name ) {
|
||||||
{
|
|
||||||
mtr_error("Ambiguous test case name ($tname)");
|
|
||||||
}
|
|
||||||
elsif ( ! $mysqld_test_exists and ! $im_test_exists )
|
|
||||||
{
|
|
||||||
# Silently skip, could exist in another suite
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
elsif ( $mysqld_test_exists )
|
$component_id= $component;
|
||||||
{
|
$extension= $ext;
|
||||||
$elem= "$tname.test";
|
|
||||||
$component_id= 'mysqld';
|
|
||||||
}
|
|
||||||
elsif ( $im_test_exists )
|
|
||||||
{
|
|
||||||
$elem= "$tname.imtest";
|
|
||||||
$component_id= 'im';
|
|
||||||
}
|
}
|
||||||
|
# Test not found here, could exist in other suite
|
||||||
|
next unless $component_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
collect_one_test_case($testdir,$resdir,$suite,$tname,
|
collect_one_test_case($testdir,$resdir,$suite,$tname,
|
||||||
$elem,$cases,\%disabled,$component_id,
|
"$tname.$extension",$cases,\%disabled,
|
||||||
$suite_opts);
|
$component_id,$suite_opts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -288,8 +326,7 @@ sub collect_one_suite($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Skip tests that does not match the --do-test= filter
|
# Skip tests that does not match the --do-test= filter
|
||||||
next if $::opt_do_test and
|
next if ($do_test and not $tname =~ /$do_test/o);
|
||||||
! defined mtr_match_prefix($elem,$::opt_do_test);
|
|
||||||
|
|
||||||
collect_one_test_case($testdir,$resdir,$suite,$tname,
|
collect_one_test_case($testdir,$resdir,$suite,$tname,
|
||||||
$elem,$cases,\%disabled,$component_id,
|
$elem,$cases,\%disabled,$component_id,
|
||||||
@ -333,7 +370,7 @@ sub collect_one_test_case($$$$$$$$$) {
|
|||||||
|
|
||||||
|
|
||||||
my $tinfo= {};
|
my $tinfo= {};
|
||||||
$tinfo->{'name'}= "$suite.$tname";
|
$tinfo->{'name'}= basename($suite) . ".$tname";
|
||||||
$tinfo->{'result_file'}= "$resdir/$tname.result";
|
$tinfo->{'result_file'}= "$resdir/$tname.result";
|
||||||
$tinfo->{'component_id'} = $component_id;
|
$tinfo->{'component_id'} = $component_id;
|
||||||
push(@$cases, $tinfo);
|
push(@$cases, $tinfo);
|
||||||
@ -342,7 +379,7 @@ sub collect_one_test_case($$$$$$$$$) {
|
|||||||
# Skip some tests but include in list, just mark them to skip
|
# Skip some tests but include in list, just mark them to skip
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
if ( $::opt_skip_test and defined mtr_match_prefix($tname,$::opt_skip_test) )
|
if ( $skip_test and $tname =~ /$skip_test/o )
|
||||||
{
|
{
|
||||||
$tinfo->{'skip'}= 1;
|
$tinfo->{'skip'}= 1;
|
||||||
return;
|
return;
|
||||||
|
@ -196,7 +196,7 @@ sub mtr_report_stats ($) {
|
|||||||
"of what went wrong.\n",
|
"of what went wrong.\n",
|
||||||
"If you want to report this error, please read first ",
|
"If you want to report this error, please read first ",
|
||||||
"the documentation at\n",
|
"the documentation at\n",
|
||||||
"http://www.mysql.com/doc/en/MySQL_test_suite.html\n";
|
"http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html\n";
|
||||||
}
|
}
|
||||||
if (!$::opt_extern)
|
if (!$::opt_extern)
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,16 @@ USE_MANAGER=0
|
|||||||
MY_TZ=GMT-3
|
MY_TZ=GMT-3
|
||||||
TZ=$MY_TZ; export TZ # for UNIX_TIMESTAMP tests to work
|
TZ=$MY_TZ; export TZ # for UNIX_TIMESTAMP tests to work
|
||||||
LOCAL_SOCKET=@MYSQL_UNIX_ADDR@
|
LOCAL_SOCKET=@MYSQL_UNIX_ADDR@
|
||||||
|
|
||||||
|
if [ -z "$MYSQL_TCP_PORT" ]; then
|
||||||
MYSQL_TCP_PORT=@MYSQL_TCP_PORT@
|
MYSQL_TCP_PORT=@MYSQL_TCP_PORT@
|
||||||
|
if [ @MYSQL_TCP_PORT_DEFAULT@ -eq 0 ]; then
|
||||||
|
ESP=`getent services mysql/tcp`
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
MYSQL_TCP_PORT=`echo "$ESP"|sed -e's-^[a-z]*[ ]*\([0-9]*\)/[a-z]*$-\1-g'`
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
umask 022
|
umask 022
|
||||||
|
|
||||||
@ -981,7 +990,7 @@ show_failed_diff ()
|
|||||||
$DIFF -c $result_file $reject_file
|
$DIFF -c $result_file $reject_file
|
||||||
echo "-------------------------------------------------------"
|
echo "-------------------------------------------------------"
|
||||||
echo "Please follow the instructions outlined at"
|
echo "Please follow the instructions outlined at"
|
||||||
echo "http://dev.mysql.com/doc/mysql/en/reporting-mysqltest-bugs.html"
|
echo "http://forge.mysql.com/wiki/MySQL_Internals_Porting#Debugging_a_MySQL_Server"
|
||||||
echo "to find the reason to this problem and how to report this."
|
echo "to find the reason to this problem and how to report this."
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
@ -1354,6 +1354,7 @@ sub datadir_list_setup () {
|
|||||||
|
|
||||||
sub collect_mysqld_features () {
|
sub collect_mysqld_features () {
|
||||||
my $found_variable_list_start= 0;
|
my $found_variable_list_start= 0;
|
||||||
|
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
|
||||||
|
|
||||||
#
|
#
|
||||||
# Execute "mysqld --help --verbose" to get a list
|
# Execute "mysqld --help --verbose" to get a list
|
||||||
@ -1364,7 +1365,7 @@ sub collect_mysqld_features () {
|
|||||||
#
|
#
|
||||||
# --datadir must exist, mysqld will chdir into it
|
# --datadir must exist, mysqld will chdir into it
|
||||||
#
|
#
|
||||||
my $list= `$exe_mysqld --no-defaults --datadir=$path_language --language=$path_language --skip-grant-tables --verbose --help`;
|
my $list= `$exe_mysqld --no-defaults --datadir=$tmpdir --language=$path_language --skip-grant-tables --verbose --help`;
|
||||||
|
|
||||||
foreach my $line (split('\n', $list))
|
foreach my $line (split('\n', $list))
|
||||||
{
|
{
|
||||||
@ -1419,7 +1420,7 @@ sub collect_mysqld_features () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
rmtree($tmpdir);
|
||||||
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
||||||
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
||||||
|
|
||||||
@ -3743,6 +3744,11 @@ sub mysqld_arguments ($$$$) {
|
|||||||
mtr_add_arg($args, "%s--language=%s", $prefix, $path_language);
|
mtr_add_arg($args, "%s--language=%s", $prefix, $path_language);
|
||||||
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
|
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
|
||||||
|
|
||||||
|
# Increase default connect_timeout to avoid intermittent
|
||||||
|
# disconnects when test servers are put under load
|
||||||
|
# see BUG#28359
|
||||||
|
mtr_add_arg($args, "%s--connect-timeout=60", $prefix);
|
||||||
|
|
||||||
if ( $opt_valgrind_mysqld )
|
if ( $opt_valgrind_mysqld )
|
||||||
{
|
{
|
||||||
mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
|
mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
|
||||||
@ -5039,7 +5045,7 @@ sub valgrind_arguments {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Add valgrind options, can be overriden by user
|
# Add valgrind options, can be overriden by user
|
||||||
mtr_add_arg($args, '%s', $_) for (split(' ', $opt_valgrind_options));
|
mtr_add_arg($args, '%s', $opt_valgrind_options);
|
||||||
|
|
||||||
mtr_add_arg($args, $$exe);
|
mtr_add_arg($args, $$exe);
|
||||||
|
|
||||||
@ -5112,14 +5118,18 @@ Options to control what test suites or cases to run
|
|||||||
skip-ndb[cluster] Skip all tests that need cluster
|
skip-ndb[cluster] Skip all tests that need cluster
|
||||||
skip-ndb[cluster]-slave Skip all tests that need a slave cluster
|
skip-ndb[cluster]-slave Skip all tests that need a slave cluster
|
||||||
ndb-extra Run extra tests from ndb directory
|
ndb-extra Run extra tests from ndb directory
|
||||||
do-test=PREFIX Run test cases which name are prefixed with PREFIX
|
do-test=PREFIX or REGEX
|
||||||
|
Run test cases which name are prefixed with PREFIX
|
||||||
|
or fulfills REGEX
|
||||||
|
skip-test=PREFIX or REGEX
|
||||||
|
Skip test cases which name are prefixed with PREFIX
|
||||||
|
or fulfills REGEX
|
||||||
start-from=PREFIX Run test cases starting from test prefixed with PREFIX
|
start-from=PREFIX Run test cases starting from test prefixed with PREFIX
|
||||||
suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
|
suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
|
||||||
list of suite names.
|
list of suite names.
|
||||||
The default is: "$opt_suites"
|
The default is: "$opt_suites"
|
||||||
skip-rpl Skip the replication test cases.
|
skip-rpl Skip the replication test cases.
|
||||||
skip-im Don't start IM, and skip the IM test cases
|
skip-im Don't start IM, and skip the IM test cases
|
||||||
skip-test=PREFIX Skip test cases which name are prefixed with PREFIX
|
|
||||||
big-test Set the environment variable BIG_TEST, which can be
|
big-test Set the environment variable BIG_TEST, which can be
|
||||||
checked from test cases.
|
checked from test cases.
|
||||||
|
|
||||||
|
@ -11124,10 +11124,11 @@ auto fld1 companynr fld3 fld4 fld5 fld6
|
|||||||
SELECT COUNT(auto) FROM t2;
|
SELECT COUNT(auto) FROM t2;
|
||||||
COUNT(auto)
|
COUNT(auto)
|
||||||
1213
|
1213
|
||||||
INSERT DELAYED INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily','');
|
INSERT DELAYED INTO t2 VALUES (99999,011403,37,'the','delayed','insert','');
|
||||||
|
INSERT INTO t2 VALUES (100000,000001,00,'after','delayed','insert','');
|
||||||
SELECT COUNT(auto) FROM t2;
|
SELECT COUNT(auto) FROM t2;
|
||||||
COUNT(auto)
|
COUNT(auto)
|
||||||
1214
|
1215
|
||||||
ALTER TABLE t2 DROP COLUMN fld6;
|
ALTER TABLE t2 DROP COLUMN fld6;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -11139,7 +11140,7 @@ t2 CREATE TABLE `t2` (
|
|||||||
`fld4` char(35) NOT NULL DEFAULT '',
|
`fld4` char(35) NOT NULL DEFAULT '',
|
||||||
`fld5` char(35) NOT NULL DEFAULT ''
|
`fld5` char(35) NOT NULL DEFAULT ''
|
||||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||||
SELECT * FROM t2;
|
SELECT * FROM t2 WHERE auto != 100000;
|
||||||
auto fld1 companynr fld3 fld4 fld5
|
auto fld1 companynr fld3 fld4 fld5
|
||||||
1 000001 00 Omaha teethe neat
|
1 000001 00 Omaha teethe neat
|
||||||
2 011401 37 breaking dreaded Steinberg
|
2 011401 37 breaking dreaded Steinberg
|
||||||
@ -12354,7 +12355,7 @@ auto fld1 companynr fld3 fld4 fld5
|
|||||||
2 011401 37 breaking dreaded Steinberg
|
2 011401 37 breaking dreaded Steinberg
|
||||||
3 011402 37 Romans scholastics jarring
|
3 011402 37 Romans scholastics jarring
|
||||||
4 011403 37 intercepted audiology tinily
|
4 011403 37 intercepted audiology tinily
|
||||||
4 011403 37 intercepted audiology tinily
|
99999 011403 37 the delayed insert
|
||||||
CREATE TABLE `t5` (
|
CREATE TABLE `t5` (
|
||||||
`a` int(11) NOT NULL auto_increment,
|
`a` int(11) NOT NULL auto_increment,
|
||||||
b char(12),
|
b char(12),
|
||||||
|
@ -52,6 +52,19 @@ SELECT c1 as want1result from t1 where c1 like 'location%';
|
|||||||
want1result
|
want1result
|
||||||
location
|
location
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
@ -52,6 +52,19 @@ SELECT c1 as want1result from t1 where c1 like 'location%';
|
|||||||
want1result
|
want1result
|
||||||
location
|
location
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
@ -52,6 +52,19 @@ SELECT c1 as want1result from t1 where c1 like 'location%';
|
|||||||
want1result
|
want1result
|
||||||
location
|
location
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
@ -52,6 +52,19 @@ SELECT c1 as want1result from t1 where c1 like 'location%';
|
|||||||
want1result
|
want1result
|
||||||
location
|
location
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
@ -2587,6 +2587,19 @@ SELECT c1 as want1result from t1 where c1 like 'location%';
|
|||||||
want1result
|
want1result
|
||||||
location
|
location
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
@ -1210,6 +1210,9 @@ SELECT * FROM test.t1;
|
|||||||
f1 f2
|
f1 f2
|
||||||
1 1
|
1 1
|
||||||
2 2
|
2 2
|
||||||
|
REVOKE UPDATE (f1) ON `test`.`t1` FROM 'mysqltest_1'@'localhost';
|
||||||
|
REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
|
||||||
|
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
|
||||||
DROP DATABASE db27878;
|
DROP DATABASE db27878;
|
||||||
use test;
|
use test;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -16,3 +16,125 @@ delete from mysql.db where user like 'mysqltest\_%';
|
|||||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||||
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
grant select on test.* to CUser@localhost;
|
||||||
|
grant select on test.* to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
CUser LOCALHOST test Y
|
||||||
|
CUser localhost test Y
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
CUser localhost test Y
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
create table t1 (a int);
|
||||||
|
grant select on test.t1 to CUser@localhost;
|
||||||
|
grant select on test.t1 to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
CUser LOCALHOST test t1 Select
|
||||||
|
CUser localhost test t1 Select
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
CUser localhost test t1 Select
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
grant select(a) on test.t1 to CUser@localhost;
|
||||||
|
grant select(a) on test.t1 to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
CUser LOCALHOST test t1 Select
|
||||||
|
CUser localhost test t1 Select
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
CUser localhost test t1 Select
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser LOCALHOST
|
||||||
|
CUser localhost
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
user host db Table_name Table_priv Column_priv
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
drop table t1;
|
||||||
|
grant select on test.* to CUser2@localhost;
|
||||||
|
grant select on test.* to CUser2@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser2 LOCALHOST
|
||||||
|
CUser2 localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
CUser2 LOCALHOST test Y
|
||||||
|
CUser2 localhost test Y
|
||||||
|
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser2 LOCALHOST
|
||||||
|
CUser2 localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
CUser2 localhost test Y
|
||||||
|
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
user host
|
||||||
|
CUser2 LOCALHOST
|
||||||
|
CUser2 localhost
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
user host db select_priv
|
||||||
|
DROP USER CUser2@localhost;
|
||||||
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
2153
mysql-test/r/named_pipe.result
Normal file
2153
mysql-test/r/named_pipe.result
Normal file
File diff suppressed because it is too large
Load Diff
@ -1267,4 +1267,24 @@ ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
|
|||||||
ERROR HY000: Incorrect usage of PARTITION and log table
|
ERROR HY000: Incorrect usage of PARTITION and log table
|
||||||
ALTER TABLE general_log ENGINE = CSV;
|
ALTER TABLE general_log ENGINE = CSV;
|
||||||
SET GLOBAL general_log = default;
|
SET GLOBAL general_log = default;
|
||||||
|
use test;
|
||||||
|
create table t2 (b int);
|
||||||
|
create table t1 (b int)
|
||||||
|
PARTITION BY RANGE (t2.b) (
|
||||||
|
PARTITION p1 VALUES LESS THAN (10),
|
||||||
|
PARTITION p2 VALUES LESS THAN (20)
|
||||||
|
) select * from t2;
|
||||||
|
ERROR 42S22: Unknown column 't2.b' in 'partition function'
|
||||||
|
create table t1 (a int)
|
||||||
|
PARTITION BY RANGE (b) (
|
||||||
|
PARTITION p1 VALUES LESS THAN (10),
|
||||||
|
PARTITION p2 VALUES LESS THAN (20)
|
||||||
|
) select * from t2;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL,
|
||||||
|
`b` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (b) (PARTITION p1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (20) ENGINE = MyISAM) */
|
||||||
|
drop table t1, t2;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
2155
mysql-test/r/shm.result
Normal file
2155
mysql-test/r/shm.result
Normal file
File diff suppressed because it is too large
Load Diff
@ -427,6 +427,22 @@ f1
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
|
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (f1 time);
|
||||||
|
insert into t1 set f1 = '45:44:44';
|
||||||
|
insert into t1 set f1 = '15:44:44';
|
||||||
|
select * from t1 where (convert(f1,datetime)) != 1;
|
||||||
|
f1
|
||||||
|
15:44:44
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Incorrect datetime value: '0000-00-00 45:44:44'
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (a tinyint);
|
||||||
|
insert into t1 values (), (), ();
|
||||||
|
select sum(a) from t1 group by convert(a, datetime);
|
||||||
|
sum(a)
|
||||||
|
NULL
|
||||||
|
drop table t1;
|
||||||
|
End of 5.0 tests
|
||||||
set @org_mode=@@sql_mode;
|
set @org_mode=@@sql_mode;
|
||||||
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
||||||
Warnings:
|
Warnings:
|
||||||
|
@ -683,6 +683,7 @@ select * from t1;
|
|||||||
a b
|
a b
|
||||||
123.12345 123.1
|
123.12345 123.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
End of 4.1 tests
|
||||||
CREATE TABLE t1
|
CREATE TABLE t1
|
||||||
(EMPNUM CHAR(3) NOT NULL,
|
(EMPNUM CHAR(3) NOT NULL,
|
||||||
HOURS DECIMAL(5));
|
HOURS DECIMAL(5));
|
||||||
@ -799,3 +800,10 @@ SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
|
|||||||
ROUND(qty,3) dps ROUND(qty,dps)
|
ROUND(qty,3) dps ROUND(qty,dps)
|
||||||
1.133 3 1.133
|
1.133 3 1.133
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (f1 decimal(6,6),f2 decimal(6,6) zerofill);
|
||||||
|
insert into t1 values (-0.123456,0.123456);
|
||||||
|
select group_concat(f1),group_concat(f2) from t1;
|
||||||
|
group_concat(f1) group_concat(f2)
|
||||||
|
-0.123456 0.123456
|
||||||
|
drop table t1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -286,6 +286,8 @@ select * from information_schema.session_variables where variable_name like 'net
|
|||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
NET_BUFFER_LENGTH 1024
|
NET_BUFFER_LENGTH 1024
|
||||||
set net_buffer_length=2000000000;
|
set net_buffer_length=2000000000;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect net_buffer_length value: '2000000000'
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
net_buffer_length 1048576
|
net_buffer_length 1048576
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
mysqld is alive
|
|
||||||
End of 5.0 tests.
|
|
@ -1012,3 +1012,14 @@ select ExtractValue('<a>a</a>', '/a[@x=@y0123456789_0123456789_0123456789_012345
|
|||||||
ERROR HY000: XPATH error: comparison of two nodesets is not supported: '=@y0123456789_0123456789_0123456'
|
ERROR HY000: XPATH error: comparison of two nodesets is not supported: '=@y0123456789_0123456789_0123456'
|
||||||
select ExtractValue('<a>a</a>', '/a[@x=$y0123456789_0123456789_0123456789_0123456789]');
|
select ExtractValue('<a>a</a>', '/a[@x=$y0123456789_0123456789_0123456789_0123456789]');
|
||||||
ERROR HY000: Unknown XPATH variable at: '$y0123456789_0123456789_01234567'
|
ERROR HY000: Unknown XPATH variable at: '$y0123456789_0123456789_01234567'
|
||||||
|
select updatexml(NULL, 1, 1), updatexml(1, NULL, 1), updatexml(1, 1, NULL);
|
||||||
|
updatexml(NULL, 1, 1) updatexml(1, NULL, 1) updatexml(1, 1, NULL)
|
||||||
|
NULL NULL NULL
|
||||||
|
select updatexml(NULL, NULL, 1), updatexml(1, NULL, NULL),
|
||||||
|
updatexml(NULL, 1, NULL);
|
||||||
|
updatexml(NULL, NULL, 1) updatexml(1, NULL, NULL) updatexml(NULL, 1, NULL)
|
||||||
|
NULL NULL NULL
|
||||||
|
select updatexml(NULL, NULL, NULL);
|
||||||
|
updatexml(NULL, NULL, NULL)
|
||||||
|
NULL
|
||||||
|
End of 5.1 tests
|
||||||
|
@ -1351,8 +1351,16 @@ SELECT * FROM t2;
|
|||||||
|
|
||||||
# Test INSERT DELAYED and wait until the table has one more record
|
# Test INSERT DELAYED and wait until the table has one more record
|
||||||
SELECT COUNT(auto) FROM t2;
|
SELECT COUNT(auto) FROM t2;
|
||||||
INSERT DELAYED INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily','');
|
INSERT DELAYED INTO t2 VALUES (99999,011403,37,'the','delayed','insert','');
|
||||||
while (`SELECT COUNT(auto)!=1214 FROM t2`)
|
|
||||||
|
# Insert another record since in Archive delayed values are only
|
||||||
|
# guaranteed to materialize based on either:
|
||||||
|
# 1) A new row showing up from a normal insert
|
||||||
|
# 2) A flush table has occurred.
|
||||||
|
INSERT INTO t2 VALUES (100000,000001,00,'after','delayed','insert','');
|
||||||
|
|
||||||
|
# Wait for the delayed insert to appear
|
||||||
|
while (`SELECT COUNT(auto)!=1215 FROM t2`)
|
||||||
{
|
{
|
||||||
sleep 0.1;
|
sleep 0.1;
|
||||||
}
|
}
|
||||||
@ -1361,7 +1369,7 @@ SELECT COUNT(auto) FROM t2;
|
|||||||
# Adding test for ALTER TABLE
|
# Adding test for ALTER TABLE
|
||||||
ALTER TABLE t2 DROP COLUMN fld6;
|
ALTER TABLE t2 DROP COLUMN fld6;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
SELECT * FROM t2;
|
SELECT * FROM t2 WHERE auto != 100000;
|
||||||
|
|
||||||
|
|
||||||
# Adding tests for autoincrement
|
# Adding tests for autoincrement
|
||||||
|
@ -1257,6 +1257,9 @@ UPDATE v1 SET f2 = 4;
|
|||||||
SELECT * FROM test.t1;
|
SELECT * FROM test.t1;
|
||||||
disconnect user1;
|
disconnect user1;
|
||||||
connection default;
|
connection default;
|
||||||
|
REVOKE UPDATE (f1) ON `test`.`t1` FROM 'mysqltest_1'@'localhost';
|
||||||
|
REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
|
||||||
|
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
|
||||||
DROP DATABASE db27878;
|
DROP DATABASE db27878;
|
||||||
use test;
|
use test;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -34,3 +34,103 @@ delete from mysql.db where user like 'mysqltest\_%';
|
|||||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||||
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug: #19828 Case sensitivity in Grant/Revoke
|
||||||
|
#
|
||||||
|
|
||||||
|
grant select on test.* to CUser@localhost;
|
||||||
|
grant select on test.* to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
|
||||||
|
#### table grants
|
||||||
|
create table t1 (a int);
|
||||||
|
grant select on test.t1 to CUser@localhost;
|
||||||
|
grant select on test.t1 to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
|
||||||
|
### column grants
|
||||||
|
|
||||||
|
grant select(a) on test.t1 to CUser@localhost;
|
||||||
|
grant select(a) on test.t1 to CUser@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
|
|
||||||
|
DROP USER CUser@localhost;
|
||||||
|
DROP USER CUser@LOCALHOST;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# revoke on a specific DB only
|
||||||
|
|
||||||
|
grant select on test.* to CUser2@localhost;
|
||||||
|
grant select on test.* to CUser2@LOCALHOST;
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
|
||||||
|
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
|
|
||||||
|
DROP USER CUser2@localhost;
|
||||||
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
@ -1435,7 +1435,10 @@ select "this will be executed";
|
|||||||
--exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result > /dev/null 2>&1
|
--exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result > /dev/null 2>&1
|
||||||
|
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result;
|
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result;
|
||||||
|
--error 0,1
|
||||||
remove_file $MYSQLTEST_VARDIR/log/zero_length_file.reject;
|
remove_file $MYSQLTEST_VARDIR/log/zero_length_file.reject;
|
||||||
|
--error 0,1
|
||||||
|
remove_file $MYSQL_TEST_DIR/r/zero_length_file.reject;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test that a test file that does not generate any output fails.
|
# Test that a test file that does not generate any output fails.
|
||||||
|
1
mysql-test/t/named_pipe-master.opt
Normal file
1
mysql-test/t/named_pipe-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--loose-enable-named-pipe
|
14
mysql-test/t/named_pipe.test
Normal file
14
mysql-test/t/named_pipe.test
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# We currently only have named pipe support on windows, so
|
||||||
|
# in order to optimize things we skip this test on all
|
||||||
|
# other platforms
|
||||||
|
--source include/windows.inc
|
||||||
|
|
||||||
|
# Only run this test if named pipe is avaliable
|
||||||
|
let $nmp= query_get_value("SHOW VARIABLES LIKE 'named_pipe'", Value, 1);
|
||||||
|
if (`SELECT '$nmp' != 'ON'`){
|
||||||
|
skip No named pipe support;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Source select test case
|
||||||
|
-- source include/common-tests.inc
|
||||||
|
|
@ -1493,10 +1493,30 @@ ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
|
|||||||
(PARTITION p0 VALUES LESS THAN (733144), PARTITION p1 VALUES LESS THAN (3000000));
|
(PARTITION p0 VALUES LESS THAN (733144), PARTITION p1 VALUES LESS THAN (3000000));
|
||||||
ALTER TABLE general_log ENGINE = CSV;
|
ALTER TABLE general_log ENGINE = CSV;
|
||||||
SET GLOBAL general_log = default;
|
SET GLOBAL general_log = default;
|
||||||
|
use test;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #27084 partitioning by list seems failing when using case
|
# Bug #27084 partitioning by list seems failing when using case
|
||||||
# BUG #18198: Case no longer supported, test case removed
|
# BUG #18198: Case no longer supported, test case removed
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #29444: crash with partition refering to table in create-select
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t2 (b int);
|
||||||
|
--error 1054
|
||||||
|
create table t1 (b int)
|
||||||
|
PARTITION BY RANGE (t2.b) (
|
||||||
|
PARTITION p1 VALUES LESS THAN (10),
|
||||||
|
PARTITION p2 VALUES LESS THAN (20)
|
||||||
|
) select * from t2;
|
||||||
|
create table t1 (a int)
|
||||||
|
PARTITION BY RANGE (b) (
|
||||||
|
PARTITION p1 VALUES LESS THAN (10),
|
||||||
|
PARTITION p2 VALUES LESS THAN (20)
|
||||||
|
) select * from t2;
|
||||||
|
show create table t1;
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -1 +1 @@
|
|||||||
--skip-grant-tables --loose-shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --loose-shared-memory=1
|
--skip-grant-tables --loose-shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$MTR_BUILD_THREAD --loose-shared-memory=1
|
19
mysql-test/t/shm.test
Normal file
19
mysql-test/t/shm.test
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# We currently only have shm support on windows, so in order
|
||||||
|
# to optimize things we skip this test on all other platforms
|
||||||
|
--source include/windows.inc
|
||||||
|
|
||||||
|
# Only run this test if shared memory is avaliable
|
||||||
|
let $shm= query_get_value("SHOW VARIABLES LIKE 'shared_memory'", Value, 1);
|
||||||
|
if (`SELECT '$shm' != 'ON'`){
|
||||||
|
skip No shm support;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Source select test case
|
||||||
|
-- source include/common-tests.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #24924: shared-memory-base-name that is too long causes buffer overflow
|
||||||
|
#
|
||||||
|
--exec $MYSQLADMIN --no-defaults --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ping
|
||||||
|
|
||||||
|
--echo End of 5.0 tests.
|
@ -283,6 +283,26 @@ select * from t1 where f1 between 2002010 and 20070101000000;
|
|||||||
select * from t1 where f1 between 20020101 and 2007010100000;
|
select * from t1 where f1 between 20020101 and 2007010100000;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31253: crash comparing datetime to double
|
||||||
|
# Should return 1st row only. Crashes if NULL propagation fails.
|
||||||
|
#
|
||||||
|
create table t1 (f1 time);
|
||||||
|
insert into t1 set f1 = '45:44:44';
|
||||||
|
insert into t1 set f1 = '15:44:44';
|
||||||
|
select * from t1 where (convert(f1,datetime)) != 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31249: problem with convert(..., datetime)
|
||||||
|
#
|
||||||
|
create table t1 (a tinyint);
|
||||||
|
insert into t1 values (), (), ();
|
||||||
|
select sum(a) from t1 group by convert(a, datetime);
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test of storing datetime into date fields
|
# Test of storing datetime into date fields
|
||||||
#
|
#
|
||||||
|
@ -278,7 +278,7 @@ update t1 set b=a;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test for BUG#8397: decimal type in subselects (Item_cache_decimal)
|
# Test for BUG#8397: decimal type in subselects (Item_cache_decimal)
|
||||||
@ -408,3 +408,14 @@ INSERT INTO t1 VALUES (1.1325,3);
|
|||||||
SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
|
SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31227: memory overrun with decimal (6,6) and zerofill and group_concat
|
||||||
|
# valgrind will complain about this (the group_concat(f2)) on unpatched mysqld.
|
||||||
|
#
|
||||||
|
create table t1 (f1 decimal(6,6),f2 decimal(6,6) zerofill);
|
||||||
|
insert into t1 values (-0.123456,0.123456);
|
||||||
|
select group_concat(f1),group_concat(f2) from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -161,6 +161,7 @@ select * from information_schema.session_variables where variable_name like 'net
|
|||||||
set net_buffer_length=1;
|
set net_buffer_length=1;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
|
--warning 1292
|
||||||
set net_buffer_length=2000000000;
|
set net_buffer_length=2000000000;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
# Windows-specific tests
|
|
||||||
--source include/windows.inc
|
|
||||||
|
|
||||||
#
|
|
||||||
# Bug #24924: shared-memory-base-name that is too long causes buffer overflow
|
|
||||||
#
|
|
||||||
--exec $MYSQLADMIN --no-defaults --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ping
|
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
|
@ -533,3 +533,14 @@ select UpdateXML('<a>a</a>',repeat('a b ',1000),'');
|
|||||||
select ExtractValue('<a>a</a>', '/a[@x=@y0123456789_0123456789_0123456789_0123456789]');
|
select ExtractValue('<a>a</a>', '/a[@x=@y0123456789_0123456789_0123456789_0123456789]');
|
||||||
--error 1105
|
--error 1105
|
||||||
select ExtractValue('<a>a</a>', '/a[@x=$y0123456789_0123456789_0123456789_0123456789]');
|
select ExtractValue('<a>a</a>', '/a[@x=$y0123456789_0123456789_0123456789_0123456789]');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31438: updatexml still crashes
|
||||||
|
#
|
||||||
|
|
||||||
|
select updatexml(NULL, 1, 1), updatexml(1, NULL, 1), updatexml(1, 1, NULL);
|
||||||
|
select updatexml(NULL, NULL, 1), updatexml(1, NULL, NULL),
|
||||||
|
updatexml(NULL, 1, NULL);
|
||||||
|
select updatexml(NULL, NULL, NULL);
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <my_sys.h>
|
#include <my_sys.h>
|
||||||
#include <mysys_err.h>
|
#include <mysys_err.h>
|
||||||
#include <my_getopt.h>
|
#include <my_getopt.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
static void default_reporter(enum loglevel level, const char *format, ...);
|
static void default_reporter(enum loglevel level, const char *format, ...);
|
||||||
my_error_reporter my_getopt_error_reporter= &default_reporter;
|
my_error_reporter my_getopt_error_reporter= &default_reporter;
|
||||||
@ -730,7 +731,15 @@ static longlong eval_num_suffix(char *argument, int *error, char *option_name)
|
|||||||
longlong num;
|
longlong num;
|
||||||
|
|
||||||
*error= 0;
|
*error= 0;
|
||||||
|
errno= 0;
|
||||||
num= strtoll(argument, &endchar, 10);
|
num= strtoll(argument, &endchar, 10);
|
||||||
|
if (errno == ERANGE)
|
||||||
|
{
|
||||||
|
my_getopt_error_reporter(ERROR_LEVEL,
|
||||||
|
"Incorrect integer value: '%s'", argument);
|
||||||
|
*error= 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (*endchar == 'k' || *endchar == 'K')
|
if (*endchar == 'k' || *endchar == 'K')
|
||||||
num*= 1024L;
|
num*= 1024L;
|
||||||
else if (*endchar == 'm' || *endchar == 'M')
|
else if (*endchar == 'm' || *endchar == 'M')
|
||||||
@ -767,7 +776,14 @@ static longlong getopt_ll(char *arg, const struct my_option *optp, int *err)
|
|||||||
num= eval_num_suffix(arg, err, (char*) optp->name);
|
num= eval_num_suffix(arg, err, (char*) optp->name);
|
||||||
if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
|
if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
|
||||||
optp->max_value) /* if max value is not set -> no upper limit */
|
optp->max_value) /* if max value is not set -> no upper limit */
|
||||||
|
{
|
||||||
|
char buf[22];
|
||||||
|
my_getopt_error_reporter(WARNING_LEVEL,
|
||||||
|
"Truncated incorrect %s value: '%s'",
|
||||||
|
optp->name, llstr(num, buf));
|
||||||
|
|
||||||
num= (ulonglong) optp->max_value;
|
num= (ulonglong) optp->max_value;
|
||||||
|
}
|
||||||
num= ((num - optp->sub_size) / block_size);
|
num= ((num - optp->sub_size) / block_size);
|
||||||
num= (longlong) (num * block_size);
|
num= (longlong) (num * block_size);
|
||||||
return max(num, optp->min_value);
|
return max(num, optp->min_value);
|
||||||
|
@ -299,7 +299,7 @@ int handle_rtc_failure(int err_type, const char *file, int line,
|
|||||||
|
|
||||||
return 0; /* Error is handled */
|
return 0; /* Error is handled */
|
||||||
}
|
}
|
||||||
#pragma runtime_checks("", on)
|
#pragma runtime_checks("", restore)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ void report_stats()
|
|||||||
log_msg("\nThe .out and .err files in %s may give you some\n", result_dir);
|
log_msg("\nThe .out and .err files in %s may give you some\n", result_dir);
|
||||||
log_msg("hint of what went wrong.\n");
|
log_msg("hint of what went wrong.\n");
|
||||||
log_msg("\nIf you want to report this error, please first read the documentation\n");
|
log_msg("\nIf you want to report this error, please first read the documentation\n");
|
||||||
log_msg("at: http://www.mysql.com/doc/en/MySQL_test_suite.html\n");
|
log_msg("at: http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
log_msg("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60);
|
log_msg("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60);
|
||||||
@ -1169,7 +1169,8 @@ void setup(char *file)
|
|||||||
setenv("MYSQL_BINLOG", file_path, 1);
|
setenv("MYSQL_BINLOG", file_path, 1);
|
||||||
setenv("MASTER_MYPORT", "9306", 1);
|
setenv("MASTER_MYPORT", "9306", 1);
|
||||||
setenv("SLAVE_MYPORT", "9307", 1);
|
setenv("SLAVE_MYPORT", "9307", 1);
|
||||||
setenv("MYSQL_TCP_PORT", "3306", 1);
|
snprintf(file_path, PATH_MAX*2, "%d", MYSQL_PORT);
|
||||||
|
setenv("MYSQL_TCP_PORT", file_path, 1);
|
||||||
snprintf(file_path, PATH_MAX*2, "%s/mysql_client_test --no-defaults --testcase--user=root --port=%u ", bin_dir, master_port);
|
snprintf(file_path, PATH_MAX*2, "%s/mysql_client_test --no-defaults --testcase--user=root --port=%u ", bin_dir, master_port);
|
||||||
setenv("MYSQL_CLIENT_TEST",file_path,1);
|
setenv("MYSQL_CLIENT_TEST",file_path,1);
|
||||||
snprintf(file_path, PATH_MAX*2, "%s/mysql --no-defaults --user=root --port=%u ", bin_dir, master_port);
|
snprintf(file_path, PATH_MAX*2, "%s/mysql --no-defaults --user=root --port=%u ", bin_dir, master_port);
|
||||||
|
@ -189,7 +189,7 @@ void start_defaults(int argc, char *argv[])
|
|||||||
snprintf(address, PATH_MAX, "0.0.0.0");
|
snprintf(address, PATH_MAX, "0.0.0.0");
|
||||||
|
|
||||||
// port
|
// port
|
||||||
snprintf(port, PATH_MAX, "3306");
|
snprintf(port, PATH_MAX, "%d", MYSQL_PORT);
|
||||||
|
|
||||||
// default option
|
// default option
|
||||||
default_option[0]= NULL;
|
default_option[0]= NULL;
|
||||||
|
@ -169,6 +169,7 @@ SUFFIXES = .sh
|
|||||||
-e 's!@''MYSQLD_DEFAULT_SWITCHES''@!@MYSQLD_DEFAULT_SWITCHES@!' \
|
-e 's!@''MYSQLD_DEFAULT_SWITCHES''@!@MYSQLD_DEFAULT_SWITCHES@!' \
|
||||||
-e 's!@''MYSQL_UNIX_ADDR''@!@MYSQL_UNIX_ADDR@!' \
|
-e 's!@''MYSQL_UNIX_ADDR''@!@MYSQL_UNIX_ADDR@!' \
|
||||||
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
||||||
|
-e 's!@''MYSQL_TCP_PORT_DEFAULT''@!@MYSQL_TCP_PORT_DEFAULT@!' \
|
||||||
-e 's!@''TARGET_LINUX''@!@TARGET_LINUX@!' \
|
-e 's!@''TARGET_LINUX''@!@TARGET_LINUX@!' \
|
||||||
-e "s!@""CONF_COMMAND""@!@CONF_COMMAND@!" \
|
-e "s!@""CONF_COMMAND""@!@CONF_COMMAND@!" \
|
||||||
-e 's!@''MYSQLD_USER''@!@MYSQLD_USER@!' \
|
-e 's!@''MYSQLD_USER''@!@MYSQLD_USER@!' \
|
||||||
|
@ -92,9 +92,14 @@ fix_path pkgincludedir include/mysql include
|
|||||||
|
|
||||||
version='@VERSION@'
|
version='@VERSION@'
|
||||||
socket='@MYSQL_UNIX_ADDR@'
|
socket='@MYSQL_UNIX_ADDR@'
|
||||||
port='@MYSQL_TCP_PORT@'
|
|
||||||
ldflags='@LDFLAGS@'
|
ldflags='@LDFLAGS@'
|
||||||
|
|
||||||
|
if [ @MYSQL_TCP_PORT_DEFAULT@ -eq 0 ]; then
|
||||||
|
port=0
|
||||||
|
else
|
||||||
|
port=@MYSQL_TCP_PORT@
|
||||||
|
fi
|
||||||
|
|
||||||
# Create options
|
# Create options
|
||||||
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
|
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
|
||||||
libs=" $ldflags -L$pkglibdir -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@"
|
libs=" $ldflags -L$pkglibdir -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@"
|
||||||
|
@ -25,6 +25,7 @@ sql_only=0
|
|||||||
basedir="@prefix@"
|
basedir="@prefix@"
|
||||||
verbose=0
|
verbose=0
|
||||||
args=""
|
args=""
|
||||||
|
# no elaborate fallback here; with no argument, it will happen in "mysql"
|
||||||
port=""
|
port=""
|
||||||
socket=""
|
socket=""
|
||||||
database="mysql"
|
database="mysql"
|
||||||
|
@ -14,8 +14,9 @@ DROP TABLE tmp_db;
|
|||||||
-- Fill "users" table with default users allowing root access
|
-- Fill "users" table with default users allowing root access
|
||||||
-- from local machine if "users" table didn't exist before
|
-- from local machine if "users" table didn't exist before
|
||||||
CREATE TEMPORARY TABLE tmp_user LIKE user;
|
CREATE TEMPORARY TABLE tmp_user LIKE user;
|
||||||
|
set @hostname= @@hostname;
|
||||||
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
REPLACE INTO tmp_user VALUES (@@hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
REPLACE INTO tmp_user VALUES (@hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
|
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
|
||||||
INSERT INTO tmp_user (host,user) VALUES (@@hostname,'');
|
INSERT INTO tmp_user (host,user) VALUES (@@hostname,'');
|
||||||
|
@ -396,7 +396,7 @@ then
|
|||||||
does not exist or is not executable. Please cd to the mysql installation
|
does not exist or is not executable. Please cd to the mysql installation
|
||||||
directory and restart this script from there as follows:
|
directory and restart this script from there as follows:
|
||||||
./bin/mysqld_safe&
|
./bin/mysqld_safe&
|
||||||
See http://dev.mysql.com/doc/mysql/en/mysqld_safe.html for more information"
|
See http://dev.mysql.com/doc/mysql/en/mysqld-safe.html for more information"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "portability.h"
|
#include "portability.h"
|
||||||
|
|
||||||
/* IM-wide platform-independent defines */
|
/* IM-wide platform-independent defines */
|
||||||
#define SERVER_DEFAULT_PORT 3306
|
#define SERVER_DEFAULT_PORT MYSQL_PORT
|
||||||
#define DEFAULT_MONITORING_INTERVAL 20
|
#define DEFAULT_MONITORING_INTERVAL 20
|
||||||
#define DEFAULT_PORT 2273
|
#define DEFAULT_PORT 2273
|
||||||
/* three-week timeout should be enough */
|
/* three-week timeout should be enough */
|
||||||
|
@ -272,6 +272,7 @@ my_decimal *Item::val_decimal_from_date(my_decimal *decimal_value)
|
|||||||
if (get_date(<ime, TIME_FUZZY_DATE))
|
if (get_date(<ime, TIME_FUZZY_DATE))
|
||||||
{
|
{
|
||||||
my_decimal_set_zero(decimal_value);
|
my_decimal_set_zero(decimal_value);
|
||||||
|
null_value= 1; // set NULL, stop processing
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return date2my_decimal(<ime, decimal_value);
|
return date2my_decimal(<ime, decimal_value);
|
||||||
@ -3859,6 +3860,8 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||||||
context->first_name_resolution_table,
|
context->first_name_resolution_table,
|
||||||
context->last_name_resolution_table,
|
context->last_name_resolution_table,
|
||||||
reference,
|
reference,
|
||||||
|
thd->lex->use_only_table_context ?
|
||||||
|
REPORT_ALL_ERRORS :
|
||||||
IGNORE_EXCEPT_NON_UNIQUE,
|
IGNORE_EXCEPT_NON_UNIQUE,
|
||||||
!any_privileges,
|
!any_privileges,
|
||||||
TRUE)) ==
|
TRUE)) ==
|
||||||
|
@ -847,7 +847,9 @@ public:
|
|||||||
}
|
}
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_typecast_maybe_null::fix_length_and_dec();
|
collation.set(&my_charset_bin);
|
||||||
|
maybe_null= 1;
|
||||||
|
max_length= MAX_DATETIME_FULL_WIDTH * MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
decimals= DATETIME_DEC;
|
decimals= DATETIME_DEC;
|
||||||
}
|
}
|
||||||
bool result_as_longlong() { return TRUE; }
|
bool result_as_longlong() { return TRUE; }
|
||||||
|
@ -2580,7 +2580,8 @@ void Item_xml_str_func::fix_length_and_dec()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp= args[1]->val_str(&tmp);
|
if (!(xp= args[1]->val_str(&tmp)))
|
||||||
|
return;
|
||||||
my_xpath_init(&xpath);
|
my_xpath_init(&xpath);
|
||||||
xpath.cs= collation.collation;
|
xpath.cs= collation.collation;
|
||||||
xpath.debug= 0;
|
xpath.debug= 0;
|
||||||
|
@ -68,24 +68,43 @@ int decimal_operation_results(int result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Converting decimal to string
|
@brief Converting decimal to string
|
||||||
|
|
||||||
SYNOPSIS
|
@details Convert given my_decimal to String; allocate buffer as needed.
|
||||||
my_decimal2string()
|
|
||||||
|
|
||||||
return
|
@param[in] mask what problems to warn on (mask of E_DEC_* values)
|
||||||
E_DEC_OK
|
@param[in] d the decimal to print
|
||||||
E_DEC_TRUNCATED
|
@param[in] fixed_prec overall number of digits if ZEROFILL, 0 otherwise
|
||||||
E_DEC_OVERFLOW
|
@param[in] fixed_dec number of decimal places (if fixed_prec != 0)
|
||||||
E_DEC_OOM
|
@param[in] filler what char to pad with (ZEROFILL et al.)
|
||||||
|
@param[out] *str where to store the resulting string
|
||||||
|
|
||||||
|
@return error coce
|
||||||
|
@retval E_DEC_OK
|
||||||
|
@retval E_DEC_TRUNCATED
|
||||||
|
@retval E_DEC_OVERFLOW
|
||||||
|
@retval E_DEC_OOM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int my_decimal2string(uint mask, const my_decimal *d,
|
int my_decimal2string(uint mask, const my_decimal *d,
|
||||||
uint fixed_prec, uint fixed_dec,
|
uint fixed_prec, uint fixed_dec,
|
||||||
char filler, String *str)
|
char filler, String *str)
|
||||||
{
|
{
|
||||||
int length= (fixed_prec ? (fixed_prec + 1) : my_decimal_string_length(d));
|
/*
|
||||||
|
Calculate the size of the string: For DECIMAL(a,b), fixed_prec==a
|
||||||
|
holds true iff the type is also ZEROFILL, which in turn implies
|
||||||
|
UNSIGNED. Hence the buffer for a ZEROFILLed value is the length
|
||||||
|
the user requested, plus one for a possible decimal point, plus
|
||||||
|
one if the user only wanted decimal places, but we force a leading
|
||||||
|
zero on them. Because the type is implicitly UNSIGNED, we do not
|
||||||
|
need to reserve a character for the sign. For all other cases,
|
||||||
|
fixed_prec will be 0, and my_decimal_string_length() will be called
|
||||||
|
instead to calculate the required size of the buffer.
|
||||||
|
*/
|
||||||
|
int length= (fixed_prec
|
||||||
|
? (fixed_prec + ((fixed_prec == fixed_dec) ? 1 : 0) + 1)
|
||||||
|
: my_decimal_string_length(d));
|
||||||
int result;
|
int result;
|
||||||
if (str->alloc(length))
|
if (str->alloc(length))
|
||||||
return check_result(mask, E_DEC_OOM);
|
return check_result(mask, E_DEC_OOM);
|
||||||
|
@ -327,8 +327,13 @@ protected:
|
|||||||
#define PRECISION_FOR_DOUBLE 53
|
#define PRECISION_FOR_DOUBLE 53
|
||||||
#define PRECISION_FOR_FLOAT 24
|
#define PRECISION_FOR_FLOAT 24
|
||||||
|
|
||||||
|
/*
|
||||||
|
Default time to wait before aborting a new client connection
|
||||||
|
that does not respond to "initial server greeting" timely
|
||||||
|
*/
|
||||||
|
#define CONNECT_TIMEOUT 10
|
||||||
|
|
||||||
/* The following can also be changed from the command line */
|
/* The following can also be changed from the command line */
|
||||||
#define CONNECT_TIMEOUT 5 // Do not wait long for connect
|
|
||||||
#define DEFAULT_CONCURRENCY 10
|
#define DEFAULT_CONCURRENCY 10
|
||||||
#define DELAYED_LIMIT 100 /* pause after xxx inserts */
|
#define DELAYED_LIMIT 100 /* pause after xxx inserts */
|
||||||
#define DELAYED_QUEUE_SIZE 1000
|
#define DELAYED_QUEUE_SIZE 1000
|
||||||
|
@ -1361,8 +1361,21 @@ static void set_ports()
|
|||||||
{ // Get port if not from commandline
|
{ // Get port if not from commandline
|
||||||
struct servent *serv_ptr;
|
struct servent *serv_ptr;
|
||||||
mysqld_port= MYSQL_PORT;
|
mysqld_port= MYSQL_PORT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if builder specifically requested a default port, use that
|
||||||
|
(even if it coincides with our factory default).
|
||||||
|
only if they didn't do we check /etc/services (and, failing
|
||||||
|
on that, fall back to the factory default of 3306).
|
||||||
|
either default can be overridden by the environment variable
|
||||||
|
MYSQL_TCP_PORT, which in turn can be overridden with command
|
||||||
|
line options.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
if ((serv_ptr= getservbyname("mysql", "tcp")))
|
if ((serv_ptr= getservbyname("mysql", "tcp")))
|
||||||
mysqld_port= ntohs((u_short) serv_ptr->s_port); /* purecov: inspected */
|
mysqld_port= ntohs((u_short) serv_ptr->s_port); /* purecov: inspected */
|
||||||
|
#endif
|
||||||
if ((env = getenv("MYSQL_TCP_PORT")))
|
if ((env = getenv("MYSQL_TCP_PORT")))
|
||||||
mysqld_port= (uint) atoi(env); /* purecov: inspected */
|
mysqld_port= (uint) atoi(env); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
@ -2216,7 +2229,7 @@ bytes of memory\n", ((ulong) dflt_key_cache->key_cache_mem_size +
|
|||||||
You seem to be running 32-bit Linux and have %d concurrent connections.\n\
|
You seem to be running 32-bit Linux and have %d concurrent connections.\n\
|
||||||
If you have not changed STACK_SIZE in LinuxThreads and built the binary \n\
|
If you have not changed STACK_SIZE in LinuxThreads and built the binary \n\
|
||||||
yourself, LinuxThreads is quite likely to steal a part of the global heap for\n\
|
yourself, LinuxThreads is quite likely to steal a part of the global heap for\n\
|
||||||
the thread stack. Please read http://www.mysql.com/doc/en/Linux.html\n\n",
|
the thread stack. Please read http://dev.mysql.com/doc/mysql/en/linux.html\n\n",
|
||||||
thread_count);
|
thread_count);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LINUXTHREADS */
|
#endif /* HAVE_LINUXTHREADS */
|
||||||
@ -2236,7 +2249,7 @@ Some pointers may be invalid and cause the dump to abort...\n");
|
|||||||
fprintf(stderr, "thd->thread_id=%lu\n", (ulong) thd->thread_id);
|
fprintf(stderr, "thd->thread_id=%lu\n", (ulong) thd->thread_id);
|
||||||
}
|
}
|
||||||
fprintf(stderr, "\
|
fprintf(stderr, "\
|
||||||
The manual page at http://www.mysql.com/doc/en/Crashing.html contains\n\
|
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains\n\
|
||||||
information that should help you find out what is causing the crash.\n");
|
information that should help you find out what is causing the crash.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif /* HAVE_STACKTRACE */
|
#endif /* HAVE_STACKTRACE */
|
||||||
@ -5625,7 +5638,13 @@ master-ssl",
|
|||||||
{"pid-file", OPT_PID_FILE, "Pid file used by safe_mysqld.",
|
{"pid-file", OPT_PID_FILE, "Pid file used by safe_mysqld.",
|
||||||
(uchar**) &pidfile_name_ptr, (uchar**) &pidfile_name_ptr, 0, GET_STR,
|
(uchar**) &pidfile_name_ptr, (uchar**) &pidfile_name_ptr, 0, GET_STR,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection.", (uchar**) &mysqld_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &mysqld_port,
|
||||||
(uchar**) &mysqld_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &mysqld_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port-open-timeout", OPT_PORT_OPEN_TIMEOUT,
|
{"port-open-timeout", OPT_PORT_OPEN_TIMEOUT,
|
||||||
"Maximum time in seconds to wait for the port to become free. "
|
"Maximum time in seconds to wait for the port to become free. "
|
||||||
@ -5969,7 +5988,7 @@ log and this option does nothing anymore.",
|
|||||||
(uchar**) &dflt_key_cache_var.param_buff_size,
|
(uchar**) &dflt_key_cache_var.param_buff_size,
|
||||||
(uchar**) 0,
|
(uchar**) 0,
|
||||||
0, (GET_ULL | GET_ASK_ADDR),
|
0, (GET_ULL | GET_ASK_ADDR),
|
||||||
REQUIRED_ARG, KEY_CACHE_SIZE, MALLOC_OVERHEAD, ~(ulong) 0, MALLOC_OVERHEAD,
|
REQUIRED_ARG, KEY_CACHE_SIZE, MALLOC_OVERHEAD, SIZE_T_MAX, MALLOC_OVERHEAD,
|
||||||
IO_SIZE, 0},
|
IO_SIZE, 0},
|
||||||
{"key_cache_age_threshold", OPT_KEY_CACHE_AGE_THRESHOLD,
|
{"key_cache_age_threshold", OPT_KEY_CACHE_AGE_THRESHOLD,
|
||||||
"This characterizes the number of hits a hot block has to be untouched until it is considered aged enough to be downgraded to a warm block. This specifies the percentage ratio of that number of hits to the total number of blocks in key cache",
|
"This characterizes the number of hits a hot block has to be untouched until it is considered aged enough to be downgraded to a warm block. This specifies the percentage ratio of that number of hits to the total number of blocks in key cache",
|
||||||
@ -6244,7 +6263,7 @@ The minimum value for this variable is 4096.",
|
|||||||
"Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value.",
|
"Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value.",
|
||||||
(uchar**) &global_system_variables.read_buff_size,
|
(uchar**) &global_system_variables.read_buff_size,
|
||||||
(uchar**) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG,
|
(uchar**) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG,
|
||||||
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE,
|
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, INT_MAX32, MALLOC_OVERHEAD, IO_SIZE,
|
||||||
0},
|
0},
|
||||||
{"read_only", OPT_READONLY,
|
{"read_only", OPT_READONLY,
|
||||||
"Make all non-temporary tables read-only, with the exception for replication (slave) threads and users with the SUPER privilege",
|
"Make all non-temporary tables read-only, with the exception for replication (slave) threads and users with the SUPER privilege",
|
||||||
@ -6256,12 +6275,12 @@ The minimum value for this variable is 4096.",
|
|||||||
(uchar**) &global_system_variables.read_rnd_buff_size,
|
(uchar**) &global_system_variables.read_rnd_buff_size,
|
||||||
(uchar**) &max_system_variables.read_rnd_buff_size, 0,
|
(uchar**) &max_system_variables.read_rnd_buff_size, 0,
|
||||||
GET_ULONG, REQUIRED_ARG, 256*1024L, IO_SIZE*2+MALLOC_OVERHEAD,
|
GET_ULONG, REQUIRED_ARG, 256*1024L, IO_SIZE*2+MALLOC_OVERHEAD,
|
||||||
SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE, 0},
|
INT_MAX32, MALLOC_OVERHEAD, IO_SIZE, 0},
|
||||||
{"record_buffer", OPT_RECORD_BUFFER,
|
{"record_buffer", OPT_RECORD_BUFFER,
|
||||||
"Alias for read_buffer_size",
|
"Alias for read_buffer_size",
|
||||||
(uchar**) &global_system_variables.read_buff_size,
|
(uchar**) &global_system_variables.read_buff_size,
|
||||||
(uchar**) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG,
|
(uchar**) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG,
|
||||||
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE, 0},
|
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, INT_MAX32, MALLOC_OVERHEAD, IO_SIZE, 0},
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
{"relay_log_purge", OPT_RELAY_LOG_PURGE,
|
{"relay_log_purge", OPT_RELAY_LOG_PURGE,
|
||||||
"0 = do not purge relay logs. 1 = purge them as soon as they are no more needed.",
|
"0 = do not purge relay logs. 1 = purge them as soon as they are no more needed.",
|
||||||
|
@ -1188,16 +1188,31 @@ bool sys_var_thd_ulong::check(THD *thd, set_var *var)
|
|||||||
bool sys_var_thd_ulong::update(THD *thd, set_var *var)
|
bool sys_var_thd_ulong::update(THD *thd, set_var *var)
|
||||||
{
|
{
|
||||||
ulonglong tmp= var->save_result.ulonglong_value;
|
ulonglong tmp= var->save_result.ulonglong_value;
|
||||||
|
char buf[22];
|
||||||
|
bool truncated= false;
|
||||||
|
|
||||||
/* Don't use bigger value than given with --maximum-variable-name=.. */
|
/* Don't use bigger value than given with --maximum-variable-name=.. */
|
||||||
if ((ulong) tmp > max_system_variables.*offset)
|
if ((ulong) tmp > max_system_variables.*offset)
|
||||||
|
{
|
||||||
|
truncated= true;
|
||||||
|
llstr(tmp, buf);
|
||||||
tmp= max_system_variables.*offset;
|
tmp= max_system_variables.*offset;
|
||||||
|
}
|
||||||
|
|
||||||
#if SIZEOF_LONG == 4
|
#if SIZEOF_LONG == 4
|
||||||
/* Avoid overflows on 32 bit systems */
|
/* Avoid overflows on 32 bit systems */
|
||||||
if (tmp > (ulonglong) ~(ulong) 0)
|
if (tmp > (ulonglong) ~(ulong) 0)
|
||||||
|
{
|
||||||
|
truncated= true;
|
||||||
|
llstr(tmp, buf);
|
||||||
tmp= ((ulonglong) ~(ulong) 0);
|
tmp= ((ulonglong) ~(ulong) 0);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (truncated)
|
||||||
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
ER_TRUNCATED_WRONG_VALUE,
|
||||||
|
ER(ER_TRUNCATED_WRONG_VALUE), name,
|
||||||
|
buf);
|
||||||
|
|
||||||
if (option_limits)
|
if (option_limits)
|
||||||
tmp= (ulong) getopt_ull_limit_value(tmp, option_limits);
|
tmp= (ulong) getopt_ull_limit_value(tmp, option_limits);
|
||||||
|
@ -1264,7 +1264,7 @@ static void acl_update_db(const char *user, const char *host, const char *db,
|
|||||||
{
|
{
|
||||||
if (!acl_db->host.hostname && !host[0] ||
|
if (!acl_db->host.hostname && !host[0] ||
|
||||||
acl_db->host.hostname &&
|
acl_db->host.hostname &&
|
||||||
!my_strcasecmp(system_charset_info, host, acl_db->host.hostname))
|
!strcmp(host, acl_db->host.hostname))
|
||||||
{
|
{
|
||||||
if (!acl_db->db && !db[0] ||
|
if (!acl_db->db && !db[0] ||
|
||||||
acl_db->db && !strcmp(db,acl_db->db))
|
acl_db->db && !strcmp(db,acl_db->db))
|
||||||
@ -4494,6 +4494,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
if (!(host=acl_db->host.hostname))
|
if (!(host=acl_db->host.hostname))
|
||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
|
||||||
|
but make it case-insensitive because that's the way they are
|
||||||
|
actually applied, and showing fewer privileges than are applied
|
||||||
|
would be wrong from a security point of view.
|
||||||
|
*/
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
@ -4529,8 +4536,8 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
db.append(lex_user->user.str, lex_user->user.length,
|
db.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
db.append (STRING_WITH_LEN("'@'"));
|
db.append (STRING_WITH_LEN("'@'"));
|
||||||
db.append(lex_user->host.str, lex_user->host.length,
|
// host and lex_user->host are equal except for case
|
||||||
system_charset_info);
|
db.append(host, strlen(host), system_charset_info);
|
||||||
db.append ('\'');
|
db.append ('\'');
|
||||||
if (want_access & GRANT_ACL)
|
if (want_access & GRANT_ACL)
|
||||||
db.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
db.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
@ -4557,6 +4564,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
if (!(host= grant_table->host.hostname))
|
if (!(host= grant_table->host.hostname))
|
||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
|
||||||
|
but make it case-insensitive because that's the way they are
|
||||||
|
actually applied, and showing fewer privileges than are applied
|
||||||
|
would be wrong from a security point of view.
|
||||||
|
*/
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
@ -4637,8 +4651,8 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
global.append(lex_user->user.str, lex_user->user.length,
|
global.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append(STRING_WITH_LEN("'@'"));
|
global.append(STRING_WITH_LEN("'@'"));
|
||||||
global.append(lex_user->host.str,lex_user->host.length,
|
// host and lex_user->host are equal except for case
|
||||||
system_charset_info);
|
global.append(host, strlen(host), system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
if (table_access & GRANT_ACL)
|
if (table_access & GRANT_ACL)
|
||||||
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
@ -4693,6 +4707,13 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
|
|||||||
if (!(host= grant_proc->host.hostname))
|
if (!(host= grant_proc->host.hostname))
|
||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
|
||||||
|
but make it case-insensitive because that's the way they are
|
||||||
|
actually applied, and showing fewer privileges than are applied
|
||||||
|
would be wrong from a security point of view.
|
||||||
|
*/
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
@ -4736,8 +4757,8 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
|
|||||||
global.append(lex_user->user.str, lex_user->user.length,
|
global.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append(STRING_WITH_LEN("'@'"));
|
global.append(STRING_WITH_LEN("'@'"));
|
||||||
global.append(lex_user->host.str,lex_user->host.length,
|
// host and lex_user->host are equal except for case
|
||||||
system_charset_info);
|
global.append(host, strlen(host), system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
if (proc_access & GRANT_ACL)
|
if (proc_access & GRANT_ACL)
|
||||||
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
@ -5713,7 +5734,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
|||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!strcmp(lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
if (!replace_db_table(tables[1].table, acl_db->db, *lex_user,
|
if (!replace_db_table(tables[1].table, acl_db->db, *lex_user,
|
||||||
~(ulong)0, 1))
|
~(ulong)0, 1))
|
||||||
@ -5745,7 +5766,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
|||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!strcmp(lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
if (replace_table_table(thd,grant_table,tables[2].table,*lex_user,
|
if (replace_table_table(thd,grant_table,tables[2].table,*lex_user,
|
||||||
grant_table->db,
|
grant_table->db,
|
||||||
@ -5791,7 +5812,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
|||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str, host))
|
!strcmp(lex_user->host.str, host))
|
||||||
{
|
{
|
||||||
if (!replace_routine_table(thd,grant_proc,tables[4].table,*lex_user,
|
if (!replace_routine_table(thd,grant_proc,tables[4].table,*lex_user,
|
||||||
grant_proc->db,
|
grant_proc->db,
|
||||||
|
@ -2724,10 +2724,13 @@ void THD::restore_sub_statement_state(Sub_statement_state *backup)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void mark_transaction_to_rollback(THD *thd, bool all)
|
void mark_transaction_to_rollback(THD *thd, bool all)
|
||||||
|
{
|
||||||
|
if (thd)
|
||||||
{
|
{
|
||||||
thd->is_fatal_sub_stmt_error= TRUE;
|
thd->is_fatal_sub_stmt_error= TRUE;
|
||||||
thd->transaction_rollback_request= all;
|
thd->transaction_rollback_request= all;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Handling of XA id cacheing
|
Handling of XA id cacheing
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
@ -338,6 +338,7 @@ void lex_start(THD *thd)
|
|||||||
lex->query_tables= 0;
|
lex->query_tables= 0;
|
||||||
lex->reset_query_tables_list(FALSE);
|
lex->reset_query_tables_list(FALSE);
|
||||||
lex->expr_allows_subselect= TRUE;
|
lex->expr_allows_subselect= TRUE;
|
||||||
|
lex->use_only_table_context= FALSE;
|
||||||
|
|
||||||
lex->name.str= 0;
|
lex->name.str= 0;
|
||||||
lex->name.length= 0;
|
lex->name.length= 0;
|
||||||
|
@ -1694,6 +1694,14 @@ typedef struct st_lex : public Query_tables_list
|
|||||||
const char *fname_start;
|
const char *fname_start;
|
||||||
const char *fname_end;
|
const char *fname_end;
|
||||||
|
|
||||||
|
/**
|
||||||
|
During name resolution search only in the table list given by
|
||||||
|
Name_resolution_context::first_name_resolution_table and
|
||||||
|
Name_resolution_context::last_name_resolution_table
|
||||||
|
(see Item_field::fix_fields()).
|
||||||
|
*/
|
||||||
|
bool use_only_table_context;
|
||||||
|
|
||||||
LEX_STRING view_body_utf8;
|
LEX_STRING view_body_utf8;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -902,6 +902,7 @@ bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
|||||||
const char *save_where;
|
const char *save_where;
|
||||||
char* db_name;
|
char* db_name;
|
||||||
char db_name_string[FN_REFLEN];
|
char db_name_string[FN_REFLEN];
|
||||||
|
bool save_use_only_table_context;
|
||||||
DBUG_ENTER("fix_fields_part_func");
|
DBUG_ENTER("fix_fields_part_func");
|
||||||
|
|
||||||
if (part_info->fixed)
|
if (part_info->fixed)
|
||||||
@ -958,8 +959,14 @@ bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
|||||||
This is a tricky call to prepare for since it can have a large number
|
This is a tricky call to prepare for since it can have a large number
|
||||||
of interesting side effects, both desirable and undesirable.
|
of interesting side effects, both desirable and undesirable.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
save_use_only_table_context= thd->lex->use_only_table_context;
|
||||||
|
thd->lex->use_only_table_context= TRUE;
|
||||||
|
|
||||||
error= func_expr->fix_fields(thd, (Item**)0);
|
error= func_expr->fix_fields(thd, (Item**)0);
|
||||||
|
|
||||||
|
thd->lex->use_only_table_context= save_use_only_table_context;
|
||||||
|
|
||||||
context->table_list= save_table_list;
|
context->table_list= save_table_list;
|
||||||
context->first_name_resolution_table= save_first_table;
|
context->first_name_resolution_table= save_first_table;
|
||||||
context->last_name_resolution_table= save_last_table;
|
context->last_name_resolution_table= save_last_table;
|
||||||
|
@ -14370,13 +14370,31 @@ calc_group_buffer(JOIN *join,ORDER *group)
|
|||||||
group_item->decimals);
|
group_item->decimals);
|
||||||
break;
|
break;
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
|
{
|
||||||
|
enum enum_field_types type= group_item->field_type();
|
||||||
|
/*
|
||||||
|
As items represented as DATE/TIME fields in the group buffer
|
||||||
|
have STRING_RESULT result type, we increase the length
|
||||||
|
by 8 as maximum pack length of such fields.
|
||||||
|
*/
|
||||||
|
if (type == MYSQL_TYPE_TIME ||
|
||||||
|
type == MYSQL_TYPE_DATE ||
|
||||||
|
type == MYSQL_TYPE_DATETIME ||
|
||||||
|
type == MYSQL_TYPE_TIMESTAMP)
|
||||||
|
{
|
||||||
|
key_length+= 8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
Group strings are taken as varstrings and require an length field.
|
Group strings are taken as varstrings and require an length field.
|
||||||
A field is not yet created by create_tmp_field()
|
A field is not yet created by create_tmp_field()
|
||||||
and the sizes should match up.
|
and the sizes should match up.
|
||||||
*/
|
*/
|
||||||
key_length+= group_item->max_length + HA_KEY_BLOB_LENGTH;
|
key_length+= group_item->max_length + HA_KEY_BLOB_LENGTH;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
/* This case should never be choosen */
|
/* This case should never be choosen */
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
|
@ -1106,11 +1106,12 @@ char * is_const(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
my_bool check_const_len_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
my_bool check_const_len_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||||
{
|
{
|
||||||
if (args->arg_count != 1)
|
if (args->arg_count != 1)
|
||||||
{
|
{
|
||||||
strmov(message, "IS_CONST accepts only one argument");
|
strmov(message, "CHECK_CONST_LEN accepts only one argument");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (args->args[0] == 0)
|
if (args->args[0] == 0)
|
||||||
@ -1140,5 +1141,4 @@ char * check_const_len(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* HAVE_DLOPEN */
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
@mainpage NDB API Programmers' Guide
|
@mainpage NDB API Programmers' Guide
|
||||||
|
|
||||||
This guide assumes a basic familiarity with MySQL Cluster concepts found
|
This guide assumes a basic familiarity with MySQL Cluster concepts found
|
||||||
on http://dev.mysql.com/doc/mysql/en/NDBCluster.html .
|
on http://dev.mysql.com/doc/mysql/en/mysql-cluster.html.
|
||||||
Some of the fundamental ones are also described in section @ref secConcepts.
|
Some of the fundamental ones are also described in section @ref secConcepts.
|
||||||
|
|
||||||
The NDB API is a MySQL Cluster application interface
|
The NDB API is a MySQL Cluster application interface
|
||||||
|
@ -6272,12 +6272,12 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
my_wc_t *pwc,const uchar *s,const uchar *e)
|
my_wc_t *pwc,const uchar *s,const uchar *e)
|
||||||
{
|
{
|
||||||
|
|
||||||
int hi=s[0];
|
int hi;
|
||||||
|
|
||||||
if (s >= e)
|
if (s >= e)
|
||||||
return MY_CS_TOOSMALL;
|
return MY_CS_TOOSMALL;
|
||||||
|
|
||||||
if (hi<0x80)
|
if ((hi= s[0]) < 0x80)
|
||||||
{
|
{
|
||||||
pwc[0]=hi;
|
pwc[0]=hi;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -8614,12 +8614,12 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
my_wc_t *pwc, const uchar *s, const uchar *e)
|
my_wc_t *pwc, const uchar *s, const uchar *e)
|
||||||
{
|
{
|
||||||
|
|
||||||
int hi=s[0];
|
int hi;
|
||||||
|
|
||||||
if (s >= e)
|
if (s >= e)
|
||||||
return MY_CS_TOOSMALL;
|
return MY_CS_TOOSMALL;
|
||||||
|
|
||||||
if (hi<0x80)
|
if ((hi= s[0]) < 0x80)
|
||||||
{
|
{
|
||||||
pwc[0]=hi;
|
pwc[0]=hi;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -5664,12 +5664,10 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
my_wc_t *pwc, const uchar *s, const uchar *e){
|
my_wc_t *pwc, const uchar *s, const uchar *e){
|
||||||
int hi;
|
int hi;
|
||||||
|
|
||||||
hi=(int) s[0];
|
|
||||||
|
|
||||||
if (s >= e)
|
if (s >= e)
|
||||||
return MY_CS_TOOSMALL;
|
return MY_CS_TOOSMALL;
|
||||||
|
|
||||||
if (hi<0x80)
|
if ((hi= s[0]) < 0x80)
|
||||||
{
|
{
|
||||||
pwc[0]=hi;
|
pwc[0]=hi;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -4527,12 +4527,12 @@ mb:
|
|||||||
static int
|
static int
|
||||||
my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
my_wc_t *pwc, const uchar *s, const uchar *e){
|
my_wc_t *pwc, const uchar *s, const uchar *e){
|
||||||
int hi=s[0];
|
int hi;
|
||||||
|
|
||||||
if (s >= e)
|
if (s >= e)
|
||||||
return MY_CS_TOOSMALL;
|
return MY_CS_TOOSMALL;
|
||||||
|
|
||||||
if (hi < 0x80)
|
if ((hi= s[0]) < 0x80)
|
||||||
{
|
{
|
||||||
pwc[0]=hi;
|
pwc[0]=hi;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -16475,7 +16475,13 @@ static struct my_option client_test_long_options[] =
|
|||||||
{"password", 'p',
|
{"password", 'p',
|
||||||
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection", (uchar **) &opt_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar **) &opt_port,
|
||||||
(uchar **) &opt_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar **) &opt_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"server-arg", 'A', "Send embedded server this as a parameter.",
|
{"server-arg", 'A', "Send embedded server this as a parameter.",
|
||||||
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},
|
||||||
|
@ -44,7 +44,7 @@ int main(int argc, char **argv)
|
|||||||
"../SSL/MySQL-client-cert.pem",
|
"../SSL/MySQL-client-cert.pem",
|
||||||
"../SSL/MySQL-ca-cert.pem", 0, 0);
|
"../SSL/MySQL-ca-cert.pem", 0, 0);
|
||||||
#endif
|
#endif
|
||||||
if (!(sock = mysql_real_connect(&mysql,"127.0.0.1",0,0,argv[1],3306,NULL,0)))
|
if (!(sock = mysql_real_connect(&mysql,"127.0.0.1",0,0,argv[1],MYSQL_PORT,NULL,0)))
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
|
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
|
||||||
perror("");
|
perror("");
|
||||||
|
@ -103,7 +103,13 @@ static struct my_option my_long_options[] =
|
|||||||
(uchar**) &verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"query", 'Q', "Query to execute in each threads", (uchar**) &query,
|
{"query", 'Q', "Query to execute in each threads", (uchar**) &query,
|
||||||
(uchar**) &query, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &query, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection", (uchar**) &tcp_port,
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
"/etc/services, "
|
||||||
|
#endif
|
||||||
|
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
|
||||||
|
(uchar**) &tcp_port,
|
||||||
(uchar**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0, 0},
|
(uchar**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0, 0},
|
||||||
{"socket", 'S', "Socket file to use for connection", (uchar**) &unix_socket,
|
{"socket", 'S', "Socket file to use for connection", (uchar**) &unix_socket,
|
||||||
(uchar**) &unix_socket, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(uchar**) &unix_socket, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
@ -31,6 +31,7 @@ try
|
|||||||
configureInTS.Close();
|
configureInTS.Close();
|
||||||
var default_comment = "Source distribution";
|
var default_comment = "Source distribution";
|
||||||
var default_port = GetValue(configureIn, "MYSQL_TCP_PORT_DEFAULT");
|
var default_port = GetValue(configureIn, "MYSQL_TCP_PORT_DEFAULT");
|
||||||
|
var actual_port = 0;
|
||||||
|
|
||||||
var configfile = fso.CreateTextFile("win\\configure.data", true);
|
var configfile = fso.CreateTextFile("win\\configure.data", true);
|
||||||
for (i=0; i < args.Count(); i++)
|
for (i=0; i < args.Count(); i++)
|
||||||
@ -59,10 +60,41 @@ try
|
|||||||
default_comment = parts[1];
|
default_comment = parts[1];
|
||||||
break;
|
break;
|
||||||
case "MYSQL_TCP_PORT":
|
case "MYSQL_TCP_PORT":
|
||||||
default_port = parts[1];
|
actual_port = parts[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (actual_port == 0)
|
||||||
|
{
|
||||||
|
// if we actually defaulted (as opposed to the pathological case of
|
||||||
|
// --with-tcp-port=<MYSQL_TCP_PORT_DEFAULT> which might in theory
|
||||||
|
// happen if whole batch of servers was built from a script), set
|
||||||
|
// the default to zero to indicate that; we don't lose information
|
||||||
|
// that way, because 0 obviously indicates that we can get the
|
||||||
|
// default value from MYSQL_TCP_PORT. this seems really evil, but
|
||||||
|
// testing for MYSQL_TCP_PORT==MYSQL_TCP_PORT_DEFAULT would make a
|
||||||
|
// a port of MYSQL_TCP_PORT_DEFAULT magic even if the builder did not
|
||||||
|
// intend it to mean "use the default, in fact, look up a good default
|
||||||
|
// from /etc/services if you can", but really, really meant 3306 when
|
||||||
|
// they passed in 3306. When they pass in a specific value, let them
|
||||||
|
// have it; don't second guess user and think we know better, this will
|
||||||
|
// just make people cross. this makes the the logic work like this
|
||||||
|
// (which is complicated enough):
|
||||||
|
//
|
||||||
|
// - if a port was set during build, use that as a default.
|
||||||
|
//
|
||||||
|
// - otherwise, try to look up a port in /etc/services; if that fails,
|
||||||
|
// use MYSQL_TCP_PORT_DEFAULT (at the time of this writing 3306)
|
||||||
|
//
|
||||||
|
// - allow the MYSQL_TCP_PORT environment variable to override that.
|
||||||
|
//
|
||||||
|
// - allow command-line parameters to override all of the above.
|
||||||
|
//
|
||||||
|
// the top-most MYSQL_TCP_PORT_DEFAULT is read from win/configure.js,
|
||||||
|
// so don't mess with that.
|
||||||
|
actual_port = default_port;
|
||||||
|
default_port = 0;
|
||||||
|
}
|
||||||
|
|
||||||
configfile.WriteLine("SET (COMPILATION_COMMENT \"" +
|
configfile.WriteLine("SET (COMPILATION_COMMENT \"" +
|
||||||
default_comment + "\")");
|
default_comment + "\")");
|
||||||
@ -71,7 +103,8 @@ try
|
|||||||
GetValue(configureIn, "PROTOCOL_VERSION") + "\")");
|
GetValue(configureIn, "PROTOCOL_VERSION") + "\")");
|
||||||
configfile.WriteLine("SET (DOT_FRM_VERSION \"" +
|
configfile.WriteLine("SET (DOT_FRM_VERSION \"" +
|
||||||
GetValue(configureIn, "DOT_FRM_VERSION") + "\")");
|
GetValue(configureIn, "DOT_FRM_VERSION") + "\")");
|
||||||
configfile.WriteLine("SET (MYSQL_TCP_PORT \"" + default_port + "\")");
|
configfile.WriteLine("SET (MYSQL_TCP_PORT_DEFAULT \"" + default_port + "\")");
|
||||||
|
configfile.WriteLine("SET (MYSQL_TCP_PORT \"" + actual_port + "\")");
|
||||||
configfile.WriteLine("SET (MYSQL_UNIX_ADDR \"" +
|
configfile.WriteLine("SET (MYSQL_UNIX_ADDR \"" +
|
||||||
GetValue(configureIn, "MYSQL_UNIX_ADDR_DEFAULT") + "\")");
|
GetValue(configureIn, "MYSQL_UNIX_ADDR_DEFAULT") + "\")");
|
||||||
var version = GetVersion(configureIn);
|
var version = GetVersion(configureIn);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user