mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge with main for BUG#12969301
This commit is contained in:
@@ -79,8 +79,19 @@ ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
|
|||||||
SET(OLD_WITH_DEBUG 0 CACHE INTERNAL "" FORCE)
|
SET(OLD_WITH_DEBUG 0 CACHE INTERNAL "" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
# Optionally set project name, e.g.
|
||||||
|
# foo.xcodeproj (mac) or foo.sln (windows)
|
||||||
|
SET(MYSQL_PROJECT_NAME_DOCSTRING "MySQL project name")
|
||||||
|
IF(DEFINED MYSQL_PROJECT_NAME)
|
||||||
|
SET(MYSQL_PROJECT_NAME ${MYSQL_PROJECT_NAME} CACHE STRING
|
||||||
|
${MYSQL_PROJECT_NAME_DOCSTRING} FORCE)
|
||||||
|
ELSE()
|
||||||
|
SET(MYSQL_PROJECT_NAME "MySQL" CACHE STRING
|
||||||
|
${MYSQL_PROJECT_NAME_DOCSTRING} FORCE)
|
||||||
|
MARK_AS_ADVANCED(MYSQL_PROJECT_NAME)
|
||||||
|
ENDIF()
|
||||||
|
PROJECT(${MYSQL_PROJECT_NAME})
|
||||||
|
|
||||||
PROJECT(MySQL)
|
|
||||||
IF(BUILD_CONFIG)
|
IF(BUILD_CONFIG)
|
||||||
INCLUDE(
|
INCLUDE(
|
||||||
${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
|
${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
|
||||||
|
2
VERSION
2
VERSION
@@ -1,4 +1,4 @@
|
|||||||
MYSQL_VERSION_MAJOR=5
|
MYSQL_VERSION_MAJOR=5
|
||||||
MYSQL_VERSION_MINOR=5
|
MYSQL_VERSION_MINOR=5
|
||||||
MYSQL_VERSION_PATCH=20
|
MYSQL_VERSION_PATCH=21
|
||||||
MYSQL_VERSION_EXTRA=
|
MYSQL_VERSION_EXTRA=
|
||||||
|
@@ -243,7 +243,6 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
switch (optid) {
|
switch (optid) {
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2011"));
|
|
||||||
printf("%s Ver %s Distrib %s, for %s (%s)\n",
|
printf("%s Ver %s Distrib %s, for %s (%s)\n",
|
||||||
my_progname, VER, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
my_progname, VER, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
||||||
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
|
@@ -77,6 +77,9 @@
|
|||||||
/* Size of buffer for dump's select query */
|
/* Size of buffer for dump's select query */
|
||||||
#define QUERY_LENGTH 1536
|
#define QUERY_LENGTH 1536
|
||||||
|
|
||||||
|
/* Size of comment buffer. */
|
||||||
|
#define COMMENT_LENGTH 2048
|
||||||
|
|
||||||
/* ignore table flags */
|
/* ignore table flags */
|
||||||
#define IGNORE_NONE 0x00 /* no ignore */
|
#define IGNORE_NONE 0x00 /* no ignore */
|
||||||
#define IGNORE_DATA 0x01 /* don't dump data for this table */
|
#define IGNORE_DATA 0x01 /* don't dump data for this table */
|
||||||
@@ -105,7 +108,7 @@ static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0,
|
|||||||
opt_dump_triggers= 0, opt_routines=0, opt_tz_utc=1,
|
opt_dump_triggers= 0, opt_routines=0, opt_tz_utc=1,
|
||||||
opt_slave_apply= 0,
|
opt_slave_apply= 0,
|
||||||
opt_include_master_host_port= 0,
|
opt_include_master_host_port= 0,
|
||||||
opt_events= 0,
|
opt_events= 0, opt_comments_used= 0,
|
||||||
opt_alltspcs=0, opt_notspcs= 0;
|
opt_alltspcs=0, opt_notspcs= 0;
|
||||||
static my_bool insert_pat_inited= 0, debug_info_flag= 0, debug_check_flag= 0;
|
static my_bool insert_pat_inited= 0, debug_info_flag= 0, debug_check_flag= 0;
|
||||||
static ulong opt_max_allowed_packet, opt_net_buffer_length;
|
static ulong opt_max_allowed_packet, opt_net_buffer_length;
|
||||||
@@ -539,6 +542,8 @@ static int dump_all_tablespaces();
|
|||||||
static int dump_tablespaces_for_tables(char *db, char **table_names, int tables);
|
static int dump_tablespaces_for_tables(char *db, char **table_names, int tables);
|
||||||
static int dump_tablespaces_for_databases(char** databases);
|
static int dump_tablespaces_for_databases(char** databases);
|
||||||
static int dump_tablespaces(char* ts_where);
|
static int dump_tablespaces(char* ts_where);
|
||||||
|
static void print_comment(FILE *sql_file, my_bool is_error, const char *format,
|
||||||
|
...);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -562,6 +567,8 @@ static void verbose_msg(const char *fmt, ...)
|
|||||||
vfprintf(stderr, fmt, args);
|
vfprintf(stderr, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,19 +638,19 @@ static void write_header(FILE *sql_file, char *db_name)
|
|||||||
}
|
}
|
||||||
else if (!opt_compact)
|
else if (!opt_compact)
|
||||||
{
|
{
|
||||||
if (opt_comments)
|
print_comment(sql_file, 0,
|
||||||
{
|
"-- MySQL dump %s Distrib %s, for %s (%s)\n--\n",
|
||||||
fprintf(sql_file,
|
DUMP_VERSION, MYSQL_SERVER_VERSION, SYSTEM_TYPE,
|
||||||
"-- MySQL dump %s Distrib %s, for %s (%s)\n--\n",
|
MACHINE_TYPE);
|
||||||
DUMP_VERSION, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
print_comment(sql_file, 0, "-- Host: %s Database: %s\n",
|
||||||
fprintf(sql_file, "-- Host: %s Database: %s\n",
|
current_host ? current_host : "localhost",
|
||||||
current_host ? current_host : "localhost", db_name ? db_name :
|
db_name ? db_name : "");
|
||||||
"");
|
print_comment(sql_file, 0,
|
||||||
fputs("-- ------------------------------------------------------\n",
|
"-- ------------------------------------------------------\n"
|
||||||
sql_file);
|
);
|
||||||
fprintf(sql_file, "-- Server version\t%s\n",
|
print_comment(sql_file, 0, "-- Server version\t%s\n",
|
||||||
mysql_get_server_info(&mysql_connection));
|
mysql_get_server_info(&mysql_connection));
|
||||||
}
|
|
||||||
if (opt_set_charset)
|
if (opt_set_charset)
|
||||||
fprintf(sql_file,
|
fprintf(sql_file,
|
||||||
"\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;"
|
"\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;"
|
||||||
@@ -701,18 +708,16 @@ static void write_footer(FILE *sql_file)
|
|||||||
fprintf(sql_file,
|
fprintf(sql_file,
|
||||||
"/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");
|
"/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");
|
||||||
fputs("\n", sql_file);
|
fputs("\n", sql_file);
|
||||||
if (opt_comments)
|
|
||||||
|
if (opt_dump_date)
|
||||||
{
|
{
|
||||||
if (opt_dump_date)
|
char time_str[20];
|
||||||
{
|
get_date(time_str, GETDATE_DATE_TIME, 0);
|
||||||
char time_str[20];
|
print_comment(sql_file, 0, "-- Dump completed on %s\n", time_str);
|
||||||
get_date(time_str, GETDATE_DATE_TIME, 0);
|
|
||||||
fprintf(sql_file, "-- Dump completed on %s\n",
|
|
||||||
time_str);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fprintf(sql_file, "-- Dump completed\n");
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
print_comment(sql_file, 0, "-- Dump completed\n");
|
||||||
|
|
||||||
check_io(sql_file);
|
check_io(sql_file);
|
||||||
}
|
}
|
||||||
} /* write_footer */
|
} /* write_footer */
|
||||||
@@ -786,6 +791,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
extended_insert= opt_drop= opt_lock=
|
extended_insert= opt_drop= opt_lock=
|
||||||
opt_disable_keys= opt_autocommit= opt_create_db= 0;
|
opt_disable_keys= opt_autocommit= opt_create_db= 0;
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
opt_comments_used= 1;
|
||||||
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
case '?':
|
case '?':
|
||||||
usage();
|
usage();
|
||||||
@@ -807,11 +815,12 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
opt_disable_keys= lock_tables= opt_set_charset= 0;
|
opt_disable_keys= lock_tables= opt_set_charset= 0;
|
||||||
break;
|
break;
|
||||||
case (int) OPT_COMPACT:
|
case (int) OPT_COMPACT:
|
||||||
if (opt_compact)
|
if (opt_compact)
|
||||||
{
|
{
|
||||||
opt_comments= opt_drop= opt_disable_keys= opt_lock= 0;
|
opt_comments= opt_drop= opt_disable_keys= opt_lock= 0;
|
||||||
opt_set_charset= 0;
|
opt_set_charset= 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case (int) OPT_TABLES:
|
case (int) OPT_TABLES:
|
||||||
opt_databases=0;
|
opt_databases=0;
|
||||||
break;
|
break;
|
||||||
@@ -1635,20 +1644,20 @@ static char *quote_for_like(const char *name, char *buff)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Quote and print a string.
|
Quote and print a string.
|
||||||
|
|
||||||
SYNOPSIS
|
@param xml_file - Output file.
|
||||||
print_quoted_xml()
|
@param str - String to print.
|
||||||
xml_file - output file
|
@param len - Its length.
|
||||||
str - string to print
|
@param is_attribute_name - A check for attribute name or value.
|
||||||
len - its length
|
|
||||||
|
|
||||||
DESCRIPTION
|
@description
|
||||||
Quote '<' '>' '&' '\"' chars and print a string to the xml_file.
|
Quote '<' '>' '&' '\"' chars and print a string to the xml_file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void print_quoted_xml(FILE *xml_file, const char *str, ulong len)
|
static void print_quoted_xml(FILE *xml_file, const char *str, ulong len,
|
||||||
|
my_bool is_attribute_name)
|
||||||
{
|
{
|
||||||
const char *end;
|
const char *end;
|
||||||
|
|
||||||
@@ -1667,6 +1676,14 @@ static void print_quoted_xml(FILE *xml_file, const char *str, ulong len)
|
|||||||
case '\"':
|
case '\"':
|
||||||
fputs(""", xml_file);
|
fputs(""", xml_file);
|
||||||
break;
|
break;
|
||||||
|
case ' ':
|
||||||
|
/* Attribute names cannot contain spaces. */
|
||||||
|
if (is_attribute_name)
|
||||||
|
{
|
||||||
|
fputs("_", xml_file);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
fputc(*str, xml_file);
|
fputc(*str, xml_file);
|
||||||
break;
|
break;
|
||||||
@@ -1727,7 +1744,7 @@ static void print_xml_tag(FILE * xml_file, const char* sbeg,
|
|||||||
fputs(attribute_name, xml_file);
|
fputs(attribute_name, xml_file);
|
||||||
fputc('\"', xml_file);
|
fputc('\"', xml_file);
|
||||||
|
|
||||||
print_quoted_xml(xml_file, attribute_value, strlen(attribute_value));
|
print_quoted_xml(xml_file, attribute_value, strlen(attribute_value), 0);
|
||||||
fputc('\"', xml_file);
|
fputc('\"', xml_file);
|
||||||
|
|
||||||
attribute_name= va_arg(arg_list, char *);
|
attribute_name= va_arg(arg_list, char *);
|
||||||
@@ -1767,13 +1784,52 @@ static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
|
|||||||
fputs("<", xml_file);
|
fputs("<", xml_file);
|
||||||
fputs(stag_atr, xml_file);
|
fputs(stag_atr, xml_file);
|
||||||
fputs("\"", xml_file);
|
fputs("\"", xml_file);
|
||||||
print_quoted_xml(xml_file, sval, strlen(sval));
|
print_quoted_xml(xml_file, sval, strlen(sval), 0);
|
||||||
fputs("\" xsi:nil=\"true\" />", xml_file);
|
fputs("\" xsi:nil=\"true\" />", xml_file);
|
||||||
fputs(line_end, xml_file);
|
fputs(line_end, xml_file);
|
||||||
check_io(xml_file);
|
check_io(xml_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Print xml CDATA section.
|
||||||
|
|
||||||
|
@param xml_file - output file
|
||||||
|
@param str - string to print
|
||||||
|
@param len - length of the string
|
||||||
|
|
||||||
|
@note
|
||||||
|
This function also takes care of the presence of '[[>'
|
||||||
|
string in the str. If found, the CDATA section is broken
|
||||||
|
into two CDATA sections, <![CDATA[]]]]> and <![CDATA[>]].
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void print_xml_cdata(FILE *xml_file, const char *str, ulong len)
|
||||||
|
{
|
||||||
|
const char *end;
|
||||||
|
|
||||||
|
fputs("<![CDATA[\n", xml_file);
|
||||||
|
for (end= str + len; str != end; str++)
|
||||||
|
{
|
||||||
|
switch(*str) {
|
||||||
|
case ']':
|
||||||
|
if ((*(str + 1) == ']') && (*(str + 2) =='>'))
|
||||||
|
{
|
||||||
|
fputs("]]]]><![CDATA[>", xml_file);
|
||||||
|
str += 2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
fputc(*str, xml_file);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fputs("\n]]>\n", xml_file);
|
||||||
|
check_io(xml_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Print xml tag with many attributes.
|
Print xml tag with many attributes.
|
||||||
|
|
||||||
@@ -1783,6 +1839,7 @@ static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
|
|||||||
row_name - xml tag name
|
row_name - xml tag name
|
||||||
tableRes - query result
|
tableRes - query result
|
||||||
row - result row
|
row - result row
|
||||||
|
str_create - create statement header string
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Print tag with many attribute to the xml_file. Format is:
|
Print tag with many attribute to the xml_file. Format is:
|
||||||
@@ -1792,9 +1849,13 @@ static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static void print_xml_row(FILE *xml_file, const char *row_name,
|
static void print_xml_row(FILE *xml_file, const char *row_name,
|
||||||
MYSQL_RES *tableRes, MYSQL_ROW *row)
|
MYSQL_RES *tableRes, MYSQL_ROW *row,
|
||||||
|
const char *str_create)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
|
my_bool body_found= 0;
|
||||||
|
char *create_stmt_ptr= NULL;
|
||||||
|
ulong create_stmt_len= 0;
|
||||||
MYSQL_FIELD *field;
|
MYSQL_FIELD *field;
|
||||||
ulong *lengths= mysql_fetch_lengths(tableRes);
|
ulong *lengths= mysql_fetch_lengths(tableRes);
|
||||||
|
|
||||||
@@ -1805,19 +1866,109 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
|
|||||||
{
|
{
|
||||||
if ((*row)[i])
|
if ((*row)[i])
|
||||||
{
|
{
|
||||||
fputc(' ', xml_file);
|
/* For 'create' statements, dump using CDATA. */
|
||||||
print_quoted_xml(xml_file, field->name, field->name_length);
|
if ((str_create) && (strcmp(str_create, field->name) == 0))
|
||||||
fputs("=\"", xml_file);
|
{
|
||||||
print_quoted_xml(xml_file, (*row)[i], lengths[i]);
|
create_stmt_ptr= (*row)[i];
|
||||||
fputc('"', xml_file);
|
create_stmt_len= lengths[i];
|
||||||
check_io(xml_file);
|
body_found= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fputc(' ', xml_file);
|
||||||
|
print_quoted_xml(xml_file, field->name, field->name_length, 1);
|
||||||
|
fputs("=\"", xml_file);
|
||||||
|
print_quoted_xml(xml_file, (*row)[i], lengths[i], 0);
|
||||||
|
fputc('"', xml_file);
|
||||||
|
check_io(xml_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fputs(" />\n", xml_file);
|
|
||||||
|
if (create_stmt_len)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(body_found);
|
||||||
|
fputs(">\n", xml_file);
|
||||||
|
print_xml_cdata(xml_file, create_stmt_ptr, create_stmt_len);
|
||||||
|
fprintf(xml_file, "\t\t</%s>\n", row_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fputs(" />\n", xml_file);
|
||||||
|
|
||||||
check_io(xml_file);
|
check_io(xml_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Print xml comments.
|
||||||
|
|
||||||
|
@param xml_file - output file
|
||||||
|
@param len - length of comment message
|
||||||
|
@param comment_string - comment message
|
||||||
|
|
||||||
|
@description
|
||||||
|
Print the comment message in the format:
|
||||||
|
"<!-- \n comment string \n -->\n"
|
||||||
|
|
||||||
|
@note
|
||||||
|
Any occurrence of continuous hyphens will be
|
||||||
|
squeezed to a single hyphen.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void print_xml_comment(FILE *xml_file, ulong len,
|
||||||
|
const char *comment_string)
|
||||||
|
{
|
||||||
|
const char* end;
|
||||||
|
|
||||||
|
fputs("<!-- ", xml_file);
|
||||||
|
|
||||||
|
for (end= comment_string + len; comment_string != end; comment_string++)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
The string "--" (double-hyphen) MUST NOT occur within xml comments.
|
||||||
|
*/
|
||||||
|
switch (*comment_string) {
|
||||||
|
case '-':
|
||||||
|
if (*(comment_string + 1) == '-') /* Only one hyphen allowed. */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fputc(*comment_string, xml_file);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fputs(" -->\n", xml_file);
|
||||||
|
check_io(xml_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* A common printing function for xml and non-xml modes. */
|
||||||
|
|
||||||
|
static void print_comment(FILE *sql_file, my_bool is_error, const char *format,
|
||||||
|
...)
|
||||||
|
{
|
||||||
|
static char comment_buff[COMMENT_LENGTH];
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
/* If its an error message, print it ignoring opt_comments. */
|
||||||
|
if (!is_error && !opt_comments)
|
||||||
|
return;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
my_vsnprintf(comment_buff, COMMENT_LENGTH, format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (!opt_xml)
|
||||||
|
{
|
||||||
|
fputs(comment_buff, sql_file);
|
||||||
|
check_io(sql_file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_xml_comment(sql_file, strlen(comment_buff), comment_buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
create_delimiter
|
create_delimiter
|
||||||
Generate a new (null-terminated) string that does not exist in query
|
Generate a new (null-terminated) string that does not exist in query
|
||||||
@@ -1884,8 +2035,8 @@ static uint dump_events_for_db(char *db)
|
|||||||
mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
|
mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
|
||||||
|
|
||||||
/* nice comments */
|
/* nice comments */
|
||||||
if (opt_comments)
|
print_comment(sql_file, 0,
|
||||||
fprintf(sql_file, "\n--\n-- Dumping events for database '%s'\n--\n", db);
|
"\n--\n-- Dumping events for database '%s'\n--\n", db);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
not using "mysql_query_with_error_report" because we may have not
|
not using "mysql_query_with_error_report" because we may have not
|
||||||
@@ -1900,12 +2051,17 @@ static uint dump_events_for_db(char *db)
|
|||||||
strcpy(delimiter, ";");
|
strcpy(delimiter, ";");
|
||||||
if (mysql_num_rows(event_list_res) > 0)
|
if (mysql_num_rows(event_list_res) > 0)
|
||||||
{
|
{
|
||||||
fprintf(sql_file, "/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;\n");
|
if (opt_xml)
|
||||||
|
fputs("\t<events>\n", sql_file);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(sql_file, "/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;\n");
|
||||||
|
|
||||||
/* Get database collation. */
|
/* Get database collation. */
|
||||||
|
|
||||||
if (fetch_db_collation(db_name_buff, db_cl_name, sizeof (db_cl_name)))
|
if (fetch_db_collation(db_name_buff, db_cl_name, sizeof (db_cl_name)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (switch_character_set_results(mysql, "binary"))
|
if (switch_character_set_results(mysql, "binary"))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@@ -1922,6 +2078,13 @@ static uint dump_events_for_db(char *db)
|
|||||||
|
|
||||||
while ((row= mysql_fetch_row(event_res)) != NULL)
|
while ((row= mysql_fetch_row(event_res)) != NULL)
|
||||||
{
|
{
|
||||||
|
if (opt_xml)
|
||||||
|
{
|
||||||
|
print_xml_row(sql_file, "event", event_res, &row,
|
||||||
|
"Create Event");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if the user has EXECUTE privilege he can see event names, but not the
|
if the user has EXECUTE privilege he can see event names, but not the
|
||||||
event body!
|
event body!
|
||||||
@@ -2007,8 +2170,16 @@ static uint dump_events_for_db(char *db)
|
|||||||
mysql_free_result(event_res);
|
mysql_free_result(event_res);
|
||||||
|
|
||||||
} /* end of list of events */
|
} /* end of list of events */
|
||||||
fprintf(sql_file, "DELIMITER ;\n");
|
if (opt_xml)
|
||||||
fprintf(sql_file, "/*!50106 SET TIME_ZONE= @save_time_zone */ ;\n");
|
{
|
||||||
|
fputs("\t</events>\n", sql_file);
|
||||||
|
check_io(sql_file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(sql_file, "DELIMITER ;\n");
|
||||||
|
fprintf(sql_file, "/*!50106 SET TIME_ZONE= @save_time_zone */ ;\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (switch_character_set_results(mysql, default_charset))
|
if (switch_character_set_results(mysql, default_charset))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@@ -2062,6 +2233,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
const char *routine_type[]= {"FUNCTION", "PROCEDURE"};
|
const char *routine_type[]= {"FUNCTION", "PROCEDURE"};
|
||||||
char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3];
|
char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3];
|
||||||
char *routine_name;
|
char *routine_name;
|
||||||
|
char *query_str;
|
||||||
int i;
|
int i;
|
||||||
FILE *sql_file= md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
MYSQL_RES *routine_res, *routine_list_res;
|
MYSQL_RES *routine_res, *routine_list_res;
|
||||||
@@ -2076,8 +2248,8 @@ static uint dump_routines_for_db(char *db)
|
|||||||
mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
|
mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
|
||||||
|
|
||||||
/* nice comments */
|
/* nice comments */
|
||||||
if (opt_comments)
|
print_comment(sql_file, 0,
|
||||||
fprintf(sql_file, "\n--\n-- Dumping routines for database '%s'\n--\n", db);
|
"\n--\n-- Dumping routines for database '%s'\n--\n", db);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
not using "mysql_query_with_error_report" because we may have not
|
not using "mysql_query_with_error_report" because we may have not
|
||||||
@@ -2094,6 +2266,9 @@ static uint dump_routines_for_db(char *db)
|
|||||||
if (switch_character_set_results(mysql, "binary"))
|
if (switch_character_set_results(mysql, "binary"))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
|
if (opt_xml)
|
||||||
|
fputs("\t<routines>\n", sql_file);
|
||||||
|
|
||||||
/* 0, retrieve and dump functions, 1, procedures */
|
/* 0, retrieve and dump functions, 1, procedures */
|
||||||
for (i= 0; i <= 1; i++)
|
for (i= 0; i <= 1; i++)
|
||||||
{
|
{
|
||||||
@@ -2129,13 +2304,25 @@ static uint dump_routines_for_db(char *db)
|
|||||||
row[2] ? (int) strlen(row[2]) : 0));
|
row[2] ? (int) strlen(row[2]) : 0));
|
||||||
if (row[2] == NULL)
|
if (row[2] == NULL)
|
||||||
{
|
{
|
||||||
fprintf(sql_file, "\n-- insufficient privileges to %s\n", query_buff);
|
print_comment(sql_file, 1, "\n-- insufficient privileges to %s\n",
|
||||||
fprintf(sql_file, "-- does %s have permissions on mysql.proc?\n\n", current_user);
|
query_buff);
|
||||||
|
print_comment(sql_file, 1,
|
||||||
|
"-- does %s have permissions on mysql.proc?\n\n",
|
||||||
|
current_user);
|
||||||
maybe_die(EX_MYSQLERR,"%s has insufficent privileges to %s!", current_user, query_buff);
|
maybe_die(EX_MYSQLERR,"%s has insufficent privileges to %s!", current_user, query_buff);
|
||||||
}
|
}
|
||||||
else if (strlen(row[2]))
|
else if (strlen(row[2]))
|
||||||
{
|
{
|
||||||
char *query_str;
|
if (opt_xml)
|
||||||
|
{
|
||||||
|
if (i) // Procedures.
|
||||||
|
print_xml_row(sql_file, "routine", routine_res, &row,
|
||||||
|
"Create Procedure");
|
||||||
|
else // Functions.
|
||||||
|
print_xml_row(sql_file, "routine", routine_res, &row,
|
||||||
|
"Create Function");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (opt_drop)
|
if (opt_drop)
|
||||||
fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;\n",
|
fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;\n",
|
||||||
routine_type[i], routine_name);
|
routine_type[i], routine_name);
|
||||||
@@ -2215,6 +2402,12 @@ static uint dump_routines_for_db(char *db)
|
|||||||
mysql_free_result(routine_list_res);
|
mysql_free_result(routine_list_res);
|
||||||
} /* end of for i (0 .. 1) */
|
} /* end of for i (0 .. 1) */
|
||||||
|
|
||||||
|
if (opt_xml)
|
||||||
|
{
|
||||||
|
fputs("\t</routines>\n", sql_file);
|
||||||
|
check_io(sql_file);
|
||||||
|
}
|
||||||
|
|
||||||
if (switch_character_set_results(mysql, default_charset))
|
if (switch_character_set_results(mysql, default_charset))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
@@ -2327,16 +2520,16 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
|
|
||||||
write_header(sql_file, db);
|
write_header(sql_file, db);
|
||||||
}
|
}
|
||||||
if (!opt_xml && opt_comments)
|
|
||||||
{
|
|
||||||
if (strcmp (table_type, "VIEW") == 0) /* view */
|
if (strcmp (table_type, "VIEW") == 0) /* view */
|
||||||
fprintf(sql_file, "\n--\n-- Temporary table structure for view %s\n--\n\n",
|
print_comment(sql_file, 0,
|
||||||
result_table);
|
"\n--\n-- Temporary table structure for view %s\n--\n\n",
|
||||||
|
result_table);
|
||||||
else
|
else
|
||||||
fprintf(sql_file, "\n--\n-- Table structure for table %s\n--\n\n",
|
print_comment(sql_file, 0,
|
||||||
result_table);
|
"\n--\n-- Table structure for table %s\n--\n\n",
|
||||||
check_io(sql_file);
|
result_table);
|
||||||
}
|
|
||||||
if (opt_drop)
|
if (opt_drop)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -2537,9 +2730,10 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
write_header(sql_file, db);
|
write_header(sql_file, db);
|
||||||
}
|
}
|
||||||
if (!opt_xml && opt_comments)
|
|
||||||
fprintf(sql_file, "\n--\n-- Table structure for table %s\n--\n\n",
|
print_comment(sql_file, 0,
|
||||||
result_table);
|
"\n--\n-- Table structure for table %s\n--\n\n",
|
||||||
|
result_table);
|
||||||
if (opt_drop)
|
if (opt_drop)
|
||||||
fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n", result_table);
|
fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n", result_table);
|
||||||
if (!opt_xml)
|
if (!opt_xml)
|
||||||
@@ -2590,7 +2784,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
{
|
{
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
{
|
{
|
||||||
print_xml_row(sql_file, "field", result, &row);
|
print_xml_row(sql_file, "field", result, &row, NullS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2662,7 +2856,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
{
|
{
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
{
|
{
|
||||||
print_xml_row(sql_file, "key", result, &row);
|
print_xml_row(sql_file, "key", result, &row, NullS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2721,7 +2915,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
print_xml_row(sql_file, "options", result, &row);
|
print_xml_row(sql_file, "options", result, &row, NullS);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fputs("/*!",sql_file);
|
fputs("/*!",sql_file);
|
||||||
@@ -2765,9 +2959,19 @@ static void dump_trigger_old(FILE *sql_file, MYSQL_RES *show_triggers_rs,
|
|||||||
char *quoted_table_name= quote_name(table_name, quoted_table_name_buf, 1);
|
char *quoted_table_name= quote_name(table_name, quoted_table_name_buf, 1);
|
||||||
|
|
||||||
char name_buff[NAME_LEN * 4 + 3];
|
char name_buff[NAME_LEN * 4 + 3];
|
||||||
|
const char *xml_msg= "\nWarning! mysqldump being run against old server "
|
||||||
|
"that does not\nsupport 'SHOW CREATE TRIGGERS' "
|
||||||
|
"statement. Skipping..\n";
|
||||||
|
|
||||||
DBUG_ENTER("dump_trigger_old");
|
DBUG_ENTER("dump_trigger_old");
|
||||||
|
|
||||||
|
if (opt_xml)
|
||||||
|
{
|
||||||
|
print_xml_comment(sql_file, strlen(xml_msg), xml_msg);
|
||||||
|
check_io(sql_file);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(sql_file,
|
fprintf(sql_file,
|
||||||
"--\n"
|
"--\n"
|
||||||
"-- WARNING: old server version. "
|
"-- WARNING: old server version. "
|
||||||
@@ -2831,17 +3035,25 @@ static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs,
|
|||||||
const char *db_cl_name)
|
const char *db_cl_name)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
char *query_str;
|
||||||
int db_cl_altered= FALSE;
|
int db_cl_altered= FALSE;
|
||||||
|
|
||||||
DBUG_ENTER("dump_trigger");
|
DBUG_ENTER("dump_trigger");
|
||||||
|
|
||||||
while ((row= mysql_fetch_row(show_create_trigger_rs)))
|
while ((row= mysql_fetch_row(show_create_trigger_rs)))
|
||||||
{
|
{
|
||||||
char *query_str= cover_definer_clause(row[2], strlen(row[2]),
|
if (opt_xml)
|
||||||
C_STRING_WITH_LEN("50017"),
|
{
|
||||||
C_STRING_WITH_LEN("50003"),
|
print_xml_row(sql_file, "trigger", show_create_trigger_rs, &row,
|
||||||
C_STRING_WITH_LEN(" TRIGGER"));
|
"SQL Original Statement");
|
||||||
|
check_io(sql_file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
query_str= cover_definer_clause(row[2], strlen(row[2]),
|
||||||
|
C_STRING_WITH_LEN("50017"),
|
||||||
|
C_STRING_WITH_LEN("50003"),
|
||||||
|
C_STRING_WITH_LEN(" TRIGGER"));
|
||||||
if (switch_db_collation(sql_file, db_name, ";",
|
if (switch_db_collation(sql_file, db_name, ";",
|
||||||
db_cl_name, row[5], &db_cl_altered))
|
db_cl_name, row[5], &db_cl_altered))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
@@ -2929,6 +3141,13 @@ static int dump_triggers_for_table(char *table_name, char *db_name)
|
|||||||
|
|
||||||
/* Dump triggers. */
|
/* Dump triggers. */
|
||||||
|
|
||||||
|
if (! mysql_num_rows(show_triggers_rs))
|
||||||
|
goto skip;
|
||||||
|
|
||||||
|
if (opt_xml)
|
||||||
|
print_xml_tag(sql_file, "\t", "\n", "triggers", "name=",
|
||||||
|
table_name, NullS);
|
||||||
|
|
||||||
while ((row= mysql_fetch_row(show_triggers_rs)))
|
while ((row= mysql_fetch_row(show_triggers_rs)))
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -2961,6 +3180,13 @@ static int dump_triggers_for_table(char *table_name, char *db_name)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt_xml)
|
||||||
|
{
|
||||||
|
fputs("\t</triggers>\n", sql_file);
|
||||||
|
check_io(sql_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
skip:
|
||||||
mysql_free_result(show_triggers_rs);
|
mysql_free_result(show_triggers_rs);
|
||||||
|
|
||||||
if (switch_character_set_results(mysql, default_charset))
|
if (switch_character_set_results(mysql, default_charset))
|
||||||
@@ -3209,34 +3435,24 @@ static void dump_table(char *table, char *db)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(md_result_file, 0,
|
||||||
{
|
"\n--\n-- Dumping data for table %s\n--\n",
|
||||||
fprintf(md_result_file,"\n--\n-- Dumping data for table %s\n--\n",
|
result_table);
|
||||||
result_table);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
dynstr_append_checked(&query_string, "SELECT /*!40001 SQL_NO_CACHE */ * FROM ");
|
dynstr_append_checked(&query_string, "SELECT /*!40001 SQL_NO_CACHE */ * FROM ");
|
||||||
dynstr_append_checked(&query_string, result_table);
|
dynstr_append_checked(&query_string, result_table);
|
||||||
|
|
||||||
if (where)
|
if (where)
|
||||||
{
|
{
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(md_result_file, 0, "-- WHERE: %s\n", where);
|
||||||
{
|
|
||||||
fprintf(md_result_file, "-- WHERE: %s\n", where);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
dynstr_append_checked(&query_string, " WHERE ");
|
dynstr_append_checked(&query_string, " WHERE ");
|
||||||
dynstr_append_checked(&query_string, where);
|
dynstr_append_checked(&query_string, where);
|
||||||
}
|
}
|
||||||
if (order_by)
|
if (order_by)
|
||||||
{
|
{
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(md_result_file, 0, "-- ORDER BY: %s\n", order_by);
|
||||||
{
|
|
||||||
fprintf(md_result_file, "-- ORDER BY: %s\n", order_by);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
dynstr_append_checked(&query_string, " ORDER BY ");
|
dynstr_append_checked(&query_string, " ORDER BY ");
|
||||||
dynstr_append_checked(&query_string, order_by);
|
dynstr_append_checked(&query_string, order_by);
|
||||||
}
|
}
|
||||||
@@ -3432,7 +3648,7 @@ static void dump_table(char *table, char *db)
|
|||||||
{
|
{
|
||||||
print_xml_tag(md_result_file, "\t\t", "", "field", "name=",
|
print_xml_tag(md_result_file, "\t\t", "", "field", "name=",
|
||||||
field->name, NullS);
|
field->name, NullS);
|
||||||
print_quoted_xml(md_result_file, row[i], length);
|
print_quoted_xml(md_result_file, row[i], length, 0);
|
||||||
}
|
}
|
||||||
fputs("</field>\n", md_result_file);
|
fputs("</field>\n", md_result_file);
|
||||||
}
|
}
|
||||||
@@ -3736,11 +3952,9 @@ static int dump_tablespaces(char* ts_where)
|
|||||||
first= 1;
|
first= 1;
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(md_result_file, 0, "\n--\n-- Logfile group: %s\n--\n",
|
||||||
{
|
row[0]);
|
||||||
fprintf(md_result_file,"\n--\n-- Logfile group: %s\n--\n", row[0]);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
fprintf(md_result_file, "\nCREATE");
|
fprintf(md_result_file, "\nCREATE");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -3808,11 +4022,7 @@ static int dump_tablespaces(char* ts_where)
|
|||||||
first= 1;
|
first= 1;
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(md_result_file, 0, "\n--\n-- Tablespace: %s\n--\n", row[0]);
|
||||||
{
|
|
||||||
fprintf(md_result_file,"\n--\n-- Tablespace: %s\n--\n", row[0]);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
fprintf(md_result_file, "\nCREATE");
|
fprintf(md_result_file, "\nCREATE");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -4010,11 +4220,9 @@ static int init_dumping(char *database, int init_func(char*))
|
|||||||
*/
|
*/
|
||||||
char quoted_database_buf[NAME_LEN*2+3];
|
char quoted_database_buf[NAME_LEN*2+3];
|
||||||
char *qdatabase= quote_name(database,quoted_database_buf,opt_quoted);
|
char *qdatabase= quote_name(database,quoted_database_buf,opt_quoted);
|
||||||
if (opt_comments)
|
|
||||||
{
|
print_comment(md_result_file, 0,
|
||||||
fprintf(md_result_file,"\n--\n-- Current Database: %s\n--\n", qdatabase);
|
"\n--\n-- Current Database: %s\n--\n", qdatabase);
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call the view or table specific function */
|
/* Call the view or table specific function */
|
||||||
init_func(qdatabase);
|
init_func(qdatabase);
|
||||||
@@ -4079,6 +4287,8 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
if (mysql_refresh(mysql, REFRESH_LOG))
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
DB_error(mysql, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
|
else
|
||||||
|
verbose_msg("-- dump_all_tables_in_db : logs flushed successfully!\n");
|
||||||
}
|
}
|
||||||
while ((table= getTableName(0)))
|
while ((table= getTableName(0)))
|
||||||
{
|
{
|
||||||
@@ -4088,8 +4298,7 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
dump_table(table,database);
|
dump_table(table,database);
|
||||||
my_free(order_by);
|
my_free(order_by);
|
||||||
order_by= 0;
|
order_by= 0;
|
||||||
if (opt_dump_triggers && ! opt_xml &&
|
if (opt_dump_triggers && mysql_get_server_version(mysql) >= 50009)
|
||||||
mysql_get_server_version(mysql) >= 50009)
|
|
||||||
{
|
{
|
||||||
if (dump_triggers_for_table(table, database))
|
if (dump_triggers_for_table(table, database))
|
||||||
{
|
{
|
||||||
@@ -4100,14 +4309,12 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (opt_events && !opt_xml &&
|
if (opt_events && mysql_get_server_version(mysql) >= 50106)
|
||||||
mysql_get_server_version(mysql) >= 50106)
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping events for database %s", database));
|
DBUG_PRINT("info", ("Dumping events for database %s", database));
|
||||||
dump_events_for_db(database);
|
dump_events_for_db(database);
|
||||||
}
|
}
|
||||||
if (opt_routines && !opt_xml &&
|
if (opt_routines && mysql_get_server_version(mysql) >= 50009)
|
||||||
mysql_get_server_version(mysql) >= 50009)
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping routines for database %s", database));
|
DBUG_PRINT("info", ("Dumping routines for database %s", database));
|
||||||
dump_routines_for_db(database);
|
dump_routines_for_db(database);
|
||||||
@@ -4179,6 +4386,8 @@ static my_bool dump_all_views_in_db(char *database)
|
|||||||
if (mysql_refresh(mysql, REFRESH_LOG))
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
DB_error(mysql, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
|
else
|
||||||
|
verbose_msg("-- dump_all_views_in_db : logs flushed successfully!\n");
|
||||||
}
|
}
|
||||||
while ((table= getTableName(0)))
|
while ((table= getTableName(0)))
|
||||||
{
|
{
|
||||||
@@ -4317,6 +4526,8 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
DB_error(mysql, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
}
|
}
|
||||||
/* We shall countinue here, if --force was given */
|
/* We shall countinue here, if --force was given */
|
||||||
|
else
|
||||||
|
verbose_msg("-- dump_selected_tables : logs flushed successfully!\n");
|
||||||
}
|
}
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
print_xml_tag(md_result_file, "", "\n", "database", "name=", db, NullS);
|
print_xml_tag(md_result_file, "", "\n", "database", "name=", db, NullS);
|
||||||
@@ -4344,15 +4555,13 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
for (pos= dump_tables; pos < end; pos++)
|
for (pos= dump_tables; pos < end; pos++)
|
||||||
get_view_structure(*pos, db);
|
get_view_structure(*pos, db);
|
||||||
}
|
}
|
||||||
if (opt_events && !opt_xml &&
|
if (opt_events && mysql_get_server_version(mysql) >= 50106)
|
||||||
mysql_get_server_version(mysql) >= 50106)
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping events for database %s", db));
|
DBUG_PRINT("info", ("Dumping events for database %s", db));
|
||||||
dump_events_for_db(db);
|
dump_events_for_db(db);
|
||||||
}
|
}
|
||||||
/* obtain dump of routines (procs/functions) */
|
/* obtain dump of routines (procs/functions) */
|
||||||
if (opt_routines && !opt_xml &&
|
if (opt_routines && mysql_get_server_version(mysql) >= 50009)
|
||||||
mysql_get_server_version(mysql) >= 50009)
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping routines for database %s", db));
|
DBUG_PRINT("info", ("Dumping routines for database %s", db));
|
||||||
dump_routines_for_db(db);
|
dump_routines_for_db(db);
|
||||||
@@ -4387,10 +4596,9 @@ static int do_show_master_status(MYSQL *mysql_con)
|
|||||||
if (row && row[0] && row[1])
|
if (row && row[0] && row[1])
|
||||||
{
|
{
|
||||||
/* SHOW MASTER STATUS reports file and position */
|
/* SHOW MASTER STATUS reports file and position */
|
||||||
if (opt_comments)
|
print_comment(md_result_file, 0,
|
||||||
fprintf(md_result_file,
|
"\n--\n-- Position to start replication or point-in-time "
|
||||||
"\n--\n-- Position to start replication or point-in-time "
|
"recovery from\n--\n\n");
|
||||||
"recovery from\n--\n\n");
|
|
||||||
fprintf(md_result_file,
|
fprintf(md_result_file,
|
||||||
"%sCHANGE MASTER TO MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;\n",
|
"%sCHANGE MASTER TO MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;\n",
|
||||||
comment_prefix, row[0], row[1]);
|
comment_prefix, row[0], row[1]);
|
||||||
@@ -4600,6 +4808,7 @@ static int purge_bin_logs_to(MYSQL *mysql_con, char* log_name)
|
|||||||
|
|
||||||
static int start_transaction(MYSQL *mysql_con)
|
static int start_transaction(MYSQL *mysql_con)
|
||||||
{
|
{
|
||||||
|
verbose_msg("-- Starting transaction...\n");
|
||||||
/*
|
/*
|
||||||
We use BEGIN for old servers. --single-transaction --master-data will fail
|
We use BEGIN for old servers. --single-transaction --master-data will fail
|
||||||
on old servers, but that's ok as it was already silently broken (it didn't
|
on old servers, but that's ok as it was already silently broken (it didn't
|
||||||
@@ -4977,12 +5186,10 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
write_header(sql_file, db);
|
write_header(sql_file, db);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!opt_xml && opt_comments)
|
print_comment(sql_file, 0,
|
||||||
{
|
"\n--\n-- Final view structure for view %s\n--\n\n",
|
||||||
fprintf(sql_file, "\n--\n-- Final view structure for view %s\n--\n\n",
|
result_table);
|
||||||
result_table);
|
|
||||||
check_io(sql_file);
|
|
||||||
}
|
|
||||||
/* Table might not exist if this view was dumped with --tab. */
|
/* Table might not exist if this view was dumped with --tab. */
|
||||||
fprintf(sql_file, "/*!50001 DROP TABLE IF EXISTS %s*/;\n", opt_quoted_table);
|
fprintf(sql_file, "/*!50001 DROP TABLE IF EXISTS %s*/;\n", opt_quoted_table);
|
||||||
if (opt_drop)
|
if (opt_drop)
|
||||||
@@ -5179,6 +5386,12 @@ int main(int argc, char **argv)
|
|||||||
exit(exit_code);
|
exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Disable comments in xml mode if 'comments' option is not explicitly used.
|
||||||
|
*/
|
||||||
|
if (opt_xml && !opt_comments_used)
|
||||||
|
opt_comments= 0;
|
||||||
|
|
||||||
if (log_error_file)
|
if (log_error_file)
|
||||||
{
|
{
|
||||||
if(!(stderror_file= freopen(log_error_file, "a+", stderr)))
|
if(!(stderror_file= freopen(log_error_file, "a+", stderr)))
|
||||||
@@ -5199,24 +5412,39 @@ int main(int argc, char **argv)
|
|||||||
if (opt_slave_data && do_stop_slave_sql(mysql))
|
if (opt_slave_data && do_stop_slave_sql(mysql))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if ((opt_lock_all_tables || opt_master_data) &&
|
if ((opt_lock_all_tables || opt_master_data ||
|
||||||
|
(opt_single_transaction && flush_logs)) &&
|
||||||
do_flush_tables_read_lock(mysql))
|
do_flush_tables_read_lock(mysql))
|
||||||
goto err;
|
goto err;
|
||||||
if (opt_single_transaction && start_transaction(mysql))
|
|
||||||
goto err;
|
/*
|
||||||
if (opt_delete_master_logs)
|
Flush logs before starting transaction since
|
||||||
|
this causes implicit commit starting mysql-5.5.
|
||||||
|
*/
|
||||||
|
if (opt_lock_all_tables || opt_master_data ||
|
||||||
|
(opt_single_transaction && flush_logs) ||
|
||||||
|
opt_delete_master_logs)
|
||||||
{
|
{
|
||||||
if (mysql_refresh(mysql, REFRESH_LOG) ||
|
if (flush_logs || opt_delete_master_logs)
|
||||||
get_bin_log_name(mysql, bin_log_name, sizeof(bin_log_name)))
|
{
|
||||||
goto err;
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
|
goto err;
|
||||||
|
verbose_msg("-- main : logs flushed successfully!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Not anymore! That would not be sensible. */
|
||||||
flush_logs= 0;
|
flush_logs= 0;
|
||||||
}
|
}
|
||||||
if (opt_lock_all_tables || opt_master_data)
|
|
||||||
|
if (opt_delete_master_logs)
|
||||||
{
|
{
|
||||||
if (flush_logs && mysql_refresh(mysql, REFRESH_LOG))
|
if (get_bin_log_name(mysql, bin_log_name, sizeof(bin_log_name)))
|
||||||
goto err;
|
goto err;
|
||||||
flush_logs= 0; /* not anymore; that would not be sensible */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt_single_transaction && start_transaction(mysql))
|
||||||
|
goto err;
|
||||||
|
|
||||||
/* Add 'STOP SLAVE to beginning of dump */
|
/* Add 'STOP SLAVE to beginning of dump */
|
||||||
if (opt_slave_apply && add_stop_slave())
|
if (opt_slave_apply && add_stop_slave())
|
||||||
goto err;
|
goto err;
|
||||||
|
@@ -45,11 +45,11 @@
|
|||||||
* seems to actually advertise this properly, despite Unicode 3.1 having
|
* seems to actually advertise this properly, despite Unicode 3.1 having
|
||||||
* been around since 2001... */
|
* been around since 2001... */
|
||||||
|
|
||||||
/* XXXMYSQL : Added FreeBSD to bypass this check.
|
/* XXXMYSQL : Added FreeBSD & AIX to bypass this check.
|
||||||
TODO : Verify if FreeBSD stores ISO 10646 in wchar_t. */
|
TODO : Verify if FreeBSD & AIX stores ISO 10646 in wchar_t. */
|
||||||
#if !defined(__NetBSD__) && !defined(__sun) \
|
#if !defined(__NetBSD__) && !defined(__sun) \
|
||||||
&& !(defined(__APPLE__) && defined(__MACH__)) \
|
&& !(defined(__APPLE__) && defined(__MACH__)) \
|
||||||
&& !defined(__FreeBSD__)
|
&& !defined(__FreeBSD__) && !defined(_AIX)
|
||||||
#ifndef __STDC_ISO_10646__
|
#ifndef __STDC_ISO_10646__
|
||||||
/* In many places it is assumed that the first 127 code points are ASCII
|
/* In many places it is assumed that the first 127 code points are ASCII
|
||||||
* compatible, so ensure wchar_t indeed does ISO 10646 and not some other
|
* compatible, so ensure wchar_t indeed does ISO 10646 and not some other
|
||||||
|
@@ -200,7 +200,7 @@ el_set(EditLine *el, int op, ...)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
// XXX: The two strdup's leak
|
/* XXX: The two strdups leak. */
|
||||||
ret = map_addfunc(el, Strdup(wargv[0]), Strdup(wargv[1]),
|
ret = map_addfunc(el, Strdup(wargv[0]), Strdup(wargv[1]),
|
||||||
func);
|
func);
|
||||||
ct_free_argv(wargv);
|
ct_free_argv(wargv);
|
||||||
|
@@ -1978,7 +1978,7 @@ rl_callback_read_char()
|
|||||||
} else
|
} else
|
||||||
wbuf = NULL;
|
wbuf = NULL;
|
||||||
(*(void (*)(const char *))rl_linefunc)(wbuf);
|
(*(void (*)(const char *))rl_linefunc)(wbuf);
|
||||||
//el_set(e, EL_UNBUFFERED, 1);
|
/*el_set(e, EL_UNBUFFERED, 1);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -66,6 +66,8 @@ typedef struct unicase_info_st
|
|||||||
|
|
||||||
extern MY_UNICASE_INFO *my_unicase_default[256];
|
extern MY_UNICASE_INFO *my_unicase_default[256];
|
||||||
extern MY_UNICASE_INFO *my_unicase_turkish[256];
|
extern MY_UNICASE_INFO *my_unicase_turkish[256];
|
||||||
|
extern MY_UNICASE_INFO *my_unicase_mysql500[256];
|
||||||
|
|
||||||
|
|
||||||
typedef struct uni_ctype_st
|
typedef struct uni_ctype_st
|
||||||
{
|
{
|
||||||
@@ -337,6 +339,7 @@ extern CHARSET_INFO my_charset_tis620_bin;
|
|||||||
extern CHARSET_INFO my_charset_ucs2_general_ci;
|
extern CHARSET_INFO my_charset_ucs2_general_ci;
|
||||||
extern CHARSET_INFO my_charset_ucs2_bin;
|
extern CHARSET_INFO my_charset_ucs2_bin;
|
||||||
extern CHARSET_INFO my_charset_ucs2_unicode_ci;
|
extern CHARSET_INFO my_charset_ucs2_unicode_ci;
|
||||||
|
extern CHARSET_INFO my_charset_ucs2_general_mysql500_ci;
|
||||||
extern CHARSET_INFO my_charset_ujis_japanese_ci;
|
extern CHARSET_INFO my_charset_ujis_japanese_ci;
|
||||||
extern CHARSET_INFO my_charset_ujis_bin;
|
extern CHARSET_INFO my_charset_ujis_bin;
|
||||||
extern CHARSET_INFO my_charset_utf16_bin;
|
extern CHARSET_INFO my_charset_utf16_bin;
|
||||||
@@ -349,6 +352,7 @@ extern CHARSET_INFO my_charset_utf32_unicode_ci;
|
|||||||
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_utf8_general_ci;
|
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_utf8_general_ci;
|
||||||
extern CHARSET_INFO my_charset_utf8_unicode_ci;
|
extern CHARSET_INFO my_charset_utf8_unicode_ci;
|
||||||
extern CHARSET_INFO my_charset_utf8_bin;
|
extern CHARSET_INFO my_charset_utf8_bin;
|
||||||
|
extern CHARSET_INFO my_charset_utf8_general_mysql500_ci;
|
||||||
extern CHARSET_INFO my_charset_utf8mb4_bin;
|
extern CHARSET_INFO my_charset_utf8mb4_bin;
|
||||||
extern CHARSET_INFO my_charset_utf8mb4_general_ci;
|
extern CHARSET_INFO my_charset_utf8mb4_general_ci;
|
||||||
extern CHARSET_INFO my_charset_utf8mb4_unicode_ci;
|
extern CHARSET_INFO my_charset_utf8mb4_unicode_ci;
|
||||||
|
@@ -1364,11 +1364,31 @@ do { doubleget_union _tmp; \
|
|||||||
|
|
||||||
#ifndef HAVE_DLERROR
|
#ifndef HAVE_DLERROR
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
#define DLERROR_GENERATE(errmsg, error_number) \
|
||||||
|
char win_errormsg[2048]; \
|
||||||
|
if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, \
|
||||||
|
0, error_number, 0, win_errormsg, 2048, NULL)) \
|
||||||
|
{ \
|
||||||
|
char *ptr; \
|
||||||
|
for (ptr= &win_errormsg[0] + strlen(win_errormsg) - 1; \
|
||||||
|
ptr >= &win_errormsg[0] && strchr("\r\n\t\0x20", *ptr); \
|
||||||
|
ptr--) \
|
||||||
|
*ptr= 0; \
|
||||||
|
errmsg= win_errormsg; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
errmsg= ""
|
||||||
#define dlerror() ""
|
#define dlerror() ""
|
||||||
#else
|
#define dlopen_errno GetLastError()
|
||||||
|
#else /* _WIN32 */
|
||||||
#define dlerror() "No support for dynamic loading (static build?)"
|
#define dlerror() "No support for dynamic loading (static build?)"
|
||||||
#endif
|
#define DLERROR_GENERATE(errmsg, error_number) errmsg= dlerror()
|
||||||
#endif
|
#define dlopen_errno errno
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
#else /* HAVE_DLERROR */
|
||||||
|
#define DLERROR_GENERATE(errmsg, error_number) errmsg= dlerror()
|
||||||
|
#define dlopen_errno errno
|
||||||
|
#endif /* HAVE_DLERROR */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -25,6 +25,8 @@ INCLUDE_DIRECTORIES(
|
|||||||
ADD_DEFINITIONS(${SSL_DEFINES})
|
ADD_DEFINITIONS(${SSL_DEFINES})
|
||||||
|
|
||||||
SET(CLIENT_API_FUNCTIONS
|
SET(CLIENT_API_FUNCTIONS
|
||||||
|
get_tty_password
|
||||||
|
handle_options
|
||||||
load_defaults
|
load_defaults
|
||||||
mysql_thread_end
|
mysql_thread_end
|
||||||
mysql_thread_init
|
mysql_thread_init
|
||||||
|
@@ -24,6 +24,4 @@ sys_vars.wait_timeout_func # Bug#11750645 2010-04-26 alik wai
|
|||||||
sys_vars.ndb_log_update_as_write_basic
|
sys_vars.ndb_log_update_as_write_basic
|
||||||
sys_vars.have_ndbcluster_basic
|
sys_vars.have_ndbcluster_basic
|
||||||
sys_vars.ndb_log_updated_only_basic
|
sys_vars.ndb_log_updated_only_basic
|
||||||
sys_vars.query_cache_size_basic_64 # Bug#11748572 - 36747: ALLOCATING A LARGE QUERY CACHE IS NOT DETERMINISTIC
|
|
||||||
sys_vars.query_cache_size_basic_32 # Bug#11748572 - 36747: ALLOCATING A LARGE QUERY CACHE IS NOT DETERMINISTIC
|
|
||||||
sys_vars.rpl_init_slave_func # Bug#12535301 2011-05-09 andrei sys_vars.rpl_init_slave_func mismatches in daily-5.5
|
sys_vars.rpl_init_slave_func # Bug#12535301 2011-05-09 andrei sys_vars.rpl_init_slave_func mismatches in daily-5.5
|
||||||
|
@@ -59,6 +59,8 @@
|
|||||||
#VARCHAR(M)
|
#VARCHAR(M)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
--let $_saved_conn= $CURRENT_CONNECTION
|
||||||
|
|
||||||
let $binformat = `SHOW VARIABLES LIKE '%binlog_format%'`;
|
let $binformat = `SHOW VARIABLES LIKE '%binlog_format%'`;
|
||||||
--echo
|
--echo
|
||||||
--echo ***********************************************************
|
--echo ***********************************************************
|
||||||
@@ -1017,3 +1019,5 @@ SELECT c1,hex(c4),c5 FROM t5 ORDER BY c1;
|
|||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t5;
|
DROP TABLE t5;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--connection $_saved_conn
|
||||||
|
@@ -177,3 +177,36 @@ UNLOCK TABLES;
|
|||||||
--connection master
|
--connection master
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# bug#3593869-64035 uninitialized event_coordinates instance crashes server
|
||||||
|
# Testing how out of valid range position value is handled with an error.
|
||||||
|
#
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
RESET MASTER;
|
||||||
|
let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||||
|
let $master_pos= `SELECT $master_pos + 1`;
|
||||||
|
|
||||||
|
--connection slave
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
--replace_regex /[0-9]+/MASTER_POS/
|
||||||
|
eval CHANGE MASTER TO master_log_pos=$master_pos;
|
||||||
|
|
||||||
|
START SLAVE;
|
||||||
|
# ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
|
||||||
|
--let $slave_param=Last_IO_Errno
|
||||||
|
--let $slave_param_value=1236
|
||||||
|
--source include/wait_for_slave_param.inc
|
||||||
|
|
||||||
|
--let $slave_field_result_replace= / at [0-9]*/ at XXX/
|
||||||
|
--let $status_items= Last_IO_Errno, Last_IO_Error
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
RESET SLAVE;
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
|
# Slave is stopped by bug#3593869-64035 tests.
|
||||||
|
@@ -15,7 +15,7 @@ if (!$EXAMPLE_PLUGIN) {
|
|||||||
#
|
#
|
||||||
# Check if --plugin-dir was setup for exampledb
|
# Check if --plugin-dir was setup for exampledb
|
||||||
#
|
#
|
||||||
if (`SELECT CONCAT('--plugin-dir=', @@plugin_dir) != '$EXAMPLE_PLUGIN_OPT'`) {
|
if (`SELECT CONCAT('--plugin-dir=', REPLACE(@@plugin_dir, '\\\\', '/')) != '$EXAMPLE_PLUGIN_OPT/'`) {
|
||||||
--skip Example plugin requires that --plugin-dir is set to the example plugin dir (either the .opt file does not contain \$EXAMPLE_PLUGIN_OPT or another plugin is in use)
|
--skip Example plugin requires that --plugin-dir is set to the example plugin dir (either the .opt file does not contain \$EXAMPLE_PLUGIN_OPT or another plugin is in use)
|
||||||
}
|
}
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@@ -16,6 +16,6 @@ if (!$SEMISYNC_MASTER_PLUGIN)
|
|||||||
#
|
#
|
||||||
# Check if --plugin-dir was setup for semisync
|
# Check if --plugin-dir was setup for semisync
|
||||||
#
|
#
|
||||||
if (`SELECT CONCAT('--plugin-dir=', @@plugin_dir) != '$SEMISYNC_PLUGIN_OPT'`) {
|
if (`SELECT CONCAT('--plugin-dir=', REPLACE(@@plugin_dir, '\\\\', '/')) != '$SEMISYNC_PLUGIN_OPT/'`) {
|
||||||
--skip SEMISYNC plugin requires that --plugin-dir is set to the semisync plugin dir (either the .opt file does not contain \$SEMISYNC_PLUGIN_OPT or another plugin is in use)
|
--skip SEMISYNC plugin requires that --plugin-dir is set to the semisync plugin dir (either the .opt file does not contain \$SEMISYNC_PLUGIN_OPT or another plugin is in use)
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,6 @@ if (!$SIMPLE_PARSER) {
|
|||||||
#
|
#
|
||||||
# Check if --plugin-dir was setup for simple parser
|
# Check if --plugin-dir was setup for simple parser
|
||||||
#
|
#
|
||||||
if (`SELECT CONCAT('--plugin-dir=', @@plugin_dir) != '$SIMPLE_PARSER_OPT'`) {
|
if (`SELECT CONCAT('--plugin-dir=', REPLACE(@@plugin_dir, '\\\\', '/')) != '$SIMPLE_PARSER_OPT/'`) {
|
||||||
--skip simple parser requires that --plugin-dir is set to the udf plugin dir (either the .opt file does not contain \$UDF_EXAMPLE_LIB_OPT or another plugin is in use)
|
--skip simple parser requires that --plugin-dir is set to the udf plugin dir (either the .opt file does not contain \$UDF_EXAMPLE_LIB_OPT or another plugin is in use)
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,6 @@ if (!$UDF_EXAMPLE_LIB) {
|
|||||||
#
|
#
|
||||||
# Check if --plugin-dir was setup for udf
|
# Check if --plugin-dir was setup for udf
|
||||||
#
|
#
|
||||||
if (`SELECT CONCAT('--plugin-dir=', @@plugin_dir) != '$UDF_EXAMPLE_LIB_OPT'`) {
|
if (`SELECT CONCAT('--plugin-dir=', REPLACE(@@plugin_dir, '\\\\', '/')) != '$UDF_EXAMPLE_LIB_OPT/'`) {
|
||||||
--skip UDF requires that --plugin-dir is set to the udf plugin dir (either the .opt file does not contain \$UDF_EXAMPLE_LIB_OPT or another plugin is in use)
|
--skip UDF requires that --plugin-dir is set to the udf plugin dir (either the .opt file does not contain \$UDF_EXAMPLE_LIB_OPT or another plugin is in use)
|
||||||
}
|
}
|
||||||
|
@@ -55,6 +55,18 @@
|
|||||||
# comma-separated list. Example:
|
# comma-separated list. Example:
|
||||||
#
|
#
|
||||||
# --let $status_items= Master_Log_File, Relay_Master_Log_File
|
# --let $status_items= Master_Log_File, Relay_Master_Log_File
|
||||||
|
#
|
||||||
|
# $slave_field_result_replace
|
||||||
|
# If set, one or more regex patterns for replacing variable
|
||||||
|
# text in the error message. Syntax as --replace-regex
|
||||||
|
#
|
||||||
|
# $slave_sql_mode
|
||||||
|
# If set, change the slave sql mode during this macro, reverting
|
||||||
|
# to the previous on exit. Default sql_mode is NO_BACKSLASH_ESCAPES
|
||||||
|
# to allow replace '\' by '/' making paths OS independent. Example:
|
||||||
|
#
|
||||||
|
# --let $slave_sql_mode= NO_BACKSLASH_ESCAPES
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
--let $_show_slave_status_items=$status_items
|
--let $_show_slave_status_items=$status_items
|
||||||
@@ -64,12 +76,30 @@ if (!$status_items)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--let $_slave_sql_mode= NO_BACKSLASH_ESCAPES
|
||||||
|
if ($slave_sql_mode)
|
||||||
|
{
|
||||||
|
--let $_slave_sql_mode= $slave_sql_mode
|
||||||
|
}
|
||||||
|
--let $_previous_slave_sql_mode = `SELECT @@sql_mode`
|
||||||
|
--disable_query_log
|
||||||
|
eval SET sql_mode= '$_slave_sql_mode';
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
|
||||||
while ($_show_slave_status_items)
|
while ($_show_slave_status_items)
|
||||||
{
|
{
|
||||||
--let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
|
--let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
|
||||||
--let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`
|
--let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`
|
||||||
|
|
||||||
--let $_show_slave_status_value= query_get_value(SHOW SLAVE STATUS, $_show_slave_status_name, 1)
|
--let $_show_slave_status_value= query_get_value(SHOW SLAVE STATUS, $_show_slave_status_name, 1)
|
||||||
|
--let $_slave_field_result_replace= /[\\]/\// $slave_field_result_replace
|
||||||
|
--replace_regex $_slave_field_result_replace
|
||||||
--let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
|
--let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
|
||||||
--echo $_show_slave_status_name = '$_show_slave_status_value'
|
--echo $_show_slave_status_name = '$_show_slave_status_value'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
eval SET sql_mode= '$_previous_slave_sql_mode';
|
||||||
|
--enable_query_log
|
||||||
|
@@ -1,13 +1,11 @@
|
|||||||
# ==== Purpose ====
|
# ==== Purpose ====
|
||||||
#
|
#
|
||||||
# Several test primitives from mysql-test/extra/rpl_tests
|
# Several test primitives from mysql-test/extra/rpl_tests
|
||||||
# shared for test cases for MyISAM, InnoDB, NDB and other
|
# are shared for test cases for MyISAM, InnoDB, NDB and
|
||||||
# engines. But for NDB all events will be added by NDB
|
# other engines.
|
||||||
# injector and now there are no way to detect the state of
|
# For NDB engine all events will be added by NDB injector
|
||||||
# NDB injector therefore this primitive waits 5 sec
|
# so tests only can continue after injector is ready,
|
||||||
# if engine type is NDB.
|
# this test waits for proper injector thread state.
|
||||||
# In future that should be fixed by waiting of proper
|
|
||||||
# state of NDB injector.
|
|
||||||
#
|
#
|
||||||
# ==== Usage ====
|
# ==== Usage ====
|
||||||
#
|
#
|
||||||
@@ -17,25 +15,12 @@
|
|||||||
# ==== Parameters =====
|
# ==== Parameters =====
|
||||||
#
|
#
|
||||||
# $engine_type
|
# $engine_type
|
||||||
# Type of engine. If type is NDB then it waits $wait_time sec
|
# Type of engine. If type is NDB then it waits for injector
|
||||||
#
|
# thread proper state.
|
||||||
# $wait_time
|
|
||||||
# Test will wait $wait_time seconds
|
|
||||||
|
|
||||||
let $_wait_time= 5;
|
|
||||||
|
|
||||||
if (!$wait_time) {
|
|
||||||
let $_wait_time= $wait_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (`SELECT UPPER(LEFT('$engine_type',3)) = 'NDB'`) {
|
if (`SELECT UPPER(LEFT('$engine_type',3)) = 'NDB'`) {
|
||||||
while (!$_wait_time) {
|
let $show_statement= SHOW PROCESSLIST;
|
||||||
let $_wait_time_internal= 10;
|
let $field= State;
|
||||||
while (!$_wait_time_internal) {
|
let $condition= = 'Waiting for event from ndbcluster';
|
||||||
sleep 0.1;
|
source include/wait_show_condition.inc;
|
||||||
dec $_wait_time_internal;
|
|
||||||
}
|
|
||||||
dec $_wait_time;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,6 +33,10 @@
|
|||||||
# (e.g., temporary connection error) and does not cause the slave
|
# (e.g., temporary connection error) and does not cause the slave
|
||||||
# IO thread to stop.
|
# IO thread to stop.
|
||||||
#
|
#
|
||||||
|
# $slave_io_error_replace
|
||||||
|
# If set, one or more regex patterns for replacing variable
|
||||||
|
# text in the error message. Syntax as --replace-regex
|
||||||
|
#
|
||||||
# $slave_timeout
|
# $slave_timeout
|
||||||
# See include/wait_for_slave_param.inc
|
# See include/wait_for_slave_param.inc
|
||||||
#
|
#
|
||||||
@@ -72,6 +76,7 @@ if ($show_slave_io_error)
|
|||||||
{
|
{
|
||||||
--let $_wait_for_slave_io_error_old_status_items= $status_items
|
--let $_wait_for_slave_io_error_old_status_items= $status_items
|
||||||
--let $status_items= Last_IO_Error
|
--let $status_items= Last_IO_Error
|
||||||
|
--let $slave_field_result_replace= $slave_io_error_replace
|
||||||
--source include/show_slave_status.inc
|
--source include/show_slave_status.inc
|
||||||
--let $status_items= $_wait_for_slave_io_error_old_status_items
|
--let $status_items= $_wait_for_slave_io_error_old_status_items
|
||||||
}
|
}
|
||||||
|
@@ -438,3 +438,67 @@ Level Code Message
|
|||||||
Note 1003 select 1 AS `1` from `test`.`t1` where ((`test`.`t1`.`a` = 0) and ('0' = `test`.`t1`.`b`))
|
Note 1003 select 1 AS `1` from `test`.`t1` where ((`test`.`t1`.`a` = 0) and ('0' = `test`.`t1`.`b`))
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug#13463415 63502: INCORRECT RESULTS OF BIGINT AND DECIMAL COMPARISON
|
||||||
|
#
|
||||||
|
CREATE TABLE t_bigint(id BIGINT);
|
||||||
|
INSERT INTO t_bigint VALUES (1), (2);
|
||||||
|
SELECT id, id >= 1.1 FROM t_bigint;
|
||||||
|
id id >= 1.1
|
||||||
|
1 0
|
||||||
|
2 1
|
||||||
|
SELECT id, 1.1 <= id FROM t_bigint;
|
||||||
|
id 1.1 <= id
|
||||||
|
1 0
|
||||||
|
2 1
|
||||||
|
SELECT id, id = 1.1 FROM t_bigint;
|
||||||
|
id id = 1.1
|
||||||
|
1 0
|
||||||
|
2 0
|
||||||
|
SELECT id, 1.1 = id FROM t_bigint;
|
||||||
|
id 1.1 = id
|
||||||
|
1 0
|
||||||
|
2 0
|
||||||
|
SELECT * from t_bigint WHERE id = 1.1;
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id = 1.1e0;
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id = '1.1';
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id = '1.1e0';
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id IN (1.1, 2.2);
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id IN (1.1e0, 2.2e0);
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id IN ('1.1', '2.2');
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id IN ('1.1e0', '2.2e0');
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN 1.1 AND 1.9;
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN 1.1e0 AND 1.9e0;
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN '1.1' AND '1.9';
|
||||||
|
id
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN '1.1e0' AND '1.9e0';
|
||||||
|
id
|
||||||
|
DROP TABLE t_bigint;
|
||||||
|
#
|
||||||
|
# Bug#11758543 50756: BIGINT '100' MATCHES 1.001E2
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a BIGINT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a) BETWEEN 0 and 0.9;
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a)=0.9;
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a) in (0.8,0.9);
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN 0 AND 0.9;
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE a=0.9;
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE a IN (0.8,0.9);
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1928,6 +1928,30 @@ D120
|
|||||||
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
||||||
HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20))
|
HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20))
|
||||||
D120D18E
|
D120D18E
|
||||||
|
#
|
||||||
|
# Bug#11752408 - 43593: DUMP/BACKUP/RESTORE/UPGRADE TOOLS FAILS BECAUSE OF UTF8_GENERAL_CI
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci);
|
||||||
|
INSERT INTO t1 VALUES ('a'),('r'),('s'),(_latin1 0xDF),(_latin1 0xF7),('t'),('z');
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
a
|
||||||
|
a
|
||||||
|
r
|
||||||
|
s
|
||||||
|
t
|
||||||
|
z
|
||||||
|
ß
|
||||||
|
÷
|
||||||
|
SELECT a, COUNT(*) FROM t1 GROUP BY a;
|
||||||
|
a COUNT(*)
|
||||||
|
a 1
|
||||||
|
r 1
|
||||||
|
s 1
|
||||||
|
t 1
|
||||||
|
z 1
|
||||||
|
ß 1
|
||||||
|
÷ 1
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
Start of 5.4 tests
|
Start of 5.4 tests
|
||||||
SET NAMES utf8mb3;
|
SET NAMES utf8mb3;
|
||||||
|
@@ -469,6 +469,8 @@ SELECT HEX(a) FROM t2 WHERE a IN
|
|||||||
HEX(a)
|
HEX(a)
|
||||||
7FFFFFFFFFFFFFFE
|
7FFFFFFFFFFFFFFE
|
||||||
7FFFFFFFFFFFFFFF
|
7FFFFFFFFFFFFFFF
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'abc'
|
||||||
CREATE TABLE t3 (a BIGINT UNSIGNED);
|
CREATE TABLE t3 (a BIGINT UNSIGNED);
|
||||||
INSERT INTO t3 VALUES (9223372036854775551);
|
INSERT INTO t3 VALUES (9223372036854775551);
|
||||||
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42);
|
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42);
|
||||||
|
@@ -2826,5 +2826,41 @@ SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc));
|
|||||||
((0xf3) * (rpad(1.0,2048,1)) << (0xcc))
|
((0xf3) * (rpad(1.0,2048,1)) << (0xcc))
|
||||||
0
|
0
|
||||||
#
|
#
|
||||||
|
# Bug#13359121 LARGE NUMBERS, /STRINGS/DTOA.C:662:
|
||||||
|
# BALLOC: ASSERTION `K <= 15' FAILED.
|
||||||
|
# Bug#12985021 SIMPLE QUERY WITH DECIMAL NUMBERS TAKE AN
|
||||||
|
# EXTRAORDINARY LONG TIME TO EXECUTE
|
||||||
|
SELECT @tmp_max:= @@global.max_allowed_packet;
|
||||||
|
@tmp_max:= @@global.max_allowed_packet
|
||||||
|
1048576
|
||||||
|
SET @@global.max_allowed_packet=1024*1024*1024;
|
||||||
|
SELECT @@global.max_allowed_packet;
|
||||||
|
@@global.max_allowed_packet
|
||||||
|
1073741824
|
||||||
|
do
|
||||||
|
format(rpad('111111111.1',
|
||||||
|
1111111,
|
||||||
|
'999999999999999999999999999999999999999999'),0,'be_BY')
|
||||||
|
;
|
||||||
|
DO
|
||||||
|
round(
|
||||||
|
concat( (
|
||||||
|
coalesce( (
|
||||||
|
linefromwkb('2147483648',
|
||||||
|
-b'1111111111111111111111111111111111111111111')),
|
||||||
|
( convert('[.DC2.]',decimal(30,30)) ),
|
||||||
|
bit_count('')
|
||||||
|
) ),
|
||||||
|
( lpad( ( elt('01','}:K5')),
|
||||||
|
sha1('P'),
|
||||||
|
( ( select '-9223372036854775808.1' > all (select '')))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DECIMAL value: '[.DC2.]'
|
||||||
|
SET @@global.max_allowed_packet:= @tmp_max;
|
||||||
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@@ -1402,8 +1402,220 @@ NULL
|
|||||||
# Bug#12584302 AFTER FIX FOR #12403504: ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0,
|
# Bug#12584302 AFTER FIX FOR #12403504: ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0,
|
||||||
#
|
#
|
||||||
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
||||||
|
#
|
||||||
|
# BUG#13458237 INCONSISTENT HANDLING OF INVALIDE DATES WITH ZERO DAY
|
||||||
|
# SIMILAR TO '2009-10-00'
|
||||||
|
#
|
||||||
|
SELECT
|
||||||
|
DATE('20091000'),
|
||||||
|
STR_TO_DATE('200910','%Y%m'),
|
||||||
|
LAST_DAY('2009-10-00'),
|
||||||
|
LAST_DAY(DATE('2009-10-00')),
|
||||||
|
LAST_DAY(DATE'2009-10-00'),
|
||||||
|
LAST_DAY(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEK('2009-10-00'),
|
||||||
|
WEEK(DATE('2009-10-00')),
|
||||||
|
WEEK(DATE'2009-10-00'),
|
||||||
|
WEEK(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEKOFYEAR('2009-10-00'),
|
||||||
|
WEEKOFYEAR(DATE('2009-10-00')),
|
||||||
|
WEEKOFYEAR(DATE'2009-10-00'),
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
DAYOFYEAR('2009-10-00'),
|
||||||
|
DAYOFYEAR(DATE('2009-10-00')),
|
||||||
|
DAYOFYEAR(DATE'2009-10-00'),
|
||||||
|
DAYOFYEAR(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEKDAY('2009-10-00'),
|
||||||
|
WEEKDAY(DATE('2009-10-00')),
|
||||||
|
WEEKDAY(DATE'2009-10-00'),
|
||||||
|
WEEKDAY(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
TO_DAYs('2009-10-00'),
|
||||||
|
TO_DAYs(DATE('2009-10-00')),
|
||||||
|
TO_DAYs(DATE'2009-10-00'),
|
||||||
|
TO_DAYs(STR_TO_DATE('200910','%Y%m'));
|
||||||
|
DATE('20091000') 2009-10-00
|
||||||
|
STR_TO_DATE('200910','%Y%m') 2009-10-00
|
||||||
|
LAST_DAY('2009-10-00') NULL
|
||||||
|
LAST_DAY(DATE('2009-10-00')) 2009-10-31
|
||||||
|
LAST_DAY(DATE'2009-10-00') NULL
|
||||||
|
LAST_DAY(STR_TO_DATE('200910','%Y%m')) 2009-10-31
|
||||||
|
WEEK('2009-10-00') NULL
|
||||||
|
WEEK(DATE('2009-10-00')) 39
|
||||||
|
WEEK(DATE'2009-10-00') NULL
|
||||||
|
WEEK(STR_TO_DATE('200910','%Y%m')) NULL
|
||||||
|
WEEKOFYEAR('2009-10-00') NULL
|
||||||
|
WEEKOFYEAR(DATE('2009-10-00')) 40
|
||||||
|
WEEKOFYEAR(DATE'2009-10-00') NULL
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('200910','%Y%m')) NULL
|
||||||
|
DAYOFYEAR('2009-10-00') NULL
|
||||||
|
DAYOFYEAR(DATE('2009-10-00')) 273
|
||||||
|
DAYOFYEAR(DATE'2009-10-00') NULL
|
||||||
|
DAYOFYEAR(STR_TO_DATE('200910','%Y%m')) NULL
|
||||||
|
WEEKDAY('2009-10-00') NULL
|
||||||
|
WEEKDAY(DATE('2009-10-00')) 2
|
||||||
|
WEEKDAY(DATE'2009-10-00') NULL
|
||||||
|
WEEKDAY(STR_TO_DATE('200910','%Y%m')) NULL
|
||||||
|
TO_DAYs('2009-10-00') NULL
|
||||||
|
TO_DAYs(DATE('2009-10-00')) 734045
|
||||||
|
TO_DAYs(DATE'2009-10-00') NULL
|
||||||
|
TO_DAYs(STR_TO_DATE('200910','%Y%m')) NULL
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Incorrect datetime value: '0'
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '200910' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '200910' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '200910' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '200910' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '2009-10-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '200910' for function str_to_date
|
||||||
|
SELECT
|
||||||
|
DATE('00000100'),
|
||||||
|
STR_TO_DATE('000001','%Y%m'),
|
||||||
|
LAST_DAY('0000-01-00'),
|
||||||
|
LAST_DAY(DATE('0000-01-00')),
|
||||||
|
LAST_DAY(DATE'0000-01-00'),
|
||||||
|
LAST_DAY(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEK('0000-01-00'),
|
||||||
|
WEEK(DATE('0000-01-00')),
|
||||||
|
WEEK(DATE'0000-01-00'),
|
||||||
|
WEEK(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEKOFYEAR('0000-01-00'),
|
||||||
|
WEEKOFYEAR(DATE('0000-01-00')),
|
||||||
|
WEEKOFYEAR(DATE'0000-01-00'),
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
DAYOFYEAR('0000-01-00'),
|
||||||
|
DAYOFYEAR(DATE('0000-01-00')),
|
||||||
|
DAYOFYEAR(DATE'0000-01-00'),
|
||||||
|
DAYOFYEAR(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEKDAY('0000-01-00'),
|
||||||
|
WEEKDAY(DATE('0000-01-00')),
|
||||||
|
WEEKDAY(DATE'0000-01-00'),
|
||||||
|
WEEKDAY(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
TO_DAYs('0000-01-00'),
|
||||||
|
TO_DAYs(DATE('0000-01-00')),
|
||||||
|
TO_DAYs(DATE'0000-01-00'),
|
||||||
|
TO_DAYs(STR_TO_DATE('000001','%Y%m'));
|
||||||
|
DATE('00000100') 0000-01-00
|
||||||
|
STR_TO_DATE('000001','%Y%m') 0000-01-00
|
||||||
|
LAST_DAY('0000-01-00') NULL
|
||||||
|
LAST_DAY(DATE('0000-01-00')) 0000-01-31
|
||||||
|
LAST_DAY(DATE'0000-01-00') NULL
|
||||||
|
LAST_DAY(STR_TO_DATE('000001','%Y%m')) 0000-01-31
|
||||||
|
WEEK('0000-01-00') NULL
|
||||||
|
WEEK(DATE('0000-01-00')) 52
|
||||||
|
WEEK(DATE'0000-01-00') NULL
|
||||||
|
WEEK(STR_TO_DATE('000001','%Y%m')) NULL
|
||||||
|
WEEKOFYEAR('0000-01-00') NULL
|
||||||
|
WEEKOFYEAR(DATE('0000-01-00')) 52
|
||||||
|
WEEKOFYEAR(DATE'0000-01-00') NULL
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('000001','%Y%m')) NULL
|
||||||
|
DAYOFYEAR('0000-01-00') NULL
|
||||||
|
DAYOFYEAR(DATE('0000-01-00')) 0
|
||||||
|
DAYOFYEAR(DATE'0000-01-00') NULL
|
||||||
|
DAYOFYEAR(STR_TO_DATE('000001','%Y%m')) NULL
|
||||||
|
WEEKDAY('0000-01-00') NULL
|
||||||
|
WEEKDAY(DATE('0000-01-00')) 5
|
||||||
|
WEEKDAY(DATE'0000-01-00') NULL
|
||||||
|
WEEKDAY(STR_TO_DATE('000001','%Y%m')) NULL
|
||||||
|
TO_DAYs('0000-01-00') NULL
|
||||||
|
TO_DAYs(DATE('0000-01-00')) 0
|
||||||
|
TO_DAYs(DATE'0000-01-00') NULL
|
||||||
|
TO_DAYs(STR_TO_DATE('000001','%Y%m')) NULL
|
||||||
|
Warnings:
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '000001' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '000001' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '000001' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '000001' for function str_to_date
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1292
|
||||||
|
Message Incorrect datetime value: '0000-01-00'
|
||||||
|
Level Warning
|
||||||
|
Code 1411
|
||||||
|
Message Incorrect datetime value: '000001' for function str_to_date
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Bug#57039: constant subtime expression returns incorrect result.
|
# Bug#57039: constant subtime expression returns incorrect result.
|
||||||
@@ -1433,6 +1645,21 @@ NULL 1 NULL
|
|||||||
SET storage_engine=NULL;
|
SET storage_engine=NULL;
|
||||||
ERROR 42000: Variable 'storage_engine' can't be set to the value of 'NULL'
|
ERROR 42000: Variable 'storage_engine' can't be set to the value of 'NULL'
|
||||||
#
|
#
|
||||||
|
# BUG#13354387 - CRASH IN IN MY_DECIMAL::OPERATOR FOR VIEW AND FUNCTION UNIX_TIMESTAMP
|
||||||
|
# Part1 (5.5)
|
||||||
|
SET time_zone='+03:00';
|
||||||
|
CREATE TABLE t1 (a DATETIME NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('2009-09-20 07:32:39.06');
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00 00:00:00.00');
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
SELECT CAST(UNIX_TIMESTAMP(a) AS DECIMAL(25,3)) AS c1 FROM v1 ORDER BY 1;
|
||||||
|
c1
|
||||||
|
0.000
|
||||||
|
1253421159.000
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET time_zone=DEFAULT;
|
||||||
|
#
|
||||||
# Bug #59686 crash in String::copy() with time data type
|
# Bug #59686 crash in String::copy() with time data type
|
||||||
#
|
#
|
||||||
SELECT min(timestampadd(month, 1>'', from_days('%Z')));
|
SELECT min(timestampadd(month, 1>'', from_days('%Z')));
|
||||||
|
@@ -20,6 +20,8 @@ hex(a)
|
|||||||
616263
|
616263
|
||||||
set GLOBAL init_connect="adsfsdfsdfs";
|
set GLOBAL init_connect="adsfsdfsdfs";
|
||||||
select @a;
|
select @a;
|
||||||
|
ERROR 08S01: Aborted connection to db: 'test' user: 'user_1' host: 'localhost' (init_connect command failed)
|
||||||
|
select @a;
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
drop table t1;
|
drop table t1;
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
|
@@ -383,3 +383,19 @@ Variable_name Value
|
|||||||
key_cache_block_size 1536
|
key_cache_block_size 1536
|
||||||
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
|
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#12361113: crash when load index into cache
|
||||||
|
#
|
||||||
|
# Note that this creates an empty disabled key cache!
|
||||||
|
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||||
|
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
CACHE INDEX t1 in key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
# The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||||
|
# since the default cache is used due to CACHE INDEX failed for
|
||||||
|
# key_cache_none.
|
||||||
|
LOAD INDEX INTO CACHE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -206,6 +206,7 @@ DROP TABLE `@`;
|
|||||||
CREATE TABLE `я` (a INT) engine=myisam;
|
CREATE TABLE `я` (a INT) engine=myisam;
|
||||||
SET NAMES DEFAULT;
|
SET NAMES DEFAULT;
|
||||||
mysqlcheck --default-character-set="latin1" --databases test
|
mysqlcheck --default-character-set="latin1" --databases test
|
||||||
|
call mtr.add_suppression("Can't find file: '..test.@003f.frm'");
|
||||||
test.?
|
test.?
|
||||||
Error : Table doesn't exist
|
Error : Table doesn't exist
|
||||||
status : Operation failed
|
status : Operation failed
|
||||||
|
@@ -671,6 +671,9 @@ The following options may be given as the first argument:
|
|||||||
replication.
|
replication.
|
||||||
--sql-mode=name Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
|
--sql-mode=name Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
|
||||||
for the complete list of valid sql modes
|
for the complete list of valid sql modes
|
||||||
|
--stored-program-cache=#
|
||||||
|
The soft upper limit for number of cached stored routines
|
||||||
|
for one connection.
|
||||||
-s, --symbolic-links
|
-s, --symbolic-links
|
||||||
Enable symbolic link support.
|
Enable symbolic link support.
|
||||||
--sync-binlog=# Synchronously flush binary log to disk after every #th
|
--sync-binlog=# Synchronously flush binary log to disk after every #th
|
||||||
@@ -935,6 +938,7 @@ slow-query-log FALSE
|
|||||||
sort-buffer-size 2097152
|
sort-buffer-size 2097152
|
||||||
sporadic-binlog-dump-fail FALSE
|
sporadic-binlog-dump-fail FALSE
|
||||||
sql-mode
|
sql-mode
|
||||||
|
stored-program-cache 256
|
||||||
symbolic-links FALSE
|
symbolic-links FALSE
|
||||||
sync-binlog 0
|
sync-binlog 0
|
||||||
sync-frm TRUE
|
sync-frm TRUE
|
||||||
|
@@ -679,6 +679,9 @@ The following options may be given as the first argument:
|
|||||||
--sql-mode=name Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
|
--sql-mode=name Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
|
||||||
for the complete list of valid sql modes
|
for the complete list of valid sql modes
|
||||||
--standalone Dummy option to start as a standalone program (NT).
|
--standalone Dummy option to start as a standalone program (NT).
|
||||||
|
--stored-program-cache=#
|
||||||
|
The soft upper limit for number of cached stored routines
|
||||||
|
for one connection.
|
||||||
-s, --symbolic-links
|
-s, --symbolic-links
|
||||||
Enable symbolic link support.
|
Enable symbolic link support.
|
||||||
--sync-binlog=# Synchronously flush binary log to disk after every #th
|
--sync-binlog=# Synchronously flush binary log to disk after every #th
|
||||||
@@ -946,6 +949,7 @@ slow-start-timeout 15000
|
|||||||
sort-buffer-size 2097152
|
sort-buffer-size 2097152
|
||||||
sporadic-binlog-dump-fail FALSE
|
sporadic-binlog-dump-fail FALSE
|
||||||
sql-mode
|
sql-mode
|
||||||
|
stored-program-cache 256
|
||||||
symbolic-links FALSE
|
symbolic-links FALSE
|
||||||
sync-binlog 0
|
sync-binlog 0
|
||||||
sync-frm TRUE
|
sync-frm TRUE
|
||||||
|
@@ -4628,6 +4628,445 @@ ALTER DATABASE `test-database` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
|||||||
DROP DATABASE `test-database`;
|
DROP DATABASE `test-database`;
|
||||||
USE test;
|
USE test;
|
||||||
#
|
#
|
||||||
|
# BUG#11760384 : 52792: mysqldump in XML mode does not dump routines.
|
||||||
|
#
|
||||||
|
CREATE DATABASE BUG52792;
|
||||||
|
USE BUG52792;
|
||||||
|
CREATE TABLE t1 (c1 INT, c2 VARCHAR(20));
|
||||||
|
CREATE TABLE t2 (c1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'aaa'), (2, 'bbb'), (3, 'ccc');
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
# Stored Procedures.
|
||||||
|
CREATE PROCEDURE simpleproc1 (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t1;
|
||||||
|
END//
|
||||||
|
CREATE PROCEDURE simpleproc2 (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t2;
|
||||||
|
END//
|
||||||
|
# Events.
|
||||||
|
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DO DROP DATABASE BUG52792;
|
||||||
|
CREATE EVENT e2 ON SCHEDULE EVERY 1 SECOND DO DROP DATABASE BUG52792;
|
||||||
|
# Functions.
|
||||||
|
CREATE FUNCTION `hello1` (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ' ,s ,'!');
|
||||||
|
CREATE FUNCTION `hello2` (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]>, ' , s ,'!');
|
||||||
|
# Triggers.
|
||||||
|
CREATE TRIGGER trig1 BEFORE INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
CREATE TRIGGER trig2 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1, ']]>');
|
||||||
|
INSERT INTO t2 VALUES(2, '<![CDATA]]>');
|
||||||
|
INSERT INTO t2 VALUES(3, '<![CDATA[');
|
||||||
|
INSERT INTO t2 VALUES(4, '< > & \ " _');
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
# Views
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
|
||||||
|
# Dumping BUG52792 database in xml format.
|
||||||
|
|
||||||
|
# Running 'replace_regex on timestamp'
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<database name="BUG52792">
|
||||||
|
<table_structure name="t1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t1" Engine="MyISAM" Version="10" Row_format="Dynamic" Rows="3" Avg_row_length="20" Data_length="60" Max_data_length="281474976710655" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<table_data name="t1">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
<field name="c2">aaa</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
<field name="c2">bbb</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
<field name="c2">ccc</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<table_structure name="t2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t2" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="3" Avg_row_length="7" Data_length="21" Max_data_length="1970324836974591" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<table_data name="t2">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<triggers name="t2">
|
||||||
|
<trigger Trigger="trig1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig1 BEFORE INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
<trigger Trigger="trig2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig2 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1, ']]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(2, '<![CDATA]]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(3, '<![CDATA[');
|
||||||
|
INSERT INTO t2 VALUES(4, '< > & \ " _');
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
<table_structure name="v1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v1" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<table_structure name="v2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v2" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<events>
|
||||||
|
<event Event="e1" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e1` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
<event Event="e2" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e2` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
</events>
|
||||||
|
<routines>
|
||||||
|
<routine Function="hello1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` FUNCTION `hello1`(s CHAR(20)) RETURNS char(50) CHARSET latin1
|
||||||
|
DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ' ,s ,'!')
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Function="hello2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` FUNCTION `hello2`(s CHAR(20)) RETURNS char(50) CHARSET latin1
|
||||||
|
DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]]]><![CDATA[>, ' , s ,'!')
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Procedure="simpleproc1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc1`(OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t1;
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Procedure="simpleproc2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc2`(OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t2;
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
</routines>
|
||||||
|
</database>
|
||||||
|
</mysqldump>
|
||||||
|
|
||||||
|
# Dumping BUG52792 database in xml format with comments.
|
||||||
|
|
||||||
|
# Running 'replace_regex on timestamp'
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<database name="BUG52792">
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Table structure for table `t1`
|
||||||
|
-
|
||||||
|
|
||||||
|
-->
|
||||||
|
<table_structure name="t1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t1" Engine="MyISAM" Version="10" Row_format="Dynamic" Rows="3" Avg_row_length="20" Data_length="60" Max_data_length="281474976710655" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Dumping data for table `t1`
|
||||||
|
-
|
||||||
|
-->
|
||||||
|
<table_data name="t1">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
<field name="c2">aaa</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
<field name="c2">bbb</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
<field name="c2">ccc</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Table structure for table `t2`
|
||||||
|
-
|
||||||
|
|
||||||
|
-->
|
||||||
|
<table_structure name="t2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t2" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="3" Avg_row_length="7" Data_length="21" Max_data_length="1970324836974591" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Dumping data for table `t2`
|
||||||
|
-
|
||||||
|
-->
|
||||||
|
<table_data name="t2">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<triggers name="t2">
|
||||||
|
<trigger Trigger="trig1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig1 BEFORE INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
<trigger Trigger="trig2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig2 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1, ']]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(2, '<![CDATA]]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(3, '<![CDATA[');
|
||||||
|
INSERT INTO t2 VALUES(4, '< > & \ " _');
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Table structure for table `v1`
|
||||||
|
-
|
||||||
|
|
||||||
|
-->
|
||||||
|
<table_structure name="v1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v1" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Table structure for table `v2`
|
||||||
|
-
|
||||||
|
|
||||||
|
-->
|
||||||
|
<table_structure name="v2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v2" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Dumping events for database 'BUG52792'
|
||||||
|
-
|
||||||
|
-->
|
||||||
|
<events>
|
||||||
|
<event Event="e1" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e1` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
<event Event="e2" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e2` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
</events>
|
||||||
|
<!--
|
||||||
|
-
|
||||||
|
- Dumping routines for database 'BUG52792'
|
||||||
|
-
|
||||||
|
-->
|
||||||
|
<routines>
|
||||||
|
<routine Function="hello1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` FUNCTION `hello1`(s CHAR(20)) RETURNS char(50) CHARSET latin1
|
||||||
|
DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ' ,s ,'!')
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Function="hello2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` FUNCTION `hello2`(s CHAR(20)) RETURNS char(50) CHARSET latin1
|
||||||
|
DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]]]><![CDATA[>, ' , s ,'!')
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Procedure="simpleproc1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc1`(OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t1;
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
<routine Procedure="simpleproc2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc2`(OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t2;
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
</routines>
|
||||||
|
</database>
|
||||||
|
</mysqldump>
|
||||||
|
|
||||||
|
# Test to check 'Insufficient privileges' error.
|
||||||
|
|
||||||
|
GRANT ALL PRIVILEGES ON BUG52792.* TO user1;
|
||||||
|
# Running 'replace_regex on timestamp'
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<database name="BUG52792">
|
||||||
|
<table_structure name="t1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t1" Engine="MyISAM" Version="10" Row_format="Dynamic" Rows="3" Avg_row_length="20" Data_length="60" Max_data_length="281474976710655" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<table_data name="t1">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
<field name="c2">aaa</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
<field name="c2">bbb</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
<field name="c2">ccc</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<table_structure name="t2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="t2" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="3" Avg_row_length="7" Data_length="21" Max_data_length="1970324836974591" Index_length="1024" Data_free="0" Create_time="--TIME--" Update_time="--TIME--" Collation="latin1_swedish_ci" Create_options="" Comment="" />
|
||||||
|
</table_structure>
|
||||||
|
<table_data name="t2">
|
||||||
|
<row>
|
||||||
|
<field name="c1">1</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">2</field>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<field name="c1">3</field>
|
||||||
|
</row>
|
||||||
|
</table_data>
|
||||||
|
<triggers name="t2">
|
||||||
|
<trigger Trigger="trig1" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig1 BEFORE INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
<trigger Trigger="trig2" sql_mode="" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` TRIGGER trig2 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1, ']]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(2, '<![CDATA]]]]><![CDATA[>');
|
||||||
|
INSERT INTO t2 VALUES(3, '<![CDATA[');
|
||||||
|
INSERT INTO t2 VALUES(4, '< > & \ " _');
|
||||||
|
END
|
||||||
|
]]>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
<table_structure name="v1">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<field Field="c2" Type="varchar(20)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v1" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<table_structure name="v2">
|
||||||
|
<field Field="c1" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
|
<options Name="v2" Comment="VIEW" />
|
||||||
|
</table_structure>
|
||||||
|
<events>
|
||||||
|
<event Event="e1" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e1` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
<event Event="e2" sql_mode="" time_zone="SYSTEM" character_set_client="latin1" collation_connection="latin1_swedish_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` EVENT `e2` ON SCHEDULE EVERY 1 SECOND STARTS '--TIME--' ON COMPLETION NOT PRESERVE ENABLE DO DROP DATABASE BUG52792
|
||||||
|
]]>
|
||||||
|
</event>
|
||||||
|
</events>
|
||||||
|
<routines>
|
||||||
|
<!--
|
||||||
|
- insufficient privileges to SHOW CREATE FUNCTION `hello1`
|
||||||
|
-->
|
||||||
|
<!-- - does user1 have permissions on mysql.proc?
|
||||||
|
|
||||||
|
-->
|
||||||
|
DROP USER user1;
|
||||||
|
DROP DATABASE BUG52792;
|
||||||
|
# UTF-8
|
||||||
|
CREATE DATABASE BUG52792;
|
||||||
|
USE BUG52792;
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE FUNCTION `straße` ( c1 CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]>, ', s, '!');
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<database name="BUG52792">
|
||||||
|
<routines>
|
||||||
|
<routine Function="straße" sql_mode="" character_set_client="utf8" collation_connection="utf8_general_ci" Database_Collation="latin1_swedish_ci">
|
||||||
|
<![CDATA[
|
||||||
|
CREATE DEFINER=`root`@`localhost` FUNCTION `straße`( c1 CHAR(20)) RETURNS char(50) CHARSET latin1
|
||||||
|
DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]]]><![CDATA[>, ', s, '!')
|
||||||
|
]]>
|
||||||
|
</routine>
|
||||||
|
</routines>
|
||||||
|
</database>
|
||||||
|
</mysqldump>
|
||||||
|
DROP DATABASE BUG52792;
|
||||||
|
USE test;
|
||||||
|
#
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
@@ -4662,3 +5101,107 @@ UNLOCK TABLES;
|
|||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#12809202 61854: MYSQLDUMP --SINGLE-TRANSACTION --FLUSH-LOG BREAKS
|
||||||
|
# CONSISTENCY
|
||||||
|
#
|
||||||
|
DROP DATABASE IF EXISTS b12809202_db;
|
||||||
|
CREATE DATABASE b12809202_db;
|
||||||
|
CREATE TABLE b12809202_db.t1 (c1 INT);
|
||||||
|
CREATE TABLE b12809202_db.t2 (c1 INT);
|
||||||
|
INSERT INTO b12809202_db.t1 VALUES (1), (2), (3);
|
||||||
|
INSERT INTO b12809202_db.t2 VALUES (1), (2), (3);
|
||||||
|
# Starting mysqldump with --single-transaction & --flush-log options..
|
||||||
|
# Note : In the following dump the transaction
|
||||||
|
# should start only after the logs are
|
||||||
|
# flushed, as 'flush logs' causes implicit
|
||||||
|
# commit starting 5.5.
|
||||||
|
|
||||||
|
#### Dump starts here ####
|
||||||
|
-- Connecting to localhost...
|
||||||
|
-- main : logs flushed successfully!
|
||||||
|
-- Starting transaction...
|
||||||
|
-- Retrieving table structure for table t1...
|
||||||
|
-- Sending SELECT query...
|
||||||
|
-- Retrieving rows...
|
||||||
|
--
|
||||||
|
-- Host: localhost Database: b12809202_db
|
||||||
|
-- ------------------------------------------------------
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `t1`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `t1`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `t1` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||||
|
INSERT INTO `t1` VALUES (1),(2),(3);
|
||||||
|
-- Retrieving table structure for table t2...
|
||||||
|
-- Sending SELECT query...
|
||||||
|
-- Retrieving rows...
|
||||||
|
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `t2`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `t2`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `t2` (
|
||||||
|
`c1` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `t2`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `t2` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
||||||
|
INSERT INTO `t2` VALUES (1),(2),(3);
|
||||||
|
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
-- Disconnecting from localhost...
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
-- Dump completed
|
||||||
|
#### Dump ends here ####
|
||||||
|
DROP TABLE b12809202_db.t1;
|
||||||
|
DROP TABLE b12809202_db.t2;
|
||||||
|
DROP DATABASE b12809202_db;
|
||||||
|
#
|
||||||
|
# Delete all existing binary logs.
|
||||||
|
#
|
||||||
|
RESET MASTER;
|
||||||
|
@@ -8,6 +8,6 @@ name TINYBLOB NOT NULL,
|
|||||||
modified TIMESTAMP DEFAULT '0000-00-00 00:00:00',
|
modified TIMESTAMP DEFAULT '0000-00-00 00:00:00',
|
||||||
INDEX namelocs (name(255))) ENGINE = MyISAM
|
INDEX namelocs (name(255))) ENGINE = MyISAM
|
||||||
PARTITION BY HASH(id) PARTITIONS 2;
|
PARTITION BY HASH(id) PARTITIONS 2;
|
||||||
LOAD DATA LOCAL INFILE 'init_file.txt'
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/init_file.txt'
|
||||||
INTO TABLE t1 (name);
|
INTO TABLE t1 (name);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -397,6 +397,33 @@ test.t1 assign_to_keycache error Subpartition sp0 returned error
|
|||||||
test.t1 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't1'
|
test.t1 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't1'
|
||||||
test.t1 assign_to_keycache status Operation failed
|
test.t1 assign_to_keycache status Operation failed
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug#12361113: crash when load index into cache
|
||||||
|
#
|
||||||
|
# Note that this creates an empty disabled key cache!
|
||||||
|
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||||
|
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) )
|
||||||
|
ENGINE = MYISAM
|
||||||
|
PARTITION BY HASH(a) PARTITIONS 2;
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
CACHE INDEX t1 IN key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
CACHE INDEX t1 PARTITION (p0) IN key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
CACHE INDEX t1 PARTITION (p1) IN key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`b`) IN key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
CACHE INDEX t1 PARTITION (p1) KEY (`b`) IN key_cache_none;
|
||||||
|
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||||
|
# The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||||
|
# since the default cache is used due to CACHE INDEX failed for
|
||||||
|
# key_cache_none.
|
||||||
|
LOAD INDEX INTO CACHE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Clean up
|
||||||
SET GLOBAL hot_cache.key_buffer_size = 0;
|
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||||
SET GLOBAL warm_cache.key_buffer_size = 0;
|
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||||
SET @@global.cold_cache.key_buffer_size = 0;
|
SET @@global.cold_cache.key_buffer_size = 0;
|
||||||
|
@@ -1767,4 +1767,121 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
||||||
pk i4 pk i4
|
pk i4 pk i4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# BUG#13519696 - 62940: SELECT RESULTS VARY WITH VERSION AND
|
||||||
|
# WITH/WITHOUT INDEX RANGE SCAN
|
||||||
|
#
|
||||||
|
create table t1 (id int unsigned not null auto_increment primary key);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
create table t2 (
|
||||||
|
id int unsigned not null auto_increment,
|
||||||
|
val decimal(5,3) not null,
|
||||||
|
primary key (id,val),
|
||||||
|
unique key (val,id),
|
||||||
|
unique key (id));
|
||||||
|
insert into t2 select null,id*0.0009 from t1;
|
||||||
|
select count(val) from t2 ignore index (val) where val > 0.1155;
|
||||||
|
count(val)
|
||||||
|
128
|
||||||
|
select count(val) from t2 force index (val) where val > 0.1155;
|
||||||
|
count(val)
|
||||||
|
128
|
||||||
|
drop table t2, t1;
|
||||||
|
#
|
||||||
|
# BUG#13453382 - REGRESSION SINCE 5.1.39, RANGE OPTIMIZER WRONG
|
||||||
|
# RESULTS WITH DECIMAL CONVERSION
|
||||||
|
#
|
||||||
|
create table t1 (a int,b int,c int,primary key (a,c));
|
||||||
|
insert into t1 values (1,1,2),(1,1,3),(1,1,4);
|
||||||
|
select convert(3, signed integer) > 2.9;
|
||||||
|
convert(3, signed integer) > 2.9
|
||||||
|
1
|
||||||
|
select * from t1 force index (primary) where a=1 and c>= 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c>= 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 force index (primary) where a=1 and c> 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c> 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# BUG#13463488 - 63437: CHAR & BETWEEN WITH INDEX RETURNS WRONG
|
||||||
|
# RESULT AFTER MYSQL 5.1.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(
|
||||||
|
F1 CHAR(5) NOT NULL,
|
||||||
|
F2 CHAR(5) NOT NULL,
|
||||||
|
F3 CHAR(5) NOT NULL,
|
||||||
|
PRIMARY KEY(F1),
|
||||||
|
INDEX IDX_F2(F2)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('A','A','A'),('AA','AA','AA'),('AAA','AAA','AAA'),
|
||||||
|
('AAAA','AAAA','AAAA'),('AAAAA','AAAAA','AAAAA');
|
||||||
|
SELECT * FROM t1 WHERE F1 = 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 = 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
SELECT * FROM t1 WHERE F1 >= 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F1 > 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F1 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F2 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F3 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 BETWEEN 'A ' AND
|
||||||
|
'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@@ -2772,20 +2772,23 @@ userid
|
|||||||
drop procedure bug8116|
|
drop procedure bug8116|
|
||||||
drop table t3|
|
drop table t3|
|
||||||
drop procedure if exists bug6857|
|
drop procedure if exists bug6857|
|
||||||
create procedure bug6857(counter int)
|
create procedure bug6857()
|
||||||
begin
|
begin
|
||||||
declare t0, t1 int;
|
declare t0, t1 int;
|
||||||
declare plus bool default 0;
|
declare plus bool default 0;
|
||||||
set t0 = current_time();
|
set t0 = unix_timestamp();
|
||||||
while counter > 0 do
|
select sleep(1.1);
|
||||||
set counter = counter - 1;
|
set t1 = unix_timestamp();
|
||||||
end while;
|
|
||||||
set t1 = current_time();
|
|
||||||
if t1 > t0 then
|
if t1 > t0 then
|
||||||
set plus = 1;
|
set plus = 1;
|
||||||
end if;
|
end if;
|
||||||
select plus;
|
select plus;
|
||||||
end|
|
end|
|
||||||
|
call bug6857()|
|
||||||
|
sleep(1.1)
|
||||||
|
0
|
||||||
|
plus
|
||||||
|
1
|
||||||
drop procedure bug6857|
|
drop procedure bug6857|
|
||||||
drop procedure if exists bug8757|
|
drop procedure if exists bug8757|
|
||||||
create procedure bug8757()
|
create procedure bug8757()
|
||||||
|
@@ -206,8 +206,8 @@ DROP TABLE t1;
|
|||||||
# FAILED
|
# FAILED
|
||||||
#
|
#
|
||||||
DROP TABLE IF EXISTS t1, t2;
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
CREATE TABLE t2 (a INT);
|
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
# Connection con2
|
# Connection con2
|
||||||
@@ -217,12 +217,14 @@ INSERT INTO t2 SELECT a FROM t1;
|
|||||||
# Connection default
|
# Connection default
|
||||||
# Waiting until INSERT ... is blocked
|
# Waiting until INSERT ... is blocked
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
COMMIT;
|
|
||||||
# Connection con2
|
# Connection con2
|
||||||
# Reaping: INSERT INTO t2 SELECT a FROM t1
|
# Reaping: INSERT INTO t2 SELECT a FROM t1
|
||||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
XA COMMIT 'xid1';
|
XA COMMIT 'xid1';
|
||||||
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
|
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
|
||||||
|
# Connection default
|
||||||
|
COMMIT;
|
||||||
|
# Connection con2
|
||||||
XA START 'xid1';
|
XA START 'xid1';
|
||||||
XA END 'xid1';
|
XA END 'xid1';
|
||||||
XA PREPARE 'xid1';
|
XA PREPARE 'xid1';
|
||||||
|
@@ -54,13 +54,13 @@ USE test;
|
|||||||
#
|
#
|
||||||
SET @old_log_warnings = @@log_warnings;
|
SET @old_log_warnings = @@log_warnings;
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
CREATE TABLE t1 (a VARCHAR(36), b VARCHAR(10));
|
CREATE TABLE t1 (a VARCHAR(36), b VARCHAR(15));
|
||||||
SET GLOBAL LOG_WARNINGS = 0;
|
SET GLOBAL LOG_WARNINGS = 0;
|
||||||
INSERT INTO t1 VALUES(UUID(), 'Bug#46265');
|
INSERT INTO t1 VALUES(UUID(), 'timestamp');
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
|
||||||
SET GLOBAL LOG_WARNINGS = 1;
|
SET GLOBAL LOG_WARNINGS = 1;
|
||||||
INSERT INTO t1 VALUES(UUID(), 'Bug#46265');
|
INSERT INTO t1 VALUES(UUID(), 'timestamp');
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -101,16 +101,24 @@ eval USE $old_db;
|
|||||||
--echo # Bug#46265: Can not disable warning about unsafe statements for binary logging
|
--echo # Bug#46265: Can not disable warning about unsafe statements for binary logging
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
let BINLOG_COUNTER1= `select CONVERT(NOW(),UNSIGNED) as timestmap from dual`;
|
||||||
|
|
||||||
SET @old_log_warnings = @@log_warnings;
|
SET @old_log_warnings = @@log_warnings;
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
CREATE TABLE t1 (a VARCHAR(36), b VARCHAR(10));
|
CREATE TABLE t1 (a VARCHAR(36), b VARCHAR(15));
|
||||||
|
|
||||||
SET GLOBAL LOG_WARNINGS = 0;
|
SET GLOBAL LOG_WARNINGS = 0;
|
||||||
INSERT INTO t1 VALUES(UUID(), 'Bug#46265');
|
# Replacing the result file content here.
|
||||||
|
# Instead of writing $BINLOG_COUNTER1 value to result file,
|
||||||
|
# writing a fixed string timestamp to it.
|
||||||
|
--replace_result $BINLOG_COUNTER1 timestamp
|
||||||
|
eval INSERT INTO t1 VALUES(UUID(), '$BINLOG_COUNTER1');
|
||||||
SET GLOBAL LOG_WARNINGS = 1;
|
SET GLOBAL LOG_WARNINGS = 1;
|
||||||
INSERT INTO t1 VALUES(UUID(), 'Bug#46265');
|
--replace_result $BINLOG_COUNTER1 timestamp
|
||||||
|
eval INSERT INTO t1 VALUES(UUID(), '$BINLOG_COUNTER1');
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
SET GLOBAL log_warnings = @old_log_warnings;
|
SET GLOBAL log_warnings = @old_log_warnings;
|
||||||
@@ -132,13 +140,14 @@ perl;
|
|||||||
use strict;
|
use strict;
|
||||||
my $log_error= $ENV{'LOG_ERROR'} or die "LOG_ERROR not set";
|
my $log_error= $ENV{'LOG_ERROR'} or die "LOG_ERROR not set";
|
||||||
open(FILE, "$log_error") or die("Unable to open $log_error: $!\n");
|
open(FILE, "$log_error") or die("Unable to open $log_error: $!\n");
|
||||||
my $count = () = grep(/Bug#46265/g,<FILE>);
|
my $binlog_counter= $ENV{'BINLOG_COUNTER1'} or die "BINLOG_COUNTER1 not set";
|
||||||
|
my $count = () = grep(/$binlog_counter/g,<FILE>);
|
||||||
|
# Grep the timestamp value from the error file.
|
||||||
print "Occurrences: $count\n";
|
print "Occurrences: $count\n";
|
||||||
close(FILE);
|
close(FILE);
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# bug#50192: diplaying the unsafe warning comes out to the user warning stack
|
# bug#50192: diplaying the unsafe warning comes out to the user warning stack
|
||||||
|
|
||||||
-- disable_warnings
|
-- disable_warnings
|
||||||
DROP TABLE IF EXISTS t1, t2;
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
-- enable_warnings
|
-- enable_warnings
|
||||||
|
25
mysql-test/suite/innodb/r/innodb_bug12400341.result
Normal file
25
mysql-test/suite/innodb/r/innodb_bug12400341.result
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
call mtr.add_suppression("InnoDB: Warning: cannot find a free slot for an undo log. Do you have too");
|
||||||
|
show variables like "max_connections";
|
||||||
|
Variable_name Value
|
||||||
|
max_connections 64
|
||||||
|
show variables like "innodb_thread_concurrency";
|
||||||
|
Variable_name Value
|
||||||
|
innodb_thread_concurrency 0
|
||||||
|
show variables like "innodb_file_per_table";
|
||||||
|
Variable_name Value
|
||||||
|
innodb_file_per_table ON
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
create database mysqltest;
|
||||||
|
CREATE TABLE mysqltest.transtable (id int unsigned NOT NULL PRIMARY KEY, val int DEFAULT 0) ENGINE=InnoDB;
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
count(*)
|
||||||
|
33
|
||||||
|
CREATE TABLE mysqltest.testtable (id int unsigned not null primary key) ENGINE=InnoDB;
|
||||||
|
ERROR HY000: Can't create table 'mysqltest.testtable' (errno: 177)
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
count(*)
|
||||||
|
33
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
count(*)
|
||||||
|
33
|
||||||
|
drop database mysqltest;
|
1
mysql-test/suite/innodb/t/innodb_bug12400341-master.opt
Normal file
1
mysql-test/suite/innodb/t/innodb_bug12400341-master.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--max_connections=64 --innodb_thread_concurrency=0 --innodb_file_per_table --innodb_rollback_segments=2
|
103
mysql-test/suite/innodb/t/innodb_bug12400341.test
Normal file
103
mysql-test/suite/innodb/t/innodb_bug12400341.test
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# Test for bug #12400341: INNODB CAN LEAVE ORPHAN IBD FILES AROUND
|
||||||
|
|
||||||
|
-- source include/have_innodb.inc
|
||||||
|
|
||||||
|
if (`select count(*)=0 from information_schema.global_variables where variable_name = 'INNODB_TRX_RSEG_N_SLOTS_DEBUG'`)
|
||||||
|
{
|
||||||
|
--skip Test requires InnoDB built with UNIV_DEBUG definition.
|
||||||
|
}
|
||||||
|
|
||||||
|
call mtr.add_suppression("InnoDB: Warning: cannot find a free slot for an undo log. Do you have too");
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
set @old_innodb_trx_rseg_n_slots_debug = @@innodb_trx_rseg_n_slots_debug;
|
||||||
|
set global innodb_trx_rseg_n_slots_debug = 32;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
show variables like "max_connections";
|
||||||
|
show variables like "innodb_thread_concurrency";
|
||||||
|
show variables like "innodb_file_per_table";
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
create database mysqltest;
|
||||||
|
CREATE TABLE mysqltest.transtable (id int unsigned NOT NULL PRIMARY KEY, val int DEFAULT 0) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
#
|
||||||
|
# Insert in 1 transaction which needs over 1 page undo record to avoid the insert_undo cached,
|
||||||
|
# because the cached insert_undo can be reused at "CREATE TABLE" statement later.
|
||||||
|
#
|
||||||
|
START TRANSACTION;
|
||||||
|
let $c = 1024;
|
||||||
|
while ($c)
|
||||||
|
{
|
||||||
|
eval INSERT INTO mysqltest.transtable (id) VALUES ($c);
|
||||||
|
dec $c;
|
||||||
|
}
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
let $c = 32;
|
||||||
|
while ($c)
|
||||||
|
{
|
||||||
|
# if failed at here, it might be shortage of file descriptors limit.
|
||||||
|
connect (con$c,localhost,root,,);
|
||||||
|
dec $c;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
|
||||||
|
#
|
||||||
|
# fill the all undo slots
|
||||||
|
#
|
||||||
|
--disable_query_log
|
||||||
|
let $c = 32;
|
||||||
|
while ($c)
|
||||||
|
{
|
||||||
|
connection con$c;
|
||||||
|
START TRANSACTION;
|
||||||
|
eval UPDATE mysqltest.transtable SET val = 1 WHERE id = 33 - $c;
|
||||||
|
dec $c;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TABLE mysqltest.testtable (id int unsigned not null primary key) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $c = 32;
|
||||||
|
while ($c)
|
||||||
|
{
|
||||||
|
connection con$c;
|
||||||
|
ROLLBACK;
|
||||||
|
dec $c;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
select count(*) from information_schema.processlist;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $c = 32;
|
||||||
|
while ($c)
|
||||||
|
{
|
||||||
|
disconnect con$c;
|
||||||
|
dec $c;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
#
|
||||||
|
# If the isolated .ibd file remained, the drop database should fail.
|
||||||
|
#
|
||||||
|
drop database mysqltest;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
set global innodb_trx_rseg_n_slots_debug = @old_innodb_trx_rseg_n_slots_debug;
|
||||||
|
--enable_query_log
|
@@ -11,7 +11,7 @@ reset slave;
|
|||||||
start slave;
|
start slave;
|
||||||
include/wait_for_slave_param.inc [Last_IO_Errno]
|
include/wait_for_slave_param.inc [Last_IO_Errno]
|
||||||
Last_IO_Errno = '1236'
|
Last_IO_Errno = '1236'
|
||||||
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the last event was read from './master-bin.000001' at 316, the last byte read was read from './master-bin.000001' at 335.''
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the start event position from '' at XXX, the last event was read from './master-bin.000001' at XXX, the last byte read was read from './master-bin.000001' at XXX.''
|
||||||
reset master;
|
reset master;
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
|
@@ -270,6 +270,7 @@ Heartbeat event received
|
|||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
include/stop_slave.inc
|
include/stop_slave.inc
|
||||||
include/rpl_change_topology.inc [new topology=1->2->1]
|
include/rpl_change_topology.inc [new topology=1->2->1]
|
||||||
|
CHANGE MASTER TO MASTER_HEARTBEAT_PERIOD=1;
|
||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10));
|
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10));
|
||||||
INSERT INTO t1 VALUES(1, 'on master');
|
INSERT INTO t1 VALUES(1, 'on master');
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
include/master-slave.inc
|
include/master-slave.inc
|
||||||
[connection master]
|
[connection master]
|
||||||
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
|
||||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY AUTO_INCREMENT, b INT,
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY AUTO_INCREMENT, b INT,
|
||||||
UNIQUE(b));
|
UNIQUE(b));
|
||||||
INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10;
|
INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10;
|
||||||
|
@@ -9,6 +9,7 @@ change master to master_log_pos=MASTER_LOG_POS;
|
|||||||
Read_Master_Log_Pos = '75'
|
Read_Master_Log_Pos = '75'
|
||||||
start slave;
|
start slave;
|
||||||
include/wait_for_slave_io_error.inc [errno=1236]
|
include/wait_for_slave_io_error.inc [errno=1236]
|
||||||
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the start event position from 'master-bin.000001' at XXX, the last event was read from './master-bin.000001' at XXX, the last byte read was read from './master-bin.000001' at XXX.''
|
||||||
include/stop_slave_sql.inc
|
include/stop_slave_sql.inc
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
@@ -5,6 +5,7 @@ CREATE TABLE t1(c1 INT);
|
|||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
||||||
include/wait_for_slave_io_error.inc [errno=1236]
|
include/wait_for_slave_io_error.inc [errno=1236]
|
||||||
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'could not find next log; the start event position from 'master-bin.000001' at XXX, the last event was read from './master-bin.000002' at XXX, the last byte read was read from './master-bin.000002' at XXX.''
|
||||||
CREATE TABLE t2(c1 INT);
|
CREATE TABLE t2(c1 INT);
|
||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
CREATE TABLE t3(c1 INT);
|
CREATE TABLE t3(c1 INT);
|
||||||
|
@@ -37,6 +37,7 @@ DROP TABLE t1;
|
|||||||
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
||||||
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
||||||
include/wait_for_slave_io_error.inc [errno=1236]
|
include/wait_for_slave_io_error.inc [errno=1236]
|
||||||
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the start event position from '' at XXX, the last event was read from './master-bin.000001' at XXX, the last byte read was read from './master-bin.000001' at XXX.''
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
RESET MASTER;
|
RESET MASTER;
|
||||||
|
10
mysql-test/suite/rpl/r/rpl_start_stop_slave.result
Normal file
10
mysql-test/suite/rpl/r/rpl_start_stop_slave.result
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
[connection master]
|
||||||
|
set @time_before_kill := (select CURRENT_TIMESTAMP);
|
||||||
|
[Time before the query]
|
||||||
|
[Connection ID of the slave I/O thread found]
|
||||||
|
kill <connection_id>;
|
||||||
|
set @time_after_kill := (select CURRENT_TIMESTAMP);
|
||||||
|
[Time after the query]
|
||||||
|
[Killing of the slave IO thread was successful]
|
||||||
|
include/rpl_end.inc
|
@@ -69,6 +69,16 @@ include/wait_for_slave_to_stop.inc
|
|||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
# Clean up
|
# Clean up
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
RESET MASTER;
|
||||||
|
include/stop_slave.inc
|
||||||
|
CHANGE MASTER TO master_log_pos=MASTER_POS;
|
||||||
|
START SLAVE;
|
||||||
|
include/wait_for_slave_param.inc [Last_IO_Errno]
|
||||||
|
Last_IO_Errno = '1236'
|
||||||
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the start event position from 'master-bin.000001' at XXX, the last event was read from './master-bin.000001' at XXX, the last byte read was read from './master-bin.000001' at XXX.''
|
||||||
|
include/stop_slave.inc
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||||
|
@@ -14,11 +14,6 @@
|
|||||||
|
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
--source include/have_binlog_format_mixed.inc
|
--source include/have_binlog_format_mixed.inc
|
||||||
#
|
|
||||||
# Bug#13050593 swallows `\' from Last_IO_Error
|
|
||||||
# todo: uncomment the filter once the bug is fixed.
|
|
||||||
#
|
|
||||||
--source include/not_windows.inc
|
|
||||||
|
|
||||||
call mtr.add_suppression("Error in Log_event::read_log_event()");
|
call mtr.add_suppression("Error in Log_event::read_log_event()");
|
||||||
|
|
||||||
@@ -51,6 +46,7 @@ start slave;
|
|||||||
--let $slave_param_value=1236
|
--let $slave_param_value=1236
|
||||||
--source include/wait_for_slave_param.inc
|
--source include/wait_for_slave_param.inc
|
||||||
|
|
||||||
|
--let $slave_field_result_replace= / at [0-9]*/ at XXX/
|
||||||
--let $status_items= Last_IO_Errno, Last_IO_Error
|
--let $status_items= Last_IO_Errno, Last_IO_Error
|
||||||
--source include/show_slave_status.inc
|
--source include/show_slave_status.inc
|
||||||
|
|
||||||
|
@@ -480,6 +480,12 @@ let $status_var_comparsion= >;
|
|||||||
--connection master
|
--connection master
|
||||||
#--replace_result $SLAVE_MYPORT SLAVE_PORT $slave_binlog SLAVE_BINLOG
|
#--replace_result $SLAVE_MYPORT SLAVE_PORT $slave_binlog SLAVE_BINLOG
|
||||||
#eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SLAVE_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=1, MASTER_LOG_FILE='$slave_binlog';
|
#eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SLAVE_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=1, MASTER_LOG_FILE='$slave_binlog';
|
||||||
|
|
||||||
|
# BUG#12403008 RPL_HEARTBEAT_BASIC FAILS SPORADICALLY ON PUSHBUILD
|
||||||
|
# MASTER_HEARTBEAT_PERIOD had the default value (slave_net_timeout/2)
|
||||||
|
# so wait on "Heartbeat event received on master", that only waits for
|
||||||
|
# 1 minute, sometimes timeout before heartbeat arrives.
|
||||||
|
CHANGE MASTER TO MASTER_HEARTBEAT_PERIOD=1;
|
||||||
--source include/start_slave.inc
|
--source include/start_slave.inc
|
||||||
|
|
||||||
# Insert data on master and on slave and make sure that it replicated for both directions
|
# Insert data on master and on slave and make sure that it replicated for both directions
|
||||||
|
@@ -6,6 +6,8 @@
|
|||||||
source include/have_debug.inc;
|
source include/have_debug.inc;
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
|
||||||
|
|
||||||
# Currently only statement-based-specific bugs are here
|
# Currently only statement-based-specific bugs are here
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_statement.inc
|
||||||
|
|
||||||
|
@@ -22,12 +22,9 @@ let $status_items= Read_Master_Log_Pos;
|
|||||||
source include/show_slave_status.inc;
|
source include/show_slave_status.inc;
|
||||||
start slave;
|
start slave;
|
||||||
let $slave_io_errno= 1236;
|
let $slave_io_errno= 1236;
|
||||||
#
|
--let $show_slave_io_error= 1
|
||||||
# Win and Unix path is printed differently: BUG#13055685. So
|
# Mask line numbers
|
||||||
# show_slave_io_error is made 0 until the bug fixes provide necessary
|
--let $slave_io_error_replace= / at [0-9]*/ at XXX/
|
||||||
# facilities
|
|
||||||
#
|
|
||||||
let $show_slave_io_error= 0;
|
|
||||||
source include/wait_for_slave_io_error.inc;
|
source include/wait_for_slave_io_error.inc;
|
||||||
source include/stop_slave_sql.inc;
|
source include/stop_slave_sql.inc;
|
||||||
|
|
||||||
|
@@ -60,12 +60,9 @@ call mtr.add_suppression('Got fatal error 1236 from master when reading data fro
|
|||||||
connection slave;
|
connection slave;
|
||||||
# 1236 = ER_MASTER_FATAL_ERROR_READING_BINLOG
|
# 1236 = ER_MASTER_FATAL_ERROR_READING_BINLOG
|
||||||
--let $slave_io_errno= 1236
|
--let $slave_io_errno= 1236
|
||||||
#
|
--let $show_slave_io_error= 1
|
||||||
# Win and Unix path is printed differently: BUG#13055685. So
|
# Mask line numbers
|
||||||
# show_slave_io_error is made 0 until the bug fixes provide necessary
|
--let $slave_io_error_replace= / at [0-9]*/ at XXX/
|
||||||
# facilities
|
|
||||||
#
|
|
||||||
--let $show_slave_io_error= 0
|
|
||||||
--source include/wait_for_slave_io_error.inc
|
--source include/wait_for_slave_io_error.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
@@ -125,12 +125,9 @@ connection slave;
|
|||||||
# The slave I/O thread must stop after receiving
|
# The slave I/O thread must stop after receiving
|
||||||
# 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
|
# 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
|
||||||
--let $slave_io_errno= 1236
|
--let $slave_io_errno= 1236
|
||||||
#
|
|
||||||
# Win and Unix path is printed differently: BUG#13055685. So
|
# Mask line numbers
|
||||||
# show_slave_io_error is made 0 until the bug fixes provide necessary
|
--let $slave_io_error_replace= / at [0-9]*/ at XXX/
|
||||||
# facilities
|
|
||||||
#
|
|
||||||
--let $show_slave_io_error= 0
|
|
||||||
--source include/wait_for_slave_io_error.inc
|
--source include/wait_for_slave_io_error.inc
|
||||||
|
|
||||||
# Remove the bad binlog and clear error status on slave.
|
# Remove the bad binlog and clear error status on slave.
|
||||||
|
44
mysql-test/suite/rpl/t/rpl_start_stop_slave.test
Normal file
44
mysql-test/suite/rpl/t/rpl_start_stop_slave.test
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#
|
||||||
|
#BUG#11752315 : STOP SLAVE UNABLE TO COMPLETE WHEN SLAVE THREAD IS TRYING
|
||||||
|
# TO RECONNECT TO
|
||||||
|
#
|
||||||
|
# ==== Purpose ====
|
||||||
|
#
|
||||||
|
#Tests that the slave does not go to a sleep for a long duration after the
|
||||||
|
#master is killed and we do a START_SLAVE and STOP_SLAVE.
|
||||||
|
#
|
||||||
|
# ==== Method ====
|
||||||
|
#
|
||||||
|
#This is a new functionality of having an interruptable sleep of the slave.
|
||||||
|
#We find the thread id for the slave thread. On finding the thread ID of the
|
||||||
|
#slave thread we kill the slave thread. A successful kill in less than 60 sec
|
||||||
|
#should serve the purpose of checking the functionality.
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/have_log_bin.inc
|
||||||
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
--let $connection_id=`SELECT id FROM information_schema.processlist where state LIKE 'Waiting for master to send event'`
|
||||||
|
|
||||||
|
set @time_before_kill := (select CURRENT_TIMESTAMP);
|
||||||
|
|
||||||
|
--echo [Time before the query]
|
||||||
|
--echo [Connection ID of the slave I/O thread found]
|
||||||
|
|
||||||
|
--replace_regex /kill [0-9]*/kill <connection_id>/
|
||||||
|
--eval kill $connection_id
|
||||||
|
|
||||||
|
set @time_after_kill := (select CURRENT_TIMESTAMP);
|
||||||
|
|
||||||
|
--echo [Time after the query]
|
||||||
|
|
||||||
|
if(`select TIMESTAMPDIFF(SECOND,@time_after_kill, @time_before_kill) > 60`)
|
||||||
|
{
|
||||||
|
--echo # assert : The difference between the timestamps 'time_after_kill' and 'time_before_kill' should be less than 60sec.
|
||||||
|
--die
|
||||||
|
}
|
||||||
|
|
||||||
|
--echo [Killing of the slave IO thread was successful]
|
||||||
|
# End of test
|
||||||
|
--source include/rpl_end.inc
|
@@ -22,5 +22,5 @@ SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit
|
|||||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||||
--connection master
|
--connection master
|
||||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||||
|
--let $rpl_only_running_threads= 1
|
||||||
--source include/rpl_end.inc
|
--source include/rpl_end.inc
|
||||||
|
@@ -3,7 +3,6 @@ create table t2 (variable_name text);
|
|||||||
load data infile "MYSQLTEST_VARDIR/tmp/sys_vars.all_vars.txt" into table t1;
|
load data infile "MYSQLTEST_VARDIR/tmp/sys_vars.all_vars.txt" into table t1;
|
||||||
insert into t2 select variable_name from information_schema.global_variables;
|
insert into t2 select variable_name from information_schema.global_variables;
|
||||||
insert into t2 select variable_name from information_schema.session_variables;
|
insert into t2 select variable_name from information_schema.session_variables;
|
||||||
delete from t2 where variable_name='innodb_change_buffering_debug';
|
|
||||||
update t2 set variable_name= replace(variable_name, "PERFORMANCE_SCHEMA_", "PFS_");
|
update t2 set variable_name= replace(variable_name, "PERFORMANCE_SCHEMA_", "PFS_");
|
||||||
select variable_name as `There should be *no* long test name listed below:` from t2
|
select variable_name as `There should be *no* long test name listed below:` from t2
|
||||||
where length(variable_name) > 50;
|
where length(variable_name) > 50;
|
||||||
|
@@ -1,20 +1,20 @@
|
|||||||
select @@global.character_sets_dir;
|
select @@global.character_sets_dir;
|
||||||
@@global.character_sets_dir
|
@@global.character_sets_dir
|
||||||
MYSQL_CHARSETSDIR/
|
MYSQL_CHARSETSDIR
|
||||||
select @@session.character_sets_dir;
|
select @@session.character_sets_dir;
|
||||||
ERROR HY000: Variable 'character_sets_dir' is a GLOBAL variable
|
ERROR HY000: Variable 'character_sets_dir' is a GLOBAL variable
|
||||||
show global variables like 'character_sets_dir';
|
show global variables like 'character_sets_dir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
character_sets_dir MYSQL_CHARSETSDIR/
|
character_sets_dir MYSQL_CHARSETSDIR
|
||||||
show session variables like 'character_sets_dir';
|
show session variables like 'character_sets_dir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
character_sets_dir MYSQL_CHARSETSDIR/
|
character_sets_dir MYSQL_CHARSETSDIR
|
||||||
select * from information_schema.global_variables where variable_name='character_sets_dir';
|
select * from information_schema.global_variables where variable_name='character_sets_dir';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
CHARACTER_SETS_DIR MYSQL_CHARSETSDIR/
|
CHARACTER_SETS_DIR MYSQL_CHARSETSDIR
|
||||||
select * from information_schema.session_variables where variable_name='character_sets_dir';
|
select * from information_schema.session_variables where variable_name='character_sets_dir';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
CHARACTER_SETS_DIR MYSQL_CHARSETSDIR/
|
CHARACTER_SETS_DIR MYSQL_CHARSETSDIR
|
||||||
set global character_sets_dir="foo";
|
set global character_sets_dir="foo";
|
||||||
ERROR HY000: Variable 'character_sets_dir' is a read only variable
|
ERROR HY000: Variable 'character_sets_dir' is a read only variable
|
||||||
set session character_sets_dir="foo";
|
set session character_sets_dir="foo";
|
||||||
|
@@ -0,0 +1,64 @@
|
|||||||
|
SET @start_global_value = @@global.innodb_change_buffering_debug;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
select @@global.innodb_change_buffering_debug in (0, 1);
|
||||||
|
@@global.innodb_change_buffering_debug in (0, 1)
|
||||||
|
1
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
@@global.innodb_change_buffering_debug
|
||||||
|
0
|
||||||
|
select @@session.innodb_change_buffering_debug;
|
||||||
|
ERROR HY000: Variable 'innodb_change_buffering_debug' is a GLOBAL variable
|
||||||
|
show global variables like 'innodb_change_buffering_debug';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_change_buffering_debug 0
|
||||||
|
show session variables like 'innodb_change_buffering_debug';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_change_buffering_debug 0
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 0
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 0
|
||||||
|
set global innodb_change_buffering_debug=1;
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
@@global.innodb_change_buffering_debug
|
||||||
|
1
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 1
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 1
|
||||||
|
set @@global.innodb_change_buffering_debug=0;
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
@@global.innodb_change_buffering_debug
|
||||||
|
0
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 0
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_CHANGE_BUFFERING_DEBUG 0
|
||||||
|
set session innodb_change_buffering_debug='some';
|
||||||
|
ERROR HY000: Variable 'innodb_change_buffering_debug' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
set @@session.innodb_change_buffering_debug='some';
|
||||||
|
ERROR HY000: Variable 'innodb_change_buffering_debug' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
set global innodb_change_buffering_debug=1.1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering_debug'
|
||||||
|
set global innodb_change_buffering_debug='foo';
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering_debug'
|
||||||
|
set global innodb_change_buffering_debug=-2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect innodb_change_buffering_debug value: '-2'
|
||||||
|
set global innodb_change_buffering_debug=1e1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering_debug'
|
||||||
|
set global innodb_change_buffering_debug=2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect innodb_change_buffering_debug value: '2'
|
||||||
|
SET @@global.innodb_change_buffering_debug = @start_global_value;
|
||||||
|
SELECT @@global.innodb_change_buffering_debug;
|
||||||
|
@@global.innodb_change_buffering_debug
|
||||||
|
0
|
@@ -0,0 +1,65 @@
|
|||||||
|
SET @start_global_value = @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug between 0 and 1024;
|
||||||
|
@@global.innodb_trx_rseg_n_slots_debug between 0 and 1024
|
||||||
|
1
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
@@global.innodb_trx_rseg_n_slots_debug
|
||||||
|
0
|
||||||
|
select @@session.innodb_trx_rseg_n_slots_debug;
|
||||||
|
ERROR HY000: Variable 'innodb_trx_rseg_n_slots_debug' is a GLOBAL variable
|
||||||
|
show global variables like 'innodb_trx_rseg_n_slots_debug';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_trx_rseg_n_slots_debug 0
|
||||||
|
show session variables like 'innodb_trx_rseg_n_slots_debug';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_trx_rseg_n_slots_debug 0
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 0
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 0
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1;
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
@@global.innodb_trx_rseg_n_slots_debug
|
||||||
|
1
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 1
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 1
|
||||||
|
set @@global.innodb_trx_rseg_n_slots_debug=0;
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
@@global.innodb_trx_rseg_n_slots_debug
|
||||||
|
0
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 0
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_TRX_RSEG_N_SLOTS_DEBUG 0
|
||||||
|
set session innodb_trx_rseg_n_slots_debug='some';
|
||||||
|
ERROR HY000: Variable 'innodb_trx_rseg_n_slots_debug' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
set @@session.innodb_trx_rseg_n_slots_debug='some';
|
||||||
|
ERROR HY000: Variable 'innodb_trx_rseg_n_slots_debug' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1.1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_trx_rseg_n_slots_debug'
|
||||||
|
set global innodb_trx_rseg_n_slots_debug='foo';
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_trx_rseg_n_slots_debug'
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=-2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect innodb_trx_rseg_n_slots_debug value: '-2'
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1e1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_trx_rseg_n_slots_debug'
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1024;
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1025;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect innodb_trx_rseg_n_slots_debug value: '1025'
|
||||||
|
SET @@global.innodb_trx_rseg_n_slots_debug = @start_global_value;
|
||||||
|
SELECT @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
@@global.innodb_trx_rseg_n_slots_debug
|
||||||
|
0
|
@@ -1,20 +1,20 @@
|
|||||||
select @@global.plugin_dir;
|
select @@global.plugin_dir;
|
||||||
@@global.plugin_dir
|
@@global.plugin_dir
|
||||||
MYSQL_TMP_DIR
|
MYSQL_TMP_DIR/
|
||||||
select @@session.plugin_dir;
|
select @@session.plugin_dir;
|
||||||
ERROR HY000: Variable 'plugin_dir' is a GLOBAL variable
|
ERROR HY000: Variable 'plugin_dir' is a GLOBAL variable
|
||||||
show global variables like 'plugin_dir';
|
show global variables like 'plugin_dir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
plugin_dir MYSQL_TMP_DIR
|
plugin_dir MYSQL_TMP_DIR/
|
||||||
show session variables like 'plugin_dir';
|
show session variables like 'plugin_dir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
plugin_dir MYSQL_TMP_DIR
|
plugin_dir MYSQL_TMP_DIR/
|
||||||
select * from information_schema.global_variables where variable_name='plugin_dir';
|
select * from information_schema.global_variables where variable_name='plugin_dir';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
PLUGIN_DIR MYSQL_TMP_DIR
|
PLUGIN_DIR MYSQL_TMP_DIR/
|
||||||
select * from information_schema.session_variables where variable_name='plugin_dir';
|
select * from information_schema.session_variables where variable_name='plugin_dir';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
PLUGIN_DIR MYSQL_TMP_DIR
|
PLUGIN_DIR MYSQL_TMP_DIR/
|
||||||
set global plugin_dir=1;
|
set global plugin_dir=1;
|
||||||
ERROR HY000: Variable 'plugin_dir' is a read only variable
|
ERROR HY000: Variable 'plugin_dir' is a read only variable
|
||||||
set session plugin_dir=1;
|
set session plugin_dir=1;
|
||||||
|
@@ -0,0 +1,59 @@
|
|||||||
|
# Saving initial value of stored_program_cache in a temporary variable
|
||||||
|
SET @start_value = @@global.stored_program_cache;
|
||||||
|
SELECT @start_value;
|
||||||
|
@start_value
|
||||||
|
256
|
||||||
|
# Display the DEFAULT value of stored_program_cache
|
||||||
|
SET @@global.stored_program_cache = DEFAULT;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
256
|
||||||
|
# Verify default value of variable
|
||||||
|
SELECT @@global.stored_program_cache = 256;
|
||||||
|
@@global.stored_program_cache = 256
|
||||||
|
1
|
||||||
|
# Change the value of stored_program_cache to a valid value
|
||||||
|
SET @@global.stored_program_cache = 512;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
512
|
||||||
|
# Change the value of stored_program_cache to invalid value
|
||||||
|
SET @@global.stored_program_cache = -1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect stored_program_cache value: '-1'
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
256
|
||||||
|
SET @@global.stored_program_cache =100000000000;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect stored_program_cache value: '100000000000'
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
524288
|
||||||
|
SET @@global.stored_program_cache = 0;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect stored_program_cache value: '0'
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
256
|
||||||
|
SET @@global.stored_program_cache = 10000.01;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'stored_program_cache'
|
||||||
|
SET @@global.stored_program_cache = ON;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'stored_program_cache'
|
||||||
|
SET @@global.stored_program_cache= 'test';
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'stored_program_cache'
|
||||||
|
SET @@global.stored_program_cache = '';
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'stored_program_cache'
|
||||||
|
# Test if accessing session stored_program_cache gives error
|
||||||
|
SET @@session.stored_program_cache = 0;
|
||||||
|
ERROR HY000: Variable 'stored_program_cache' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
# Check if accessing variable without SCOPE points to same global variable
|
||||||
|
SET @@global.stored_program_cache = 512;
|
||||||
|
SELECT @@stored_program_cache = @@global.stored_program_cache;
|
||||||
|
@@stored_program_cache = @@global.stored_program_cache
|
||||||
|
1
|
||||||
|
# Restore initial value
|
||||||
|
SET @@global.stored_program_cache = @start_value;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
@@global.stored_program_cache
|
||||||
|
256
|
@@ -47,9 +47,6 @@ eval load data infile "$MYSQLTEST_VARDIR/tmp/sys_vars.all_vars.txt" into table t
|
|||||||
insert into t2 select variable_name from information_schema.global_variables;
|
insert into t2 select variable_name from information_schema.global_variables;
|
||||||
insert into t2 select variable_name from information_schema.session_variables;
|
insert into t2 select variable_name from information_schema.session_variables;
|
||||||
|
|
||||||
# This is only present in debug builds.
|
|
||||||
delete from t2 where variable_name='innodb_change_buffering_debug';
|
|
||||||
|
|
||||||
# Performance schema variables are too long for files named
|
# Performance schema variables are too long for files named
|
||||||
# 'mysql-test/suite/sys_vars/t/' ...
|
# 'mysql-test/suite/sys_vars/t/' ...
|
||||||
# ... 'performance_schema_events_waits_history_long_size_basic-master.opt'
|
# ... 'performance_schema_events_waits_history_long_size_basic-master.opt'
|
||||||
|
@@ -1,17 +1,26 @@
|
|||||||
#
|
#
|
||||||
# show the global and session values;
|
# show the global and session values;
|
||||||
#
|
#
|
||||||
--replace_result $MYSQL_CHARSETSDIR MYSQL_CHARSETSDIR
|
|
||||||
|
# workaround to adjust for the directory separators being different in
|
||||||
|
# different OSes : slash on unixes and backslash or slash on windows.
|
||||||
|
# TODO: fix with a proper comparison in mysqltest
|
||||||
|
let $rcd= `SELECT REPLACE('$MYSQL_CHARSETSDIR', '\\\\\', '.')`;
|
||||||
|
let $rcd= `SELECT REPLACE('$rcd', '/', '.')`;
|
||||||
|
let $regex_charsetdir= `SELECT '/$rcd[\\\\\/\\\\\]/MYSQL_CHARSETSDIR/'`;
|
||||||
|
|
||||||
|
--replace_regex $regex_charsetdir
|
||||||
select @@global.character_sets_dir;
|
select @@global.character_sets_dir;
|
||||||
|
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
select @@session.character_sets_dir;
|
select @@session.character_sets_dir;
|
||||||
--replace_result $MYSQL_CHARSETSDIR MYSQL_CHARSETSDIR
|
--replace_regex $regex_charsetdir
|
||||||
show global variables like 'character_sets_dir';
|
show global variables like 'character_sets_dir';
|
||||||
--replace_result $MYSQL_CHARSETSDIR MYSQL_CHARSETSDIR
|
--replace_regex $regex_charsetdir
|
||||||
show session variables like 'character_sets_dir';
|
show session variables like 'character_sets_dir';
|
||||||
--replace_result $MYSQL_CHARSETSDIR MYSQL_CHARSETSDIR
|
--replace_regex $regex_charsetdir
|
||||||
select * from information_schema.global_variables where variable_name='character_sets_dir';
|
select * from information_schema.global_variables where variable_name='character_sets_dir';
|
||||||
--replace_result $MYSQL_CHARSETSDIR MYSQL_CHARSETSDIR
|
--replace_regex $regex_charsetdir
|
||||||
select * from information_schema.session_variables where variable_name='character_sets_dir';
|
select * from information_schema.session_variables where variable_name='character_sets_dir';
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -11,5 +11,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
transaction_prealloc_size_basic_32 : Bug#11748572
|
transaction_prealloc_size_basic_32 : Bug#11748572
|
||||||
transaction_prealloc_size_basic_64 : Bug#11748572
|
transaction_prealloc_size_basic_64 : Bug#11748572
|
||||||
|
query_cache_size_basic_32 : Bug#13535584
|
||||||
|
query_cache_size_basic_64 : Bug#11748572
|
||||||
#thread_cache_size_func : Bug#11750172: 2008-11-07 joro main.thread_cache_size_func fails in pushbuild when run with pool of threads
|
#thread_cache_size_func : Bug#11750172: 2008-11-07 joro main.thread_cache_size_func fails in pushbuild when run with pool of threads
|
||||||
|
|
||||||
|
@@ -0,0 +1,52 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
|
||||||
|
SET @start_global_value = @@global.innodb_change_buffering_debug;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
|
||||||
|
#
|
||||||
|
# exists as global only
|
||||||
|
#
|
||||||
|
select @@global.innodb_change_buffering_debug in (0, 1);
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
select @@session.innodb_change_buffering_debug;
|
||||||
|
show global variables like 'innodb_change_buffering_debug';
|
||||||
|
show session variables like 'innodb_change_buffering_debug';
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show that it's writable
|
||||||
|
#
|
||||||
|
set global innodb_change_buffering_debug=1;
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
set @@global.innodb_change_buffering_debug=0;
|
||||||
|
select @@global.innodb_change_buffering_debug;
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_change_buffering_debug';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
set session innodb_change_buffering_debug='some';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
set @@session.innodb_change_buffering_debug='some';
|
||||||
|
|
||||||
|
#
|
||||||
|
# incorrect types
|
||||||
|
#
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_change_buffering_debug=1.1;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_change_buffering_debug='foo';
|
||||||
|
set global innodb_change_buffering_debug=-2;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_change_buffering_debug=1e1;
|
||||||
|
set global innodb_change_buffering_debug=2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
SET @@global.innodb_change_buffering_debug = @start_global_value;
|
||||||
|
SELECT @@global.innodb_change_buffering_debug;
|
@@ -0,0 +1,53 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
|
||||||
|
SET @start_global_value = @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
|
||||||
|
#
|
||||||
|
# exists as global only
|
||||||
|
#
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug between 0 and 1024;
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
select @@session.innodb_trx_rseg_n_slots_debug;
|
||||||
|
show global variables like 'innodb_trx_rseg_n_slots_debug';
|
||||||
|
show session variables like 'innodb_trx_rseg_n_slots_debug';
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show that it's writable
|
||||||
|
#
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1;
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
set @@global.innodb_trx_rseg_n_slots_debug=0;
|
||||||
|
select @@global.innodb_trx_rseg_n_slots_debug;
|
||||||
|
select * from information_schema.global_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
select * from information_schema.session_variables where variable_name='innodb_trx_rseg_n_slots_debug';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
set session innodb_trx_rseg_n_slots_debug='some';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
set @@session.innodb_trx_rseg_n_slots_debug='some';
|
||||||
|
|
||||||
|
#
|
||||||
|
# incorrect types
|
||||||
|
#
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1.1;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_trx_rseg_n_slots_debug='foo';
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=-2;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1e1;
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1024;
|
||||||
|
set global innodb_trx_rseg_n_slots_debug=1025;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
SET @@global.innodb_trx_rseg_n_slots_debug = @start_global_value;
|
||||||
|
SELECT @@global.innodb_trx_rseg_n_slots_debug;
|
59
mysql-test/suite/sys_vars/t/stored_program_cache_basic.test
Normal file
59
mysql-test/suite/sys_vars/t/stored_program_cache_basic.test
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Variable Name: stored_program_cache
|
||||||
|
# Scope: GLOBAL
|
||||||
|
# Access Type: Dynamic
|
||||||
|
# Data Type: numeric
|
||||||
|
# Default Value: 256
|
||||||
|
# Range: 256-524288
|
||||||
|
|
||||||
|
--source include/load_sysvars.inc
|
||||||
|
|
||||||
|
--echo # Saving initial value of stored_program_cache in a temporary variable
|
||||||
|
SET @start_value = @@global.stored_program_cache;
|
||||||
|
SELECT @start_value;
|
||||||
|
|
||||||
|
--echo # Display the DEFAULT value of stored_program_cache
|
||||||
|
SET @@global.stored_program_cache = DEFAULT;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
|
||||||
|
--echo # Verify default value of variable
|
||||||
|
SELECT @@global.stored_program_cache = 256;
|
||||||
|
|
||||||
|
--echo # Change the value of stored_program_cache to a valid value
|
||||||
|
SET @@global.stored_program_cache = 512;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
|
||||||
|
--echo # Change the value of stored_program_cache to invalid value
|
||||||
|
SET @@global.stored_program_cache = -1;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
|
||||||
|
SET @@global.stored_program_cache =100000000000;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
|
||||||
|
SET @@global.stored_program_cache = 0;
|
||||||
|
SELECT @@global.stored_program_cache;
|
||||||
|
|
||||||
|
--Error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET @@global.stored_program_cache = 10000.01;
|
||||||
|
|
||||||
|
--Error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET @@global.stored_program_cache = ON;
|
||||||
|
--Error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET @@global.stored_program_cache= 'test';
|
||||||
|
|
||||||
|
--Error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET @@global.stored_program_cache = '';
|
||||||
|
|
||||||
|
--echo # Test if accessing session stored_program_cache gives error
|
||||||
|
|
||||||
|
--Error ER_GLOBAL_VARIABLE
|
||||||
|
SET @@session.stored_program_cache = 0;
|
||||||
|
|
||||||
|
--echo # Check if accessing variable without SCOPE points to same global variable
|
||||||
|
|
||||||
|
SET @@global.stored_program_cache = 512;
|
||||||
|
SELECT @@stored_program_cache = @@global.stored_program_cache;
|
||||||
|
|
||||||
|
--echo # Restore initial value
|
||||||
|
|
||||||
|
SET @@global.stored_program_cache = @start_value;
|
||||||
|
SELECT @@global.stored_program_cache;
|
@@ -361,4 +361,51 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#13463415 63502: INCORRECT RESULTS OF BIGINT AND DECIMAL COMPARISON
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t_bigint(id BIGINT);
|
||||||
|
INSERT INTO t_bigint VALUES (1), (2);
|
||||||
|
|
||||||
|
SELECT id, id >= 1.1 FROM t_bigint;
|
||||||
|
SELECT id, 1.1 <= id FROM t_bigint;
|
||||||
|
|
||||||
|
SELECT id, id = 1.1 FROM t_bigint;
|
||||||
|
SELECT id, 1.1 = id FROM t_bigint;
|
||||||
|
|
||||||
|
SELECT * from t_bigint WHERE id = 1.1;
|
||||||
|
SELECT * from t_bigint WHERE id = 1.1e0;
|
||||||
|
SELECT * from t_bigint WHERE id = '1.1';
|
||||||
|
SELECT * from t_bigint WHERE id = '1.1e0';
|
||||||
|
|
||||||
|
SELECT * from t_bigint WHERE id IN (1.1, 2.2);
|
||||||
|
SELECT * from t_bigint WHERE id IN (1.1e0, 2.2e0);
|
||||||
|
SELECT * from t_bigint WHERE id IN ('1.1', '2.2');
|
||||||
|
SELECT * from t_bigint WHERE id IN ('1.1e0', '2.2e0');
|
||||||
|
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN 1.1 AND 1.9;
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN 1.1e0 AND 1.9e0;
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN '1.1' AND '1.9';
|
||||||
|
SELECT * from t_bigint WHERE id BETWEEN '1.1e0' AND '1.9e0';
|
||||||
|
|
||||||
|
DROP TABLE t_bigint;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11758543 50756: BIGINT '100' MATCHES 1.001E2
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a BIGINT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
|
# a. These queries correctly return 0 rows:
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a) BETWEEN 0 and 0.9;
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a)=0.9;
|
||||||
|
SELECT * FROM t1 WHERE coalesce(a) in (0.8,0.9);
|
||||||
|
|
||||||
|
# b. These queries mistakenely returned 1 row:
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN 0 AND 0.9;
|
||||||
|
SELECT * FROM t1 WHERE a=0.9;
|
||||||
|
SELECT * FROM t1 WHERE a IN (0.8,0.9);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1455,6 +1455,14 @@ SELECT HEX(LPAD(_utf8 0xD18F, 3, 0x20));
|
|||||||
SELECT HEX(INSERT(_utf8 0xD18F, 2, 1, 0x20));
|
SELECT HEX(INSERT(_utf8 0xD18F, 2, 1, 0x20));
|
||||||
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11752408 - 43593: DUMP/BACKUP/RESTORE/UPGRADE TOOLS FAILS BECAUSE OF UTF8_GENERAL_CI
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci);
|
||||||
|
INSERT INTO t1 VALUES ('a'),('r'),('s'),(_latin1 0xDF),(_latin1 0xF7),('t'),('z');
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
SELECT a, COUNT(*) FROM t1 GROUP BY a;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
|
@@ -1459,6 +1459,45 @@ SELECT stddev_samp(rpad(1.0,2048,1));
|
|||||||
SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1)));
|
SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1)));
|
||||||
SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc));
|
SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#13359121 LARGE NUMBERS, /STRINGS/DTOA.C:662:
|
||||||
|
--echo # BALLOC: ASSERTION `K <= 15' FAILED.
|
||||||
|
--echo # Bug#12985021 SIMPLE QUERY WITH DECIMAL NUMBERS TAKE AN
|
||||||
|
--echo # EXTRAORDINARY LONG TIME TO EXECUTE
|
||||||
|
|
||||||
|
SELECT @tmp_max:= @@global.max_allowed_packet;
|
||||||
|
SET @@global.max_allowed_packet=1024*1024*1024;
|
||||||
|
# switching connection to allow the new max_allowed_packet take effect
|
||||||
|
--connect (newconn, localhost, root,,)
|
||||||
|
|
||||||
|
SELECT @@global.max_allowed_packet;
|
||||||
|
|
||||||
|
do
|
||||||
|
format(rpad('111111111.1',
|
||||||
|
1111111,
|
||||||
|
'999999999999999999999999999999999999999999'),0,'be_BY')
|
||||||
|
;
|
||||||
|
|
||||||
|
DO
|
||||||
|
round(
|
||||||
|
concat( (
|
||||||
|
coalesce( (
|
||||||
|
linefromwkb('2147483648',
|
||||||
|
-b'1111111111111111111111111111111111111111111')),
|
||||||
|
( convert('[.DC2.]',decimal(30,30)) ),
|
||||||
|
bit_count('')
|
||||||
|
) ),
|
||||||
|
( lpad( ( elt('01','}:K5')),
|
||||||
|
sha1('P'),
|
||||||
|
( ( select '-9223372036854775808.1' > all (select '')))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
SET @@global.max_allowed_packet:= @tmp_max;
|
||||||
|
--disconnect newconn
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
|
@@ -915,6 +915,67 @@ SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
|||||||
|
|
||||||
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13458237 INCONSISTENT HANDLING OF INVALIDE DATES WITH ZERO DAY
|
||||||
|
--echo # SIMILAR TO '2009-10-00'
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
query_vertical SELECT
|
||||||
|
DATE('20091000'),
|
||||||
|
STR_TO_DATE('200910','%Y%m'),
|
||||||
|
LAST_DAY('2009-10-00'),
|
||||||
|
LAST_DAY(DATE('2009-10-00')),
|
||||||
|
LAST_DAY(DATE'2009-10-00'),
|
||||||
|
LAST_DAY(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEK('2009-10-00'),
|
||||||
|
WEEK(DATE('2009-10-00')),
|
||||||
|
WEEK(DATE'2009-10-00'),
|
||||||
|
WEEK(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEKOFYEAR('2009-10-00'),
|
||||||
|
WEEKOFYEAR(DATE('2009-10-00')),
|
||||||
|
WEEKOFYEAR(DATE'2009-10-00'),
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
DAYOFYEAR('2009-10-00'),
|
||||||
|
DAYOFYEAR(DATE('2009-10-00')),
|
||||||
|
DAYOFYEAR(DATE'2009-10-00'),
|
||||||
|
DAYOFYEAR(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
WEEKDAY('2009-10-00'),
|
||||||
|
WEEKDAY(DATE('2009-10-00')),
|
||||||
|
WEEKDAY(DATE'2009-10-00'),
|
||||||
|
WEEKDAY(STR_TO_DATE('200910','%Y%m')),
|
||||||
|
TO_DAYs('2009-10-00'),
|
||||||
|
TO_DAYs(DATE('2009-10-00')),
|
||||||
|
TO_DAYs(DATE'2009-10-00'),
|
||||||
|
TO_DAYs(STR_TO_DATE('200910','%Y%m'));
|
||||||
|
|
||||||
|
query_vertical SELECT
|
||||||
|
DATE('00000100'),
|
||||||
|
STR_TO_DATE('000001','%Y%m'),
|
||||||
|
LAST_DAY('0000-01-00'),
|
||||||
|
LAST_DAY(DATE('0000-01-00')),
|
||||||
|
LAST_DAY(DATE'0000-01-00'),
|
||||||
|
LAST_DAY(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEK('0000-01-00'),
|
||||||
|
WEEK(DATE('0000-01-00')),
|
||||||
|
WEEK(DATE'0000-01-00'),
|
||||||
|
WEEK(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEKOFYEAR('0000-01-00'),
|
||||||
|
WEEKOFYEAR(DATE('0000-01-00')),
|
||||||
|
WEEKOFYEAR(DATE'0000-01-00'),
|
||||||
|
WEEKOFYEAR(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
DAYOFYEAR('0000-01-00'),
|
||||||
|
DAYOFYEAR(DATE('0000-01-00')),
|
||||||
|
DAYOFYEAR(DATE'0000-01-00'),
|
||||||
|
DAYOFYEAR(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
WEEKDAY('0000-01-00'),
|
||||||
|
WEEKDAY(DATE('0000-01-00')),
|
||||||
|
WEEKDAY(DATE'0000-01-00'),
|
||||||
|
WEEKDAY(STR_TO_DATE('000001','%Y%m')),
|
||||||
|
TO_DAYs('0000-01-00'),
|
||||||
|
TO_DAYs(DATE('0000-01-00')),
|
||||||
|
TO_DAYs(DATE'0000-01-00'),
|
||||||
|
TO_DAYs(STR_TO_DATE('000001','%Y%m'));
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
@@ -940,6 +1001,21 @@ SELECT MONTHNAME(0), MONTHNAME(0) IS NULL, MONTHNAME(0) + 1;
|
|||||||
--error ER_WRONG_VALUE_FOR_VAR
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
SET storage_engine=NULL;
|
SET storage_engine=NULL;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13354387 - CRASH IN IN MY_DECIMAL::OPERATOR FOR VIEW AND FUNCTION UNIX_TIMESTAMP
|
||||||
|
--echo # Part1 (5.5)
|
||||||
|
SET time_zone='+03:00';
|
||||||
|
CREATE TABLE t1 (a DATETIME NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('2009-09-20 07:32:39.06');
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00 00:00:00.00');
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
SELECT CAST(UNIX_TIMESTAMP(a) AS DECIMAL(25,3)) AS c1 FROM v1 ORDER BY 1;
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET time_zone=DEFAULT;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug #59686 crash in String::copy() with time data type
|
--echo # Bug #59686 crash in String::copy() with time data type
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -36,6 +36,14 @@ connection con0;
|
|||||||
set GLOBAL init_connect="adsfsdfsdfs";
|
set GLOBAL init_connect="adsfsdfsdfs";
|
||||||
connect (con5,localhost,user_1,,);
|
connect (con5,localhost,user_1,,);
|
||||||
connection con5;
|
connection con5;
|
||||||
|
# BUG#11755281/47032: ERROR 2006 / ERROR 2013 INSTEAD OF PROPER ERROR MESSAGE
|
||||||
|
# We now throw a proper error message here:
|
||||||
|
--replace_regex /connection .* to/connection to/
|
||||||
|
--error ER_NEW_ABORTING_CONNECTION
|
||||||
|
select @a;
|
||||||
|
# We got disconnected after receiving the above error message; any further
|
||||||
|
# requests should fail with a notice that no one's listening to us.
|
||||||
|
# --error CR_SERVER_GONE_ERROR,CR_SERVER_LOST
|
||||||
--error 2013,2006
|
--error 2013,2006
|
||||||
select @a;
|
select @a;
|
||||||
connection con0;
|
connection con0;
|
||||||
|
@@ -251,3 +251,19 @@ SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12361113: crash when load index into cache
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo # Note that this creates an empty disabled key cache!
|
||||||
|
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||||
|
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 in key_cache_none;
|
||||||
|
--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||||
|
--echo # since the default cache is used due to CACHE INDEX failed for
|
||||||
|
--echo # key_cache_none.
|
||||||
|
LOAD INDEX INTO CACHE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -146,6 +146,7 @@ CREATE TABLE `я` (a INT) engine=myisam;
|
|||||||
SET NAMES DEFAULT;
|
SET NAMES DEFAULT;
|
||||||
--echo mysqlcheck --default-character-set="latin1" --databases test
|
--echo mysqlcheck --default-character-set="latin1" --databases test
|
||||||
# Error returned depends on platform, replace it with "Table doesn't exist"
|
# Error returned depends on platform, replace it with "Table doesn't exist"
|
||||||
|
call mtr.add_suppression("Can't find file: '..test.@003f.frm'");
|
||||||
--replace_result "Can't find file: './test/@003f.frm' (errno: 22)" "Table doesn't exist" "Table 'test.?' doesn't exist" "Table doesn't exist"
|
--replace_result "Can't find file: './test/@003f.frm' (errno: 22)" "Table doesn't exist" "Table 'test.?' doesn't exist" "Table doesn't exist"
|
||||||
--exec $MYSQL_CHECK --default-character-set="latin1" --databases test
|
--exec $MYSQL_CHECK --default-character-set="latin1" --databases test
|
||||||
--echo mysqlcheck --default-character-set="utf8" --databases test
|
--echo mysqlcheck --default-character-set="utf8" --databases test
|
||||||
|
@@ -2201,6 +2201,118 @@ DROP DATABASE `test-database`;
|
|||||||
# Switching back to test database.
|
# Switching back to test database.
|
||||||
USE test;
|
USE test;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#11760384 : 52792: mysqldump in XML mode does not dump routines.
|
||||||
|
--echo #
|
||||||
|
CREATE DATABASE BUG52792;
|
||||||
|
USE BUG52792;
|
||||||
|
CREATE TABLE t1 (c1 INT, c2 VARCHAR(20));
|
||||||
|
CREATE TABLE t2 (c1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'aaa'), (2, 'bbb'), (3, 'ccc');
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
--echo # Stored Procedures.
|
||||||
|
|
||||||
|
DELIMITER //;
|
||||||
|
CREATE PROCEDURE simpleproc1 (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t1;
|
||||||
|
END//
|
||||||
|
DELIMITER ;//
|
||||||
|
|
||||||
|
DELIMITER //;
|
||||||
|
CREATE PROCEDURE simpleproc2 (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t2;
|
||||||
|
END//
|
||||||
|
DELIMITER ;//
|
||||||
|
|
||||||
|
--echo # Events.
|
||||||
|
|
||||||
|
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DO DROP DATABASE BUG52792;
|
||||||
|
CREATE EVENT e2 ON SCHEDULE EVERY 1 SECOND DO DROP DATABASE BUG52792;
|
||||||
|
|
||||||
|
--echo # Functions.
|
||||||
|
|
||||||
|
CREATE FUNCTION `hello1` (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ' ,s ,'!');
|
||||||
|
|
||||||
|
CREATE FUNCTION `hello2` (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]>, ' , s ,'!');
|
||||||
|
|
||||||
|
--echo # Triggers.
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE TRIGGER trig1 BEFORE INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE TRIGGER trig2 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES(1, ']]>');
|
||||||
|
INSERT INTO t2 VALUES(2, '<![CDATA]]>');
|
||||||
|
INSERT INTO t2 VALUES(3, '<![CDATA[');
|
||||||
|
INSERT INTO t2 VALUES(4, '< > & \ " _');
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
--echo # Views
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
--echo
|
||||||
|
--echo # Dumping BUG52792 database in xml format.
|
||||||
|
--echo
|
||||||
|
--echo # Running 'replace_regex on timestamp'
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/--TIME--/
|
||||||
|
--exec $MYSQL_DUMP --user=root --compact -R -E --triggers -X BUG52792
|
||||||
|
--echo
|
||||||
|
--echo # Dumping BUG52792 database in xml format with comments.
|
||||||
|
--echo
|
||||||
|
--echo # Running 'replace_regex on timestamp'
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/--TIME--/
|
||||||
|
--exec $MYSQL_DUMP --comments --user=root -R -E --triggers -X BUG52792
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # Test to check 'Insufficient privileges' error.
|
||||||
|
--echo
|
||||||
|
|
||||||
|
GRANT ALL PRIVILEGES ON BUG52792.* TO user1;
|
||||||
|
|
||||||
|
connect (conn_1, localhost, user1, , BUG52792, $MASTER_MYPORT, $MASTER_MYSOCK);
|
||||||
|
connection conn_1;
|
||||||
|
|
||||||
|
--echo # Running 'replace_regex on timestamp'
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/--TIME--/
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP --user=user1 -R -E --triggers -X BUG52792
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
disconnect conn_1;
|
||||||
|
|
||||||
|
DROP USER user1;
|
||||||
|
DROP DATABASE BUG52792;
|
||||||
|
--echo # UTF-8
|
||||||
|
CREATE DATABASE BUG52792;
|
||||||
|
USE BUG52792;
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE FUNCTION `straße` ( c1 CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT(']]>, ', s, '!');
|
||||||
|
|
||||||
|
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --default-character-set=utf8 --compatible=mysql323 -R -X BUG52792
|
||||||
|
|
||||||
|
DROP DATABASE BUG52792;
|
||||||
|
|
||||||
|
USE test;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
--echo #
|
--echo #
|
||||||
@@ -2215,5 +2327,43 @@ CREATE TABLE t1 (a INT);
|
|||||||
--exec $MYSQL_DUMP --compatible=no_t,no_f --skip-comments test
|
--exec $MYSQL_DUMP --compatible=no_t,no_f --skip-comments test
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12809202 61854: MYSQLDUMP --SINGLE-TRANSACTION --FLUSH-LOG BREAKS
|
||||||
|
--echo # CONSISTENCY
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP DATABASE IF EXISTS b12809202_db;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE DATABASE b12809202_db;
|
||||||
|
CREATE TABLE b12809202_db.t1 (c1 INT);
|
||||||
|
CREATE TABLE b12809202_db.t2 (c1 INT);
|
||||||
|
|
||||||
|
INSERT INTO b12809202_db.t1 VALUES (1), (2), (3);
|
||||||
|
INSERT INTO b12809202_db.t2 VALUES (1), (2), (3);
|
||||||
|
|
||||||
|
--echo # Starting mysqldump with --single-transaction & --flush-log options..
|
||||||
|
--echo # Note : In the following dump the transaction
|
||||||
|
--echo # should start only after the logs are
|
||||||
|
--echo # flushed, as 'flush logs' causes implicit
|
||||||
|
--echo # commit starting 5.5.
|
||||||
|
--echo
|
||||||
|
--echo #### Dump starts here ####
|
||||||
|
--replace_regex /-- Server version.*// /-- MySQL dump .*// /-- Dump completed on .*/-- Dump completed/
|
||||||
|
--exec $MYSQL_DUMP --verbose --single-transaction --flush-log b12809202_db 2>&1
|
||||||
|
--echo
|
||||||
|
--echo #### Dump ends here ####
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE b12809202_db.t1;
|
||||||
|
DROP TABLE b12809202_db.t2;
|
||||||
|
DROP DATABASE b12809202_db;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Delete all existing binary logs.
|
||||||
|
--echo #
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
# Wait till we reached the initial number of concurrent sessions
|
# Wait till we reached the initial number of concurrent sessions
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
@@ -8,7 +8,7 @@ DROP TABLE IF EXISTS t1;
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # Bug#51851: Server with SBR locks mutex twice on LOAD DATA into
|
--echo # Bug#51851: Server with SBR locks mutex twice on LOAD DATA into
|
||||||
--echo # partitioned MyISAM table
|
--echo # partitioned MyISAM table
|
||||||
--write_file init_file.txt
|
--write_file $MYSQLTEST_VARDIR/tmp/init_file.txt
|
||||||
abcd
|
abcd
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@@ -19,8 +19,9 @@ CREATE TABLE t1
|
|||||||
INDEX namelocs (name(255))) ENGINE = MyISAM
|
INDEX namelocs (name(255))) ENGINE = MyISAM
|
||||||
PARTITION BY HASH(id) PARTITIONS 2;
|
PARTITION BY HASH(id) PARTITIONS 2;
|
||||||
|
|
||||||
LOAD DATA LOCAL INFILE 'init_file.txt'
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/tmp/init_file.txt'
|
||||||
INTO TABLE t1 (name);
|
INTO TABLE t1 (name);
|
||||||
|
|
||||||
--remove_file init_file.txt
|
--remove_file $MYSQLTEST_VARDIR/tmp/init_file.txt
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -239,6 +239,34 @@ CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
|||||||
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
|
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12361113: crash when load index into cache
|
||||||
|
--echo #
|
||||||
|
--echo # Note that this creates an empty disabled key cache!
|
||||||
|
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||||
|
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) )
|
||||||
|
ENGINE = MYISAM
|
||||||
|
PARTITION BY HASH(a) PARTITIONS 2;
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 IN key_cache_none;
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 PARTITION (p0) IN key_cache_none;
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 PARTITION (p1) IN key_cache_none;
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`b`) IN key_cache_none;
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 PARTITION (p1) KEY (`b`) IN key_cache_none;
|
||||||
|
--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||||
|
--echo # since the default cache is used due to CACHE INDEX failed for
|
||||||
|
--echo # key_cache_none.
|
||||||
|
LOAD INDEX INTO CACHE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo # Clean up
|
||||||
SET GLOBAL hot_cache.key_buffer_size = 0;
|
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||||
SET GLOBAL warm_cache.key_buffer_size = 0;
|
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||||
SET @@global.cold_cache.key_buffer_size = 0;
|
SET @@global.cold_cache.key_buffer_size = 0;
|
||||||
|
@@ -1392,4 +1392,80 @@ SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13519696 - 62940: SELECT RESULTS VARY WITH VERSION AND
|
||||||
|
--echo # WITH/WITHOUT INDEX RANGE SCAN
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (id int unsigned not null auto_increment primary key);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
create table t2 (
|
||||||
|
id int unsigned not null auto_increment,
|
||||||
|
val decimal(5,3) not null,
|
||||||
|
primary key (id,val),
|
||||||
|
unique key (val,id),
|
||||||
|
unique key (id));
|
||||||
|
--disable_warnings
|
||||||
|
insert into t2 select null,id*0.0009 from t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
select count(val) from t2 ignore index (val) where val > 0.1155;
|
||||||
|
select count(val) from t2 force index (val) where val > 0.1155;
|
||||||
|
|
||||||
|
drop table t2, t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13453382 - REGRESSION SINCE 5.1.39, RANGE OPTIMIZER WRONG
|
||||||
|
--echo # RESULTS WITH DECIMAL CONVERSION
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (a int,b int,c int,primary key (a,c));
|
||||||
|
insert into t1 values (1,1,2),(1,1,3),(1,1,4);
|
||||||
|
# show that the integer 3 is bigger than the decimal 2.9,
|
||||||
|
# which should also apply to comparing "c" with 2.9
|
||||||
|
# when c is 3.
|
||||||
|
select convert(3, signed integer) > 2.9;
|
||||||
|
select * from t1 force index (primary) where a=1 and c>= 2.9;
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c>= 2.9;
|
||||||
|
select * from t1 force index (primary) where a=1 and c> 2.9;
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c> 2.9;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13463488 - 63437: CHAR & BETWEEN WITH INDEX RETURNS WRONG
|
||||||
|
--echo # RESULT AFTER MYSQL 5.1.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(
|
||||||
|
F1 CHAR(5) NOT NULL,
|
||||||
|
F2 CHAR(5) NOT NULL,
|
||||||
|
F3 CHAR(5) NOT NULL,
|
||||||
|
PRIMARY KEY(F1),
|
||||||
|
INDEX IDX_F2(F2)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('A','A','A'),('AA','AA','AA'),('AAA','AAA','AAA'),
|
||||||
|
('AAAA','AAAA','AAAA'),('AAAAA','AAAAA','AAAAA');
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE F1 = 'A ';
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 = 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 >= 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 > 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 WHERE F2 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 WHERE F3 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 BETWEEN 'A ' AND
|
||||||
|
'AAAAA';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@@ -3336,28 +3336,20 @@ drop table t3|
|
|||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop procedure if exists bug6857|
|
drop procedure if exists bug6857|
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
create procedure bug6857(counter int)
|
create procedure bug6857()
|
||||||
begin
|
begin
|
||||||
declare t0, t1 int;
|
declare t0, t1 int;
|
||||||
declare plus bool default 0;
|
declare plus bool default 0;
|
||||||
|
set t0 = unix_timestamp();
|
||||||
set t0 = current_time();
|
select sleep(1.1);
|
||||||
while counter > 0 do
|
set t1 = unix_timestamp();
|
||||||
set counter = counter - 1;
|
|
||||||
end while;
|
|
||||||
set t1 = current_time();
|
|
||||||
if t1 > t0 then
|
if t1 > t0 then
|
||||||
set plus = 1;
|
set plus = 1;
|
||||||
end if;
|
end if;
|
||||||
select plus;
|
select plus;
|
||||||
end|
|
end|
|
||||||
|
|
||||||
# QQ: This is currently disabled. Not only does it slow down a normal test
|
call bug6857()|
|
||||||
# run, it makes running with valgrind (or similar tools) extremely
|
|
||||||
# painful.
|
|
||||||
# Make sure this takes at least one second on all machines in all builds.
|
|
||||||
# 30000 makes it about 3 seconds on an old 1.1GHz linux.
|
|
||||||
#call bug6857(300000)|
|
|
||||||
|
|
||||||
drop procedure bug6857|
|
drop procedure bug6857|
|
||||||
|
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
--skip-grant-tables
|
--skip-grant-tables
|
||||||
|
$UDF_EXAMPLE_LIB_OPT
|
||||||
|
@@ -338,8 +338,8 @@ DROP TABLE t1;
|
|||||||
DROP TABLE IF EXISTS t1, t2;
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
CREATE TABLE t2 (a INT);
|
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||||
|
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
@@ -359,7 +359,6 @@ let $wait_condition=
|
|||||||
--echo # Waiting until INSERT ... is blocked
|
--echo # Waiting until INSERT ... is blocked
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
--echo # Connection con2
|
--echo # Connection con2
|
||||||
--connection con2
|
--connection con2
|
||||||
@@ -368,6 +367,14 @@ COMMIT;
|
|||||||
--reap
|
--reap
|
||||||
--error ER_XA_RBDEADLOCK
|
--error ER_XA_RBDEADLOCK
|
||||||
XA COMMIT 'xid1';
|
XA COMMIT 'xid1';
|
||||||
|
|
||||||
|
--echo # Connection default
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--echo # Connection con2
|
||||||
|
connection con2;
|
||||||
# This caused the assert to be triggered
|
# This caused the assert to be triggered
|
||||||
XA START 'xid1';
|
XA START 'xid1';
|
||||||
|
|
||||||
|
@@ -204,6 +204,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused)))
|
|||||||
#ifdef HAVE_CHARSET_ucs2
|
#ifdef HAVE_CHARSET_ucs2
|
||||||
add_compiled_collation(&my_charset_ucs2_general_ci);
|
add_compiled_collation(&my_charset_ucs2_general_ci);
|
||||||
add_compiled_collation(&my_charset_ucs2_bin);
|
add_compiled_collation(&my_charset_ucs2_bin);
|
||||||
|
add_compiled_collation(&my_charset_ucs2_general_mysql500_ci);
|
||||||
#ifdef HAVE_UCA_COLLATIONS
|
#ifdef HAVE_UCA_COLLATIONS
|
||||||
add_compiled_collation(&my_charset_ucs2_unicode_ci);
|
add_compiled_collation(&my_charset_ucs2_unicode_ci);
|
||||||
add_compiled_collation(&my_charset_ucs2_icelandic_uca_ci);
|
add_compiled_collation(&my_charset_ucs2_icelandic_uca_ci);
|
||||||
@@ -236,6 +237,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused)))
|
|||||||
#ifdef HAVE_CHARSET_utf8
|
#ifdef HAVE_CHARSET_utf8
|
||||||
add_compiled_collation(&my_charset_utf8_general_ci);
|
add_compiled_collation(&my_charset_utf8_general_ci);
|
||||||
add_compiled_collation(&my_charset_utf8_bin);
|
add_compiled_collation(&my_charset_utf8_bin);
|
||||||
|
add_compiled_collation(&my_charset_utf8_general_mysql500_ci);
|
||||||
#ifdef HAVE_UTF8_GENERAL_CS
|
#ifdef HAVE_UTF8_GENERAL_CS
|
||||||
add_compiled_collation(&my_charset_utf8_general_cs);
|
add_compiled_collation(&my_charset_utf8_general_cs);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -740,17 +740,55 @@ cmd="$cmd $args"
|
|||||||
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"
|
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"
|
||||||
|
|
||||||
log_notice "Starting $MYSQLD daemon with databases from $DATADIR"
|
log_notice "Starting $MYSQLD daemon with databases from $DATADIR"
|
||||||
|
|
||||||
|
# variable to track the current number of "fast" (a.k.a. subsecond) restarts
|
||||||
|
fast_restart=0
|
||||||
|
# maximum number of restarts before trottling kicks in
|
||||||
|
max_fast_restarts=5
|
||||||
|
# flag whether a usable sleep command exists
|
||||||
|
have_sleep=1
|
||||||
|
|
||||||
while true
|
while true
|
||||||
do
|
do
|
||||||
rm -f $safe_mysql_unix_port "$pid_file" # Some extra safety
|
rm -f $safe_mysql_unix_port "$pid_file" # Some extra safety
|
||||||
|
|
||||||
|
start_time=`date +%M%S`
|
||||||
|
|
||||||
eval_log_error "$cmd"
|
eval_log_error "$cmd"
|
||||||
|
|
||||||
|
end_time=`date +%M%S`
|
||||||
|
|
||||||
if test ! -f "$pid_file" # This is removed if normal shutdown
|
if test ! -f "$pid_file" # This is removed if normal shutdown
|
||||||
then
|
then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# sanity check if time reading is sane and there's sleep
|
||||||
|
if test $end_time -gt 0 -a $have_sleep -gt 0
|
||||||
|
then
|
||||||
|
# throttle down the fast restarts
|
||||||
|
if test $end_time -eq $start_time
|
||||||
|
then
|
||||||
|
fast_restart=`expr $fast_restart + 1`
|
||||||
|
if test $fast_restart -ge $max_fast_restarts
|
||||||
|
then
|
||||||
|
log_notice "The server is respawning too fast. Sleeping for 1 second."
|
||||||
|
sleep 1
|
||||||
|
sleep_state=$?
|
||||||
|
if test $sleep_state -gt 0
|
||||||
|
then
|
||||||
|
log_notice "The server is respawning too fast and no working sleep command. Turning off trottling."
|
||||||
|
have_sleep=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fast_restart=0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
fast_restart=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if @TARGET_LINUX@ && test $KILL_MYSQLD -eq 1
|
if @TARGET_LINUX@ && test $KILL_MYSQLD -eq 1
|
||||||
then
|
then
|
||||||
# Test if one process was hanging.
|
# Test if one process was hanging.
|
||||||
|
@@ -783,7 +783,7 @@ long calc_daynr(uint year,uint month,uint day)
|
|||||||
temp=(int) ((y/100+1)*3)/4;
|
temp=(int) ((y/100+1)*3)/4;
|
||||||
DBUG_PRINT("exit",("year: %d month: %d day: %d -> daynr: %ld",
|
DBUG_PRINT("exit",("year: %d month: %d day: %d -> daynr: %ld",
|
||||||
y+(month <= 2),month,day,delsum+y/4-temp));
|
y+(month <= 2),month,day,delsum+y/4-temp));
|
||||||
DBUG_ASSERT(delsum+(int) y/4-temp > 0);
|
DBUG_ASSERT(delsum+(int) y/4-temp >= 0);
|
||||||
DBUG_RETURN(delsum+(int) y/4-temp);
|
DBUG_RETURN(delsum+(int) y/4-temp);
|
||||||
} /* calc_daynr */
|
} /* calc_daynr */
|
||||||
|
|
||||||
|
23
sql/item.cc
23
sql/item.cc
@@ -6812,7 +6812,9 @@ bool Item_direct_ref::is_null()
|
|||||||
|
|
||||||
bool Item_direct_ref::get_date(MYSQL_TIME *ltime,uint fuzzydate)
|
bool Item_direct_ref::get_date(MYSQL_TIME *ltime,uint fuzzydate)
|
||||||
{
|
{
|
||||||
return (null_value=(*ref)->get_date(ltime,fuzzydate));
|
bool tmp= (*ref)->get_date(ltime, fuzzydate);
|
||||||
|
null_value= (*ref)->null_value;
|
||||||
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -7397,9 +7399,13 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
|
|||||||
or less than the original Item. A 0 may also be returned if
|
or less than the original Item. A 0 may also be returned if
|
||||||
out of memory.
|
out of memory.
|
||||||
|
|
||||||
@note We only use this on the range optimizer/partition pruning,
|
@note We use this in the range optimizer/partition pruning,
|
||||||
because in some cases we can't store the value in the field
|
because in some cases we can't store the value in the field
|
||||||
without some precision/character loss.
|
without some precision/character loss.
|
||||||
|
|
||||||
|
We similarly use it to verify that expressions like
|
||||||
|
BIGINT_FIELD <cmp> <literal value>
|
||||||
|
is done correctly (as int/decimal/float according to literal type).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
||||||
@@ -7443,7 +7449,7 @@ int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
|||||||
|
|
||||||
return my_time_compare(&field_time, &item_time);
|
return my_time_compare(&field_time, &item_time);
|
||||||
}
|
}
|
||||||
return stringcmp(field_result, item_result);
|
return sortcmp(field_result, item_result, field->charset());
|
||||||
}
|
}
|
||||||
if (res_type == INT_RESULT)
|
if (res_type == INT_RESULT)
|
||||||
return 0; // Both are of type int
|
return 0; // Both are of type int
|
||||||
@@ -7455,12 +7461,17 @@ int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
|||||||
if (item->null_value)
|
if (item->null_value)
|
||||||
return 0;
|
return 0;
|
||||||
field_val= field->val_decimal(&field_buf);
|
field_val= field->val_decimal(&field_buf);
|
||||||
return my_decimal_cmp(item_val, field_val);
|
return my_decimal_cmp(field_val, item_val);
|
||||||
}
|
}
|
||||||
double result= item->val_real();
|
/*
|
||||||
|
The patch for Bug#13463415 started using this function for comparing
|
||||||
|
BIGINTs. That uncovered a bug in Visual Studio 32bit optimized mode.
|
||||||
|
Prefixing the auto variables with volatile fixes the problem....
|
||||||
|
*/
|
||||||
|
volatile double result= item->val_real();
|
||||||
if (item->null_value)
|
if (item->null_value)
|
||||||
return 0;
|
return 0;
|
||||||
double field_result= field->val_real();
|
volatile double field_result= field->val_real();
|
||||||
if (field_result < result)
|
if (field_result < result)
|
||||||
return -1;
|
return -1;
|
||||||
else if (field_result > result)
|
else if (field_result > result)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -435,11 +435,22 @@ static bool convert_constant_item(THD *thd, Item_field *field_item,
|
|||||||
orig_field_val= field->val_int();
|
orig_field_val= field->val_int();
|
||||||
if (!(*item)->is_null() && !(*item)->save_in_field(field, 1))
|
if (!(*item)->is_null() && !(*item)->save_in_field(field, 1))
|
||||||
{
|
{
|
||||||
Item *tmp= new Item_int_with_ref(field->val_int(), *item,
|
int field_cmp= 0;
|
||||||
test(field->flags & UNSIGNED_FLAG));
|
// If item is a decimal value, we must reject it if it was truncated.
|
||||||
if (tmp)
|
if (field->type() == MYSQL_TYPE_LONGLONG)
|
||||||
thd->change_item_tree(item, tmp);
|
{
|
||||||
result= 1; // Item was replaced
|
field_cmp= stored_field_cmp_to_item(thd, field, *item);
|
||||||
|
DBUG_PRINT("info", ("convert_constant_item %d", field_cmp));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == field_cmp)
|
||||||
|
{
|
||||||
|
Item *tmp= new Item_int_with_ref(field->val_int(), *item,
|
||||||
|
test(field->flags & UNSIGNED_FLAG));
|
||||||
|
if (tmp)
|
||||||
|
thd->change_item_tree(item, tmp);
|
||||||
|
result= 1; // Item was replaced
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* Restore the original field value. */
|
/* Restore the original field value. */
|
||||||
if (save_field_value)
|
if (save_field_value)
|
||||||
@@ -2321,10 +2332,10 @@ void Item_func_between::fix_length_and_dec()
|
|||||||
The following can't be recoded with || as convert_constant_item
|
The following can't be recoded with || as convert_constant_item
|
||||||
changes the argument
|
changes the argument
|
||||||
*/
|
*/
|
||||||
if (convert_constant_item(thd, field_item, &args[1]))
|
const bool cvt_arg1= convert_constant_item(thd, field_item, &args[1]);
|
||||||
cmp_type=INT_RESULT; // Works for all types.
|
const bool cvt_arg2= convert_constant_item(thd, field_item, &args[2]);
|
||||||
if (convert_constant_item(thd, field_item, &args[2]))
|
if (cvt_arg1 && cvt_arg2)
|
||||||
cmp_type=INT_RESULT; // Works for all types.
|
cmp_type=INT_RESULT; // Works for all types.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2747,7 +2747,7 @@ String *Item_time_typecast::val_str(String *str)
|
|||||||
|
|
||||||
bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
||||||
{
|
{
|
||||||
bool res= get_arg0_date(ltime, fuzzy_date);
|
bool res= get_arg0_date(ltime, TIME_FUZZY_DATE);
|
||||||
ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
|
ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
|
||||||
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
||||||
return res;
|
return res;
|
||||||
|
@@ -717,11 +717,11 @@ typedef struct st_print_event_info
|
|||||||
Such identifier is not yet unique generally as the event originating master
|
Such identifier is not yet unique generally as the event originating master
|
||||||
is resetable. Also the crashed master can be replaced with some other.
|
is resetable. Also the crashed master can be replaced with some other.
|
||||||
*/
|
*/
|
||||||
struct event_coordinates
|
typedef struct event_coordinates
|
||||||
{
|
{
|
||||||
char * file_name; // binlog file name (directories stripped)
|
char * file_name; // binlog file name (directories stripped)
|
||||||
my_off_t pos; // event's position in the binlog file
|
my_off_t pos; // event's position in the binlog file
|
||||||
};
|
} LOG_POS_COORD;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@class Log_event
|
@class Log_event
|
||||||
|
@@ -511,6 +511,11 @@ uint sync_binlog_period= 0, sync_relaylog_period= 0,
|
|||||||
sync_relayloginfo_period= 0, sync_masterinfo_period= 0;
|
sync_relayloginfo_period= 0, sync_masterinfo_period= 0;
|
||||||
ulong expire_logs_days = 0;
|
ulong expire_logs_days = 0;
|
||||||
ulong rpl_recovery_rank=0;
|
ulong rpl_recovery_rank=0;
|
||||||
|
/**
|
||||||
|
Soft upper limit for number of sp_head objects that can be stored
|
||||||
|
in the sp_cache for one connection.
|
||||||
|
*/
|
||||||
|
ulong stored_program_cache_size= 0;
|
||||||
|
|
||||||
const double log_10[] = {
|
const double log_10[] = {
|
||||||
1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009,
|
1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009,
|
||||||
@@ -7476,8 +7481,10 @@ static int fix_paths(void)
|
|||||||
(void) my_load_path(mysql_home,mysql_home,""); // Resolve current dir
|
(void) my_load_path(mysql_home,mysql_home,""); // Resolve current dir
|
||||||
(void) my_load_path(mysql_real_data_home,mysql_real_data_home,mysql_home);
|
(void) my_load_path(mysql_real_data_home,mysql_real_data_home,mysql_home);
|
||||||
(void) my_load_path(pidfile_name, pidfile_name_ptr, mysql_real_data_home);
|
(void) my_load_path(pidfile_name, pidfile_name_ptr, mysql_real_data_home);
|
||||||
(void) my_load_path(opt_plugin_dir, opt_plugin_dir_ptr ? opt_plugin_dir_ptr :
|
|
||||||
get_relative_path(PLUGINDIR), mysql_home);
|
convert_dirname(opt_plugin_dir, opt_plugin_dir_ptr ? opt_plugin_dir_ptr :
|
||||||
|
get_relative_path(PLUGINDIR), NullS);
|
||||||
|
(void) my_load_path(opt_plugin_dir, opt_plugin_dir, mysql_home);
|
||||||
opt_plugin_dir_ptr= opt_plugin_dir;
|
opt_plugin_dir_ptr= opt_plugin_dir;
|
||||||
|
|
||||||
my_realpath(mysql_unpacked_real_data_home, mysql_real_data_home, MYF(0));
|
my_realpath(mysql_unpacked_real_data_home, mysql_real_data_home, MYF(0));
|
||||||
@@ -7680,8 +7687,10 @@ PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids,
|
|||||||
key_LOCK_system_variables_hash, key_LOCK_table_share, key_LOCK_thd_data,
|
key_LOCK_system_variables_hash, key_LOCK_table_share, key_LOCK_thd_data,
|
||||||
key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log,
|
key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log,
|
||||||
key_master_info_data_lock, key_master_info_run_lock,
|
key_master_info_data_lock, key_master_info_run_lock,
|
||||||
|
key_master_info_sleep_lock,
|
||||||
key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock,
|
key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock,
|
||||||
key_relay_log_info_log_space_lock, key_relay_log_info_run_lock,
|
key_relay_log_info_log_space_lock, key_relay_log_info_run_lock,
|
||||||
|
key_relay_log_info_sleep_lock,
|
||||||
key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
|
key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
|
||||||
key_LOCK_error_messages, key_LOG_INFO_lock, key_LOCK_thread_count,
|
key_LOCK_error_messages, key_LOG_INFO_lock, key_LOCK_thread_count,
|
||||||
key_PARTITION_LOCK_auto_inc;
|
key_PARTITION_LOCK_auto_inc;
|
||||||
@@ -7727,10 +7736,12 @@ static PSI_mutex_info all_server_mutexes[]=
|
|||||||
{ &key_LOG_LOCK_log, "LOG::LOCK_log", 0},
|
{ &key_LOG_LOCK_log, "LOG::LOCK_log", 0},
|
||||||
{ &key_master_info_data_lock, "Master_info::data_lock", 0},
|
{ &key_master_info_data_lock, "Master_info::data_lock", 0},
|
||||||
{ &key_master_info_run_lock, "Master_info::run_lock", 0},
|
{ &key_master_info_run_lock, "Master_info::run_lock", 0},
|
||||||
|
{ &key_master_info_sleep_lock, "Master_info::sleep_lock", 0},
|
||||||
{ &key_mutex_slave_reporting_capability_err_lock, "Slave_reporting_capability::err_lock", 0},
|
{ &key_mutex_slave_reporting_capability_err_lock, "Slave_reporting_capability::err_lock", 0},
|
||||||
{ &key_relay_log_info_data_lock, "Relay_log_info::data_lock", 0},
|
{ &key_relay_log_info_data_lock, "Relay_log_info::data_lock", 0},
|
||||||
{ &key_relay_log_info_log_space_lock, "Relay_log_info::log_space_lock", 0},
|
{ &key_relay_log_info_log_space_lock, "Relay_log_info::log_space_lock", 0},
|
||||||
{ &key_relay_log_info_run_lock, "Relay_log_info::run_lock", 0},
|
{ &key_relay_log_info_run_lock, "Relay_log_info::run_lock", 0},
|
||||||
|
{ &key_relay_log_info_sleep_lock, "Relay_log_info::sleep_lock", 0},
|
||||||
{ &key_structure_guard_mutex, "Query_cache::structure_guard_mutex", 0},
|
{ &key_structure_guard_mutex, "Query_cache::structure_guard_mutex", 0},
|
||||||
{ &key_TABLE_SHARE_LOCK_ha_data, "TABLE_SHARE::LOCK_ha_data", 0},
|
{ &key_TABLE_SHARE_LOCK_ha_data, "TABLE_SHARE::LOCK_ha_data", 0},
|
||||||
{ &key_LOCK_error_messages, "LOCK_error_messages", PSI_FLAG_GLOBAL},
|
{ &key_LOCK_error_messages, "LOCK_error_messages", PSI_FLAG_GLOBAL},
|
||||||
@@ -7766,8 +7777,10 @@ PSI_cond_key key_BINLOG_COND_prep_xids, key_BINLOG_update_cond,
|
|||||||
key_delayed_insert_cond, key_delayed_insert_cond_client,
|
key_delayed_insert_cond, key_delayed_insert_cond_client,
|
||||||
key_item_func_sleep_cond, key_master_info_data_cond,
|
key_item_func_sleep_cond, key_master_info_data_cond,
|
||||||
key_master_info_start_cond, key_master_info_stop_cond,
|
key_master_info_start_cond, key_master_info_stop_cond,
|
||||||
|
key_master_info_sleep_cond,
|
||||||
key_relay_log_info_data_cond, key_relay_log_info_log_space_cond,
|
key_relay_log_info_data_cond, key_relay_log_info_log_space_cond,
|
||||||
key_relay_log_info_start_cond, key_relay_log_info_stop_cond,
|
key_relay_log_info_start_cond, key_relay_log_info_stop_cond,
|
||||||
|
key_relay_log_info_sleep_cond,
|
||||||
key_TABLE_SHARE_cond, key_user_level_lock_cond,
|
key_TABLE_SHARE_cond, key_user_level_lock_cond,
|
||||||
key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
|
key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
|
||||||
PSI_cond_key key_RELAYLOG_update_cond;
|
PSI_cond_key key_RELAYLOG_update_cond;
|
||||||
@@ -7795,10 +7808,12 @@ static PSI_cond_info all_server_conds[]=
|
|||||||
{ &key_master_info_data_cond, "Master_info::data_cond", 0},
|
{ &key_master_info_data_cond, "Master_info::data_cond", 0},
|
||||||
{ &key_master_info_start_cond, "Master_info::start_cond", 0},
|
{ &key_master_info_start_cond, "Master_info::start_cond", 0},
|
||||||
{ &key_master_info_stop_cond, "Master_info::stop_cond", 0},
|
{ &key_master_info_stop_cond, "Master_info::stop_cond", 0},
|
||||||
|
{ &key_master_info_sleep_cond, "Master_info::sleep_cond", 0},
|
||||||
{ &key_relay_log_info_data_cond, "Relay_log_info::data_cond", 0},
|
{ &key_relay_log_info_data_cond, "Relay_log_info::data_cond", 0},
|
||||||
{ &key_relay_log_info_log_space_cond, "Relay_log_info::log_space_cond", 0},
|
{ &key_relay_log_info_log_space_cond, "Relay_log_info::log_space_cond", 0},
|
||||||
{ &key_relay_log_info_start_cond, "Relay_log_info::start_cond", 0},
|
{ &key_relay_log_info_start_cond, "Relay_log_info::start_cond", 0},
|
||||||
{ &key_relay_log_info_stop_cond, "Relay_log_info::stop_cond", 0},
|
{ &key_relay_log_info_stop_cond, "Relay_log_info::stop_cond", 0},
|
||||||
|
{ &key_relay_log_info_sleep_cond, "Relay_log_info::sleep_cond", 0},
|
||||||
{ &key_TABLE_SHARE_cond, "TABLE_SHARE::cond", 0},
|
{ &key_TABLE_SHARE_cond, "TABLE_SHARE::cond", 0},
|
||||||
{ &key_user_level_lock_cond, "User_level_lock::cond", 0},
|
{ &key_user_level_lock_cond, "User_level_lock::cond", 0},
|
||||||
{ &key_COND_thread_count, "COND_thread_count", PSI_FLAG_GLOBAL},
|
{ &key_COND_thread_count, "COND_thread_count", PSI_FLAG_GLOBAL},
|
||||||
|
@@ -181,6 +181,7 @@ extern ulonglong max_binlog_cache_size, max_binlog_stmt_cache_size;
|
|||||||
extern ulong max_binlog_size, max_relay_log_size;
|
extern ulong max_binlog_size, max_relay_log_size;
|
||||||
extern ulong opt_binlog_rows_event_max_size;
|
extern ulong opt_binlog_rows_event_max_size;
|
||||||
extern ulong rpl_recovery_rank, thread_cache_size;
|
extern ulong rpl_recovery_rank, thread_cache_size;
|
||||||
|
extern ulong stored_program_cache_size;
|
||||||
extern ulong back_log;
|
extern ulong back_log;
|
||||||
extern char language[FN_REFLEN];
|
extern char language[FN_REFLEN];
|
||||||
extern "C" MYSQL_PLUGIN_IMPORT ulong server_id;
|
extern "C" MYSQL_PLUGIN_IMPORT ulong server_id;
|
||||||
@@ -244,8 +245,10 @@ extern PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids,
|
|||||||
key_LOCK_table_share, key_LOCK_thd_data,
|
key_LOCK_table_share, key_LOCK_thd_data,
|
||||||
key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log,
|
key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log,
|
||||||
key_master_info_data_lock, key_master_info_run_lock,
|
key_master_info_data_lock, key_master_info_run_lock,
|
||||||
|
key_master_info_sleep_lock,
|
||||||
key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock,
|
key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock,
|
||||||
key_relay_log_info_log_space_lock, key_relay_log_info_run_lock,
|
key_relay_log_info_log_space_lock, key_relay_log_info_run_lock,
|
||||||
|
key_relay_log_info_sleep_lock,
|
||||||
key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
|
key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
|
||||||
key_LOCK_error_messages, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc;
|
key_LOCK_error_messages, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc;
|
||||||
extern PSI_mutex_key key_RELAYLOG_LOCK_index;
|
extern PSI_mutex_key key_RELAYLOG_LOCK_index;
|
||||||
@@ -264,8 +267,10 @@ extern PSI_cond_key key_BINLOG_COND_prep_xids, key_BINLOG_update_cond,
|
|||||||
key_delayed_insert_cond, key_delayed_insert_cond_client,
|
key_delayed_insert_cond, key_delayed_insert_cond_client,
|
||||||
key_item_func_sleep_cond, key_master_info_data_cond,
|
key_item_func_sleep_cond, key_master_info_data_cond,
|
||||||
key_master_info_start_cond, key_master_info_stop_cond,
|
key_master_info_start_cond, key_master_info_stop_cond,
|
||||||
|
key_master_info_sleep_cond,
|
||||||
key_relay_log_info_data_cond, key_relay_log_info_log_space_cond,
|
key_relay_log_info_data_cond, key_relay_log_info_log_space_cond,
|
||||||
key_relay_log_info_start_cond, key_relay_log_info_stop_cond,
|
key_relay_log_info_start_cond, key_relay_log_info_stop_cond,
|
||||||
|
key_relay_log_info_sleep_cond,
|
||||||
key_TABLE_SHARE_cond, key_user_level_lock_cond,
|
key_TABLE_SHARE_cond, key_user_level_lock_cond,
|
||||||
key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
|
key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
|
||||||
extern PSI_cond_key key_RELAYLOG_update_cond;
|
extern PSI_cond_key key_RELAYLOG_update_cond;
|
||||||
|
@@ -49,9 +49,11 @@ Master_info::Master_info(bool is_slave_recovery)
|
|||||||
bzero((char*) &file, sizeof(file));
|
bzero((char*) &file, sizeof(file));
|
||||||
mysql_mutex_init(key_master_info_run_lock, &run_lock, MY_MUTEX_INIT_FAST);
|
mysql_mutex_init(key_master_info_run_lock, &run_lock, MY_MUTEX_INIT_FAST);
|
||||||
mysql_mutex_init(key_master_info_data_lock, &data_lock, MY_MUTEX_INIT_FAST);
|
mysql_mutex_init(key_master_info_data_lock, &data_lock, MY_MUTEX_INIT_FAST);
|
||||||
|
mysql_mutex_init(key_master_info_sleep_lock, &sleep_lock, MY_MUTEX_INIT_FAST);
|
||||||
mysql_cond_init(key_master_info_data_cond, &data_cond, NULL);
|
mysql_cond_init(key_master_info_data_cond, &data_cond, NULL);
|
||||||
mysql_cond_init(key_master_info_start_cond, &start_cond, NULL);
|
mysql_cond_init(key_master_info_start_cond, &start_cond, NULL);
|
||||||
mysql_cond_init(key_master_info_stop_cond, &stop_cond, NULL);
|
mysql_cond_init(key_master_info_stop_cond, &stop_cond, NULL);
|
||||||
|
mysql_cond_init(key_master_info_sleep_cond, &sleep_cond, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
Master_info::~Master_info()
|
Master_info::~Master_info()
|
||||||
@@ -59,9 +61,11 @@ Master_info::~Master_info()
|
|||||||
delete_dynamic(&ignore_server_ids);
|
delete_dynamic(&ignore_server_ids);
|
||||||
mysql_mutex_destroy(&run_lock);
|
mysql_mutex_destroy(&run_lock);
|
||||||
mysql_mutex_destroy(&data_lock);
|
mysql_mutex_destroy(&data_lock);
|
||||||
|
mysql_mutex_destroy(&sleep_lock);
|
||||||
mysql_cond_destroy(&data_cond);
|
mysql_cond_destroy(&data_cond);
|
||||||
mysql_cond_destroy(&start_cond);
|
mysql_cond_destroy(&start_cond);
|
||||||
mysql_cond_destroy(&stop_cond);
|
mysql_cond_destroy(&stop_cond);
|
||||||
|
mysql_cond_destroy(&sleep_cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -78,8 +78,8 @@ class Master_info : public Slave_reporting_capability
|
|||||||
File fd; // we keep the file open, so we need to remember the file pointer
|
File fd; // we keep the file open, so we need to remember the file pointer
|
||||||
IO_CACHE file;
|
IO_CACHE file;
|
||||||
|
|
||||||
mysql_mutex_t data_lock, run_lock;
|
mysql_mutex_t data_lock, run_lock, sleep_lock;
|
||||||
mysql_cond_t data_cond, start_cond, stop_cond;
|
mysql_cond_t data_cond, start_cond, stop_cond, sleep_cond;
|
||||||
THD *io_thd;
|
THD *io_thd;
|
||||||
MYSQL* mysql;
|
MYSQL* mysql;
|
||||||
uint32 file_id; /* for 3.23 load data infile */
|
uint32 file_id; /* for 3.23 load data infile */
|
||||||
|
@@ -75,10 +75,12 @@ Relay_log_info::Relay_log_info(bool is_slave_recovery)
|
|||||||
&data_lock, MY_MUTEX_INIT_FAST);
|
&data_lock, MY_MUTEX_INIT_FAST);
|
||||||
mysql_mutex_init(key_relay_log_info_log_space_lock,
|
mysql_mutex_init(key_relay_log_info_log_space_lock,
|
||||||
&log_space_lock, MY_MUTEX_INIT_FAST);
|
&log_space_lock, MY_MUTEX_INIT_FAST);
|
||||||
|
mysql_mutex_init(key_relay_log_info_sleep_lock, &sleep_lock, MY_MUTEX_INIT_FAST);
|
||||||
mysql_cond_init(key_relay_log_info_data_cond, &data_cond, NULL);
|
mysql_cond_init(key_relay_log_info_data_cond, &data_cond, NULL);
|
||||||
mysql_cond_init(key_relay_log_info_start_cond, &start_cond, NULL);
|
mysql_cond_init(key_relay_log_info_start_cond, &start_cond, NULL);
|
||||||
mysql_cond_init(key_relay_log_info_stop_cond, &stop_cond, NULL);
|
mysql_cond_init(key_relay_log_info_stop_cond, &stop_cond, NULL);
|
||||||
mysql_cond_init(key_relay_log_info_log_space_cond, &log_space_cond, NULL);
|
mysql_cond_init(key_relay_log_info_log_space_cond, &log_space_cond, NULL);
|
||||||
|
mysql_cond_init(key_relay_log_info_sleep_cond, &sleep_cond, NULL);
|
||||||
relay_log.init_pthread_objects();
|
relay_log.init_pthread_objects();
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
@@ -91,10 +93,12 @@ Relay_log_info::~Relay_log_info()
|
|||||||
mysql_mutex_destroy(&run_lock);
|
mysql_mutex_destroy(&run_lock);
|
||||||
mysql_mutex_destroy(&data_lock);
|
mysql_mutex_destroy(&data_lock);
|
||||||
mysql_mutex_destroy(&log_space_lock);
|
mysql_mutex_destroy(&log_space_lock);
|
||||||
|
mysql_mutex_destroy(&sleep_lock);
|
||||||
mysql_cond_destroy(&data_cond);
|
mysql_cond_destroy(&data_cond);
|
||||||
mysql_cond_destroy(&start_cond);
|
mysql_cond_destroy(&start_cond);
|
||||||
mysql_cond_destroy(&stop_cond);
|
mysql_cond_destroy(&stop_cond);
|
||||||
mysql_cond_destroy(&log_space_cond);
|
mysql_cond_destroy(&log_space_cond);
|
||||||
|
mysql_cond_destroy(&sleep_cond);
|
||||||
relay_log.cleanup();
|
relay_log.cleanup();
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@@ -138,15 +138,13 @@ public:
|
|||||||
standard lock acquisition order to avoid deadlocks:
|
standard lock acquisition order to avoid deadlocks:
|
||||||
run_lock, data_lock, relay_log.LOCK_log, relay_log.LOCK_index
|
run_lock, data_lock, relay_log.LOCK_log, relay_log.LOCK_index
|
||||||
*/
|
*/
|
||||||
mysql_mutex_t data_lock, run_lock;
|
mysql_mutex_t data_lock, run_lock, sleep_lock;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
start_cond is broadcast when SQL thread is started
|
start_cond is broadcast when SQL thread is started
|
||||||
stop_cond - when stopped
|
stop_cond - when stopped
|
||||||
data_cond - when data protected by data_lock changes
|
data_cond - when data protected by data_lock changes
|
||||||
*/
|
*/
|
||||||
mysql_cond_t start_cond, stop_cond, data_cond;
|
mysql_cond_t start_cond, stop_cond, data_cond, sleep_cond;
|
||||||
|
|
||||||
/* parent Master_info structure */
|
/* parent Master_info structure */
|
||||||
Master_info *mi;
|
Master_info *mi;
|
||||||
|
|
||||||
|
@@ -4701,14 +4701,14 @@ ER_NOT_SUPPORTED_YET 42000
|
|||||||
spa "Esta versión de MySQL no soporta todavia '%s'"
|
spa "Esta versión de MySQL no soporta todavia '%s'"
|
||||||
swe "Denna version av MySQL kan ännu inte utföra '%s'"
|
swe "Denna version av MySQL kan ännu inte utföra '%s'"
|
||||||
ER_MASTER_FATAL_ERROR_READING_BINLOG
|
ER_MASTER_FATAL_ERROR_READING_BINLOG
|
||||||
nla "Kreeg fatale fout %d: '%-.256s' van master tijdens lezen van data uit binaire log"
|
nla "Kreeg fatale fout %d: '%-.512s' van master tijdens lezen van data uit binaire log"
|
||||||
eng "Got fatal error %d from master when reading data from binary log: '%-.256s'"
|
eng "Got fatal error %d from master when reading data from binary log: '%-.512s'"
|
||||||
ger "Schwerer Fehler %d: '%-.256s vom Master beim Lesen des binären Logs"
|
ger "Schwerer Fehler %d: '%-.512s vom Master beim Lesen des binären Logs"
|
||||||
ita "Errore fatale %d: '%-.256s' dal master leggendo i dati dal log binario"
|
ita "Errore fatale %d: '%-.512s' dal master leggendo i dati dal log binario"
|
||||||
por "Obteve fatal erro %d: '%-.256s' do master quando lendo dados do binary log"
|
por "Obteve fatal erro %d: '%-.512s' do master quando lendo dados do binary log"
|
||||||
rus "Получена неисправимая ошибка %d: '%-.256s' от головного сервера в процессе выборки данных из двоичного журнала"
|
rus "Получена неисправимая ошибка %d: '%-.512s' от головного сервера в процессе выборки данных из двоичного журнала"
|
||||||
spa "Recibió fatal error %d: '%-.256s' del master cuando leyendo datos del binary log"
|
spa "Recibió fatal error %d: '%-.512s' del master cuando leyendo datos del binary log"
|
||||||
swe "Fick fatalt fel %d: '%-.256s' från master vid läsning av binärloggen"
|
swe "Fick fatalt fel %d: '%-.512s' från master vid läsning av binärloggen"
|
||||||
ER_SLAVE_IGNORED_TABLE
|
ER_SLAVE_IGNORED_TABLE
|
||||||
eng "Slave SQL thread ignored the query because of replicate-*-table rules"
|
eng "Slave SQL thread ignored the query because of replicate-*-table rules"
|
||||||
ger "Slave-SQL-Thread hat die Abfrage aufgrund von replicate-*-table-Regeln ignoriert"
|
ger "Slave-SQL-Thread hat die Abfrage aufgrund von replicate-*-table-Regeln ignoriert"
|
||||||
|
68
sql/slave.cc
68
sql/slave.cc
@@ -68,8 +68,6 @@ bool use_slave_mask = 0;
|
|||||||
MY_BITMAP slave_error_mask;
|
MY_BITMAP slave_error_mask;
|
||||||
char slave_skip_error_names[SHOW_VAR_FUNC_BUFF_SIZE];
|
char slave_skip_error_names[SHOW_VAR_FUNC_BUFF_SIZE];
|
||||||
|
|
||||||
typedef bool (*CHECK_KILLED_FUNC)(THD*,void*);
|
|
||||||
|
|
||||||
char* slave_load_tmpdir = 0;
|
char* slave_load_tmpdir = 0;
|
||||||
Master_info *active_mi= 0;
|
Master_info *active_mi= 0;
|
||||||
my_bool replicate_same_server_id;
|
my_bool replicate_same_server_id;
|
||||||
@@ -152,9 +150,6 @@ static int safe_reconnect(THD* thd, MYSQL* mysql, Master_info* mi,
|
|||||||
bool suppress_warnings);
|
bool suppress_warnings);
|
||||||
static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi,
|
static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi,
|
||||||
bool reconnect, bool suppress_warnings);
|
bool reconnect, bool suppress_warnings);
|
||||||
static int safe_sleep(THD* thd, int sec, CHECK_KILLED_FUNC thread_killed,
|
|
||||||
void* thread_killed_arg);
|
|
||||||
static int get_master_version_and_clock(MYSQL* mysql, Master_info* mi);
|
|
||||||
static Log_event* next_event(Relay_log_info* rli);
|
static Log_event* next_event(Relay_log_info* rli);
|
||||||
static int queue_event(Master_info* mi,const char* buf,ulong event_len);
|
static int queue_event(Master_info* mi,const char* buf,ulong event_len);
|
||||||
static int terminate_slave_thread(THD *thd,
|
static int terminate_slave_thread(THD *thd,
|
||||||
@@ -2068,35 +2063,42 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Sleep for a given amount of time or until killed.
|
||||||
|
|
||||||
static int safe_sleep(THD* thd, int sec, CHECK_KILLED_FUNC thread_killed,
|
@param thd Thread context of the current thread.
|
||||||
void* thread_killed_arg)
|
@param seconds The number of seconds to sleep.
|
||||||
|
@param func Function object to check if the thread has been killed.
|
||||||
|
@param info The Rpl_info object associated with this sleep.
|
||||||
|
|
||||||
|
@retval True if the thread has been killed, false otherwise.
|
||||||
|
*/
|
||||||
|
template <typename killed_func, typename rpl_info>
|
||||||
|
static inline bool slave_sleep(THD *thd, time_t seconds,
|
||||||
|
killed_func func, rpl_info info)
|
||||||
{
|
{
|
||||||
int nap_time;
|
|
||||||
thr_alarm_t alarmed;
|
|
||||||
DBUG_ENTER("safe_sleep");
|
|
||||||
|
|
||||||
thr_alarm_init(&alarmed);
|
bool ret;
|
||||||
time_t start_time= my_time(0);
|
struct timespec abstime;
|
||||||
time_t end_time= start_time+sec;
|
const char *old_proc_info;
|
||||||
|
|
||||||
while ((nap_time= (int) (end_time - start_time)) > 0)
|
mysql_mutex_t *lock= &info->sleep_lock;
|
||||||
|
mysql_cond_t *cond= &info->sleep_cond;
|
||||||
|
|
||||||
|
/* Absolute system time at which the sleep time expires. */
|
||||||
|
set_timespec(abstime, seconds);
|
||||||
|
mysql_mutex_lock(lock);
|
||||||
|
old_proc_info= thd->enter_cond(cond, lock, thd->proc_info);
|
||||||
|
|
||||||
|
while (! (ret= func(thd, info)))
|
||||||
{
|
{
|
||||||
ALARM alarm_buff;
|
int error= mysql_cond_timedwait(cond, lock, &abstime);
|
||||||
/*
|
if (error == ETIMEDOUT || error == ETIME)
|
||||||
The only reason we are asking for alarm is so that
|
break;
|
||||||
we will be woken up in case of murder, so if we do not get killed,
|
|
||||||
set the alarm so it goes off after we wake up naturally
|
|
||||||
*/
|
|
||||||
thr_alarm(&alarmed, 2 * nap_time, &alarm_buff);
|
|
||||||
sleep(nap_time);
|
|
||||||
thr_end_alarm(&alarmed);
|
|
||||||
|
|
||||||
if ((*thread_killed)(thd,thread_killed_arg))
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
start_time= my_time(0);
|
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
/* Implicitly unlocks the mutex. */
|
||||||
|
thd->exit_cond(old_proc_info);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2555,8 +2557,8 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
|
|||||||
exec_res= 0;
|
exec_res= 0;
|
||||||
rli->cleanup_context(thd, 1);
|
rli->cleanup_context(thd, 1);
|
||||||
/* chance for concurrent connection to get more locks */
|
/* chance for concurrent connection to get more locks */
|
||||||
safe_sleep(thd, min(rli->trans_retries, MAX_SLAVE_RETRY_PAUSE),
|
slave_sleep(thd, min(rli->trans_retries, MAX_SLAVE_RETRY_PAUSE),
|
||||||
(CHECK_KILLED_FUNC)sql_slave_killed, (void*)rli);
|
sql_slave_killed, rli);
|
||||||
mysql_mutex_lock(&rli->data_lock); // because of SHOW STATUS
|
mysql_mutex_lock(&rli->data_lock); // because of SHOW STATUS
|
||||||
rli->trans_retries++;
|
rli->trans_retries++;
|
||||||
rli->retried_trans++;
|
rli->retried_trans++;
|
||||||
@@ -2654,8 +2656,7 @@ static int try_to_reconnect(THD *thd, MYSQL *mysql, Master_info *mi,
|
|||||||
{
|
{
|
||||||
if (*retry_count > master_retry_count)
|
if (*retry_count > master_retry_count)
|
||||||
return 1; // Don't retry forever
|
return 1; // Don't retry forever
|
||||||
safe_sleep(thd, mi->connect_retry, (CHECK_KILLED_FUNC) io_slave_killed,
|
slave_sleep(thd, mi->connect_retry, io_slave_killed, mi);
|
||||||
(void *) mi);
|
|
||||||
}
|
}
|
||||||
if (check_io_slave_killed(thd, mi, messages[SLAVE_RECON_MSG_KILLED_WAITING]))
|
if (check_io_slave_killed(thd, mi, messages[SLAVE_RECON_MSG_KILLED_WAITING]))
|
||||||
return 1;
|
return 1;
|
||||||
@@ -4248,8 +4249,7 @@ static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi,
|
|||||||
change_rpl_status(RPL_ACTIVE_SLAVE,RPL_LOST_SOLDIER);
|
change_rpl_status(RPL_ACTIVE_SLAVE,RPL_LOST_SOLDIER);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
safe_sleep(thd,mi->connect_retry,(CHECK_KILLED_FUNC)io_slave_killed,
|
slave_sleep(thd,mi->connect_retry,io_slave_killed, mi);
|
||||||
(void*)mi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!slave_was_killed)
|
if (!slave_was_killed)
|
||||||
|
@@ -57,6 +57,20 @@ public:
|
|||||||
{
|
{
|
||||||
my_hash_delete(&m_hashtable, (uchar *)sp);
|
my_hash_delete(&m_hashtable, (uchar *)sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Remove all elements from a stored routine cache if the current
|
||||||
|
number of elements exceeds the argument value.
|
||||||
|
|
||||||
|
@param[in] upper_limit_for_elements Soft upper limit of elements that
|
||||||
|
can be stored in the cache.
|
||||||
|
*/
|
||||||
|
void enforce_limit(ulong upper_limit_for_elements)
|
||||||
|
{
|
||||||
|
if (m_hashtable.records > upper_limit_for_elements)
|
||||||
|
my_hash_reset(&m_hashtable);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init();
|
void init();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
@@ -228,6 +242,21 @@ ulong sp_cache_version()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enforce that the current number of elements in the cache don't exceed
|
||||||
|
the argument value by flushing the cache if necessary.
|
||||||
|
|
||||||
|
@param[in] c Cache to check
|
||||||
|
@param[in] upper_limit_for_elements Soft upper limit for number of sp_head
|
||||||
|
objects that can be stored in the cache.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
sp_cache_enforce_limit(sp_cache *c, ulong upper_limit_for_elements)
|
||||||
|
{
|
||||||
|
if (c)
|
||||||
|
c->enforce_limit(upper_limit_for_elements);
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Internal functions
|
Internal functions
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
@@ -62,5 +62,6 @@ sp_head *sp_cache_lookup(sp_cache **cp, sp_name *name);
|
|||||||
void sp_cache_invalidate();
|
void sp_cache_invalidate();
|
||||||
void sp_cache_flush_obsolete(sp_cache **cp, sp_head **sp);
|
void sp_cache_flush_obsolete(sp_cache **cp, sp_head **sp);
|
||||||
ulong sp_cache_version();
|
ulong sp_cache_version();
|
||||||
|
void sp_cache_enforce_limit(sp_cache *cp, ulong upper_limit_for_elements);
|
||||||
|
|
||||||
#endif /* _SP_CACHE_H_ */
|
#endif /* _SP_CACHE_H_ */
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user