mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
merge
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
[MYSQL]
|
[MYSQL]
|
||||||
post_commit_to = "dbg_mysql_security@sun.com"
|
post_commit_to = "commits@lists.mysql.com"
|
||||||
post_push_to = "dbg_mysql_security@sun.com"
|
post_push_to = "commits@lists.mysql.com"
|
||||||
tree_name = "mysql-5.5-security"
|
tree_name = "mysql-5.5-bugteam"
|
||||||
|
@ -111,7 +111,7 @@ else
|
|||||||
# C++ warnings
|
# C++ warnings
|
||||||
cxx_warnings="$warnings -Wno-unused-parameter"
|
cxx_warnings="$warnings -Wno-unused-parameter"
|
||||||
# cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo"
|
# cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo"
|
||||||
cxx_warnings="$cxx_warnings -Wctor-dtor-privacy -Wnon-virtual-dtor"
|
cxx_warnings="$cxx_warnings -Wnon-virtual-dtor"
|
||||||
debug_extra_cflags="-O0 -g3 -gdwarf-2"
|
debug_extra_cflags="-O0 -g3 -gdwarf-2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -61,6 +61,13 @@ SET(BUILDTYPE_DOCSTRING
|
|||||||
|
|
||||||
IF(WITH_DEBUG)
|
IF(WITH_DEBUG)
|
||||||
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
|
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
|
||||||
|
SET(MYSQL_MAINTAINER_MODE ON CACHE BOOL
|
||||||
|
"MySQL maintainer-specific development environment")
|
||||||
|
IF(UNIX AND NOT APPLE)
|
||||||
|
# Compiling with PIC speeds up embedded build, on PIC sensitive systems
|
||||||
|
# Predefine it to ON, in case user chooses to build embedded.
|
||||||
|
SET(WITH_PIC ON CACHE BOOL "Compile with PIC")
|
||||||
|
ENDIF()
|
||||||
SET(OLD_WITH_DEBUG 1 CACHE INTERNAL "" FORCE)
|
SET(OLD_WITH_DEBUG 1 CACHE INTERNAL "" FORCE)
|
||||||
ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
|
ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
|
||||||
IF(CUSTOM_C_FLAGS)
|
IF(CUSTOM_C_FLAGS)
|
||||||
|
@ -263,6 +263,8 @@ test-full-qa:
|
|||||||
#
|
#
|
||||||
# Headers which need to be checked for abi/api compatibility.
|
# Headers which need to be checked for abi/api compatibility.
|
||||||
#
|
#
|
||||||
|
# Attention: do not forget to also add to cmake/abi_check.cmake
|
||||||
|
#
|
||||||
|
|
||||||
API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin_audit.h \
|
API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin_audit.h \
|
||||||
$(top_srcdir)/include/mysql/plugin_ftparser.h \
|
$(top_srcdir)/include/mysql/plugin_ftparser.h \
|
||||||
|
@ -13,11 +13,6 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
#define COPYRIGHT_NOTICE "\
|
|
||||||
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.\n\
|
|
||||||
This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n\
|
|
||||||
and you are welcome to modify and redistribute it under the GPL v2 license\n"
|
|
||||||
|
|
||||||
/* mysql command tool
|
/* mysql command tool
|
||||||
* Commands compatible with mSQL by David J. Hughes
|
* Commands compatible with mSQL by David J. Hughes
|
||||||
*
|
*
|
||||||
@ -110,6 +105,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "completion_hash.h"
|
#include "completion_hash.h"
|
||||||
|
#include <welcome_copyright_notice.h> // ORACLE_WELCOME_COPYRIGHT_NOTICE
|
||||||
|
|
||||||
#define PROMPT_CHAR '\\'
|
#define PROMPT_CHAR '\\'
|
||||||
#define DEFAULT_DELIMITER ";"
|
#define DEFAULT_DELIMITER ";"
|
||||||
@ -1177,7 +1173,7 @@ int main(int argc,char *argv[])
|
|||||||
mysql_thread_id(&mysql), server_version_string(&mysql));
|
mysql_thread_id(&mysql), server_version_string(&mysql));
|
||||||
put_info((char*) glob_buffer.ptr(),INFO_INFO);
|
put_info((char*) glob_buffer.ptr(),INFO_INFO);
|
||||||
|
|
||||||
put_info(COPYRIGHT_NOTICE, INFO_INFO);
|
put_info(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"), INFO_INFO);
|
||||||
|
|
||||||
#ifdef HAVE_READLINE
|
#ifdef HAVE_READLINE
|
||||||
initialize_readline((char*) my_progname);
|
initialize_readline((char*) my_progname);
|
||||||
@ -1595,7 +1591,7 @@ static void usage(int version)
|
|||||||
|
|
||||||
if (version)
|
if (version)
|
||||||
return;
|
return;
|
||||||
printf("%s", COPYRIGHT_NOTICE);
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
printf("Usage: %s [OPTIONS] [database]\n", my_progname);
|
printf("Usage: %s [OPTIONS] [database]\n", my_progname);
|
||||||
my_print_help(my_long_options);
|
my_print_help(my_long_options);
|
||||||
print_defaults("my", load_default_groups);
|
print_defaults("my", load_default_groups);
|
||||||
@ -3743,7 +3739,8 @@ print_tab_data(MYSQL_RES *result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
com_tee(String *buffer, char *line __attribute__((unused)))
|
com_tee(String *buffer __attribute__((unused)),
|
||||||
|
char *line __attribute__((unused)))
|
||||||
{
|
{
|
||||||
char file_name[FN_REFLEN], *end, *param;
|
char file_name[FN_REFLEN], *end, *param;
|
||||||
|
|
||||||
@ -3802,7 +3799,8 @@ com_notee(String *buffer __attribute__((unused)),
|
|||||||
|
|
||||||
#ifdef USE_POPEN
|
#ifdef USE_POPEN
|
||||||
static int
|
static int
|
||||||
com_pager(String *buffer, char *line __attribute__((unused)))
|
com_pager(String *buffer __attribute__((unused)),
|
||||||
|
char *line __attribute__((unused)))
|
||||||
{
|
{
|
||||||
char pager_name[FN_REFLEN], *end, *param;
|
char pager_name[FN_REFLEN], *end, *param;
|
||||||
|
|
||||||
@ -3927,7 +3925,8 @@ com_rehash(String *buffer __attribute__((unused)),
|
|||||||
|
|
||||||
#ifdef USE_POPEN
|
#ifdef USE_POPEN
|
||||||
static int
|
static int
|
||||||
com_shell(String *buffer, char *line __attribute__((unused)))
|
com_shell(String *buffer __attribute__((unused)),
|
||||||
|
char *line __attribute__((unused)))
|
||||||
{
|
{
|
||||||
char *shell_cmd;
|
char *shell_cmd;
|
||||||
|
|
||||||
@ -4019,7 +4018,8 @@ com_connect(String *buffer, char *line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int com_source(String *buffer, char *line)
|
static int com_source(String *buffer __attribute__((unused)),
|
||||||
|
char *line)
|
||||||
{
|
{
|
||||||
char source_name[FN_REFLEN], *end, *param;
|
char source_name[FN_REFLEN], *end, *param;
|
||||||
LINE_BUFFER *line_buff;
|
LINE_BUFFER *line_buff;
|
||||||
@ -4933,7 +4933,8 @@ static void init_username()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int com_prompt(String *buffer, char *line)
|
static int com_prompt(String *buffer __attribute__((unused)),
|
||||||
|
char *line)
|
||||||
{
|
{
|
||||||
char *ptr=strchr(line, ' ');
|
char *ptr=strchr(line, ' ');
|
||||||
prompt_counter = 0;
|
prompt_counter = 0;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -17,6 +17,8 @@
|
|||||||
#include <sslopt-vars.h>
|
#include <sslopt-vars.h>
|
||||||
#include "../scripts/mysql_fix_privilege_tables_sql.c"
|
#include "../scripts/mysql_fix_privilege_tables_sql.c"
|
||||||
|
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
#define VER "1.1"
|
#define VER "1.1"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_WAIT_H
|
#ifdef HAVE_SYS_WAIT_H
|
||||||
@ -232,6 +234,7 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
case '?':
|
case '?':
|
||||||
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("MySQL utility for upgrading databases to new MySQL versions.\n");
|
puts("MySQL utility for upgrading databases to new MySQL versions.\n");
|
||||||
my_print_help(my_long_options);
|
my_print_help(my_long_options);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000-2006 MySQL AB
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
#define ADMIN_VERSION "8.42"
|
#define ADMIN_VERSION "8.42"
|
||||||
#define MAX_MYSQL_VAR 512
|
#define MAX_MYSQL_VAR 512
|
||||||
@ -671,8 +672,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||||||
case ADMIN_VER:
|
case ADMIN_VER:
|
||||||
new_line=1;
|
new_line=1;
|
||||||
print_version();
|
print_version();
|
||||||
puts("Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n");
|
|
||||||
printf("Server version\t\t%s\n", mysql_get_server_info(mysql));
|
printf("Server version\t\t%s\n", mysql_get_server_info(mysql));
|
||||||
printf("Protocol version\t%d\n", mysql_get_proto_info(mysql));
|
printf("Protocol version\t%d\n", mysql_get_proto_info(mysql));
|
||||||
printf("Connection\t\t%s\n",mysql_get_host_info(mysql));
|
printf("Connection\t\t%s\n",mysql_get_host_info(mysql));
|
||||||
@ -1070,8 +1070,7 @@ static void print_version(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n");
|
|
||||||
puts("Administration program for the mysqld daemon.");
|
puts("Administration program for the mysqld daemon.");
|
||||||
printf("Usage: %s [OPTIONS] command command....\n", my_progname);
|
printf("Usage: %s [OPTIONS] command command....\n", my_progname);
|
||||||
my_print_help(my_long_options);
|
my_print_help(my_long_options);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2001-2004 MySQL AB
|
/* Copyright (c) 2001, 2010, 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
|
||||||
@ -34,6 +34,7 @@
|
|||||||
#include "sql_priv.h"
|
#include "sql_priv.h"
|
||||||
#include "log_event.h"
|
#include "log_event.h"
|
||||||
#include "sql_common.h"
|
#include "sql_common.h"
|
||||||
|
#include <welcome_copyright_notice.h> // ORACLE_WELCOME_COPYRIGHT_NOTICE
|
||||||
|
|
||||||
#define BIN_LOG_HEADER_SIZE 4
|
#define BIN_LOG_HEADER_SIZE 4
|
||||||
#define PROBE_HEADER_LEN (EVENT_LEN_OFFSET+4)
|
#define PROBE_HEADER_LEN (EVENT_LEN_OFFSET+4)
|
||||||
@ -1239,10 +1240,7 @@ static void print_version()
|
|||||||
static void usage()
|
static void usage()
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("By Monty and Sasha, for your professional use\n\
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2001, 2010"));
|
||||||
This software comes with NO WARRANTY: This is free software,\n\
|
|
||||||
and you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
|
|
||||||
printf("\
|
printf("\
|
||||||
Dumps a MySQL binary log in a format usable for viewing or for piping to\n\
|
Dumps a MySQL binary log in a format usable for viewing or for piping to\n\
|
||||||
the mysql command line client.\n\n");
|
the mysql command line client.\n\n");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB, 2009 Sun Microsystems, Inc
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -13,8 +13,6 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
/* By Jani Tolonen, 2001-04-20, MySQL Development Team */
|
|
||||||
|
|
||||||
#define CHECK_VERSION "2.5.0"
|
#define CHECK_VERSION "2.5.0"
|
||||||
|
|
||||||
#include "client_priv.h"
|
#include "client_priv.h"
|
||||||
@ -22,6 +20,7 @@
|
|||||||
#include <mysql_version.h>
|
#include <mysql_version.h>
|
||||||
#include <mysqld_error.h>
|
#include <mysqld_error.h>
|
||||||
#include <sslopt-vars.h>
|
#include <sslopt-vars.h>
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
/* Exit codes */
|
/* Exit codes */
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ static char *shared_memory_base_name=0;
|
|||||||
#endif
|
#endif
|
||||||
static uint opt_protocol=0;
|
static uint opt_protocol=0;
|
||||||
|
|
||||||
enum operations { DO_CHECK, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE, DO_UPGRADE };
|
enum operations { DO_CHECK=1, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE, DO_UPGRADE };
|
||||||
|
|
||||||
static struct my_option my_long_options[] =
|
static struct my_option my_long_options[] =
|
||||||
{
|
{
|
||||||
@ -215,9 +214,7 @@ static void print_version(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("By Jani Tolonen, 2001-04-20, MySQL Development Team.\n");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n");
|
|
||||||
puts("and you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
puts("This program can be used to CHECK (-c, -m, -C), REPAIR (-r), ANALYZE (-a),");
|
puts("This program can be used to CHECK (-c, -m, -C), REPAIR (-r), ANALYZE (-a),");
|
||||||
puts("or OPTIMIZE (-o) tables. Some of the options (like -e or -q) can be");
|
puts("or OPTIMIZE (-o) tables. Some of the options (like -e or -q) can be");
|
||||||
puts("used at the same time. Not all options are supported by all storage engines.");
|
puts("used at the same time. Not all options are supported by all storage engines.");
|
||||||
@ -244,6 +241,8 @@ static my_bool
|
|||||||
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||||
char *argument)
|
char *argument)
|
||||||
{
|
{
|
||||||
|
int orig_what_to_do= what_to_do;
|
||||||
|
|
||||||
switch(optid) {
|
switch(optid) {
|
||||||
case 'a':
|
case 'a':
|
||||||
what_to_do = DO_ANALYZE;
|
what_to_do = DO_ANALYZE;
|
||||||
@ -318,6 +317,13 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
opt->name);
|
opt->name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (orig_what_to_do && (what_to_do != orig_what_to_do))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s doesn't support multiple contradicting commands.\n",
|
||||||
|
my_progname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2000-2008 MySQL AB, 2008, 2009 Sun Microsystems, Inc.
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -51,6 +51,8 @@
|
|||||||
#include "mysql_version.h"
|
#include "mysql_version.h"
|
||||||
#include "mysqld_error.h"
|
#include "mysqld_error.h"
|
||||||
|
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
/* Exit codes */
|
/* Exit codes */
|
||||||
|
|
||||||
#define EX_USAGE 1
|
#define EX_USAGE 1
|
||||||
@ -584,8 +586,7 @@ static void short_usage_sub(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("By Igor Romanenko, Monty, Jani & Sinisa.");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
puts("Dumping structure and contents of MySQL databases and tables.");
|
puts("Dumping structure and contents of MySQL databases and tables.");
|
||||||
short_usage_sub();
|
short_usage_sub();
|
||||||
print_defaults("my",load_default_groups);
|
print_defaults("my",load_default_groups);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000-2006 MySQL AB, 2009 Sun Microsystems, Inc.
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -32,6 +32,8 @@
|
|||||||
#include <my_pthread.h>
|
#include <my_pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
|
|
||||||
/* Global Thread counter */
|
/* Global Thread counter */
|
||||||
uint counter;
|
uint counter;
|
||||||
@ -191,8 +193,7 @@ static void print_version(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
printf("\
|
printf("\
|
||||||
Loads tables from text files in various formats. The base name of the\n\
|
Loads tables from text files in various formats. The base name of the\n\
|
||||||
text file must be the name of the table that should be used.\n\
|
text file must be the name of the table that should be used.\n\
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000-2006 MySQL AB
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -25,6 +25,7 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <sslopt-vars.h>
|
#include <sslopt-vars.h>
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
static char * host=0, *opt_password=0, *user=0;
|
static char * host=0, *opt_password=0, *user=0;
|
||||||
static my_bool opt_show_keys= 0, opt_compress= 0, opt_count=0, opt_status= 0;
|
static my_bool opt_show_keys= 0, opt_compress= 0, opt_count=0, opt_status= 0;
|
||||||
@ -247,8 +248,7 @@ static void print_version(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010)"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
puts("Shows the structure of a MySQL database (databases, tables, and columns).\n");
|
puts("Shows the structure of a MySQL database (databases, tables, and columns).\n");
|
||||||
printf("Usage: %s [OPTIONS] [database [table [column]]]\n",my_progname);
|
printf("Usage: %s [OPTIONS] [database [table [column]]]\n",my_progname);
|
||||||
puts("\n\
|
puts("\n\
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2005 MySQL AB, 2009 Sun Microsystems, Inc.
|
/* Copyright (c) 2005, 2010, 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
|
||||||
@ -11,12 +11,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
original idea: Brian Aker via playing with ab for too many years
|
|
||||||
coded by: Patrick Galbraith
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MySQL Slap
|
MySQL Slap
|
||||||
@ -94,6 +89,7 @@ TODO:
|
|||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
#define srandom srand
|
#define srandom srand
|
||||||
@ -686,8 +682,7 @@ static void print_version(void)
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
puts("Copyright (C) 2005 MySQL AB");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2005, 2010"));
|
||||||
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license.\n");
|
|
||||||
puts("Run a query multiple times against the server.\n");
|
puts("Run a query multiple times against the server.\n");
|
||||||
printf("Usage: %s [OPTIONS]\n",my_progname);
|
printf("Usage: %s [OPTIONS]\n",my_progname);
|
||||||
print_defaults("my",load_default_groups);
|
print_defaults("my",load_default_groups);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (c) 2000, 2010, 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
|
||||||
@ -52,6 +52,8 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <my_stacktrace.h>
|
#include <my_stacktrace.h>
|
||||||
|
|
||||||
|
#include <welcome_copyright_notice.h> // ORACLE_WELCOME_COPYRIGHT_NOTICE
|
||||||
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
#include <crtdbg.h>
|
#include <crtdbg.h>
|
||||||
#define SIGNAL_FMT "exception 0x%x"
|
#define SIGNAL_FMT "exception 0x%x"
|
||||||
@ -5396,8 +5398,13 @@ void do_connect(struct st_command *command)
|
|||||||
opt_charsets_dir);
|
opt_charsets_dir);
|
||||||
|
|
||||||
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||||
if (opt_use_ssl || con_ssl)
|
if (opt_use_ssl)
|
||||||
|
con_ssl= 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (con_ssl)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||||
mysql_ssl_set(&con_slot->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
|
mysql_ssl_set(&con_slot->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
|
||||||
opt_ssl_capath, opt_ssl_cipher);
|
opt_ssl_capath, opt_ssl_cipher);
|
||||||
#if MYSQL_VERSION_ID >= 50000
|
#if MYSQL_VERSION_ID >= 50000
|
||||||
@ -5406,36 +5413,37 @@ void do_connect(struct st_command *command)
|
|||||||
mysql_options(&con_slot->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
mysql_options(&con_slot->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
||||||
&opt_ssl_verify_server_cert);
|
&opt_ssl_verify_server_cert);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __WIN__
|
|
||||||
if (con_pipe)
|
if (con_pipe)
|
||||||
{
|
{
|
||||||
|
#ifdef __WIN__
|
||||||
opt_protocol= MYSQL_PROTOCOL_PIPE;
|
opt_protocol= MYSQL_PROTOCOL_PIPE;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (opt_protocol)
|
if (opt_protocol)
|
||||||
mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
||||||
|
|
||||||
#ifdef HAVE_SMEM
|
|
||||||
if (con_shm)
|
if (con_shm)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_SMEM
|
||||||
uint protocol= MYSQL_PROTOCOL_MEMORY;
|
uint protocol= MYSQL_PROTOCOL_MEMORY;
|
||||||
if (!ds_shm.length)
|
if (!ds_shm.length)
|
||||||
die("Missing shared memory base name");
|
die("Missing shared memory base name");
|
||||||
mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME, ds_shm.str);
|
mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME, ds_shm.str);
|
||||||
mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, &protocol);
|
mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, &protocol);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if(shared_memory_base_name)
|
#ifdef HAVE_SMEM
|
||||||
|
else if (shared_memory_base_name)
|
||||||
{
|
{
|
||||||
mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME,
|
mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME,
|
||||||
shared_memory_base_name);
|
shared_memory_base_name);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Use default db name */
|
/* Use default db name */
|
||||||
if (ds_database.length == 0)
|
if (ds_database.length == 0)
|
||||||
dynstr_set(&ds_database, opt_db);
|
dynstr_set(&ds_database, opt_db);
|
||||||
@ -5875,7 +5883,7 @@ int read_line(char *buf, int size)
|
|||||||
/* Could be a multibyte character */
|
/* Could be a multibyte character */
|
||||||
/* This code is based on the code in "sql_load.cc" */
|
/* This code is based on the code in "sql_load.cc" */
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
int charlen = my_mbcharlen(charset_info, c);
|
int charlen = my_mbcharlen(charset_info, (unsigned char) c);
|
||||||
/* We give up if multibyte character is started but not */
|
/* We give up if multibyte character is started but not */
|
||||||
/* completed before we pass buf_end */
|
/* completed before we pass buf_end */
|
||||||
if ((charlen > 1) && (p + charlen) <= buf_end)
|
if ((charlen > 1) && (p + charlen) <= buf_end)
|
||||||
@ -5887,16 +5895,16 @@ int read_line(char *buf, int size)
|
|||||||
|
|
||||||
for (i= 1; i < charlen; i++)
|
for (i= 1; i < charlen; i++)
|
||||||
{
|
{
|
||||||
|
c= my_getc(cur_file->file);
|
||||||
if (feof(cur_file->file))
|
if (feof(cur_file->file))
|
||||||
goto found_eof;
|
goto found_eof;
|
||||||
c= my_getc(cur_file->file);
|
|
||||||
*p++ = c;
|
*p++ = c;
|
||||||
}
|
}
|
||||||
if (! my_ismbchar(charset_info, mb_start, p))
|
if (! my_ismbchar(charset_info, mb_start, p))
|
||||||
{
|
{
|
||||||
/* It was not a multiline char, push back the characters */
|
/* It was not a multiline char, push back the characters */
|
||||||
/* We leave first 'c', i.e. pretend it was a normal char */
|
/* We leave first 'c', i.e. pretend it was a normal char */
|
||||||
while (p > mb_start)
|
while (p-1 > mb_start)
|
||||||
my_ungetc(*--p);
|
my_ungetc(*--p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6260,8 +6268,7 @@ void print_version(void)
|
|||||||
void usage()
|
void usage()
|
||||||
{
|
{
|
||||||
print_version();
|
print_version();
|
||||||
printf("MySQL AB, by Sasha, Matt, Monty & Jani\n");
|
puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000, 2010"));
|
||||||
printf("This software comes with ABSOLUTELY NO WARRANTY\n\n");
|
|
||||||
printf("Runs a test against the mysql server and compares output with a results file.\n\n");
|
printf("Runs a test against the mysql server and compares output with a results file.\n\n");
|
||||||
printf("Usage: %s [OPTIONS] [database] < test_file\n", my_progname);
|
printf("Usage: %s [OPTIONS] [database] < test_file\n", my_progname);
|
||||||
my_print_help(my_long_options);
|
my_print_help(my_long_options);
|
||||||
@ -9958,6 +9965,7 @@ void free_pointer_array(POINTER_ARRAY *pa)
|
|||||||
void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
||||||
const char *val, int len)
|
const char *val, int len)
|
||||||
{
|
{
|
||||||
|
char lower[512];
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
fix_win_paths(val, len);
|
fix_win_paths(val, len);
|
||||||
#endif
|
#endif
|
||||||
@ -9965,7 +9973,6 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
|||||||
if (display_result_lower)
|
if (display_result_lower)
|
||||||
{
|
{
|
||||||
/* Convert to lower case, and do this first */
|
/* Convert to lower case, and do this first */
|
||||||
char lower[512];
|
|
||||||
char *c= lower;
|
char *c= lower;
|
||||||
for (const char *v= val; *v; v++)
|
for (const char *v= val; *v; v++)
|
||||||
*c++= my_tolower(charset_info, *v);
|
*c++= my_tolower(charset_info, *v);
|
||||||
|
@ -69,9 +69,13 @@ public:
|
|||||||
}
|
}
|
||||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
||||||
{ return (void*) alloc_root(mem_root, (uint) size); }
|
{ return (void*) alloc_root(mem_root, (uint) size); }
|
||||||
static void operator delete(void *ptr_arg,size_t size)
|
static void operator delete(void *ptr_arg, size_t size)
|
||||||
{ TRASH(ptr_arg, size); }
|
{
|
||||||
static void operator delete(void *ptr_arg, MEM_ROOT *mem_root)
|
(void) ptr_arg;
|
||||||
|
(void) size;
|
||||||
|
TRASH(ptr_arg, size);
|
||||||
|
}
|
||||||
|
static void operator delete(void *, MEM_ROOT *)
|
||||||
{ /* never called */ }
|
{ /* never called */ }
|
||||||
~String() { free(); }
|
~String() { free(); }
|
||||||
|
|
||||||
|
@ -27,12 +27,14 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||||||
ELSE()
|
ELSE()
|
||||||
SET(COMPILER ${CMAKE_C_COMPILER})
|
SET(COMPILER ${CMAKE_C_COMPILER})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(API_PREPROCESSOR_HEADER
|
SET(API_PREPROCESSOR_HEADER
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h
|
${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h
|
${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql.h
|
${CMAKE_SOURCE_DIR}/include/mysql.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
|
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
|
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
|
||||||
|
${CMAKE_SOURCE_DIR}/include/mysql/client_plugin.h
|
||||||
|
${CMAKE_SOURCE_DIR}/include/mysql/plugin_auth.h
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(abi_check ALL
|
ADD_CUSTOM_TARGET(abi_check ALL
|
||||||
|
@ -131,16 +131,16 @@ IF(UNIX)
|
|||||||
|
|
||||||
# Default GCC flags
|
# Default GCC flags
|
||||||
IF(CMAKE_COMPILER_IS_GNUCC)
|
IF(CMAKE_COMPILER_IS_GNUCC)
|
||||||
SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer")
|
SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing")
|
||||||
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
|
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
|
||||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
|
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer")
|
SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
|
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
|
||||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
|
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# HPUX flags
|
# HPUX flags
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
|
IF(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
|
||||||
IF(CMAKE_C_COMPILER_ID MATCHES "HP")
|
IF(CMAKE_C_COMPILER_ID MATCHES "HP")
|
||||||
@ -156,7 +156,7 @@ IF(UNIX)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
SET(WITH_SSL no)
|
SET(WITH_SSL no)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# Linux flags
|
# Linux flags
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
IF(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
IF(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||||
@ -173,18 +173,18 @@ IF(UNIX)
|
|||||||
SET(WITH_SSL no)
|
SET(WITH_SSL no)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# OSX flags
|
# OSX flags
|
||||||
IF(APPLE)
|
IF(APPLE)
|
||||||
SET(COMMON_C_FLAGS "-g -fno-common")
|
SET(COMMON_C_FLAGS "-g -fno-common -fno-strict-aliasing")
|
||||||
# XXX: why are we using -felide-constructors on OSX?
|
# XXX: why are we using -felide-constructors on OSX?
|
||||||
SET(COMMON_CXX_FLAGS "-g -fno-common -felide-constructors")
|
SET(COMMON_CXX_FLAGS "-g -fno-common -felide-constructors -fno-strict-aliasing")
|
||||||
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
|
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
|
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
|
||||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os ${COMMON_C_FLAGS}")
|
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os ${COMMON_C_FLAGS}")
|
||||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os ${COMMON_CXX_FLAGS}")
|
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os ${COMMON_CXX_FLAGS}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# Solaris flags
|
# Solaris flags
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
||||||
IF(CMAKE_SYSTEM_VERSION VERSION_GREATER "5.9")
|
IF(CMAKE_SYSTEM_VERSION VERSION_GREATER "5.9")
|
||||||
@ -219,7 +219,7 @@ IF(UNIX)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(CMAKE_C_FLAGS_DEBUG)
|
IF(CMAKE_C_FLAGS_DEBUG)
|
||||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}"
|
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}"
|
||||||
CACHE STRING "Debug C compile flags")
|
CACHE STRING "Debug C compile flags")
|
||||||
|
@ -59,13 +59,16 @@
|
|||||||
# - INSTALL_SUPPORTFILESDIR (various extra support files)
|
# - INSTALL_SUPPORTFILESDIR (various extra support files)
|
||||||
#
|
#
|
||||||
# - INSTALL_MYSQLDATADIR (data directory)
|
# - INSTALL_MYSQLDATADIR (data directory)
|
||||||
|
#
|
||||||
|
# When changing this page, _please_ do not forget to update public Wiki
|
||||||
|
# http://forge.mysql.com/wiki/CMake#Fine-tuning_installation_paths
|
||||||
|
|
||||||
IF(NOT INSTALL_LAYOUT)
|
IF(NOT INSTALL_LAYOUT)
|
||||||
SET(DEFAULT_INSTALL_LAYOUT "STANDALONE")
|
SET(DEFAULT_INSTALL_LAYOUT "STANDALONE")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
|
SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
|
||||||
CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer) or UNIX")
|
CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer), RPM, DEB, SVR4")
|
||||||
|
|
||||||
IF(UNIX)
|
IF(UNIX)
|
||||||
IF(INSTALL_LAYOUT MATCHES "RPM")
|
IF(INSTALL_LAYOUT MATCHES "RPM")
|
||||||
@ -83,6 +86,13 @@ IF(UNIX)
|
|||||||
SET(CMAKE_INSTALL_PREFIX ${default_prefix}
|
SET(CMAKE_INSTALL_PREFIX ${default_prefix}
|
||||||
CACHE PATH "install prefix" FORCE)
|
CACHE PATH "install prefix" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
SET(VALID_INSTALL_LAYOUTS "RPM" "STANDALONE" "DEB" "SVR5")
|
||||||
|
LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
|
||||||
|
IF(ind EQUAL -1)
|
||||||
|
MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
|
||||||
|
" Choose between ${VALID_INSTALL_LAYOUTS}" )
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc"
|
SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc"
|
||||||
CACHE PATH "config directory (for my.cnf)")
|
CACHE PATH "config directory (for my.cnf)")
|
||||||
MARK_AS_ADVANCED(SYSCONFDIR)
|
MARK_AS_ADVANCED(SYSCONFDIR)
|
||||||
|
@ -33,7 +33,7 @@ ENDFOREACH()
|
|||||||
|
|
||||||
# Ensure we have clean build for shared libraries
|
# Ensure we have clean build for shared libraries
|
||||||
# without unresolved symbols
|
# without unresolved symbols
|
||||||
SET(LINK_FLAG_NO_UNDEFINED "--Wl,--no-undefined")
|
SET(LINK_FLAG_NO_UNDEFINED "-Wl,--no-undefined")
|
||||||
|
|
||||||
# 64 bit file offset support flag
|
# 64 bit file offset support flag
|
||||||
SET(_FILE_OFFSET_BITS 64)
|
SET(_FILE_OFFSET_BITS 64)
|
||||||
|
@ -136,7 +136,7 @@ ed_delete_prev_word(EditLine *el, int c __attribute__((__unused__)))
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
ed_delete_next_char(EditLine *el, int c)
|
ed_delete_next_char(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
#ifdef notdef /* XXX */
|
#ifdef notdef /* XXX */
|
||||||
#define EL el->el_line
|
#define EL el->el_line
|
||||||
@ -431,7 +431,8 @@ ed_argument_digit(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
ed_unassigned(EditLine *el, int c __attribute__((__unused__)))
|
ed_unassigned(EditLine *el __attribute__((__unused__)),
|
||||||
|
int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
return (CC_ERROR);
|
return (CC_ERROR);
|
||||||
|
@ -202,7 +202,7 @@ _move_history(int op)
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
_getc_function(EditLine *el, char *c)
|
_getc_function(EditLine *el __attribute__((__unused__)), char *c)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1613,7 +1613,8 @@ rl_insert(int count, int c)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
int
|
int
|
||||||
rl_newline(int count, int c)
|
rl_newline(int count __attribute__((__unused__)),
|
||||||
|
int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Readline-4.0 appears to ignore the args.
|
* Readline-4.0 appears to ignore the args.
|
||||||
@ -1623,7 +1624,7 @@ rl_newline(int count, int c)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static unsigned char
|
static unsigned char
|
||||||
rl_bind_wrapper(EditLine *el, unsigned char c)
|
rl_bind_wrapper(EditLine *el __attribute__((__unused__)), unsigned char c)
|
||||||
{
|
{
|
||||||
if (map[c] == NULL)
|
if (map[c] == NULL)
|
||||||
return CC_ERROR;
|
return CC_ERROR;
|
||||||
@ -1718,7 +1719,7 @@ rl_get_previous_history(int count, int key)
|
|||||||
|
|
||||||
void
|
void
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
rl_prep_terminal(int meta_flag)
|
rl_prep_terminal(int meta_flag __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
el_set(e, EL_PREP_TERM, 1);
|
el_set(e, EL_PREP_TERM, 1);
|
||||||
}
|
}
|
||||||
@ -1922,7 +1923,8 @@ _rl_qsort_string_compare(char **s1, char **s2)
|
|||||||
|
|
||||||
int
|
int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
rl_kill_text(int from, int to)
|
rl_kill_text(int from __attribute__((__unused__)),
|
||||||
|
int to __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1941,20 +1943,25 @@ rl_get_keymap(void)
|
|||||||
|
|
||||||
void
|
void
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
rl_set_keymap(Keymap k)
|
rl_set_keymap(Keymap k __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
rl_generic_bind(int type, const char * keyseq, const char * data, Keymap k)
|
rl_generic_bind(int type __attribute__((__unused__)),
|
||||||
|
const char * keyseq __attribute__((__unused__)),
|
||||||
|
const char * data __attribute__((__unused__)),
|
||||||
|
Keymap k __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
rl_bind_key_in_map(int key, Function *fun, Keymap k)
|
rl_bind_key_in_map(int key __attribute__((__unused__)),
|
||||||
|
Function *fun __attribute__((__unused__)),
|
||||||
|
Keymap k __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ vi_paste_prev(EditLine *el, int c __attribute__((__unused__)))
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_prev_big_word(EditLine *el, int c)
|
vi_prev_big_word(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (el->el_line.cursor == el->el_line.buffer)
|
if (el->el_line.cursor == el->el_line.buffer)
|
||||||
@ -195,7 +195,7 @@ vi_prev_word(EditLine *el, int c __attribute__((__unused__)))
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_next_big_word(EditLine *el, int c)
|
vi_next_big_word(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (el->el_line.cursor >= el->el_line.lastchar - 1)
|
if (el->el_line.cursor >= el->el_line.lastchar - 1)
|
||||||
@ -462,7 +462,7 @@ vi_delete_meta(EditLine *el, int c __attribute__((__unused__)))
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_end_big_word(EditLine *el, int c)
|
vi_end_big_word(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (el->el_line.cursor == el->el_line.lastchar)
|
if (el->el_line.cursor == el->el_line.lastchar)
|
||||||
@ -797,7 +797,7 @@ vi_repeat_prev_char(EditLine *el, int c __attribute__((__unused__)))
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_match(EditLine *el, int c)
|
vi_match(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
const char match_chars[] = "()[]{}";
|
const char match_chars[] = "()[]{}";
|
||||||
char *cp;
|
char *cp;
|
||||||
@ -844,7 +844,7 @@ vi_match(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_undo_line(EditLine *el, int c)
|
vi_undo_line(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
cv_undo(el);
|
cv_undo(el);
|
||||||
@ -858,7 +858,7 @@ vi_undo_line(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_to_column(EditLine *el, int c)
|
vi_to_column(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
el->el_line.cursor = el->el_line.buffer;
|
el->el_line.cursor = el->el_line.buffer;
|
||||||
@ -872,7 +872,7 @@ vi_to_column(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_yank_end(EditLine *el, int c)
|
vi_yank_end(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
cv_yank(el, el->el_line.cursor,
|
cv_yank(el, el->el_line.cursor,
|
||||||
@ -886,7 +886,7 @@ vi_yank_end(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_yank(EditLine *el, int c)
|
vi_yank(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
return cv_action(el, YANK);
|
return cv_action(el, YANK);
|
||||||
@ -898,7 +898,7 @@ vi_yank(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_comment_out(EditLine *el, int c)
|
vi_comment_out(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
|
|
||||||
el->el_line.cursor = el->el_line.buffer;
|
el->el_line.cursor = el->el_line.buffer;
|
||||||
@ -919,7 +919,8 @@ extern char *get_alias_text(const char *) __weak_reference(get_alias_text);
|
|||||||
#endif
|
#endif
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_alias(EditLine *el, int c)
|
vi_alias(EditLine *el __attribute__((__unused__)),
|
||||||
|
int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
#if defined(__weak_reference) && !defined(__FreeBSD__)
|
#if defined(__weak_reference) && !defined(__FreeBSD__)
|
||||||
char alias_name[3];
|
char alias_name[3];
|
||||||
@ -949,7 +950,7 @@ vi_alias(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_to_history_line(EditLine *el, int c)
|
vi_to_history_line(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
int sv_event_no = el->el_history.eventno;
|
int sv_event_no = el->el_history.eventno;
|
||||||
el_action_t rval;
|
el_action_t rval;
|
||||||
@ -994,7 +995,7 @@ vi_to_history_line(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_histedit(EditLine *el, int c)
|
vi_histedit(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
@ -1050,7 +1051,7 @@ vi_histedit(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_history_word(EditLine *el, int c)
|
vi_history_word(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
const char *wp = HIST_FIRST(el);
|
const char *wp = HIST_FIRST(el);
|
||||||
const char *wep, *wsp;
|
const char *wep, *wsp;
|
||||||
@ -1099,7 +1100,7 @@ vi_history_word(EditLine *el, int c)
|
|||||||
*/
|
*/
|
||||||
protected el_action_t
|
protected el_action_t
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
vi_redo(EditLine *el, int c)
|
vi_redo(EditLine *el, int c __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
c_redo_t *r = &el->el_chared.c_redo;
|
c_redo_t *r = &el->el_chared.c_redo;
|
||||||
|
|
||||||
|
@ -1839,8 +1839,11 @@ rl_username_completion_function (text, state)
|
|||||||
#else /* !__WIN32__ && !__OPENNT) */
|
#else /* !__WIN32__ && !__OPENNT) */
|
||||||
static char *username = (char *)NULL;
|
static char *username = (char *)NULL;
|
||||||
static struct passwd *entry;
|
static struct passwd *entry;
|
||||||
static int namelen, first_char, first_char_loc;
|
static int first_char, first_char_loc;
|
||||||
char *value;
|
char *value;
|
||||||
|
#if defined (HAVE_GETPWENT)
|
||||||
|
static int namelen;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (state == 0)
|
if (state == 0)
|
||||||
{
|
{
|
||||||
@ -1850,7 +1853,9 @@ rl_username_completion_function (text, state)
|
|||||||
first_char_loc = first_char == '~';
|
first_char_loc = first_char == '~';
|
||||||
|
|
||||||
username = savestring (&text[first_char_loc]);
|
username = savestring (&text[first_char_loc]);
|
||||||
|
#if defined (HAVE_GETPWENT)
|
||||||
namelen = strlen (username);
|
namelen = strlen (username);
|
||||||
|
#endif
|
||||||
setpwent ();
|
setpwent ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
|
|||||||
case 's':
|
case 's':
|
||||||
{
|
{
|
||||||
char *new_event;
|
char *new_event;
|
||||||
int delimiter, failed, si, l_temp, ws, we;
|
int delimiter, failed, si, l_temp, we;
|
||||||
|
|
||||||
if (c == 's')
|
if (c == 's')
|
||||||
{
|
{
|
||||||
@ -792,7 +792,6 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
|
|||||||
{
|
{
|
||||||
for (; temp[si] && whitespace (temp[si]); si++)
|
for (; temp[si] && whitespace (temp[si]); si++)
|
||||||
;
|
;
|
||||||
ws = si;
|
|
||||||
we = history_tokenize_word (temp, si);
|
we = history_tokenize_word (temp, si);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,6 +402,7 @@ history_truncate_file (fname, lines)
|
|||||||
if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
||||||
{
|
{
|
||||||
bytes_written= write (file, bp, chars_read - (bp - buffer));
|
bytes_written= write (file, bp, chars_read - (bp - buffer));
|
||||||
|
(void) bytes_written;
|
||||||
|
|
||||||
#if defined (__BEOS__)
|
#if defined (__BEOS__)
|
||||||
/* BeOS ignores O_TRUNC. */
|
/* BeOS ignores O_TRUNC. */
|
||||||
|
@ -617,7 +617,7 @@ rl_search_history (direction, invoking_key)
|
|||||||
int direction, invoking_key __attribute__((unused));
|
int direction, invoking_key __attribute__((unused));
|
||||||
{
|
{
|
||||||
_rl_search_cxt *cxt; /* local for now, but saved globally */
|
_rl_search_cxt *cxt; /* local for now, but saved globally */
|
||||||
int c, r;
|
int r;
|
||||||
|
|
||||||
RL_SETSTATE(RL_STATE_ISEARCH);
|
RL_SETSTATE(RL_STATE_ISEARCH);
|
||||||
cxt = _rl_isearch_init (direction);
|
cxt = _rl_isearch_init (direction);
|
||||||
@ -632,7 +632,7 @@ rl_search_history (direction, invoking_key)
|
|||||||
r = -1;
|
r = -1;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
c = _rl_search_getchar (cxt);
|
_rl_search_getchar (cxt);
|
||||||
/* We might want to handle EOF here (c == 0) */
|
/* We might want to handle EOF here (c == 0) */
|
||||||
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
@ -655,9 +655,9 @@ int
|
|||||||
_rl_isearch_callback (cxt)
|
_rl_isearch_callback (cxt)
|
||||||
_rl_search_cxt *cxt;
|
_rl_search_cxt *cxt;
|
||||||
{
|
{
|
||||||
int c, r;
|
int r;
|
||||||
|
|
||||||
c = _rl_search_getchar (cxt);
|
_rl_search_getchar (cxt);
|
||||||
/* We might want to handle EOF here */
|
/* We might want to handle EOF here */
|
||||||
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ rl_insert_close (count, invoking_key)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined (HAVE_SELECT)
|
#if defined (HAVE_SELECT)
|
||||||
int orig_point, match_point, ready;
|
int orig_point, match_point;
|
||||||
struct timeval timer;
|
struct timeval timer;
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ rl_insert_close (count, invoking_key)
|
|||||||
orig_point = rl_point;
|
orig_point = rl_point;
|
||||||
rl_point = match_point;
|
rl_point = match_point;
|
||||||
(*rl_redisplay_function) ();
|
(*rl_redisplay_function) ();
|
||||||
ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer);
|
select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer);
|
||||||
rl_point = orig_point;
|
rl_point = orig_point;
|
||||||
#else /* !HAVE_SELECT */
|
#else /* !HAVE_SELECT */
|
||||||
_rl_insert_char (count, invoking_key);
|
_rl_insert_char (count, invoking_key);
|
||||||
|
@ -447,11 +447,10 @@ readline_internal_char ()
|
|||||||
readline_internal_charloop ()
|
readline_internal_charloop ()
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
static int lastc, eof_found;
|
static int lastc;
|
||||||
int c, code, lk;
|
int c, code, lk;
|
||||||
|
|
||||||
lastc = -1;
|
lastc = -1;
|
||||||
eof_found = 0;
|
|
||||||
|
|
||||||
#if !defined (READLINE_CALLBACKS)
|
#if !defined (READLINE_CALLBACKS)
|
||||||
while (rl_done == 0)
|
while (rl_done == 0)
|
||||||
|
@ -268,7 +268,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
|
|
||||||
#if !defined (__DJGPP__)
|
#if !defined (__DJGPP__)
|
||||||
if (_rl_screenwidth <= 0 && term_string_buffer)
|
if (_rl_screenwidth <= 0 && term_string_buffer)
|
||||||
_rl_screenwidth = tgetnum ("co");
|
_rl_screenwidth = tgetnum ((char *)"co");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
|
|
||||||
#if !defined (__DJGPP__)
|
#if !defined (__DJGPP__)
|
||||||
if (_rl_screenheight <= 0 && term_string_buffer)
|
if (_rl_screenheight <= 0 && term_string_buffer)
|
||||||
_rl_screenheight = tgetnum ("li");
|
_rl_screenheight = tgetnum ((char *)"li");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,7 +516,7 @@ _rl_init_terminal_io (terminal_name)
|
|||||||
if (!_rl_term_cr)
|
if (!_rl_term_cr)
|
||||||
_rl_term_cr = "\r";
|
_rl_term_cr = "\r";
|
||||||
|
|
||||||
_rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
|
_rl_term_autowrap = tgetflag ((char *)"am") && tgetflag ((char *)"xn");
|
||||||
|
|
||||||
/* Allow calling application to set default height and width, using
|
/* Allow calling application to set default height and width, using
|
||||||
rl_set_screen_size */
|
rl_set_screen_size */
|
||||||
@ -531,7 +531,7 @@ _rl_init_terminal_io (terminal_name)
|
|||||||
|
|
||||||
/* Check to see if this terminal has a meta key and clear the capability
|
/* Check to see if this terminal has a meta key and clear the capability
|
||||||
variables if there is none. */
|
variables if there is none. */
|
||||||
term_has_meta = (tgetflag ("km") || tgetflag ("MT"));
|
term_has_meta = (tgetflag ((char *)"km") || tgetflag ((char *)"MT"));
|
||||||
if (!term_has_meta)
|
if (!term_has_meta)
|
||||||
_rl_term_mm = _rl_term_mo = (char *)NULL;
|
_rl_term_mm = _rl_term_mo = (char *)NULL;
|
||||||
|
|
||||||
|
@ -811,11 +811,10 @@ _rl_overwrite_char (count, c)
|
|||||||
int i;
|
int i;
|
||||||
#if defined (HANDLE_MULTIBYTE)
|
#if defined (HANDLE_MULTIBYTE)
|
||||||
char mbkey[MB_LEN_MAX];
|
char mbkey[MB_LEN_MAX];
|
||||||
int k;
|
|
||||||
|
|
||||||
/* Read an entire multibyte character sequence to insert COUNT times. */
|
/* Read an entire multibyte character sequence to insert COUNT times. */
|
||||||
if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
||||||
k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX);
|
_rl_read_mbstring (c, mbkey, MB_LEN_MAX);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rl_begin_undo_group ();
|
rl_begin_undo_group ();
|
||||||
|
@ -8,7 +8,8 @@ AC_DEFUN([MY_MAINTAINER_MODE], [
|
|||||||
[AS_HELP_STRING([--enable-mysql-maintainer-mode],
|
[AS_HELP_STRING([--enable-mysql-maintainer-mode],
|
||||||
[Enable a MySQL maintainer-specific development environment])],
|
[Enable a MySQL maintainer-specific development environment])],
|
||||||
[USE_MYSQL_MAINTAINER_MODE=$enableval],
|
[USE_MYSQL_MAINTAINER_MODE=$enableval],
|
||||||
[USE_MYSQL_MAINTAINER_MODE=no])
|
[AS_IF([test "$with_debug" != "no"],
|
||||||
|
[USE_MYSQL_MAINTAINER_MODE=yes], [USE_MYSQL_MAINTAINER_MODE=no])])
|
||||||
AC_MSG_RESULT([$USE_MYSQL_MAINTAINER_MODE])
|
AC_MSG_RESULT([$USE_MYSQL_MAINTAINER_MODE])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -299,7 +299,8 @@ CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN)
|
|||||||
CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD)
|
CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD)
|
||||||
CHECK_FUNCTION_EXISTS (fcntl HAVE_FCNTL)
|
CHECK_FUNCTION_EXISTS (fcntl HAVE_FCNTL)
|
||||||
CHECK_FUNCTION_EXISTS (fconvert HAVE_FCONVERT)
|
CHECK_FUNCTION_EXISTS (fconvert HAVE_FCONVERT)
|
||||||
CHECK_SYMBOL_EXISTS(fdatasync "unistd.h" HAVE_FDATASYNC)
|
CHECK_FUNCTION_EXISTS (fdatasync HAVE_FDATASYNC)
|
||||||
|
CHECK_SYMBOL_EXISTS(fdatasync "unistd.h" HAVE_DECL_FDATASYNC)
|
||||||
CHECK_FUNCTION_EXISTS (fesetround HAVE_FESETROUND)
|
CHECK_FUNCTION_EXISTS (fesetround HAVE_FESETROUND)
|
||||||
CHECK_FUNCTION_EXISTS (fpsetmask HAVE_FPSETMASK)
|
CHECK_FUNCTION_EXISTS (fpsetmask HAVE_FPSETMASK)
|
||||||
CHECK_FUNCTION_EXISTS (fseeko HAVE_FSEEKO)
|
CHECK_FUNCTION_EXISTS (fseeko HAVE_FSEEKO)
|
||||||
|
21
configure.in
21
configure.in
@ -27,7 +27,7 @@ dnl
|
|||||||
dnl When changing the major version number please also check the switch
|
dnl When changing the major version number please also check the switch
|
||||||
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
||||||
dnl to update version.c in ndb.
|
dnl to update version.c in ndb.
|
||||||
AC_INIT([MySQL Server], [5.5.8-rc], [], [mysql])
|
AC_INIT([MySQL Server], [5.5.8-ga], [], [mysql])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
@ -87,7 +87,6 @@ sinclude(config/ac-macros/character_sets.m4)
|
|||||||
sinclude(config/ac-macros/compiler_flag.m4)
|
sinclude(config/ac-macros/compiler_flag.m4)
|
||||||
sinclude(config/ac-macros/plugins.m4)
|
sinclude(config/ac-macros/plugins.m4)
|
||||||
sinclude(config/ac-macros/dtrace.m4)
|
sinclude(config/ac-macros/dtrace.m4)
|
||||||
sinclude(config/ac-macros/ha_ndbcluster.m4)
|
|
||||||
sinclude(config/ac-macros/large_file.m4)
|
sinclude(config/ac-macros/large_file.m4)
|
||||||
sinclude(config/ac-macros/misc.m4)
|
sinclude(config/ac-macros/misc.m4)
|
||||||
sinclude(config/ac-macros/readline.m4)
|
sinclude(config/ac-macros/readline.m4)
|
||||||
@ -119,6 +118,13 @@ AC_SUBST(SHARED_LIB_MAJOR_VERSION)
|
|||||||
AC_SUBST(SHARED_LIB_VERSION)
|
AC_SUBST(SHARED_LIB_VERSION)
|
||||||
AC_SUBST(AVAILABLE_LANGUAGES)
|
AC_SUBST(AVAILABLE_LANGUAGES)
|
||||||
|
|
||||||
|
# Check whether a debug mode should be enabled.
|
||||||
|
AC_ARG_WITH([debug],
|
||||||
|
AS_HELP_STRING([--with-debug@<:@=full@:>@],
|
||||||
|
[Enable various amounts of debugging support (full adds a slow memory checker).]),
|
||||||
|
[with_debug=$withval],
|
||||||
|
[with_debug=no])
|
||||||
|
|
||||||
# Whether the maintainer mode should be enabled.
|
# Whether the maintainer mode should be enabled.
|
||||||
MY_MAINTAINER_MODE
|
MY_MAINTAINER_MODE
|
||||||
|
|
||||||
@ -1690,10 +1696,6 @@ then
|
|||||||
DEBUG_OPTIMIZE_CXX=""
|
DEBUG_OPTIMIZE_CXX=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_WITH(debug,
|
|
||||||
[AS_HELP_STRING([--with-debug], [Add debug code @<:@default=no@:>@])],
|
|
||||||
[with_debug=$withval],
|
|
||||||
[with_debug=no])
|
|
||||||
if test "$with_debug" = "yes"
|
if test "$with_debug" = "yes"
|
||||||
then
|
then
|
||||||
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
@ -2118,6 +2120,13 @@ MYSQL_TYPE_QSORT
|
|||||||
AC_FUNC_UTIME_NULL
|
AC_FUNC_UTIME_NULL
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
|
|
||||||
|
AC_CHECK_DECLS([fdatasync],,,
|
||||||
|
[
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
|
||||||
AC_CHECK_FUNCS(alarm bfill bmove bsearch bzero \
|
AC_CHECK_FUNCS(alarm bfill bmove bsearch bzero \
|
||||||
chsize cuserid fchmod fcntl \
|
chsize cuserid fchmod fcntl \
|
||||||
fdatasync fesetround finite fpresetsticky fpsetmask fsync ftruncate \
|
fdatasync fesetround finite fpresetsticky fpsetmask fsync ftruncate \
|
||||||
|
@ -905,6 +905,7 @@ void _db_set_init_(const char *control)
|
|||||||
CODE_STATE tmp_cs;
|
CODE_STATE tmp_cs;
|
||||||
bzero((uchar*) &tmp_cs, sizeof(tmp_cs));
|
bzero((uchar*) &tmp_cs, sizeof(tmp_cs));
|
||||||
tmp_cs.stack= &init_settings;
|
tmp_cs.stack= &init_settings;
|
||||||
|
tmp_cs.process= db_process ? db_process : "dbug";
|
||||||
DbugParse(&tmp_cs, control);
|
DbugParse(&tmp_cs, control);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2370,7 +2371,7 @@ static void DbugFlush(CODE_STATE *cs)
|
|||||||
|
|
||||||
void _db_flush_()
|
void _db_flush_()
|
||||||
{
|
{
|
||||||
CODE_STATE *cs;
|
CODE_STATE *cs= NULL;
|
||||||
get_code_state_or_return;
|
get_code_state_or_return;
|
||||||
(void) fflush(cs->stack->out_file);
|
(void) fflush(cs->stack->out_file);
|
||||||
}
|
}
|
||||||
|
@ -32,8 +32,15 @@
|
|||||||
|
|
||||||
/* GNU C/C++ */
|
/* GNU C/C++ */
|
||||||
#if defined __GNUC__
|
#if defined __GNUC__
|
||||||
|
/* Convenience macro to test the minimum required GCC version. */
|
||||||
|
# define MY_GNUC_PREREQ(maj, min) \
|
||||||
|
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||||
/* Any after 2.95... */
|
/* Any after 2.95... */
|
||||||
# define MY_ALIGN_EXT
|
# define MY_ALIGN_EXT
|
||||||
|
/* Comunicate to the compiler the unreachability of the code. */
|
||||||
|
# if MY_GNUC_PREREQ(4,5)
|
||||||
|
# define MY_ASSERT_UNREACHABLE() __builtin_unreachable()
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Microsoft Visual C++ */
|
/* Microsoft Visual C++ */
|
||||||
#elif defined _MSC_VER
|
#elif defined _MSC_VER
|
||||||
@ -67,7 +74,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Generic compiler-dependent features.
|
Generic (compiler-independent) features.
|
||||||
*/
|
*/
|
||||||
#ifndef MY_ALIGNOF
|
#ifndef MY_ALIGNOF
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
@ -79,6 +86,10 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MY_ASSERT_UNREACHABLE
|
||||||
|
# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
C++ Type Traits
|
C++ Type Traits
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (c) 2010, 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
|
||||||
@ -13,8 +13,18 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
#ifndef _dbug_h
|
#ifndef MY_DBUG_INCLUDED
|
||||||
#define _dbug_h
|
#define MY_DBUG_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __WIN__
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#include <signal.h>
|
||||||
|
#endif /* not __WIN__ */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -111,6 +121,20 @@ extern const char* _db_get_func_(void);
|
|||||||
#define DBUG_CRASH_VOID_RETURN \
|
#define DBUG_CRASH_VOID_RETURN \
|
||||||
DBUG_CHECK_CRASH (_db_get_func_(), "_crash_return")
|
DBUG_CHECK_CRASH (_db_get_func_(), "_crash_return")
|
||||||
|
|
||||||
|
/*
|
||||||
|
Make the program fail, without creating a core file.
|
||||||
|
abort() will send SIGABRT which (most likely) generates core.
|
||||||
|
Use SIGKILL instead, which cannot be caught.
|
||||||
|
We also pause the current thread, until the signal is actually delivered.
|
||||||
|
An alternative would be to use _exit(EXIT_FAILURE),
|
||||||
|
but then valgrind would report lots of memory leaks.
|
||||||
|
*/
|
||||||
|
#ifdef __WIN__
|
||||||
|
#define DBUG_SUICIDE() DBUG_ABORT()
|
||||||
|
#else
|
||||||
|
#define DBUG_SUICIDE() (_db_flush_(), kill(getpid(), SIGKILL), pause())
|
||||||
|
#endif
|
||||||
|
|
||||||
#else /* No debugger */
|
#else /* No debugger */
|
||||||
|
|
||||||
#define DBUG_ENTER(a1)
|
#define DBUG_ENTER(a1)
|
||||||
@ -139,10 +163,11 @@ extern const char* _db_get_func_(void);
|
|||||||
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||||
#define DEBUGGER_OFF do { } while(0)
|
#define DEBUGGER_OFF do { } while(0)
|
||||||
#define DEBUGGER_ON do { } while(0)
|
#define DEBUGGER_ON do { } while(0)
|
||||||
#define DBUG_ABORT() abort()
|
#define DBUG_ABORT() do { } while(0)
|
||||||
#define DBUG_CRASH_ENTER(func)
|
#define DBUG_CRASH_ENTER(func)
|
||||||
#define DBUG_CRASH_RETURN(val) do { return(val); } while(0)
|
#define DBUG_CRASH_RETURN(val) do { return(val); } while(0)
|
||||||
#define DBUG_CRASH_VOID_RETURN do { return; } while(0)
|
#define DBUG_CRASH_VOID_RETURN do { return; } while(0)
|
||||||
|
#define DBUG_SUICIDE() do { } while(0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -164,4 +189,5 @@ void debug_sync_point(const char* lock_name, uint lock_timeout);
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
#endif /* MY_DBUG_INCLUDED */
|
||||||
|
@ -39,6 +39,13 @@ C_MODE_START
|
|||||||
#define GET_ASK_ADDR 128
|
#define GET_ASK_ADDR 128
|
||||||
#define GET_TYPE_MASK 127
|
#define GET_TYPE_MASK 127
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enumeration of the my_option::arg_type attributes.
|
||||||
|
It should be noted that for historical reasons variables with the combination
|
||||||
|
arg_type=NO_ARG, my_option::var_type=GET_BOOL still accepts
|
||||||
|
arguments. This is someone counter intuitive and care should be taken
|
||||||
|
if the code is refactored.
|
||||||
|
*/
|
||||||
enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG };
|
enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG };
|
||||||
|
|
||||||
struct st_typelib;
|
struct st_typelib;
|
||||||
|
@ -501,7 +501,8 @@ int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line);
|
|||||||
int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file,
|
int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file,
|
||||||
uint line);
|
uint line);
|
||||||
int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
|
int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
|
||||||
struct timespec *abstime, const char *file, uint line);
|
const struct timespec *abstime,
|
||||||
|
const char *file, uint line);
|
||||||
void safe_mutex_global_init(void);
|
void safe_mutex_global_init(void);
|
||||||
void safe_mutex_end(FILE *file);
|
void safe_mutex_end(FILE *file);
|
||||||
|
|
||||||
|
@ -23,8 +23,10 @@
|
|||||||
*/
|
*/
|
||||||
#define MYSQL_CLIENT_PLUGIN_INCLUDED
|
#define MYSQL_CLIENT_PLUGIN_INCLUDED
|
||||||
|
|
||||||
|
#ifndef MYSQL_ABI_CHECK
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* known plugin types */
|
/* known plugin types */
|
||||||
#define MYSQL_CLIENT_reserved1 0
|
#define MYSQL_CLIENT_reserved1 0
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#include <stdarg.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
struct st_mysql_client_plugin
|
struct st_mysql_client_plugin
|
||||||
{
|
{
|
||||||
int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *);
|
int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *);
|
||||||
|
@ -90,8 +90,8 @@ typedef struct st_mysql_server_auth_info
|
|||||||
int password_used;
|
int password_used;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set to the name of the connected client if it can be resolved, or to
|
Set to the name of the connected client host, if it can be resolved,
|
||||||
the address otherwise
|
or to its IP address otherwise.
|
||||||
*/
|
*/
|
||||||
const char *host_or_ip;
|
const char *host_or_ip;
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ typedef struct st_mysql_server_auth_info
|
|||||||
*/
|
*/
|
||||||
struct st_mysql_auth
|
struct st_mysql_auth
|
||||||
{
|
{
|
||||||
int interface_version; /**< version plugin uses */
|
int interface_version; /** version plugin uses */
|
||||||
/**
|
/**
|
||||||
A plugin that a client must use for authentication with this server
|
A plugin that a client must use for authentication with this server
|
||||||
plugin. Can be NULL to mean "any plugin".
|
plugin. Can be NULL to mean "any plugin".
|
||||||
|
31
include/welcome_copyright_notice.h
Normal file
31
include/welcome_copyright_notice.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
|
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
|
||||||
|
the Free Software Foundation; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
|
#ifndef _welcome_copyright_notice_h_
|
||||||
|
#define _welcome_copyright_notice_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
This define specifies copyright notice which is displayed by every MySQL
|
||||||
|
program on start, or on help screen.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ORACLE_WELCOME_COPYRIGHT_NOTICE(years) \
|
||||||
|
"Copyright (c) " years ", Oracle and/or its affiliates. All rights reserved.\n" \
|
||||||
|
"\n" \
|
||||||
|
"Oracle is a registered trademark of Oracle Corporation and/or its\n" \
|
||||||
|
"affiliates. Other names may be trademarks of their respective\n" \
|
||||||
|
"owners.\n"
|
||||||
|
|
||||||
|
#endif /* _welcome_copyright_notice_h_ */
|
@ -15,9 +15,6 @@ main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_m
|
|||||||
main.lock_multi_bug38691 @solaris # Bug#47792 2009-10-02 alik main.lock_multi_bug38691 times out sporadically on Solaris 10
|
main.lock_multi_bug38691 @solaris # Bug#47792 2009-10-02 alik main.lock_multi_bug38691 times out sporadically on Solaris 10
|
||||||
main.log_tables # Bug#47924 2009-10-08 alik main.log_tables times out sporadically
|
main.log_tables # Bug#47924 2009-10-08 alik main.log_tables times out sporadically
|
||||||
main.lowercase_table2 @darwin # Bug#55509 2010-07-26 alik main.lowercase_table2 fails on Mac OSX (again)
|
main.lowercase_table2 @darwin # Bug#55509 2010-07-26 alik main.lowercase_table2 fails on Mac OSX (again)
|
||||||
main.mysqlbinlog_row @solaris # Bug#52202 2010-03-22 alik mysqlbinlog_row* fail in daily-trunk on Sol10 x86_64 debug_max
|
|
||||||
main.mysqlbinlog_row_innodb @solaris # Bug#52202 2010-03-22 alik mysqlbinlog_row* fail in daily-trunk on Sol10 x86_64 debug_max
|
|
||||||
main.mysqlbinlog_row_myisam @solaris # Bug#52202 2010-03-22 alik mysqlbinlog_row* fail in daily-trunk on Sol10 x86_64 debug_max
|
|
||||||
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
||||||
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
@ -29,7 +26,6 @@ rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails spora
|
|||||||
rpl.rpl_innodb_bug28430* # Bug#46029
|
rpl.rpl_innodb_bug28430* # Bug#46029
|
||||||
rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_innodb_bug30888 fails sporadically on Solaris
|
rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_innodb_bug30888 fails sporadically on Solaris
|
||||||
rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows
|
rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows
|
||||||
rpl.rpl_row_sp011* @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
|
||||||
|
|
||||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
||||||
|
@ -6,7 +6,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
eval $statement;
|
eval $statement;
|
||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
if (`select '$cleanup' != ''`) {
|
if ($cleanup) {
|
||||||
eval $cleanup;
|
eval $cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ INSERT INTO t1 VALUES (3);
|
|||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
if (`select '$cleanup' != ''`) {
|
if ($cleanup) {
|
||||||
eval $cleanup;
|
eval $cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,10 +285,10 @@ if (`SELECT $CRC_ARG_type = 7`) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
######## execute! ########
|
######## execute! ########
|
||||||
if (`SELECT '$CRC_RET_stmt_sidef' != ''`) {
|
if ($CRC_RET_stmt_sidef) {
|
||||||
--echo
|
--echo
|
||||||
--echo Invoking $CRC_RET_desc.
|
--echo Invoking $CRC_RET_desc.
|
||||||
if (`SELECT '$CRC_create' != ''`) {
|
if ($CRC_create) {
|
||||||
--eval $CRC_create
|
--eval $CRC_create
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +365,7 @@ if (`SELECT '$CRC_RET_stmt_sidef' != ''`) {
|
|||||||
|
|
||||||
# Invoke created object, discarding the return value. This should not
|
# Invoke created object, discarding the return value. This should not
|
||||||
# give any warning.
|
# give any warning.
|
||||||
if (`SELECT '$CRC_RET_sel_retval' != ''`) {
|
if ($CRC_RET_sel_retval) {
|
||||||
--echo * Invoke statement so that return value is dicarded: expect no warning.
|
--echo * Invoke statement so that return value is dicarded: expect no warning.
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
--eval $CRC_RET_sel_retval
|
--eval $CRC_RET_sel_retval
|
||||||
|
@ -21,9 +21,18 @@
|
|||||||
# and slave are diverging.
|
# and slave are diverging.
|
||||||
#
|
#
|
||||||
########################################################################################
|
########################################################################################
|
||||||
|
|
||||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||||
|
|
||||||
|
let $old_max_binlog_cache_size= query_get_value(SHOW VARIABLES LIKE "max_binlog_cache_size", Value, 1);
|
||||||
|
let $old_binlog_cache_size= query_get_value(SHOW VARIABLES LIKE "binlog_cache_size", Value, 1);
|
||||||
|
|
||||||
|
SET GLOBAL max_binlog_cache_size = 4096;
|
||||||
|
# Becuase of bug#55377, we have to set binlog_cache_size until the bug is
|
||||||
|
# fixed.
|
||||||
|
SET GLOBAL binlog_cache_size = 4096;
|
||||||
|
disconnect master;
|
||||||
|
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
|
||||||
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
||||||
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
|
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
|
||||||
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
||||||
@ -50,13 +59,9 @@ eval INSERT INTO t2 (a, data) VALUES (2,
|
|||||||
CONCAT($data, $data, $data, $data, $data, $data));
|
CONCAT($data, $data, $data, $data, $data, $data));
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
connection slave;
|
# Incident event
|
||||||
--source include/wait_for_slave_sql_to_stop.inc
|
--let $slave_sql_errno=1590
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
|
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||||
START SLAVE SQL_THREAD;
|
|
||||||
--source include/wait_for_slave_sql_to_start.inc
|
|
||||||
|
|
||||||
connection master;
|
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
eval INSERT INTO t1 (a, data) VALUES (3, $data);
|
eval INSERT INTO t1 (a, data) VALUES (3, $data);
|
||||||
@ -74,23 +79,15 @@ eval UPDATE t2, t1 SET t2.data = CONCAT($data, $data, $data, $data),
|
|||||||
t1.data = CONCAT($data, $data, $data, $data);
|
t1.data = CONCAT($data, $data, $data, $data);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
connection slave;
|
# Incident event
|
||||||
--source include/wait_for_slave_sql_to_stop.inc
|
--let $slave_skip_counter=1
|
||||||
|
|
||||||
if (`SELECT @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
|
||||||
{
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
|
|
||||||
}
|
|
||||||
if (`SELECT @@binlog_format = 'ROW'`)
|
if (`SELECT @@binlog_format = 'ROW'`)
|
||||||
{
|
{
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 2;
|
--inc $slave_skip_counter
|
||||||
}
|
}
|
||||||
START SLAVE SQL_THREAD;
|
--let $slave_sql_errno=1590
|
||||||
--source include/wait_for_slave_sql_to_start.inc
|
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||||
connection master;
|
--let $slave_skip_counter=
|
||||||
|
|
||||||
let $diff_statement= SELECT * FROM t1;
|
|
||||||
--source include/diff_master_slave.inc
|
|
||||||
|
|
||||||
--echo ########################################################################################
|
--echo ########################################################################################
|
||||||
--echo # 2 - BEGIN - IMPLICIT COMMIT by DDL
|
--echo # 2 - BEGIN - IMPLICIT COMMIT by DDL
|
||||||
@ -178,17 +175,6 @@ BEGIN;
|
|||||||
CREATE TABLE t5 (a int);
|
CREATE TABLE t5 (a int);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
if (`SELECT @@binlog_format = 'ROW'`)
|
|
||||||
{
|
|
||||||
connection slave;
|
|
||||||
--source include/wait_for_slave_sql_to_stop.inc
|
|
||||||
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
|
|
||||||
START SLAVE SQL_THREAD;
|
|
||||||
--source include/wait_for_slave_sql_to_start.inc
|
|
||||||
connection master;
|
|
||||||
}
|
|
||||||
|
|
||||||
let $diff_statement= SELECT * FROM t1;
|
let $diff_statement= SELECT * FROM t1;
|
||||||
--source include/diff_master_slave.inc
|
--source include/diff_master_slave.inc
|
||||||
|
|
||||||
@ -373,6 +359,70 @@ COMMIT;
|
|||||||
let $diff_statement= SELECT * FROM t1;
|
let $diff_statement= SELECT * FROM t1;
|
||||||
--source include/diff_master_slave.inc
|
--source include/diff_master_slave.inc
|
||||||
|
|
||||||
|
--echo ########################################################################
|
||||||
|
--echo # 8 - Bug#55375(Regression Bug) Transaction bigger than
|
||||||
|
--echo # max_binlog_cache_size crashes slave
|
||||||
|
--echo ########################################################################
|
||||||
|
|
||||||
|
--echo # [ On Slave ]
|
||||||
|
SET GLOBAL max_binlog_cache_size = 4096;
|
||||||
|
SET GLOBAL binlog_cache_size = 4096;
|
||||||
|
|
||||||
|
source include/stop_slave.inc;
|
||||||
|
source include/start_slave.inc;
|
||||||
|
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
|
||||||
|
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
TRUNCATE t1;
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
--let binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1)
|
||||||
|
--let binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
--replace_result $old_max_binlog_cache_size ORIGINAL_VALUE
|
||||||
|
--eval SET GLOBAL max_binlog_cache_size= $old_max_binlog_cache_size
|
||||||
|
--replace_result $old_binlog_cache_size ORIGINAL_VALUE
|
||||||
|
--eval SET GLOBAL binlog_cache_size= $old_binlog_cache_size
|
||||||
|
disconnect master;
|
||||||
|
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
|
||||||
|
--let $n=128
|
||||||
|
BEGIN;
|
||||||
|
--disable_query_log
|
||||||
|
--echo Repeat statement 'INSERT INTO t1 VALUES(\$n, repeat("a", 32))' $n times
|
||||||
|
while ($n)
|
||||||
|
{
|
||||||
|
--eval INSERT INTO t1 VALUES ($n, repeat("a", 32))
|
||||||
|
--dec $n
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
--let $slave_sql_errno= 1197
|
||||||
|
if (`SELECT @@binlog_format = 'ROW'`)
|
||||||
|
{
|
||||||
|
--let $slave_sql_errno= 1534
|
||||||
|
}
|
||||||
|
source include/wait_for_slave_sql_error.inc;
|
||||||
|
|
||||||
|
SELECT count(*) FROM t1;
|
||||||
|
source include/show_binlog_events.inc;
|
||||||
|
|
||||||
|
--replace_result $old_max_binlog_cache_size ORIGINAL_VALUE
|
||||||
|
--eval SET GLOBAL max_binlog_cache_size= $old_max_binlog_cache_size
|
||||||
|
--replace_result $old_binlog_cache_size ORIGINAL_VALUE
|
||||||
|
--eval SET GLOBAL binlog_cache_size= $old_binlog_cache_size
|
||||||
|
|
||||||
|
source include/stop_slave.inc;
|
||||||
|
source include/start_slave.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT count(*) FROM t1;
|
||||||
|
|
||||||
--echo ########################################################################################
|
--echo ########################################################################################
|
||||||
--echo # CLEAN
|
--echo # CLEAN
|
||||||
--echo ########################################################################################
|
--echo ########################################################################################
|
||||||
@ -385,4 +435,4 @@ DROP TABLE IF EXISTS t4;
|
|||||||
DROP TABLE IF EXISTS t5;
|
DROP TABLE IF EXISTS t5;
|
||||||
DROP TABLE IF EXISTS t6;
|
DROP TABLE IF EXISTS t6;
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
sync_slave_with_master;
|
source include/master-slave-end.inc;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
if (`SELECT $debug_sync_action = ''`)
|
if (!$debug_sync_action)
|
||||||
{
|
{
|
||||||
--die Cannot continue. Please set value for debug_sync_action.
|
--die Cannot continue. Please set value for debug_sync_action.
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ CALL mtr.add_suppression("Unsafe statement written to the binary log using state
|
|||||||
# MTR is not case-sensitive.
|
# MTR is not case-sensitive.
|
||||||
let $lower_stmt_head= load data;
|
let $lower_stmt_head= load data;
|
||||||
let $UPPER_STMT_HEAD= LOAD DATA;
|
let $UPPER_STMT_HEAD= LOAD DATA;
|
||||||
if (`SELECT '$lock_option' <> ''`)
|
if ($lock_option)
|
||||||
{
|
{
|
||||||
#if $lock_option is null, an extra blank is added into the statement,
|
#if $lock_option is null, an extra blank is added into the statement,
|
||||||
#this will change the result of rpl_loaddata test case. so $lock_option
|
#this will change the result of rpl_loaddata test case. so $lock_option
|
||||||
|
@ -35,10 +35,23 @@ connection master1;
|
|||||||
send CALL test.p1();
|
send CALL test.p1();
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
# To make sure tha the call on master1 arrived at the get_lock
|
# Make sure that the call on master1 arrived at the get_lock.
|
||||||
sleep 1;
|
let $wait_condition=
|
||||||
|
select count(*) = 1 from information_schema.processlist
|
||||||
|
where state = 'User lock' and
|
||||||
|
info = 'SELECT get_lock("test", 100)';
|
||||||
|
--source include/wait_condition.inc
|
||||||
CALL test.p2();
|
CALL test.p2();
|
||||||
SELECT release_lock("test");
|
SELECT release_lock("test");
|
||||||
|
|
||||||
|
connection master1;
|
||||||
|
# Reap CALL test.p1() to ensure that it has fully completed
|
||||||
|
# before doing any selects on test.t1.
|
||||||
|
--reap
|
||||||
|
# Release lock acquired by it.
|
||||||
|
SELECT release_lock("test");
|
||||||
|
|
||||||
|
connection master;
|
||||||
SELECT * FROM test.t1;
|
SELECT * FROM test.t1;
|
||||||
#show binlog events;
|
#show binlog events;
|
||||||
--source include/wait_for_ndb_to_binlog.inc
|
--source include/wait_for_ndb_to_binlog.inc
|
||||||
@ -51,6 +64,7 @@ DROP TABLE IF EXISTS test.t1;
|
|||||||
eval CREATE TABLE test.t1(a INT,PRIMARY KEY(a))ENGINE=$engine_type;
|
eval CREATE TABLE test.t1(a INT,PRIMARY KEY(a))ENGINE=$engine_type;
|
||||||
CALL test.p2();
|
CALL test.p2();
|
||||||
CALL test.p1();
|
CALL test.p1();
|
||||||
|
SELECT release_lock("test");
|
||||||
SELECT * FROM test.t1;
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
@ -122,4 +122,60 @@ drop table t1i, t2m;
|
|||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#56096 STOP SLAVE hangs if executed in parallel with user sleep
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT );
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--connection slave1
|
||||||
|
--echo # Slave1: lock table for synchronization
|
||||||
|
LOCK TABLES t1 WRITE;
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
--echo # Master: insert into the table
|
||||||
|
INSERT INTO t1 SELECT SLEEP(4);
|
||||||
|
|
||||||
|
--connection slave
|
||||||
|
--echo # Slave: wait for the insert
|
||||||
|
let $wait_condition=
|
||||||
|
SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||||
|
WHERE STATE = "Waiting for table metadata lock"
|
||||||
|
AND INFO = "INSERT INTO t1 SELECT SLEEP(4)";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo # Slave: send slave stop
|
||||||
|
--send STOP SLAVE
|
||||||
|
|
||||||
|
--connection slave1
|
||||||
|
--echo # Slave1: wait for stop slave
|
||||||
|
let $wait_condition=
|
||||||
|
SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||||
|
WHERE INFO = "STOP SLAVE";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo # Slave1: unlock the table
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--connection slave
|
||||||
|
--echo # Slave: wait for the slave to stop
|
||||||
|
--reap
|
||||||
|
--source include/wait_for_slave_to_stop.inc
|
||||||
|
|
||||||
|
--echo # Start slave again
|
||||||
|
--source include/start_slave.inc
|
||||||
|
|
||||||
|
--echo # Clean up
|
||||||
|
--connection master
|
||||||
|
DROP TABLE t1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
# End of tests
|
# End of tests
|
||||||
|
61
mysql-test/extra/rpl_tests/rpl_stop_slave.test
Normal file
61
mysql-test/extra/rpl_tests/rpl_stop_slave.test
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#
|
||||||
|
# Auxiliary file which is used to test BUG#56118
|
||||||
|
#
|
||||||
|
# Slave should apply all statements in the transaction before stop if any
|
||||||
|
# temporary table is created or dropped.
|
||||||
|
#
|
||||||
|
# USEAGE:
|
||||||
|
# --let $tmp_table_stm= a SQL statement
|
||||||
|
# --source extra/rpl_tests/rpl_stop_slave.test
|
||||||
|
#
|
||||||
|
|
||||||
|
if (`SELECT "$tmp_table_stm" = ''`)
|
||||||
|
{
|
||||||
|
--echo \$tmp_table_stm is NULL
|
||||||
|
--die $tmp_table_stm is NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo [ On Master ]
|
||||||
|
connection master;
|
||||||
|
BEGIN;
|
||||||
|
DELETE FROM t1;
|
||||||
|
eval $tmp_table_stm;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
DROP TEMPORARY TABLE tt1;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo [ On Slave ]
|
||||||
|
connection slave;
|
||||||
|
|
||||||
|
# To check if slave SQL thread is applying INSERT statement
|
||||||
|
let $show_statement= SHOW PROCESSLIST;
|
||||||
|
let $field= Info;
|
||||||
|
let $condition= LIKE 'INSERT%';
|
||||||
|
source include/wait_show_condition.inc;
|
||||||
|
|
||||||
|
send STOP SLAVE SQL_THREAD;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo [ On Slave1 ]
|
||||||
|
connection slave1;
|
||||||
|
--echo # To resume slave SQL thread
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo [ On Slave ]
|
||||||
|
connection slave;
|
||||||
|
reap;
|
||||||
|
source include/wait_for_slave_sql_to_stop.inc;
|
||||||
|
|
||||||
|
--echo # Slave should stop after the transaction has committed.
|
||||||
|
--echo # So t1 on master is same to t1 on slave.
|
||||||
|
let diff_table_1=master:test.t1;
|
||||||
|
let diff_table_2=slave:test.t1;
|
||||||
|
source include/diff_tables.inc;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
START SLAVE SQL_THREAD;
|
||||||
|
source include/wait_for_slave_sql_to_start.inc;
|
@ -23,7 +23,7 @@
|
|||||||
# Reset DEBUG_SYNC facility for safety.
|
# Reset DEBUG_SYNC facility for safety.
|
||||||
set debug_sync= "RESET";
|
set debug_sync= "RESET";
|
||||||
|
|
||||||
if (`SELECT '$restore_table' <> ''`)
|
if ($restore_table)
|
||||||
{
|
{
|
||||||
--eval create temporary table t_backup select * from $restore_table;
|
--eval create temporary table t_backup select * from $restore_table;
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ connection default;
|
|||||||
|
|
||||||
--eval delete from $table where i = 0;
|
--eval delete from $table where i = 0;
|
||||||
|
|
||||||
if (`SELECT '$restore_table' <> ''`)
|
if ($restore_table)
|
||||||
{
|
{
|
||||||
--eval truncate table $restore_table;
|
--eval truncate table $restore_table;
|
||||||
--eval insert into $restore_table select * from t_backup;
|
--eval insert into $restore_table select * from t_backup;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
# Reset DEBUG_SYNC facility for safety.
|
# Reset DEBUG_SYNC facility for safety.
|
||||||
set debug_sync= "RESET";
|
set debug_sync= "RESET";
|
||||||
|
|
||||||
if (`SELECT '$restore_table' <> ''`)
|
if ($restore_table)
|
||||||
{
|
{
|
||||||
--eval create temporary table t_backup select * from $restore_table;
|
--eval create temporary table t_backup select * from $restore_table;
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ if (!$success)
|
|||||||
|
|
||||||
--eval delete from $table where i = 0;
|
--eval delete from $table where i = 0;
|
||||||
|
|
||||||
if (`SELECT '$restore_table' <> ''`)
|
if ($restore_table)
|
||||||
{
|
{
|
||||||
--eval truncate table $restore_table;
|
--eval truncate table $restore_table;
|
||||||
--eval insert into $restore_table select * from t_backup;
|
--eval insert into $restore_table select * from t_backup;
|
||||||
|
@ -1635,12 +1635,7 @@ CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
|||||||
INSERT INTO t1 VALUES (1234567);
|
INSERT INTO t1 VALUES (1234567);
|
||||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||||
if (`SELECT @@character_set_connection != 'ucs2'`)
|
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||||
{
|
|
||||||
# Temporarily disable for ucs2
|
|
||||||
# For details, see Bug#55744 GROUP_CONCAT + CASE + ucs return garbage
|
|
||||||
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
|
||||||
}
|
|
||||||
--enable_metadata
|
--enable_metadata
|
||||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||||
--disable_metadata
|
--disable_metadata
|
||||||
|
@ -10,12 +10,12 @@
|
|||||||
# # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position
|
# # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position
|
||||||
# # in $relay_log_file: $relay_log_pos.
|
# # in $relay_log_file: $relay_log_pos.
|
||||||
|
|
||||||
if (`SELECT '$relay_log_file' = ''`)
|
if (!$relay_log_file)
|
||||||
{
|
{
|
||||||
--die 'variable $relay_log_file is null'
|
--die 'variable $relay_log_file is null'
|
||||||
}
|
}
|
||||||
|
|
||||||
if (`SELECT '$master_log_pos' = ''`)
|
if (!$master_log_pos)
|
||||||
{
|
{
|
||||||
--die 'variable $master_log_pos is null'
|
--die 'variable $master_log_pos is null'
|
||||||
}
|
}
|
||||||
|
5
mysql-test/include/have_plugin_interface.inc
Normal file
5
mysql-test/include/have_plugin_interface.inc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
--disable_query_log
|
||||||
|
--require r/true.require
|
||||||
|
select (PLUGIN_LIBRARY LIKE 'qa_auth_interface%') as `TRUE` FROM INFORMATION_SCHEMA.PLUGINS
|
||||||
|
WHERE PLUGIN_NAME='qa_auth_interface';
|
||||||
|
--enable_query_log
|
5
mysql-test/include/have_plugin_server.inc
Normal file
5
mysql-test/include/have_plugin_server.inc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
--disable_query_log
|
||||||
|
--require r/true.require
|
||||||
|
select (PLUGIN_LIBRARY LIKE 'qa_auth_server%') as `TRUE` FROM INFORMATION_SCHEMA.PLUGINS
|
||||||
|
WHERE PLUGIN_NAME='qa_auth_server';
|
||||||
|
--enable_query_log
|
@ -351,3 +351,115 @@ explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 4
|
|||||||
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#56423: Different count with SELECT and CREATE SELECT queries
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT,
|
||||||
|
d INT,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY (c),
|
||||||
|
KEY bd (b,d)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 0, 1, 0),
|
||||||
|
(2, 1, 1, 1),
|
||||||
|
(3, 1, 1, 1),
|
||||||
|
(4, 0, 1, 1);
|
||||||
|
|
||||||
|
EXPLAIN
|
||||||
|
SELECT a
|
||||||
|
FROM t1
|
||||||
|
WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
|
||||||
|
CREATE TABLE t2 ( a INT )
|
||||||
|
SELECT a
|
||||||
|
FROM t1
|
||||||
|
WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
CREATE TABLE t1( a INT, b INT, KEY(a), KEY(b) );
|
||||||
|
INSERT INTO t1 VALUES (1, 2), (1, 2), (1, 2), (1, 2);
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a, b) WHERE a = 1 AND b = 2;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Code coverage of fix.
|
||||||
|
CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t1 (b) VALUES (1);
|
||||||
|
UPDATE t1 SET b = 2 WHERE a = 1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b VARCHAR(1) );
|
||||||
|
INSERT INTO t2 (b) VALUES ('a');
|
||||||
|
UPDATE t2 SET b = 'b' WHERE a = 1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
# The test was inactive for InnoDB at the time of pushing. The following is
|
||||||
|
# expected result for the Bug#56423 test. It can be uncommented and pasted
|
||||||
|
# into result file when reactivating the test.
|
||||||
|
|
||||||
|
##
|
||||||
|
## Bug#56423: Different count with SELECT and CREATE SELECT queries
|
||||||
|
##
|
||||||
|
#CREATE TABLE t1 (
|
||||||
|
#a INT,
|
||||||
|
#b INT,
|
||||||
|
#c INT,
|
||||||
|
#d INT,
|
||||||
|
#PRIMARY KEY (a),
|
||||||
|
#KEY (c),
|
||||||
|
#KEY bd (b,d)
|
||||||
|
#);
|
||||||
|
#INSERT INTO t1 VALUES
|
||||||
|
#(1, 0, 1, 0),
|
||||||
|
#(2, 1, 1, 1),
|
||||||
|
#(3, 1, 1, 1),
|
||||||
|
#(4, 0, 1, 1);
|
||||||
|
#EXPLAIN
|
||||||
|
#SELECT a
|
||||||
|
#FROM t1
|
||||||
|
#WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
#id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
#1 SIMPLE t1 ref c,bd bd 10 const,const 2 Using where
|
||||||
|
#CREATE TABLE t2 ( a INT )
|
||||||
|
#SELECT a
|
||||||
|
#FROM t1
|
||||||
|
#WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
#SELECT * FROM t2;
|
||||||
|
#a
|
||||||
|
#2
|
||||||
|
#3
|
||||||
|
#DROP TABLE t1, t2;
|
||||||
|
#CREATE TABLE t1( a INT, b INT, KEY(a), KEY(b) );
|
||||||
|
#INSERT INTO t1 VALUES (1, 2), (1, 2), (1, 2), (1, 2);
|
||||||
|
#SELECT * FROM t1 FORCE INDEX(a, b) WHERE a = 1 AND b = 2;
|
||||||
|
#a b
|
||||||
|
#1 2
|
||||||
|
#1 2
|
||||||
|
#1 2
|
||||||
|
#1 2
|
||||||
|
#DROP TABLE t1;
|
||||||
|
## Code coverage of fix.
|
||||||
|
#CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT);
|
||||||
|
#INSERT INTO t1 (b) VALUES (1);
|
||||||
|
#UPDATE t1 SET b = 2 WHERE a = 1;
|
||||||
|
#SELECT * FROM t1;
|
||||||
|
#a b
|
||||||
|
#1 2
|
||||||
|
#CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b VARCHAR(1) );
|
||||||
|
#INSERT INTO t2 (b) VALUES ('a');
|
||||||
|
#UPDATE t2 SET b = 'b' WHERE a = 1;
|
||||||
|
#SELECT * FROM t2;
|
||||||
|
#a b
|
||||||
|
#1 b
|
||||||
|
#DROP TABLE t1, t2;
|
||||||
|
@ -44,7 +44,7 @@ connection master;
|
|||||||
# kill the query that is waiting
|
# kill the query that is waiting
|
||||||
eval kill query $connection_id;
|
eval kill query $connection_id;
|
||||||
|
|
||||||
if (`SELECT '$debug_lock' != ''`)
|
if ($debug_lock)
|
||||||
{
|
{
|
||||||
# release the lock to allow binlog continue
|
# release the lock to allow binlog continue
|
||||||
eval SELECT RELEASE_LOCK($debug_lock);
|
eval SELECT RELEASE_LOCK($debug_lock);
|
||||||
@ -57,7 +57,7 @@ reap;
|
|||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
|
||||||
if (`SELECT '$debug_lock' != ''`)
|
if ($debug_lock)
|
||||||
{
|
{
|
||||||
# get lock again to make the next query wait
|
# get lock again to make the next query wait
|
||||||
eval SELECT GET_LOCK($debug_lock, 10);
|
eval SELECT GET_LOCK($debug_lock, 10);
|
||||||
|
@ -25,7 +25,7 @@ source include/kill_query.inc;
|
|||||||
connection master;
|
connection master;
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
disable_result_log;
|
disable_result_log;
|
||||||
if (`SELECT '$debug_lock' != ''`)
|
if ($debug_lock)
|
||||||
{
|
{
|
||||||
eval SELECT RELEASE_LOCK($debug_lock);
|
eval SELECT RELEASE_LOCK($debug_lock);
|
||||||
}
|
}
|
||||||
@ -36,8 +36,8 @@ source include/diff_master_slave.inc;
|
|||||||
|
|
||||||
# Acquire the debug lock again if used
|
# Acquire the debug lock again if used
|
||||||
connection master;
|
connection master;
|
||||||
disable_query_log; disable_result_log; if (`SELECT '$debug_lock' !=
|
disable_query_log; disable_result_log;
|
||||||
''`) { eval SELECT GET_LOCK($debug_lock, 10); } enable_result_log;
|
if ($debug_lock) { eval SELECT GET_LOCK($debug_lock, 10); }
|
||||||
enable_query_log;
|
enable_result_log; enable_query_log;
|
||||||
|
|
||||||
connection $connection_name;
|
connection $connection_name;
|
||||||
|
@ -16,6 +16,12 @@ CREATE TABLE test_suppressions (
|
|||||||
-- no invalid patterns can be inserted
|
-- no invalid patterns can be inserted
|
||||||
-- into test_suppressions
|
-- into test_suppressions
|
||||||
--
|
--
|
||||||
|
SET @character_set_client_saved = @@character_set_client||
|
||||||
|
SET @character_set_results_saved = @@character_set_results||
|
||||||
|
SET @collation_connection_saved = @@collation_connection||
|
||||||
|
SET @@character_set_client = latin1||
|
||||||
|
SET @@character_set_results = latin1||
|
||||||
|
SET @@collation_connection = latin1_swedish_ci||
|
||||||
/*!50002
|
/*!50002
|
||||||
CREATE DEFINER=root@localhost TRIGGER ts_insert
|
CREATE DEFINER=root@localhost TRIGGER ts_insert
|
||||||
BEFORE INSERT ON test_suppressions
|
BEFORE INSERT ON test_suppressions
|
||||||
@ -24,6 +30,9 @@ FOR EACH ROW BEGIN
|
|||||||
SELECT "" REGEXP NEW.pattern INTO dummy;
|
SELECT "" REGEXP NEW.pattern INTO dummy;
|
||||||
END
|
END
|
||||||
*/||
|
*/||
|
||||||
|
SET @@character_set_client = @character_set_client_saved||
|
||||||
|
SET @@character_set_results = @character_set_results_saved||
|
||||||
|
SET @@collation_connection = @collation_connection_saved||
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
@ -38,6 +47,12 @@ CREATE TABLE global_suppressions (
|
|||||||
-- no invalid patterns can be inserted
|
-- no invalid patterns can be inserted
|
||||||
-- into global_suppressions
|
-- into global_suppressions
|
||||||
--
|
--
|
||||||
|
SET @character_set_client_saved = @@character_set_client||
|
||||||
|
SET @character_set_results_saved = @@character_set_results||
|
||||||
|
SET @collation_connection_saved = @@collation_connection||
|
||||||
|
SET @@character_set_client = latin1||
|
||||||
|
SET @@character_set_results = latin1||
|
||||||
|
SET @@collation_connection = latin1_swedish_ci||
|
||||||
/*!50002
|
/*!50002
|
||||||
CREATE DEFINER=root@localhost TRIGGER gs_insert
|
CREATE DEFINER=root@localhost TRIGGER gs_insert
|
||||||
BEFORE INSERT ON global_suppressions
|
BEFORE INSERT ON global_suppressions
|
||||||
@ -46,6 +61,9 @@ FOR EACH ROW BEGIN
|
|||||||
SELECT "" REGEXP NEW.pattern INTO dummy;
|
SELECT "" REGEXP NEW.pattern INTO dummy;
|
||||||
END
|
END
|
||||||
*/||
|
*/||
|
||||||
|
SET @@character_set_client = @character_set_client_saved||
|
||||||
|
SET @@character_set_results = @character_set_results_saved||
|
||||||
|
SET @@collation_connection = @collation_connection_saved||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ if (`SELECT "$_sql_running" = "Yes" OR "$_io_running" = "Yes"`) {
|
|||||||
# Read server variables.
|
# Read server variables.
|
||||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
let $_fake_filename= query_get_value(SHOW VARIABLES LIKE 'relay_log', Value, 1);
|
let $_fake_filename= query_get_value(SHOW VARIABLES LIKE 'relay_log', Value, 1);
|
||||||
if (`SELECT '$_fake_filename' = ''`) {
|
if (!$_fake_filename) {
|
||||||
--echo Badly written test case: relay_log variable is empty. Please use the
|
--echo Badly written test case: relay_log variable is empty. Please use the
|
||||||
--echo server option --relay-log=FILE.
|
--echo server option --relay-log=FILE.
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,15 @@ if ($is_relay_log)
|
|||||||
--let $_statement=show relaylog events
|
--let $_statement=show relaylog events
|
||||||
}
|
}
|
||||||
|
|
||||||
if (`SELECT '$binlog_file' <> ''`)
|
if ($binlog_file)
|
||||||
{
|
{
|
||||||
--let $_statement= $_statement in '$binlog_file'
|
--let $_statement= $_statement in '$binlog_file'
|
||||||
}
|
}
|
||||||
|
|
||||||
--let $_statement= $_statement from $binlog_start
|
--let $_statement= $_statement from $binlog_start
|
||||||
|
|
||||||
|
# Cannot use if($binlog_limit) since the variable may begin with a 0
|
||||||
|
|
||||||
if (`SELECT '$binlog_limit' <> ''`)
|
if (`SELECT '$binlog_limit' <> ''`)
|
||||||
{
|
{
|
||||||
--let $_statement= $_statement limit $binlog_limit
|
--let $_statement= $_statement limit $binlog_limit
|
||||||
|
@ -48,13 +48,13 @@ let $binlog_name= query_get_value("SHOW MASTER STATUS", File, 1);
|
|||||||
eval SHOW BINLOG EVENTS IN '$binlog_name';
|
eval SHOW BINLOG EVENTS IN '$binlog_name';
|
||||||
|
|
||||||
let $_master_con= $master_connection;
|
let $_master_con= $master_connection;
|
||||||
if (`SELECT '$_master_con' = ''`)
|
if (!$_master_con)
|
||||||
{
|
{
|
||||||
if (`SELECT '$_con' = 'slave'`)
|
if (`SELECT '$_con' = 'slave'`)
|
||||||
{
|
{
|
||||||
let $_master_con= master;
|
let $_master_con= master;
|
||||||
}
|
}
|
||||||
if (`SELECT '$_master_con' = ''`)
|
if (!$_master_con)
|
||||||
{
|
{
|
||||||
--echo Unable to determine master connection. No debug info printed for master.
|
--echo Unable to determine master connection. No debug info printed for master.
|
||||||
--echo Please fix the test case by setting $master_connection before sourcing
|
--echo Please fix the test case by setting $master_connection before sourcing
|
||||||
@ -62,7 +62,7 @@ if (`SELECT '$_master_con' = ''`)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (`SELECT '$_master_con' != ''`)
|
if ($_master_con)
|
||||||
{
|
{
|
||||||
|
|
||||||
let $master_binlog_name_io= query_get_value("SHOW SLAVE STATUS", Master_Log_File, 1);
|
let $master_binlog_name_io= query_get_value("SHOW SLAVE STATUS", Master_Log_File, 1);
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
# $master_connection
|
# $master_connection
|
||||||
# See wait_for_slave_param.inc for description.
|
# See wait_for_slave_param.inc for description.
|
||||||
|
|
||||||
if (`SELECT '$slave_io_errno' = ''`) {
|
if (!$slave_io_errno) {
|
||||||
--die !!!ERROR IN TEST: you must set \$slave_io_errno before sourcing wait_for_slave_io_error.inc
|
--die !!!ERROR IN TEST: you must set \$slave_io_errno before sourcing wait_for_slave_io_error.inc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ if (!$_slave_timeout_counter)
|
|||||||
let $slave_tcnt= $_slave_timeout_counter;
|
let $slave_tcnt= $_slave_timeout_counter;
|
||||||
|
|
||||||
let $_slave_param_comparison= $slave_param_comparison;
|
let $_slave_param_comparison= $slave_param_comparison;
|
||||||
if (`SELECT '$_slave_param_comparison' = ''`)
|
if (!$_slave_param_comparison)
|
||||||
{
|
{
|
||||||
let $_slave_param_comparison= =;
|
let $_slave_param_comparison= =;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ while (`SELECT NOT('$_show_slave_status_value' $_slave_param_comparison '$slave_
|
|||||||
if (!$_slave_timeout_counter)
|
if (!$_slave_timeout_counter)
|
||||||
{
|
{
|
||||||
--echo **** ERROR: timeout after $slave_tcnt deci-seconds while waiting for slave parameter $slave_param $_slave_param_comparison $slave_param_value ****
|
--echo **** ERROR: timeout after $slave_tcnt deci-seconds while waiting for slave parameter $slave_param $_slave_param_comparison $slave_param_value ****
|
||||||
if (`SELECT '$slave_error_message' != ''`)
|
if ($slave_error_message)
|
||||||
{
|
{
|
||||||
--echo Message: $slave_error_message
|
--echo Message: $slave_error_message
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
# $master_connection
|
# $master_connection
|
||||||
# See wait_for_slave_param.inc for description.
|
# See wait_for_slave_param.inc for description.
|
||||||
|
|
||||||
if (`SELECT '$slave_sql_errno' = ''`) {
|
if (!$slave_sql_errno) {
|
||||||
--die !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_for_slave_sql_error.inc
|
--die !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_for_slave_sql_error.inc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ if (!$_status_timeout_counter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
let $_status_var_comparsion= $status_var_comparsion;
|
let $_status_var_comparsion= $status_var_comparsion;
|
||||||
if (`SELECT '$_status_var_comparsion' = ''`)
|
if (!$_status_var_comparsion)
|
||||||
{
|
{
|
||||||
let $_status_var_comparsion= =;
|
let $_status_var_comparsion= =;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,13 @@ sub mtr_exe_maybe_exists(@);
|
|||||||
sub mtr_milli_sleep($);
|
sub mtr_milli_sleep($);
|
||||||
sub start_timer($);
|
sub start_timer($);
|
||||||
sub has_expired($);
|
sub has_expired($);
|
||||||
|
sub init_timers();
|
||||||
|
sub mark_time_used($);
|
||||||
|
sub add_total_times($);
|
||||||
|
sub print_times_used($$);
|
||||||
|
sub print_total_times($);
|
||||||
|
|
||||||
|
our $opt_report_times;
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@ -205,4 +212,81 @@ sub start_timer ($) { return time + $_[0]; }
|
|||||||
|
|
||||||
sub has_expired ($) { return $_[0] && time gt $_[0]; }
|
sub has_expired ($) { return $_[0] && time gt $_[0]; }
|
||||||
|
|
||||||
|
# Below code is for time usage reporting
|
||||||
|
|
||||||
|
use Time::HiRes qw(gettimeofday);
|
||||||
|
|
||||||
|
my %time_used= (
|
||||||
|
'collect' => 0,
|
||||||
|
'restart' => 0,
|
||||||
|
'check' => 0,
|
||||||
|
'ch-warn' => 0,
|
||||||
|
'test' => 0,
|
||||||
|
'init' => 0,
|
||||||
|
);
|
||||||
|
|
||||||
|
my %time_text= (
|
||||||
|
'collect' => "Collecting test cases",
|
||||||
|
'restart' => "Server stop/start",
|
||||||
|
'check' => "Check-testcase",
|
||||||
|
'ch-warn' => "Check for warnings",
|
||||||
|
'test' => "Test execution",
|
||||||
|
'init' => "Initialization etc.",
|
||||||
|
);
|
||||||
|
|
||||||
|
# Counts number of reports from workers
|
||||||
|
|
||||||
|
my $time_totals= 0;
|
||||||
|
|
||||||
|
my $last_timer_set;
|
||||||
|
|
||||||
|
sub init_timers() {
|
||||||
|
$last_timer_set= gettimeofday();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub mark_time_used($) {
|
||||||
|
my ($name)= @_;
|
||||||
|
return unless $opt_report_times;
|
||||||
|
die "Unknown timer $name" unless exists $time_used{$name};
|
||||||
|
|
||||||
|
my $curr_time= gettimeofday();
|
||||||
|
$time_used{$name}+= int (($curr_time - $last_timer_set) * 1000 + .5);
|
||||||
|
$last_timer_set= $curr_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub add_total_times($) {
|
||||||
|
my ($dummy, $num, @line)= split (" ", $_[0]);
|
||||||
|
|
||||||
|
$time_totals++;
|
||||||
|
foreach my $elem (@line) {
|
||||||
|
my ($name, $spent)= split (":", $elem);
|
||||||
|
$time_used{$name}+= $spent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_times_used($$) {
|
||||||
|
my ($server, $num)= @_;
|
||||||
|
return unless $opt_report_times;
|
||||||
|
|
||||||
|
my $output= "SPENT $num";
|
||||||
|
foreach my $name (keys %time_used) {
|
||||||
|
my $spent= $time_used{$name};
|
||||||
|
$output.= " $name:$spent";
|
||||||
|
}
|
||||||
|
print $server $output . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_total_times($) {
|
||||||
|
# Don't print if we haven't received all worker data
|
||||||
|
return if $time_totals != $_[0];
|
||||||
|
|
||||||
|
foreach my $name (keys %time_used)
|
||||||
|
{
|
||||||
|
my $spent= $time_used{$name}/1000;
|
||||||
|
my $text= $time_text{$name};
|
||||||
|
print ("Spent $spent seconds on $text\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -116,18 +116,20 @@ sub sleep_until_file_created ($$$) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $seconds= ($loop * $sleeptime) / 1000;
|
||||||
|
|
||||||
# Check if it died after the fork() was successful
|
# Check if it died after the fork() was successful
|
||||||
if ( defined $proc and ! $proc->wait_one(0) )
|
if ( defined $proc and ! $proc->wait_one(0) )
|
||||||
{
|
{
|
||||||
mtr_warning("Process $proc died");
|
mtr_warning("Process $proc died after mysql-test-run waited $seconds " .
|
||||||
|
"seconds for $pidfile to be created.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
mtr_debug("Sleep $sleeptime milliseconds waiting for $pidfile");
|
mtr_debug("Sleep $sleeptime milliseconds waiting for $pidfile");
|
||||||
|
|
||||||
# Print extra message every 60 seconds
|
# Print extra message every 60 seconds
|
||||||
my $seconds= ($loop * $sleeptime) / 1000;
|
if ( $seconds > 1 && int($seconds * 10) % 600 == 0 && $seconds < $timeout )
|
||||||
if ( $seconds > 1 and int($seconds * 10) % 600 == 0 )
|
|
||||||
{
|
{
|
||||||
my $left= $timeout - $seconds;
|
my $left= $timeout - $seconds;
|
||||||
mtr_warning("Waited $seconds seconds for $pidfile to be created, " .
|
mtr_warning("Waited $seconds seconds for $pidfile to be created, " .
|
||||||
@ -138,6 +140,8 @@ sub sleep_until_file_created ($$$) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mtr_warning("Timeout after mysql-test-run waited $timeout seconds " .
|
||||||
|
"for the process $proc to create a pid file.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +131,9 @@ my $opt_start_dirty;
|
|||||||
my $opt_start_exit;
|
my $opt_start_exit;
|
||||||
my $start_only;
|
my $start_only;
|
||||||
|
|
||||||
|
my $auth_interface_fn; # the name of qa_auth_interface plugin
|
||||||
|
my $auth_server_fn; # the name of qa_auth_server plugin
|
||||||
|
my $auth_client_fn; # the name of qa_auth_client plugin
|
||||||
my $auth_filename; # the name of the authentication test plugin
|
my $auth_filename; # the name of the authentication test plugin
|
||||||
my $auth_plugin; # the path to the authentication test plugin
|
my $auth_plugin; # the path to the authentication test plugin
|
||||||
|
|
||||||
@ -162,7 +165,7 @@ our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
|
|||||||
|
|
||||||
# If you add a new suite, please check TEST_DIRS in Makefile.am.
|
# If you add a new suite, please check TEST_DIRS in Makefile.am.
|
||||||
#
|
#
|
||||||
my $DEFAULT_SUITES= "main,sys_vars,binlog,federated,rpl,rpl_ndb,ndb,innodb,perfschema";
|
my $DEFAULT_SUITES= "main,sys_vars,binlog,federated,rpl,innodb,perfschema";
|
||||||
my $opt_suites;
|
my $opt_suites;
|
||||||
|
|
||||||
our $opt_verbose= 0; # Verbose output, enable with --verbose
|
our $opt_verbose= 0; # Verbose output, enable with --verbose
|
||||||
@ -198,6 +201,7 @@ sub using_extern { return (keys %opts_extern > 0);};
|
|||||||
our $opt_fast= 0;
|
our $opt_fast= 0;
|
||||||
our $opt_force;
|
our $opt_force;
|
||||||
our $opt_mem= $ENV{'MTR_MEM'};
|
our $opt_mem= $ENV{'MTR_MEM'};
|
||||||
|
our $opt_clean_vardir= $ENV{'MTR_CLEAN_VARDIR'};
|
||||||
|
|
||||||
our $opt_gcov;
|
our $opt_gcov;
|
||||||
our $opt_gcov_exe= "gcov";
|
our $opt_gcov_exe= "gcov";
|
||||||
@ -238,6 +242,7 @@ my $opt_skip_core;
|
|||||||
our $opt_check_testcases= 1;
|
our $opt_check_testcases= 1;
|
||||||
my $opt_mark_progress;
|
my $opt_mark_progress;
|
||||||
my $opt_max_connections;
|
my $opt_max_connections;
|
||||||
|
our $opt_report_times= 0;
|
||||||
|
|
||||||
my $opt_sleep;
|
my $opt_sleep;
|
||||||
|
|
||||||
@ -351,8 +356,11 @@ sub main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_timers();
|
||||||
|
|
||||||
mtr_report("Collecting tests...");
|
mtr_report("Collecting tests...");
|
||||||
my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list);
|
my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list);
|
||||||
|
mark_time_used('collect');
|
||||||
|
|
||||||
if ( $opt_report_features ) {
|
if ( $opt_report_features ) {
|
||||||
# Put "report features" as the first test to run
|
# Put "report features" as the first test to run
|
||||||
@ -421,6 +429,7 @@ sub main {
|
|||||||
$opt_tmpdir= "$opt_tmpdir/$child_num";
|
$opt_tmpdir= "$opt_tmpdir/$child_num";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_timers();
|
||||||
run_worker($server_port, $child_num);
|
run_worker($server_port, $child_num);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -433,6 +442,8 @@ sub main {
|
|||||||
mtr_print_thick_line();
|
mtr_print_thick_line();
|
||||||
mtr_print_header();
|
mtr_print_header();
|
||||||
|
|
||||||
|
mark_time_used('init');
|
||||||
|
|
||||||
my $completed= run_test_server($server, $tests, $opt_parallel);
|
my $completed= run_test_server($server, $tests, $opt_parallel);
|
||||||
|
|
||||||
exit(0) if $opt_start_exit;
|
exit(0) if $opt_start_exit;
|
||||||
@ -478,8 +489,12 @@ sub main {
|
|||||||
$opt_gcov_msg, $opt_gcov_err);
|
$opt_gcov_msg, $opt_gcov_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_total_times($opt_parallel) if $opt_report_times;
|
||||||
|
|
||||||
mtr_report_stats("Completed", $completed);
|
mtr_report_stats("Completed", $completed);
|
||||||
|
|
||||||
|
remove_vardir_subs() if $opt_clean_vardir;
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -610,13 +625,15 @@ sub run_test_server ($$$) {
|
|||||||
if ($test_has_failed and $retries <= $opt_retry){
|
if ($test_has_failed and $retries <= $opt_retry){
|
||||||
# Test should be run one more time unless it has failed
|
# Test should be run one more time unless it has failed
|
||||||
# too many times already
|
# too many times already
|
||||||
|
my $tname= $result->{name};
|
||||||
my $failures= $result->{failures};
|
my $failures= $result->{failures};
|
||||||
if ($opt_retry > 1 and $failures >= $opt_retry_failure){
|
if ($opt_retry > 1 and $failures >= $opt_retry_failure){
|
||||||
mtr_report("\nTest has failed $failures times,",
|
mtr_report("\nTest $tname has failed $failures times,",
|
||||||
"no more retries!\n");
|
"no more retries!\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mtr_report("\nRetrying test, attempt($retries/$opt_retry)...\n");
|
mtr_report("\nRetrying test $tname, ".
|
||||||
|
"attempt($retries/$opt_retry)...\n");
|
||||||
delete($result->{result});
|
delete($result->{result});
|
||||||
$result->{retries}= $retries+1;
|
$result->{retries}= $retries+1;
|
||||||
$result->write_test($sock, 'TESTCASE');
|
$result->write_test($sock, 'TESTCASE');
|
||||||
@ -652,6 +669,9 @@ sub run_test_server ($$$) {
|
|||||||
elsif ($line eq 'START'){
|
elsif ($line eq 'START'){
|
||||||
; # Send first test
|
; # Send first test
|
||||||
}
|
}
|
||||||
|
elsif ($line =~ /^SPENT/) {
|
||||||
|
add_total_times($line);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
mtr_error("Unknown response: '$line' from client");
|
mtr_error("Unknown response: '$line' from client");
|
||||||
}
|
}
|
||||||
@ -783,7 +803,9 @@ sub run_worker ($) {
|
|||||||
# Ask server for first test
|
# Ask server for first test
|
||||||
print $server "START\n";
|
print $server "START\n";
|
||||||
|
|
||||||
while(my $line= <$server>){
|
mark_time_used('init');
|
||||||
|
|
||||||
|
while (my $line= <$server>){
|
||||||
chomp($line);
|
chomp($line);
|
||||||
if ($line eq 'TESTCASE'){
|
if ($line eq 'TESTCASE'){
|
||||||
my $test= My::Test::read_test($server);
|
my $test= My::Test::read_test($server);
|
||||||
@ -801,16 +823,20 @@ sub run_worker ($) {
|
|||||||
# Send it back, now with results set
|
# Send it back, now with results set
|
||||||
#$test->print_test();
|
#$test->print_test();
|
||||||
$test->write_test($server, 'TESTRESULT');
|
$test->write_test($server, 'TESTRESULT');
|
||||||
|
mark_time_used('restart');
|
||||||
}
|
}
|
||||||
elsif ($line eq 'BYE'){
|
elsif ($line eq 'BYE'){
|
||||||
mtr_report("Server said BYE");
|
mtr_report("Server said BYE");
|
||||||
stop_all_servers($opt_shutdown_timeout);
|
stop_all_servers($opt_shutdown_timeout);
|
||||||
|
mark_time_used('restart');
|
||||||
if ($opt_valgrind_mysqld) {
|
if ($opt_valgrind_mysqld) {
|
||||||
valgrind_exit_reports();
|
valgrind_exit_reports();
|
||||||
}
|
}
|
||||||
if ( $opt_gprof ) {
|
if ( $opt_gprof ) {
|
||||||
gprof_collect (find_mysqld($basedir), keys %gprof_dirs);
|
gprof_collect (find_mysqld($basedir), keys %gprof_dirs);
|
||||||
}
|
}
|
||||||
|
mark_time_used('init');
|
||||||
|
print_times_used($server, $thread_num);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -951,6 +977,7 @@ sub command_line_setup {
|
|||||||
'tmpdir=s' => \$opt_tmpdir,
|
'tmpdir=s' => \$opt_tmpdir,
|
||||||
'vardir=s' => \$opt_vardir,
|
'vardir=s' => \$opt_vardir,
|
||||||
'mem' => \$opt_mem,
|
'mem' => \$opt_mem,
|
||||||
|
'clean-vardir' => \$opt_clean_vardir,
|
||||||
'client-bindir=s' => \$path_client_bindir,
|
'client-bindir=s' => \$path_client_bindir,
|
||||||
'client-libdir=s' => \$path_client_libdir,
|
'client-libdir=s' => \$path_client_libdir,
|
||||||
|
|
||||||
@ -983,6 +1010,7 @@ sub command_line_setup {
|
|||||||
'timediff' => \&report_option,
|
'timediff' => \&report_option,
|
||||||
'max-connections=i' => \$opt_max_connections,
|
'max-connections=i' => \$opt_max_connections,
|
||||||
'default-myisam!' => \&collect_option,
|
'default-myisam!' => \&collect_option,
|
||||||
|
'report-times' => \$opt_report_times,
|
||||||
|
|
||||||
'help|h' => \$opt_usage,
|
'help|h' => \$opt_usage,
|
||||||
'list-options' => \$opt_list_options,
|
'list-options' => \$opt_list_options,
|
||||||
@ -1062,14 +1090,20 @@ sub command_line_setup {
|
|||||||
"$basedir/sql/share/charsets",
|
"$basedir/sql/share/charsets",
|
||||||
"$basedir/share/charsets");
|
"$basedir/share/charsets");
|
||||||
|
|
||||||
# Look for client test plugin
|
# Look for auth test plugins
|
||||||
if (IS_WINDOWS)
|
if (IS_WINDOWS)
|
||||||
{
|
{
|
||||||
$auth_filename = "auth_test_plugin.dll";
|
$auth_filename = "auth_test_plugin.dll";
|
||||||
|
$auth_interface_fn = "qa_auth_interface.dll";
|
||||||
|
$auth_server_fn = "qa_auth_server.dll";
|
||||||
|
$auth_client_fn = "qa_auth_client.dll";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$auth_filename = "auth_test_plugin.so";
|
$auth_filename = "auth_test_plugin.so";
|
||||||
|
$auth_interface_fn = "qa_auth_interface.so";
|
||||||
|
$auth_server_fn = "qa_auth_server.so";
|
||||||
|
$auth_client_fn = "qa_auth_client.so";
|
||||||
}
|
}
|
||||||
$auth_plugin=
|
$auth_plugin=
|
||||||
mtr_file_exists(vs_config_dirs('plugin/auth/',$auth_filename),
|
mtr_file_exists(vs_config_dirs('plugin/auth/',$auth_filename),
|
||||||
@ -1973,12 +2007,18 @@ sub environment_setup {
|
|||||||
$ENV{'PLUGIN_AUTH_OPT'}= "--plugin-dir=".dirname($auth_plugin);
|
$ENV{'PLUGIN_AUTH_OPT'}= "--plugin-dir=".dirname($auth_plugin);
|
||||||
|
|
||||||
$ENV{'PLUGIN_AUTH_LOAD'}="--plugin_load=test_plugin_server=".$auth_filename;
|
$ENV{'PLUGIN_AUTH_LOAD'}="--plugin_load=test_plugin_server=".$auth_filename;
|
||||||
|
$ENV{'PLUGIN_AUTH_INTERFACE'}="--plugin_load=qa_auth_interface=".$auth_interface_fn;
|
||||||
|
$ENV{'PLUGIN_AUTH_SERVER'}="--plugin_load=qa_auth_server=".$auth_server_fn;
|
||||||
|
$ENV{'PLUGIN_AUTH_CLIENT'}="--plugin_load=qa_auth_client=".$auth_client_fn;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$ENV{'PLUGIN_AUTH'}= "";
|
$ENV{'PLUGIN_AUTH'}= "";
|
||||||
$ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir=";
|
$ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir=";
|
||||||
$ENV{'PLUGIN_AUTH_LOAD'}="";
|
$ENV{'PLUGIN_AUTH_LOAD'}="";
|
||||||
|
$ENV{'PLUGIN_AUTH_INTERFACE'}="";
|
||||||
|
$ENV{'PLUGIN_AUTH_SERVER'}="";
|
||||||
|
$ENV{'PLUGIN_AUTH_CLIENT'}="";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2241,6 +2281,12 @@ sub environment_setup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub remove_vardir_subs() {
|
||||||
|
foreach my $sdir ( glob("$opt_vardir/*") ) {
|
||||||
|
mtr_verbose("Removing subdir $sdir");
|
||||||
|
rmtree($sdir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Remove var and any directories in var/ created by previous
|
# Remove var and any directories in var/ created by previous
|
||||||
@ -2285,11 +2331,7 @@ sub remove_stale_vardir () {
|
|||||||
mtr_error("The destination for symlink $opt_vardir does not exist")
|
mtr_error("The destination for symlink $opt_vardir does not exist")
|
||||||
if ! -d readlink($opt_vardir);
|
if ! -d readlink($opt_vardir);
|
||||||
|
|
||||||
foreach my $bin ( glob("$opt_vardir/*") )
|
remove_vardir_subs();
|
||||||
{
|
|
||||||
mtr_verbose("Removing bin $bin");
|
|
||||||
rmtree($bin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3207,6 +3249,7 @@ sub check_testcase($$)
|
|||||||
|
|
||||||
if ( keys(%started) == 0){
|
if ( keys(%started) == 0){
|
||||||
# All checks completed
|
# All checks completed
|
||||||
|
mark_time_used('check');
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
# Wait for next process to exit
|
# Wait for next process to exit
|
||||||
@ -3222,7 +3265,8 @@ sub check_testcase($$)
|
|||||||
"\nMTR's internal check of the test case '$tname' failed.
|
"\nMTR's internal check of the test case '$tname' failed.
|
||||||
This means that the test case does not preserve the state that existed
|
This means that the test case does not preserve the state that existed
|
||||||
before the test case was executed. Most likely the test case did not
|
before the test case was executed. Most likely the test case did not
|
||||||
do a proper clean-up.
|
do a proper clean-up. It could also be caused by the previous test run
|
||||||
|
by this thread, if the server wasn't restarted.
|
||||||
This is the diff of the states of the servers before and after the
|
This is the diff of the states of the servers before and after the
|
||||||
test case was executed:\n";
|
test case was executed:\n";
|
||||||
$tinfo->{check}.= $report;
|
$tinfo->{check}.= $report;
|
||||||
@ -3264,6 +3308,11 @@ test case was executed:\n";
|
|||||||
# Kill any check processes still running
|
# Kill any check processes still running
|
||||||
map($_->kill(), values(%started));
|
map($_->kill(), values(%started));
|
||||||
|
|
||||||
|
mtr_warning("Check-testcase failed, this could also be caused by the" .
|
||||||
|
" previous test run by this worker thread")
|
||||||
|
if $result > 1 && $mode eq "before";
|
||||||
|
mark_time_used('check');
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3573,6 +3622,7 @@ sub run_testcase ($) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mark_time_used('restart');
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# If --start or --start-dirty given, stop here to let user manually
|
# If --start or --start-dirty given, stop here to let user manually
|
||||||
@ -3625,6 +3675,8 @@ sub run_testcase ($) {
|
|||||||
|
|
||||||
do_before_run_mysqltest($tinfo);
|
do_before_run_mysqltest($tinfo);
|
||||||
|
|
||||||
|
mark_time_used('init');
|
||||||
|
|
||||||
if ( $opt_check_testcases and check_testcase($tinfo, "before") ){
|
if ( $opt_check_testcases and check_testcase($tinfo, "before") ){
|
||||||
# Failed to record state of server or server crashed
|
# Failed to record state of server or server crashed
|
||||||
report_failure_and_restart($tinfo);
|
report_failure_and_restart($tinfo);
|
||||||
@ -3671,6 +3723,7 @@ sub run_testcase ($) {
|
|||||||
}
|
}
|
||||||
mtr_verbose("Got $proc");
|
mtr_verbose("Got $proc");
|
||||||
|
|
||||||
|
mark_time_used('test');
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# Was it the test program that exited
|
# Was it the test program that exited
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
@ -3897,7 +3950,9 @@ sub get_log_from_proc ($$) {
|
|||||||
foreach my $mysqld (mysqlds()) {
|
foreach my $mysqld (mysqlds()) {
|
||||||
if ($mysqld->{proc} eq $proc) {
|
if ($mysqld->{proc} eq $proc) {
|
||||||
my @srv_lines= extract_server_log($mysqld->value('#log-error'), $name);
|
my @srv_lines= extract_server_log($mysqld->value('#log-error'), $name);
|
||||||
$srv_log= "\nServer log from this test:\n" . join ("", @srv_lines);
|
$srv_log= "\nServer log from this test:\n" .
|
||||||
|
"----------SERVER LOG START-----------\n". join ("", @srv_lines) .
|
||||||
|
"----------SERVER LOG END-------------\n";
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4074,6 +4129,7 @@ sub check_warnings ($) {
|
|||||||
|
|
||||||
if ( keys(%started) == 0){
|
if ( keys(%started) == 0){
|
||||||
# All checks completed
|
# All checks completed
|
||||||
|
mark_time_used('ch-warn');
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
# Wait for next process to exit
|
# Wait for next process to exit
|
||||||
@ -4106,6 +4162,7 @@ sub check_warnings ($) {
|
|||||||
# Kill any check processes still running
|
# Kill any check processes still running
|
||||||
map($_->kill(), values(%started));
|
map($_->kill(), values(%started));
|
||||||
|
|
||||||
|
mark_time_used('ch-warn');
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5069,6 +5126,8 @@ sub start_mysqltest ($) {
|
|||||||
my $exe= $exe_mysqltest;
|
my $exe= $exe_mysqltest;
|
||||||
my $args;
|
my $args;
|
||||||
|
|
||||||
|
mark_time_used('init');
|
||||||
|
|
||||||
mtr_init_args(\$args);
|
mtr_init_args(\$args);
|
||||||
|
|
||||||
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||||
@ -5550,6 +5609,8 @@ Options to control directories to use
|
|||||||
for tmpfs (/dev/shm)
|
for tmpfs (/dev/shm)
|
||||||
The option can also be set using environment
|
The option can also be set using environment
|
||||||
variable MTR_MEM=[DIR]
|
variable MTR_MEM=[DIR]
|
||||||
|
clean-vardir Clean vardir if tests were successful and if
|
||||||
|
running in "memory". Otherwise this option is ignored
|
||||||
client-bindir=PATH Path to the directory where client binaries are located
|
client-bindir=PATH Path to the directory where client binaries are located
|
||||||
client-libdir=PATH Path to the directory where client libraries are located
|
client-libdir=PATH Path to the directory where client libraries are located
|
||||||
|
|
||||||
@ -5709,6 +5770,8 @@ Misc options
|
|||||||
default-myisam Set default storage engine to MyISAM for non-innodb
|
default-myisam Set default storage engine to MyISAM for non-innodb
|
||||||
tests. This is needed after switching default storage
|
tests. This is needed after switching default storage
|
||||||
engine to InnoDB.
|
engine to InnoDB.
|
||||||
|
report-times Report how much time has been spent on different
|
||||||
|
phases of test execution.
|
||||||
HERE
|
HERE
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
@ -220,3 +220,14 @@ Variable_name Value
|
|||||||
Qcache_hits 1
|
Qcache_hits 1
|
||||||
set GLOBAL query_cache_size=1048576;
|
set GLOBAL query_cache_size=1048576;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
ROLLBACK WORK AND CHAIN NO RELEASE;
|
||||||
|
SELECT a FROM t1;
|
||||||
|
a
|
||||||
|
ROLLBACK WORK AND CHAIN NO RELEASE;
|
||||||
|
SELECT a FROM t1;
|
||||||
|
a
|
||||||
|
ROLLBACK;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -3853,6 +3853,9 @@ GROUP_CONCAT(IFNULL(a,''))
|
|||||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||||
GROUP_CONCAT(IF(a,a,''))
|
GROUP_CONCAT(IF(a,a,''))
|
||||||
1234567
|
1234567
|
||||||
|
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||||
|
GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END)
|
||||||
|
1234567
|
||||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||||
def COALESCE(a,'') 253 9 7 Y 0 31 8
|
def COALESCE(a,'') 253 9 7 Y 0 31 8
|
||||||
|
@ -509,3 +509,18 @@ CREATE TABLE t3 LIKE t1;
|
|||||||
DELETE FROM t1.*, test.t2.*, a.* USING t1, t2, t3 AS a;
|
DELETE FROM t1.*, test.t2.*, a.* USING t1, t2, t3 AS a;
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug#51099 Assertion in mysql_multi_delete_prepare()
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
DROP VIEW IF EXISTS v1, v2;
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
CREATE TABLE t2(b INT);
|
||||||
|
CREATE VIEW v1 AS SELECT a, b FROM t1, t2;
|
||||||
|
CREATE VIEW v2 AS SELECT a FROM v1;
|
||||||
|
DELETE FROM v2;
|
||||||
|
ERROR HY000: Can not delete from join view 'test.v2'
|
||||||
|
DELETE v2 FROM v2;
|
||||||
|
ERROR HY000: Can not delete from join view 'test.v2'
|
||||||
|
DROP VIEW v2, v1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -612,3 +612,10 @@ NULL
|
|||||||
SELECT -9223372036854775808 MOD -1;
|
SELECT -9223372036854775808 MOD -1;
|
||||||
-9223372036854775808 MOD -1
|
-9223372036854775808 MOD -1
|
||||||
0
|
0
|
||||||
|
#
|
||||||
|
# Bug #57209 valgrind + Assertion failed: dst > buf
|
||||||
|
#
|
||||||
|
SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
|
||||||
|
as foo;
|
||||||
|
foo
|
||||||
|
2
|
||||||
|
@ -1316,3 +1316,14 @@ SELECT 1 FROM t1 ORDER BY @x:=makedate(a,a);
|
|||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug#57039: constant subtime expression returns incorrect result.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (`date_date` datetime NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('2008-01-03 00:00:00'), ('2008-01-03 00:00:00');
|
||||||
|
SELECT * FROM t1 WHERE date_date >= subtime(now(), "00:30:00");
|
||||||
|
date_date
|
||||||
|
SELECT * FROM t1 WHERE date_date <= addtime(date_add("2000-1-1", INTERVAL "1:1:1" HOUR_SECOND), "00:20:00");
|
||||||
|
date_date
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
@ -1448,8 +1448,6 @@ CREATE USER 'userbug33464'@'localhost';
|
|||||||
GRANT CREATE ROUTINE ON dbbug33464.* TO 'userbug33464'@'localhost';
|
GRANT CREATE ROUTINE ON dbbug33464.* TO 'userbug33464'@'localhost';
|
||||||
|
|
||||||
userbug33464@localhost dbbug33464
|
userbug33464@localhost dbbug33464
|
||||||
DROP PROCEDURE IF EXISTS sp3;
|
|
||||||
DROP FUNCTION IF EXISTS fn1;
|
|
||||||
CREATE PROCEDURE sp3(v1 char(20))
|
CREATE PROCEDURE sp3(v1 char(20))
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT * from dbbug33464.t6 where t6.f2= 'xyz';
|
SELECT * from dbbug33464.t6 where t6.f2= 'xyz';
|
||||||
@ -1577,6 +1575,17 @@ DROP USER 'testbug'@localhost;
|
|||||||
DROP TABLE db2.t1;
|
DROP TABLE db2.t1;
|
||||||
DROP DATABASE db1;
|
DROP DATABASE db1;
|
||||||
DROP DATABASE db2;
|
DROP DATABASE db2;
|
||||||
|
#
|
||||||
|
# Bug #36742
|
||||||
|
#
|
||||||
|
grant usage on Foo.* to myuser@Localhost identified by 'foo';
|
||||||
|
grant select on Foo.* to myuser@localhost;
|
||||||
|
select host,user from mysql.user where User='myuser';
|
||||||
|
host user
|
||||||
|
localhost myuser
|
||||||
|
revoke select on Foo.* from myuser@localhost;
|
||||||
|
delete from mysql.user where User='myuser';
|
||||||
|
flush privileges;
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Bug#38347: ALTER ROUTINE privilege allows SHOW CREATE TABLE.
|
# Bug#38347: ALTER ROUTINE privilege allows SHOW CREATE TABLE.
|
||||||
|
@ -21,123 +21,108 @@ grant select on test.* to CUser@LOCALHOST;
|
|||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
CUser LOCALHOST test Y
|
|
||||||
CUser localhost test Y
|
CUser localhost test Y
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
CUser localhost test Y
|
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
DROP USER CUser@localhost;
|
DROP USER CUser@localhost;
|
||||||
DROP USER CUser@LOCALHOST;
|
DROP USER CUser@LOCALHOST;
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'CUser'@'localhost'
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
grant select on test.t1 to CUser@localhost;
|
grant select on test.t1 to CUser@localhost;
|
||||||
grant select on test.t1 to CUser@LOCALHOST;
|
grant select on test.t1 to CUser@LOCALHOST;
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
CUser LOCALHOST test t1 Select
|
|
||||||
CUser localhost test t1 Select
|
CUser localhost test t1 Select
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
CUser localhost test t1 Select
|
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
DROP USER CUser@localhost;
|
DROP USER CUser@localhost;
|
||||||
DROP USER CUser@LOCALHOST;
|
DROP USER CUser@LOCALHOST;
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'CUser'@'localhost'
|
||||||
grant select(a) on test.t1 to CUser@localhost;
|
grant select(a) on test.t1 to CUser@localhost;
|
||||||
grant select(a) on test.t1 to CUser@LOCALHOST;
|
grant select(a) on test.t1 to CUser@LOCALHOST;
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
CUser LOCALHOST test t1 Select
|
|
||||||
CUser localhost test t1 Select
|
CUser localhost test t1 Select
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
CUser localhost test t1 Select
|
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser LOCALHOST
|
|
||||||
CUser localhost
|
CUser localhost
|
||||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||||
user host db Table_name Table_priv Column_priv
|
user host db Table_name Table_priv Column_priv
|
||||||
DROP USER CUser@localhost;
|
DROP USER CUser@localhost;
|
||||||
DROP USER CUser@LOCALHOST;
|
DROP USER CUser@LOCALHOST;
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'CUser'@'localhost'
|
||||||
drop table t1;
|
drop table t1;
|
||||||
grant select on test.* to CUser2@localhost;
|
grant select on test.* to CUser2@localhost;
|
||||||
grant select on test.* to CUser2@LOCALHOST;
|
grant select on test.* to CUser2@LOCALHOST;
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser2 LOCALHOST
|
|
||||||
CUser2 localhost
|
CUser2 localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
CUser2 LOCALHOST test Y
|
|
||||||
CUser2 localhost test Y
|
CUser2 localhost test Y
|
||||||
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
|
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser2 LOCALHOST
|
|
||||||
CUser2 localhost
|
CUser2 localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
CUser2 localhost test Y
|
|
||||||
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
||||||
|
ERROR 42000: There is no such grant defined for user 'CUser2' on host 'localhost'
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||||
user host
|
user host
|
||||||
CUser2 LOCALHOST
|
|
||||||
CUser2 localhost
|
CUser2 localhost
|
||||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||||
user host db select_priv
|
user host db select_priv
|
||||||
DROP USER CUser2@localhost;
|
DROP USER CUser2@localhost;
|
||||||
DROP USER CUser2@LOCALHOST;
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'CUser2'@'localhost'
|
||||||
CREATE DATABASE mysqltest_1;
|
CREATE DATABASE mysqltest_1;
|
||||||
CREATE TABLE mysqltest_1.t1 (a INT);
|
CREATE TABLE mysqltest_1.t1 (a INT);
|
||||||
CREATE USER 'mysqltest1'@'%';
|
CREATE USER 'mysqltest1'@'%';
|
||||||
|
@ -1156,6 +1156,61 @@ key1 key2 key3
|
|||||||
38 38 38
|
38 38 38
|
||||||
39 39 39
|
39 39 39
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Bug#56423: Different count with SELECT and CREATE SELECT queries
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT,
|
||||||
|
d INT,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY (c),
|
||||||
|
KEY bd (b,d)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 0, 1, 0),
|
||||||
|
(2, 1, 1, 1),
|
||||||
|
(3, 1, 1, 1),
|
||||||
|
(4, 0, 1, 1);
|
||||||
|
EXPLAIN
|
||||||
|
SELECT a
|
||||||
|
FROM t1
|
||||||
|
WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ref c,bd bd 10 const,const 2 Using where
|
||||||
|
CREATE TABLE t2 ( a INT )
|
||||||
|
SELECT a
|
||||||
|
FROM t1
|
||||||
|
WHERE c = 1 AND b = 1 AND d = 1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1( a INT, b INT, KEY(a), KEY(b) );
|
||||||
|
INSERT INTO t1 VALUES (1, 2), (1, 2), (1, 2), (1, 2);
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a, b) WHERE a = 1 AND b = 2;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
1 2
|
||||||
|
1 2
|
||||||
|
1 2
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Code coverage of fix.
|
||||||
|
CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t1 (b) VALUES (1);
|
||||||
|
UPDATE t1 SET b = 2 WHERE a = 1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b VARCHAR(1) );
|
||||||
|
INSERT INTO t2 (b) VALUES ('a');
|
||||||
|
UPDATE t2 SET b = 'b' WHERE a = 1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
a b
|
||||||
|
1 b
|
||||||
|
DROP TABLE t1, t2;
|
||||||
#---------------- 2-sweeps read Index merge test 2 -------------------------------
|
#---------------- 2-sweeps read Index merge test 2 -------------------------------
|
||||||
SET SESSION STORAGE_ENGINE = MyISAM;
|
SET SESSION STORAGE_ENGINE = MyISAM;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
@ -1807,3 +1807,47 @@ USING (TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME)
|
|||||||
WHERE COLUMNS.TABLE_SCHEMA = 'test'
|
WHERE COLUMNS.TABLE_SCHEMA = 'test'
|
||||||
AND COLUMNS.TABLE_NAME = 't1';
|
AND COLUMNS.TABLE_NAME = 't1';
|
||||||
TABLE_SCHEMA TABLE_NAME COLUMN_NAME CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME TABLE_CATALOG ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
TABLE_SCHEMA TABLE_NAME COLUMN_NAME CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME TABLE_CATALOG ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
||||||
|
#
|
||||||
|
# A test case for Bug#56540 "Exception (crash) in sql_show.cc
|
||||||
|
# during rqg_info_schema test on Windows"
|
||||||
|
# Ensure that we never access memory of a closed table,
|
||||||
|
# in particular, never access table->field[] array.
|
||||||
|
# Before the fix, the below test case, produced
|
||||||
|
# valgrind errors.
|
||||||
|
#
|
||||||
|
drop table if exists t1;
|
||||||
|
drop view if exists v1;
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
create view v1 as select t1.a, t1.b from t1;
|
||||||
|
alter table t1 change b c int;
|
||||||
|
lock table t1 read;
|
||||||
|
# --> connection con1
|
||||||
|
flush tables;
|
||||||
|
# --> connection default
|
||||||
|
select * from information_schema.views;
|
||||||
|
TABLE_CATALOG def
|
||||||
|
TABLE_SCHEMA test
|
||||||
|
TABLE_NAME v1
|
||||||
|
VIEW_DEFINITION select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1`
|
||||||
|
CHECK_OPTION NONE
|
||||||
|
IS_UPDATABLE
|
||||||
|
DEFINER root@localhost
|
||||||
|
SECURITY_TYPE DEFINER
|
||||||
|
CHARACTER_SET_CLIENT latin1
|
||||||
|
COLLATION_CONNECTION latin1_swedish_ci
|
||||||
|
Warnings:
|
||||||
|
Level Warning
|
||||||
|
Code 1356
|
||||||
|
Message View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
unlock tables;
|
||||||
|
#
|
||||||
|
# Cleanup.
|
||||||
|
#
|
||||||
|
# --> connection con1
|
||||||
|
# Reaping 'flush tables'
|
||||||
|
# --> connection default
|
||||||
|
drop table t1;
|
||||||
|
drop view v1;
|
||||||
|
#
|
||||||
|
# End of 5.5 tests
|
||||||
|
#
|
||||||
|
@ -32,9 +32,9 @@ mysqld is alive
|
|||||||
CREATE USER testuser@'0:0:0:0:0:FFFF:127.0.0.1' identified by '1234';
|
CREATE USER testuser@'0:0:0:0:0:FFFF:127.0.0.1' identified by '1234';
|
||||||
GRANT ALL ON test.* TO testuser@'0:0:0:0:0:FFFF:127.0.0.1';
|
GRANT ALL ON test.* TO testuser@'0:0:0:0:0:FFFF:127.0.0.1';
|
||||||
SHOW GRANTS FOR testuser@'0:0:0:0:0:FFFF:127.0.0.1';
|
SHOW GRANTS FOR testuser@'0:0:0:0:0:FFFF:127.0.0.1';
|
||||||
Grants for testuser@0:0:0:0:0:FFFF:127.0.0.1
|
Grants for testuser@0:0:0:0:0:ffff:127.0.0.1
|
||||||
GRANT USAGE ON *.* TO 'testuser'@'0:0:0:0:0:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
GRANT USAGE ON *.* TO 'testuser'@'0:0:0:0:0:ffff:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
||||||
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0:0:0:0:FFFF:127.0.0.1'
|
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0:0:0:0:ffff:127.0.0.1'
|
||||||
SET @nip= inet_aton('0:0:0:0:0:FFFF:127.0.0.1');
|
SET @nip= inet_aton('0:0:0:0:0:FFFF:127.0.0.1');
|
||||||
SELECT @nip;
|
SELECT @nip;
|
||||||
@nip
|
@nip
|
||||||
@ -61,9 +61,9 @@ mysqld is alive
|
|||||||
CREATE USER testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' identified by '1234';
|
CREATE USER testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' identified by '1234';
|
||||||
GRANT ALL ON test.* TO testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1';
|
GRANT ALL ON test.* TO testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1';
|
||||||
SHOW GRANTS FOR testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1';
|
SHOW GRANTS FOR testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1';
|
||||||
Grants for testuser@0000:0000:0000:0000:0000:FFFF:127.0.0.1
|
Grants for testuser@0000:0000:0000:0000:0000:ffff:127.0.0.1
|
||||||
GRANT USAGE ON *.* TO 'testuser'@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
GRANT USAGE ON *.* TO 'testuser'@'0000:0000:0000:0000:0000:ffff:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
||||||
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'
|
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0000:0000:0000:0000:0000:ffff:127.0.0.1'
|
||||||
SET @nip= inet_aton('0000:0000:0000:0000:0000:FFFF:127.0.0.1');
|
SET @nip= inet_aton('0000:0000:0000:0000:0000:FFFF:127.0.0.1');
|
||||||
SELECT @nip;
|
SELECT @nip;
|
||||||
@nip
|
@nip
|
||||||
@ -90,9 +90,9 @@ mysqld is alive
|
|||||||
CREATE USER testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1' identified by '1234';
|
CREATE USER testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1' identified by '1234';
|
||||||
GRANT ALL ON test.* TO testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1';
|
GRANT ALL ON test.* TO testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1';
|
||||||
SHOW GRANTS FOR testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1';
|
SHOW GRANTS FOR testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1';
|
||||||
Grants for testuser@0:0000:0000:0:0000:FFFF:127.0.0.1
|
Grants for testuser@0:0000:0000:0:0000:ffff:127.0.0.1
|
||||||
GRANT USAGE ON *.* TO 'testuser'@'0:0000:0000:0:0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
GRANT USAGE ON *.* TO 'testuser'@'0:0000:0000:0:0000:ffff:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
||||||
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0000:0000:0:0000:FFFF:127.0.0.1'
|
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0000:0000:0:0000:ffff:127.0.0.1'
|
||||||
SET @nip= inet_aton('0:0000:0000:0:0000:FFFF:127.0.0.1');
|
SET @nip= inet_aton('0:0000:0000:0:0000:FFFF:127.0.0.1');
|
||||||
SELECT @nip;
|
SELECT @nip;
|
||||||
@nip
|
@nip
|
||||||
@ -119,9 +119,9 @@ mysqld is alive
|
|||||||
CREATE USER testuser@'0::0000:FFFF:127.0.0.1' identified by '1234';
|
CREATE USER testuser@'0::0000:FFFF:127.0.0.1' identified by '1234';
|
||||||
GRANT ALL ON test.* TO testuser@'0::0000:FFFF:127.0.0.1';
|
GRANT ALL ON test.* TO testuser@'0::0000:FFFF:127.0.0.1';
|
||||||
SHOW GRANTS FOR testuser@'0::0000:FFFF:127.0.0.1';
|
SHOW GRANTS FOR testuser@'0::0000:FFFF:127.0.0.1';
|
||||||
Grants for testuser@0::0000:FFFF:127.0.0.1
|
Grants for testuser@0::0000:ffff:127.0.0.1
|
||||||
GRANT USAGE ON *.* TO 'testuser'@'0::0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
GRANT USAGE ON *.* TO 'testuser'@'0::0000:ffff:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
||||||
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0::0000:FFFF:127.0.0.1'
|
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0::0000:ffff:127.0.0.1'
|
||||||
SET @nip= inet_aton('0::0000:FFFF:127.0.0.1');
|
SET @nip= inet_aton('0::0000:FFFF:127.0.0.1');
|
||||||
SELECT @nip;
|
SELECT @nip;
|
||||||
@nip
|
@nip
|
||||||
@ -149,9 +149,9 @@ mysqld is alive
|
|||||||
CREATE USER testuser@'::FFFF:127.0.0.1' identified by '1234';
|
CREATE USER testuser@'::FFFF:127.0.0.1' identified by '1234';
|
||||||
GRANT ALL ON test.* TO testuser@'::FFFF:127.0.0.1';
|
GRANT ALL ON test.* TO testuser@'::FFFF:127.0.0.1';
|
||||||
SHOW GRANTS FOR testuser@'::FFFF:127.0.0.1';
|
SHOW GRANTS FOR testuser@'::FFFF:127.0.0.1';
|
||||||
Grants for testuser@::FFFF:127.0.0.1
|
Grants for testuser@::ffff:127.0.0.1
|
||||||
GRANT USAGE ON *.* TO 'testuser'@'::FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
GRANT USAGE ON *.* TO 'testuser'@'::ffff:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'
|
||||||
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'::FFFF:127.0.0.1'
|
GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'::ffff:127.0.0.1'
|
||||||
SET @nip= inet_aton('::FFFF:127.0.0.1');
|
SET @nip= inet_aton('::FFFF:127.0.0.1');
|
||||||
SELECT @nip;
|
SELECT @nip;
|
||||||
@nip
|
@nip
|
||||||
|
@ -704,3 +704,37 @@ SET DEBUG_SYNC="now SIGNAL query";
|
|||||||
# Connection default
|
# Connection default
|
||||||
DROP EVENT e2;
|
DROP EVENT e2;
|
||||||
SET DEBUG_SYNC="RESET";
|
SET DEBUG_SYNC="RESET";
|
||||||
|
#
|
||||||
|
# Bug#55930 Assertion `thd->transaction.stmt.is_empty() ||
|
||||||
|
# thd->in_sub_stmt || (thd->state..
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a INT) engine=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
# Connection con1
|
||||||
|
SET SESSION lock_wait_timeout= 1;
|
||||||
|
SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL opti_recreate WAIT_FOR opti_analyze';
|
||||||
|
# Sending:
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
# Connection con2
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR opti_recreate';
|
||||||
|
SET DEBUG_SYNC= 'after_lock_tables_takes_lock SIGNAL thrlock WAIT_FOR release_thrlock';
|
||||||
|
# Sending:
|
||||||
|
INSERT INTO t1 VALUES (3);
|
||||||
|
# Connection default
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR thrlock';
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL opti_analyze';
|
||||||
|
# Connection con1
|
||||||
|
# Reaping: OPTIMIZE TABLE t1
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||||
|
test.t1 optimize error Lock wait timeout exceeded; try restarting transaction
|
||||||
|
test.t1 optimize status Operation failed
|
||||||
|
Warnings:
|
||||||
|
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL release_thrlock';
|
||||||
|
# Connection con2
|
||||||
|
# Reaping: INSERT INTO t1 VALUES (3)
|
||||||
|
# Connection default
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
7
mysql-test/r/lowercase_table4.result
Executable file
7
mysql-test/r/lowercase_table4.result
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# Bug#46941 crash with lower_case_table_names=2 and
|
||||||
|
# foreign data dictionary confusion
|
||||||
|
#
|
||||||
|
CREATE DATABASE XY;
|
||||||
|
USE XY;
|
||||||
|
DROP DATABASE XY;
|
@ -2632,7 +2632,8 @@ DROP TABLE IF EXISTS t1;
|
|||||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1),(2),(3);
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
# Connection: con1
|
# Connection: con1
|
||||||
SET debug_sync='lock_table_for_truncate SIGNAL parked_truncate WAIT_FOR go_truncate';
|
LOCK TABLES t1 WRITE;
|
||||||
|
SET debug_sync='upgrade_lock_for_truncate SIGNAL parked_truncate WAIT_FOR go_truncate';
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
# Connection: default
|
# Connection: default
|
||||||
SET debug_sync='now WAIT_FOR parked_truncate';
|
SET debug_sync='now WAIT_FOR parked_truncate';
|
||||||
@ -2647,10 +2648,11 @@ FLUSH TABLES t1;
|
|||||||
# Connection: default
|
# Connection: default
|
||||||
SET debug_sync='now WAIT_FOR parked_flush';
|
SET debug_sync='now WAIT_FOR parked_flush';
|
||||||
SET debug_sync='now SIGNAL go_truncate';
|
SET debug_sync='now SIGNAL go_truncate';
|
||||||
# Connection: con1
|
# Ensure that truncate waits for a exclusive lock
|
||||||
# Reaping...
|
|
||||||
# Connection: default
|
|
||||||
SET debug_sync= 'now SIGNAL go_show';
|
SET debug_sync= 'now SIGNAL go_show';
|
||||||
|
# Connection: con1 (TRUNCATE)
|
||||||
|
# Reaping...
|
||||||
|
UNLOCK TABLES;
|
||||||
# Connection: con2 (SHOW FIELDS FROM t1)
|
# Connection: con2 (SHOW FIELDS FROM t1)
|
||||||
# Reaping...
|
# Reaping...
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
|
@ -3486,12 +3486,13 @@ ALTER TABLE m1 ADD INDEX (c1);
|
|||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
DROP TABLE m1, t1;
|
DROP TABLE m1, t1;
|
||||||
#
|
#
|
||||||
# Locking the merge table will implicitly lock children.
|
# Locking the merge table won't implicitly lock children.
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (c1 INT);
|
CREATE TABLE t1 (c1 INT);
|
||||||
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1);
|
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1);
|
||||||
LOCK TABLE m1 WRITE;
|
LOCK TABLE m1 WRITE;
|
||||||
ALTER TABLE t1 ADD INDEX (c1);
|
ALTER TABLE t1 ADD INDEX (c1);
|
||||||
|
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||||
LOCK TABLE m1 WRITE, t1 WRITE;
|
LOCK TABLE m1 WRITE, t1 WRITE;
|
||||||
ALTER TABLE t1 ADD INDEX (c1);
|
ALTER TABLE t1 ADD INDEX (c1);
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
@ -3661,4 +3662,16 @@ REPAIR TABLE t2 USE_FRM;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t2 repair note The storage engine for the table doesn't support repair
|
test.t2 repair note The storage engine for the table doesn't support repair
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#57002 Assert in upgrade_shared_lock_to_exclusive()
|
||||||
|
# for ALTER TABLE + MERGE tables
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1, m1;
|
||||||
|
CREATE TABLE t1(a INT) engine=myisam;
|
||||||
|
CREATE TABLE m1(a INT) engine=merge UNION(t1);
|
||||||
|
LOCK TABLES t1 READ, m1 WRITE;
|
||||||
|
ALTER TABLE t1 engine=myisam;
|
||||||
|
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||||
|
UNLOCK TABLES;
|
||||||
|
DROP TABLE m1, t1;
|
||||||
End of 6.0 tests
|
End of 6.0 tests
|
||||||
|
@ -8,7 +8,7 @@ mysql.db OK
|
|||||||
mysql.event OK
|
mysql.event OK
|
||||||
mysql.func OK
|
mysql.func OK
|
||||||
mysql.general_log
|
mysql.general_log
|
||||||
note : The storage engine for the table doesn't support optimize
|
note : The storage engine for the table doesn't support analyze
|
||||||
mysql.help_category OK
|
mysql.help_category OK
|
||||||
mysql.help_keyword OK
|
mysql.help_keyword OK
|
||||||
mysql.help_relation OK
|
mysql.help_relation OK
|
||||||
@ -21,7 +21,7 @@ mysql.procs_priv OK
|
|||||||
mysql.proxy_priv OK
|
mysql.proxy_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log
|
mysql.slow_log
|
||||||
note : The storage engine for the table doesn't support optimize
|
note : The storage engine for the table doesn't support analyze
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
mysql.time_zone OK
|
mysql.time_zone OK
|
||||||
mysql.time_zone_leap_second OK
|
mysql.time_zone_leap_second OK
|
||||||
@ -29,6 +29,8 @@ mysql.time_zone_name OK
|
|||||||
mysql.time_zone_transition OK
|
mysql.time_zone_transition OK
|
||||||
mysql.time_zone_transition_type OK
|
mysql.time_zone_transition_type OK
|
||||||
mysql.user OK
|
mysql.user OK
|
||||||
|
mtr.global_suppressions Table is already up to date
|
||||||
|
mtr.test_suppressions Table is already up to date
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
@ -55,10 +57,64 @@ mysql.time_zone_name OK
|
|||||||
mysql.time_zone_transition OK
|
mysql.time_zone_transition OK
|
||||||
mysql.time_zone_transition_type OK
|
mysql.time_zone_transition_type OK
|
||||||
mysql.user OK
|
mysql.user OK
|
||||||
|
mysql.columns_priv OK
|
||||||
|
mysql.db OK
|
||||||
|
mysql.event OK
|
||||||
|
mysql.func OK
|
||||||
|
mysql.general_log
|
||||||
|
note : The storage engine for the table doesn't support analyze
|
||||||
|
mysql.help_category OK
|
||||||
|
mysql.help_keyword OK
|
||||||
|
mysql.help_relation OK
|
||||||
|
mysql.help_topic OK
|
||||||
|
mysql.host OK
|
||||||
|
mysql.ndb_binlog_index OK
|
||||||
|
mysql.plugin OK
|
||||||
|
mysql.proc OK
|
||||||
|
mysql.procs_priv OK
|
||||||
|
mysql.proxy_priv OK
|
||||||
|
mysql.servers OK
|
||||||
|
mysql.slow_log
|
||||||
|
note : The storage engine for the table doesn't support analyze
|
||||||
|
mysql.tables_priv OK
|
||||||
|
mysql.time_zone OK
|
||||||
|
mysql.time_zone_leap_second OK
|
||||||
|
mysql.time_zone_name OK
|
||||||
|
mysql.time_zone_transition OK
|
||||||
|
mysql.time_zone_transition_type OK
|
||||||
|
mysql.user OK
|
||||||
|
mysql.columns_priv Table is already up to date
|
||||||
|
mysql.db Table is already up to date
|
||||||
|
mysql.event Table is already up to date
|
||||||
|
mysql.func Table is already up to date
|
||||||
|
mysql.general_log
|
||||||
|
note : The storage engine for the table doesn't support optimize
|
||||||
|
mysql.help_category Table is already up to date
|
||||||
|
mysql.help_keyword Table is already up to date
|
||||||
|
mysql.help_relation Table is already up to date
|
||||||
|
mysql.help_topic Table is already up to date
|
||||||
|
mysql.host Table is already up to date
|
||||||
|
mysql.ndb_binlog_index Table is already up to date
|
||||||
|
mysql.plugin Table is already up to date
|
||||||
|
mysql.proc Table is already up to date
|
||||||
|
mysql.procs_priv Table is already up to date
|
||||||
|
mysql.proxy_priv Table is already up to date
|
||||||
|
mysql.servers Table is already up to date
|
||||||
|
mysql.slow_log
|
||||||
|
note : The storage engine for the table doesn't support optimize
|
||||||
|
mysql.tables_priv Table is already up to date
|
||||||
|
mysql.time_zone Table is already up to date
|
||||||
|
mysql.time_zone_leap_second Table is already up to date
|
||||||
|
mysql.time_zone_name Table is already up to date
|
||||||
|
mysql.time_zone_transition Table is already up to date
|
||||||
|
mysql.time_zone_transition_type Table is already up to date
|
||||||
|
mysql.user Table is already up to date
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
create view v1 as select * from t1;
|
create view v1 as select * from t1;
|
||||||
test.t1 OK
|
test.t1 OK
|
||||||
|
test.t1 Table is already up to date
|
||||||
test.t1 OK
|
test.t1 OK
|
||||||
|
test.t1 Table is already up to date
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table `t``1`(a int);
|
create table `t``1`(a int);
|
||||||
@ -127,6 +183,7 @@ Tables_in_test
|
|||||||
t1
|
t1
|
||||||
#mysql50#v-1
|
#mysql50#v-1
|
||||||
v1
|
v1
|
||||||
|
test.t1 OK
|
||||||
show tables;
|
show tables;
|
||||||
Tables_in_test
|
Tables_in_test
|
||||||
t1
|
t1
|
||||||
@ -200,3 +257,6 @@ Tables_in_test (t1-1)
|
|||||||
t1-1
|
t1-1
|
||||||
drop table `t1-1`;
|
drop table `t1-1`;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug #35269: mysqlcheck behaves different depending on order of parameters
|
||||||
|
#
|
||||||
|
327
mysql-test/r/plugin_auth_qa.result
Normal file
327
mysql-test/r/plugin_auth_qa.result
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
CREATE DATABASE test_user_db;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
========== test 1.1 ======================================================
|
||||||
|
CREATE USER plug IDENTIFIED WITH test_plugin_server;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
REVOKE ALL PRIVILEGES ON test_user_db.* FROM plug;
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
REVOKE ALL PRIVILEGES ON test_user_db.* FROM plug;
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug IDENTIFIED WITH test_plugin_server AS '';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS '';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server
|
||||||
|
REVOKE ALL PRIVILEGES ON test_user_db.* FROM plug;
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS ;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
CREATE USER plug IDENTIFIED WITH test_plugin_server AS plug_dest;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'plug_dest' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS plug_dest;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'plug_dest' at line 1
|
||||||
|
========== test 1.1 syntax errors ========================================
|
||||||
|
CREATE USER plug IDENTIFIED WITH AS plug_dest;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS plug_dest' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH AS plug_dest;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS plug_dest' at line 1
|
||||||
|
CREATE USER plug IDENTIFIED WITH;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
CREATE USER plug IDENTIFIED AS '';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS ''' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED AS '';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS ''' at line 1
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH 'test_plugin_server'' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug
|
||||||
|
IDENTIFIED WITH 'test_plugin_server' IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH 'test_plugin_server'' at line 2
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS '' AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS 'plug_dest'' at line 1
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug AS '' AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS '' AS 'plug_dest'' at line 1
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS ''
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH test_plugin_server AS 'plug_dest'' at line 2
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS ''
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH test_plugin_server AS 'plug_dest'' at line 2
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd'
|
||||||
|
IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'' at line 2
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED BY 'plug_dest_passwd'
|
||||||
|
IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'' at line 2
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
USER plug_dest IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USER plug_dest IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
USER plug_dest IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USER plug_dest IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
plug_dest IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'plug_dest IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
plug_dest IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'plug_dest IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'
|
||||||
|
IDENTIFIED by 'plug_dest_pwd';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED by 'plug_dest_pwd'' at line 2
|
||||||
|
========== test 1.1 combinations ==========================
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
========== test 1.1.1.6/1.1.2.5 ============================
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug, plug_dest;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug, plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug_dest;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug, plug_dest;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
DROP USER plug_dest;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
ERROR HY000: GRANT with IDENTIFIED WITH is illegal because the user plug already exists
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
ERROR HY000: GRANT with IDENTIFIED WITH is illegal because the user plug already exists
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
ERROR HY000: Operation CREATE USER failed for 'plug'@'%'
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server';
|
||||||
|
ERROR HY000: Operation CREATE USER failed for 'plug'@'%'
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
plug test_plugin_server plug_dest *939AEE68989794C0F408277411C26055CDF41119
|
||||||
|
DROP USER plug;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
ERROR HY000: Operation CREATE USER failed for 'plug'@'%'
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
plug_dest test_plugin_server plug_dest
|
||||||
|
DROP USER plug,plug_dest;
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
plug test_plugin_server plug_dest
|
||||||
|
plug_dest test_plugin_server plug_dest
|
||||||
|
DROP USER plug,plug_dest;
|
||||||
|
========== test 1.1.1.1/1.1.2.1/1.1.1.5 ====================
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE USER plüg IDENTIFIED WITH 'test_plugin_server' AS 'plüg_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg test_plugin_server plüg_dest
|
||||||
|
DROP USER plüg;
|
||||||
|
CREATE USER plüg_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg_dest
|
||||||
|
DROP USER plüg_dest;
|
||||||
|
SET NAMES ascii;
|
||||||
|
CREATE USER 'plüg' IDENTIFIED WITH 'test_plugin_server' AS 'plüg_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
pl??g test_plugin_server pl??g_dest
|
||||||
|
DROP USER 'plüg';
|
||||||
|
CREATE USER 'plüg_dest' IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
pl??g_dest
|
||||||
|
DROP USER 'plüg_dest';
|
||||||
|
SET NAMES latin1;
|
||||||
|
========== test 1.1.1.5 ====================================
|
||||||
|
CREATE USER 'plüg' IDENTIFIED WITH 'test_plügin_server' AS 'plüg_dest';
|
||||||
|
ERROR HY000: Plugin 'test_plügin_server' is not loaded
|
||||||
|
CREATE USER 'plug' IDENTIFIED WITH 'test_plugin_server' AS 'plüg_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server plüg_dest
|
||||||
|
DROP USER 'plug';
|
||||||
|
CREATE USER 'plüg_dest' IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg_dest
|
||||||
|
DROP USER 'plüg_dest';
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE USER plüg IDENTIFIED WITH 'test_plügin_server' AS 'plüg_dest';
|
||||||
|
ERROR HY000: Plugin 'test_plügin_server' is not loaded
|
||||||
|
CREATE USER 'plüg' IDENTIFIED WITH 'test_plugin_server' AS 'plüg_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg test_plugin_server plüg_dest
|
||||||
|
DROP USER 'plüg';
|
||||||
|
CREATE USER 'plüg_dest' IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg_dest
|
||||||
|
DROP USER 'plüg_dest';
|
||||||
|
CREATE USER plüg IDENTIFIED WITH test_plugin_server AS 'plüg_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg test_plugin_server plüg_dest
|
||||||
|
DROP USER plüg;
|
||||||
|
CREATE USER plüg_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plüg_dest
|
||||||
|
DROP USER plüg_dest;
|
||||||
|
========== test 1.1.1.2/1.1.2.2=============================
|
||||||
|
SET @auth_name= 'test_plugin_server';
|
||||||
|
CREATE USER plug IDENTIFIED WITH @auth_name AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@auth_name AS 'plug_dest'' at line 1
|
||||||
|
SET @auth_string= 'plug_dest';
|
||||||
|
CREATE USER plug IDENTIFIED WITH test_plugin_server AS @auth_string;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@auth_string' at line 1
|
||||||
|
========== test 1.1.1.3/1.1.2.3=============================
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'hh''s_test_plugin_server' AS 'plug_dest';
|
||||||
|
ERROR HY000: Plugin 'hh's_test_plugin_server' is not loaded
|
||||||
|
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'hh''s_plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug test_plugin_server hh's_plug_dest
|
||||||
|
DROP USER plug;
|
||||||
|
CREATE USER 'hh''s_plug_dest' IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
hh's_plug_dest
|
||||||
|
DROP USER 'hh''s_plug_dest';
|
||||||
|
========== test 1.1.1.4 ====================================
|
||||||
|
CREATE USER plug IDENTIFIED WITH hh''s_test_plugin_server AS 'plug_dest';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''s_test_plugin_server AS 'plug_dest'' at line 1
|
||||||
|
========== test 1.1.3.1 ====================================
|
||||||
|
GRANT INSERT ON test_user_db.* TO grant_user IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
CREATE USER plug_dest;
|
||||||
|
DROP USER plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
DROP USER grant_user,plug_dest;
|
||||||
|
set @save_sql_mode= @@sql_mode;
|
||||||
|
SET @@sql_mode=no_auto_create_user;
|
||||||
|
GRANT INSERT ON test_user_db.* TO grant_user IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
CREATE USER plug_dest;
|
||||||
|
DROP USER plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest;
|
||||||
|
ERROR 42000: Can't find any matching row in the user table
|
||||||
|
DROP USER grant_user;
|
||||||
|
GRANT INSERT ON test_user_db.* TO grant_user IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
plug_dest *939AEE68989794C0F408277411C26055CDF41119
|
||||||
|
DROP USER plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest IDENTIFIED BY 'plug_user_passwd';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
grant_user test_plugin_server plug_dest
|
||||||
|
plug_dest *560881EB651416CEF77314D07D55EDCD5FC1BD6D
|
||||||
|
DROP USER grant_user,plug_dest;
|
||||||
|
set @@sql_mode= @save_sql_mode;
|
||||||
|
DROP DATABASE test_user_db;
|
335
mysql-test/r/plugin_auth_qa_1.result
Normal file
335
mysql-test/r/plugin_auth_qa_1.result
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
CREATE DATABASE test_user_db;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
========== test 1.1.3.2 ====================================
|
||||||
|
CREATE USER plug_user IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
Tables_in_test_user_db
|
||||||
|
t1
|
||||||
|
REVOKE PROXY ON plug_dest FROM plug_user;
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
DROP USER plug_user,plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
plug_user test_plugin_server plug_dest
|
||||||
|
1)
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
Tables_in_test_user_db
|
||||||
|
t1
|
||||||
|
REVOKE ALL PRIVILEGES ON test_user_db.* FROM 'plug_user'
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
2)
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
Tables_in_test_user_db
|
||||||
|
t1
|
||||||
|
REVOKE PROXY ON plug_dest FROM plug_user;
|
||||||
|
3)
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
DROP USER plug_user,plug_dest;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
1)
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
2)
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
Tables_in_test_user_db
|
||||||
|
t1
|
||||||
|
REVOKE ALL PRIVILEGES ON test_user_db.* FROM 'plug_user'
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
DROP USER plug_user,plug_dest;
|
||||||
|
========== test 1.2 ========================================
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
RENAME USER plug_dest TO new_dest;
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON new_dest TO plug_user;
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_dest
|
||||||
|
plug_user test_plugin_server plug_dest
|
||||||
|
DROP USER plug_user,new_dest;
|
||||||
|
CREATE USER plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
current_user()
|
||||||
|
plug_dest@%
|
||||||
|
user()
|
||||||
|
plug_user@localhost
|
||||||
|
RENAME USER plug_dest TO new_dest;
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON new_dest TO plug_user;
|
||||||
|
ERROR 1045 (28000): Access denied for user 'plug_user'@'localhost' (using password: YES)
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_dest
|
||||||
|
plug_user test_plugin_server plug_dest
|
||||||
|
DROP USER plug_user,new_dest;
|
||||||
|
CREATE USER plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
connect(plug_user,localhost,plug_user,plug_dest);
|
||||||
|
select USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
plug_user@localhost plug_dest@%
|
||||||
|
connection default;
|
||||||
|
disconnect plug_user;
|
||||||
|
RENAME USER plug_user TO new_user;
|
||||||
|
connect(plug_user,localhost,new_user,plug_dest);
|
||||||
|
select USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
new_user@localhost plug_dest@%
|
||||||
|
connection default;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_user test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
disconnect plug_user;
|
||||||
|
UPDATE mysql.user SET user='plug_user' WHERE user='new_user';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
plug_user test_plugin_server plug_dest
|
||||||
|
DROP USER plug_dest,plug_user;
|
||||||
|
========== test 1.3 ========================================
|
||||||
|
CREATE USER plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
connect(plug_user,localhost,plug_user,plug_dest);
|
||||||
|
select USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
plug_user@localhost plug_dest@%
|
||||||
|
connection default;
|
||||||
|
disconnect plug_user;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_dest
|
||||||
|
plug_user test_plugin_server plug_dest
|
||||||
|
UPDATE mysql.user SET user='new_user' WHERE user='plug_user';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_user test_plugin_server plug_dest
|
||||||
|
plug_dest
|
||||||
|
UPDATE mysql.user SET authentication_string='new_dest' WHERE user='new_user';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_user test_plugin_server new_dest
|
||||||
|
plug_dest
|
||||||
|
UPDATE mysql.user SET plugin='new_plugin_server' WHERE user='new_user';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_user new_plugin_server new_dest
|
||||||
|
plug_dest
|
||||||
|
connect(plug_user,localhost,new_user,new_dest);
|
||||||
|
ERROR HY000: Plugin 'new_plugin_server' is not loaded
|
||||||
|
UPDATE mysql.user SET plugin='test_plugin_server' WHERE user='new_user';
|
||||||
|
UPDATE mysql.user SET USER='new_dest' WHERE user='plug_dest';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
GRANT PROXY ON new_dest TO new_user;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_dest
|
||||||
|
new_user test_plugin_server new_dest
|
||||||
|
connect(plug_user,localhost,new_user,new_dest);
|
||||||
|
select USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
new_user@localhost new_dest@%
|
||||||
|
connection default;
|
||||||
|
disconnect plug_user;
|
||||||
|
UPDATE mysql.user SET USER='plug_dest' WHERE user='new_dest';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
CREATE USER new_dest IDENTIFIED BY 'new_dest_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
new_dest
|
||||||
|
new_user test_plugin_server new_dest
|
||||||
|
plug_dest
|
||||||
|
GRANT ALL PRIVILEGES ON test.* TO new_user;
|
||||||
|
connect(plug_user,localhost,new_dest,new_dest_passwd);
|
||||||
|
select USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
new_dest@localhost new_dest@%
|
||||||
|
connection default;
|
||||||
|
disconnect plug_user;
|
||||||
|
DROP USER new_user,new_dest,plug_dest;
|
||||||
|
========== test 2, 2.1, 2.2 ================================
|
||||||
|
CREATE USER ''@'' IDENTIFIED WITH test_plugin_server AS 'proxied_user';
|
||||||
|
CREATE USER proxied_user IDENTIFIED BY 'proxied_user_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
test_plugin_server proxied_user
|
||||||
|
proxied_user
|
||||||
|
connect(proxy_con,localhost,proxied_user,proxied_user_passwd);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user@localhost proxied_user@%
|
||||||
|
========== test 2.2.1 ======================================
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
connect(proxy_con,localhost,proxy_user,proxied_user);
|
||||||
|
ERROR 28000: Access denied for user 'proxy_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON proxied_user TO ''@'';
|
||||||
|
connect(proxy_con,localhost,proxied_user,proxied_user_passwd);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user@localhost proxied_user@%
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
connect(proxy_con,localhost,proxy_user,proxied_user);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxy_user@localhost proxied_user@%
|
||||||
|
========== test 2.2.1 ======================================
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
''@''
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
DROP USER ''@'',proxied_user;
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO ''@''
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'proxied_user';
|
||||||
|
CREATE USER proxied_user IDENTIFIED BY 'proxied_user_passwd';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
test_plugin_server proxied_user
|
||||||
|
proxied_user
|
||||||
|
connect(proxy_con,localhost,proxied_user,proxied_user_passwd);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user@localhost proxied_user@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
connect(proxy_con,localhost,proxy_user,proxied_user);
|
||||||
|
ERROR 28000: Access denied for user 'proxy_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON proxied_user TO ''@'';
|
||||||
|
connect(proxy_con,localhost,proxied_user,proxied_user_passwd);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user@localhost proxied_user@%
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
connect(proxy_con,localhost,proxy_user,proxied_user);
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxy_user@localhost proxied_user@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
''@''
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con;
|
||||||
|
DROP USER ''@'',proxied_user;
|
||||||
|
CREATE USER ''@'' IDENTIFIED WITH test_plugin_server AS 'proxied_user';
|
||||||
|
CREATE USER proxied_user_1 IDENTIFIED BY 'proxied_user_1_pwd';
|
||||||
|
CREATE USER proxied_user_2 IDENTIFIED BY 'proxied_user_2_pwd';
|
||||||
|
CREATE USER proxied_user_3 IDENTIFIED BY 'proxied_user_3_pwd';
|
||||||
|
CREATE USER proxied_user_4 IDENTIFIED BY 'proxied_user_4_pwd';
|
||||||
|
CREATE USER proxied_user_5 IDENTIFIED BY 'proxied_user_5_pwd';
|
||||||
|
GRANT PROXY ON proxied_user_1 TO ''@'';
|
||||||
|
GRANT PROXY ON proxied_user_2 TO ''@'';
|
||||||
|
GRANT PROXY ON proxied_user_3 TO ''@'';
|
||||||
|
GRANT PROXY ON proxied_user_4 TO ''@'';
|
||||||
|
GRANT PROXY ON proxied_user_5 TO ''@'';
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
test_plugin_server proxied_user
|
||||||
|
proxied_user_1
|
||||||
|
proxied_user_2
|
||||||
|
proxied_user_3
|
||||||
|
proxied_user_4
|
||||||
|
proxied_user_5
|
||||||
|
connect(proxy_con_1,localhost,proxied_user_1,'proxied_user_1_pwd');
|
||||||
|
connect(proxy_con_2,localhost,proxied_user_2,proxied_user_2_pwd);
|
||||||
|
connect(proxy_con_3,localhost,proxied_user_3,proxied_user_3_pwd);
|
||||||
|
connect(proxy_con_4,localhost,proxied_user_4,proxied_user_4_pwd);
|
||||||
|
connect(proxy_con_5,localhost,proxied_user_5,proxied_user_5_pwd);
|
||||||
|
connection proxy_con_1;
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user_1@localhost proxied_user_1@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection proxy_con_2;
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user_2@localhost proxied_user_2@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection proxy_con_3;
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user_3@localhost proxied_user_3@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection proxy_con_4;
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user_4@localhost proxied_user_4@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection proxy_con_5;
|
||||||
|
SELECT USER(),CURRENT_USER();
|
||||||
|
USER() CURRENT_USER()
|
||||||
|
proxied_user_5@localhost proxied_user_5@%
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
connection default;
|
||||||
|
disconnect proxy_con_1;
|
||||||
|
disconnect proxy_con_2;
|
||||||
|
disconnect proxy_con_3;
|
||||||
|
disconnect proxy_con_4;
|
||||||
|
disconnect proxy_con_5;
|
||||||
|
DROP USER ''@'',proxied_user_1,proxied_user_2,proxied_user_3,proxied_user_4,proxied_user_5;
|
||||||
|
========== test 3 ==========================================
|
||||||
|
GRANT ALL PRIVILEGES ON *.* TO plug_user
|
||||||
|
IDENTIFIED WITH test_plugin_server AS 'plug_dest';
|
||||||
|
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||||
|
GRANT PROXY ON plug_dest TO plug_user;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
DROP USER plug_user, plug_dest;
|
||||||
|
DROP DATABASE test_user_db;
|
150
mysql-test/r/plugin_auth_qa_2.result
Normal file
150
mysql-test/r/plugin_auth_qa_2.result
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
CREATE DATABASE test_user_db;
|
||||||
|
========== test 1.1.3.2 ====================================
|
||||||
|
=== check contens of components of info ====================
|
||||||
|
CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest';
|
||||||
|
CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_1_dest TO qa_test_1_user;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
qa_test_1_dest
|
||||||
|
qa_test_1_user qa_auth_interface qa_test_1_dest
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
SELECT @@external_user;
|
||||||
|
@@external_user
|
||||||
|
NULL
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT -u qa_test_1_user --password=qa_test_1_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
|
qa_test_1_user@% qa_test_1_user@localhost NULL NULL
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
qa_test_1_dest
|
||||||
|
qa_test_1_user qa_auth_interface qa_test_1_dest
|
||||||
|
DROP USER qa_test_1_user;
|
||||||
|
DROP USER qa_test_1_dest;
|
||||||
|
=== Assign values to components of info ====================
|
||||||
|
CREATE USER qa_test_2_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_2_dest';
|
||||||
|
CREATE USER qa_test_2_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
CREATE USER authenticated_as IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_2_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_2_dest TO qa_test_2_user;
|
||||||
|
GRANT PROXY ON authenticated_as TO qa_test_2_user;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
authenticated_as
|
||||||
|
qa_test_2_dest
|
||||||
|
qa_test_2_user qa_auth_interface qa_test_2_dest
|
||||||
|
SELECT @@proxy_user;
|
||||||
|
@@proxy_user
|
||||||
|
NULL
|
||||||
|
SELECT @@external_user;
|
||||||
|
@@external_user
|
||||||
|
NULL
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT -u qa_test_2_user --password=qa_test_2_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
|
authenticated_as@% user_name@localhost 'qa_test_2_user'@'%' 'qa_test_2_user'@'%'
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string
|
||||||
|
authenticated_as
|
||||||
|
qa_test_2_dest
|
||||||
|
qa_test_2_user qa_auth_interface qa_test_2_dest
|
||||||
|
DROP USER qa_test_2_user;
|
||||||
|
DROP USER qa_test_2_dest;
|
||||||
|
DROP USER authenticated_as;
|
||||||
|
=== Assign too high values for *length, which should have no effect ====
|
||||||
|
CREATE USER qa_test_3_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_3_dest';
|
||||||
|
CREATE USER qa_test_3_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_3_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_3_dest TO qa_test_3_user;
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT -u qa_test_3_user --password=qa_test_3_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
|
qa_test_3_dest@% qa_test_3_user@localhost 'qa_test_3_user'@'%' 'qa_test_3_user'@'%'
|
||||||
|
DROP USER qa_test_3_user;
|
||||||
|
DROP USER qa_test_3_dest;
|
||||||
|
=== Assign too low values for *length, which should have no effect ====
|
||||||
|
CREATE USER qa_test_4_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_4_dest';
|
||||||
|
CREATE USER qa_test_4_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_4_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_4_dest TO qa_test_4_user;
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT -u qa_test_4_user --password=qa_test_4_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
|
qa_test_4_dest@% qa_test_4_user@localhost 'qa_test_4_user'@'%' 'qa_test_4_user'@'%'
|
||||||
|
DROP USER qa_test_4_user;
|
||||||
|
DROP USER qa_test_4_dest;
|
||||||
|
=== Assign empty string especially to authenticated_as (in plugin) ====
|
||||||
|
CREATE USER qa_test_5_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_5_dest';
|
||||||
|
CREATE USER qa_test_5_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
CREATE USER ''@'localhost' IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_5_dest identified by 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO ''@'localhost' identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_5_dest TO qa_test_5_user;
|
||||||
|
GRANT PROXY ON qa_test_5_dest TO ''@'localhost';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user WHERE user != 'root';
|
||||||
|
user plugin authentication_string password
|
||||||
|
*DFCACE76914AD7BD801FC1A1ECF6562272621A22
|
||||||
|
qa_test_5_dest *DFCACE76914AD7BD801FC1A1ECF6562272621A22
|
||||||
|
qa_test_5_user qa_auth_interface qa_test_5_dest
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT --user=qa_test_5_user --password=qa_test_5_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'qa_test_5_user'@'localhost' (using password: YES)
|
||||||
|
DROP USER qa_test_5_user;
|
||||||
|
DROP USER qa_test_5_dest;
|
||||||
|
DROP USER ''@'localhost';
|
||||||
|
=== Assign 'root' especially to authenticated_as (in plugin) ====
|
||||||
|
CREATE USER qa_test_6_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_6_dest';
|
||||||
|
CREATE USER qa_test_6_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_6_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_6_dest TO qa_test_6_user;
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user;
|
||||||
|
user plugin authentication_string password
|
||||||
|
qa_test_6_dest *DFCACE76914AD7BD801FC1A1ECF6562272621A22
|
||||||
|
qa_test_6_user qa_auth_interface qa_test_6_dest
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT --user=qa_test_6_user --password=qa_test_6_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'qa_test_6_user'@'localhost' (using password: YES)
|
||||||
|
GRANT PROXY ON qa_test_6_dest TO root IDENTIFIED WITH qa_auth_interface AS 'qa_test_6_dest';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user;
|
||||||
|
user plugin authentication_string password
|
||||||
|
qa_test_6_dest *DFCACE76914AD7BD801FC1A1ECF6562272621A22
|
||||||
|
qa_test_6_user qa_auth_interface qa_test_6_dest
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root qa_auth_interface qa_test_6_dest
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT --user=root --password=qa_test_6_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
|
||||||
|
REVOKE PROXY ON qa_test_6_dest FROM root;
|
||||||
|
SELECT user,plugin,authentication_string FROM mysql.user;
|
||||||
|
user plugin authentication_string
|
||||||
|
qa_test_6_dest
|
||||||
|
qa_test_6_user qa_auth_interface qa_test_6_dest
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root qa_auth_interface qa_test_6_dest
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT -h localhost -P MASTER_MYPORT --user=root --password=qa_test_6_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
|
||||||
|
DROP USER qa_test_6_user;
|
||||||
|
DROP USER qa_test_6_dest;
|
||||||
|
DELETE FROM mysql.user WHERE user='root' AND plugin='qa_auth_interface';
|
||||||
|
SELECT user,plugin,authentication_string,password FROM mysql.user;
|
||||||
|
user plugin authentication_string password
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
root
|
||||||
|
=== Test of the --default_auth option for clients ====
|
||||||
|
CREATE USER qa_test_11_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_11_dest';
|
||||||
|
CREATE USER qa_test_11_dest IDENTIFIED BY 'dest_passwd';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_11_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_11_dest TO qa_test_11_user;
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_test_11_user --password=qa_test_11_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'qa_test_11_user'@'localhost' (using password: YES)
|
||||||
|
DROP USER qa_test_11_user, qa_test_11_dest;
|
||||||
|
DROP DATABASE test_user_db;
|
11
mysql-test/r/plugin_auth_qa_3.result
Normal file
11
mysql-test/r/plugin_auth_qa_3.result
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
CREATE DATABASE test_user_db;
|
||||||
|
CREATE USER qa_test_11_user IDENTIFIED WITH qa_auth_server AS 'qa_test_11_dest';
|
||||||
|
GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_11_dest identified by 'dest_passwd';
|
||||||
|
GRANT PROXY ON qa_test_11_dest TO qa_test_11_user;
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_test_11_user --password=qa_test_11_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
|
qa_test_11_dest@% qa_test_11_user@localhost 'qa_test_11_user'@'%' 'qa_test_11_user'@'%'
|
||||||
|
exec MYSQL PLUGIN_AUTH_OPT --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_test_2_user --password=qa_test_11_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
|
ERROR 1045 (28000): Access denied for user 'qa_test_2_user'@'localhost' (using password: NO)
|
||||||
|
DROP USER qa_test_11_user, qa_test_11_dest;
|
||||||
|
DROP DATABASE test_user_db;
|
7
mysql-test/r/plugin_load_option.result
Normal file
7
mysql-test/r/plugin_load_option.result
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
UNINSTALL PLUGIN example;
|
||||||
|
ERROR HY000: Plugin 'example' is force_plus_permanent and can not be unloaded
|
||||||
|
SELECT PLUGIN_NAME, PLUGIN_STATUS, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS
|
||||||
|
WHERE PLUGIN_NAME IN ('MyISAM', 'EXAMPLE');
|
||||||
|
PLUGIN_NAME PLUGIN_STATUS LOAD_OPTION
|
||||||
|
MyISAM ACTIVE FORCE
|
||||||
|
EXAMPLE ACTIVE FORCE_PLUS_PERMANENT
|
@ -5,20 +5,24 @@ drop table if exists t1;
|
|||||||
create table t1 (a varchar(100));
|
create table t1 (a varchar(100));
|
||||||
insert into t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
|
insert into t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
|
||||||
Activate debug hook and attempt to retrieve the statement from the cache.
|
Activate debug hook and attempt to retrieve the statement from the cache.
|
||||||
set session debug='+d,wait_in_query_cache_insert';
|
set debug_sync="wait_in_query_cache_insert SIGNAL parked WAIT_FOR go";
|
||||||
select SQL_CACHE * from t1;;
|
select SQL_CACHE * from t1;;
|
||||||
|
set debug_sync="now WAIT_FOR parked";
|
||||||
On a second connection; clear the query cache.
|
On a second connection; clear the query cache.
|
||||||
show status like 'Qcache_queries_in_cache';
|
show status like 'Qcache_queries_in_cache';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 1
|
||||||
set global query_cache_size= 0;
|
set global query_cache_size= 0;
|
||||||
Signal the debug hook to release the lock.
|
Signal the debug hook to release the lock.
|
||||||
select id from information_schema.processlist where state='wait_in_query_cache_insert' into @thread_id;
|
set debug_sync="now SIGNAL go";
|
||||||
kill query @thread_id;
|
|
||||||
Show query cache status.
|
Show query cache status.
|
||||||
show status like 'Qcache_queries_in_cache';
|
show status like 'Qcache_queries_in_cache';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 0
|
Qcache_queries_in_cache 0
|
||||||
|
a
|
||||||
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||||
|
set debug_sync= 'RESET';
|
||||||
set global query_cache_size= 0;
|
set global query_cache_size= 0;
|
||||||
use test;
|
use test;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -32,11 +36,12 @@ SET GLOBAL concurrent_insert= 1;
|
|||||||
SET GLOBAL query_cache_size= 1024*512;
|
SET GLOBAL query_cache_size= 1024*512;
|
||||||
SET GLOBAL query_cache_type= ON;
|
SET GLOBAL query_cache_type= ON;
|
||||||
# Switch to connection con1
|
# Switch to connection con1
|
||||||
SET SESSION debug='+d,wait_after_query_cache_invalidate';
|
SET DEBUG_SYNC = "wait_after_query_cache_invalidate SIGNAL parked WAIT_FOR go";
|
||||||
# Send concurrent insert, will wait in the query cache table invalidate
|
# Send concurrent insert, will wait in the query cache table invalidate
|
||||||
INSERT INTO t1 VALUES (4);
|
INSERT INTO t1 VALUES (4);
|
||||||
# Switch to connection default
|
# Switch to connection default
|
||||||
# Wait for concurrent insert to reach the debug point
|
# Wait for concurrent insert to reach the debug point
|
||||||
|
SET DEBUG_SYNC = "now WAIT_FOR parked";
|
||||||
# Switch to connection con2
|
# Switch to connection con2
|
||||||
# Send SELECT that shouldn't be cached
|
# Send SELECT that shouldn't be cached
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
@ -46,9 +51,7 @@ a
|
|||||||
3
|
3
|
||||||
# Switch to connection default
|
# Switch to connection default
|
||||||
# Notify the concurrent insert to proceed
|
# Notify the concurrent insert to proceed
|
||||||
SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST
|
SET DEBUG_SYNC = "now SIGNAL go";
|
||||||
WHERE STATE = 'wait_after_query_cache_invalidate' INTO @thread_id;
|
|
||||||
KILL QUERY @thread_id;
|
|
||||||
# Switch to connection con1
|
# Switch to connection con1
|
||||||
# Gather insert result
|
# Gather insert result
|
||||||
SHOW STATUS LIKE "Qcache_queries_in_cache";
|
SHOW STATUS LIKE "Qcache_queries_in_cache";
|
||||||
@ -66,6 +69,7 @@ Variable_name Value
|
|||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 1
|
||||||
# Disconnect
|
# Disconnect
|
||||||
# Restore defaults
|
# Restore defaults
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
RESET QUERY CACHE;
|
RESET QUERY CACHE;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
SET GLOBAL concurrent_insert= DEFAULT;
|
SET GLOBAL concurrent_insert= DEFAULT;
|
||||||
@ -108,43 +112,48 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|||||||
** before the mutex lock in invalidate_table_internal.
|
** before the mutex lock in invalidate_table_internal.
|
||||||
** This will allow new result sets to be written into the QC.
|
** This will allow new result sets to be written into the QC.
|
||||||
**
|
**
|
||||||
SET SESSION debug='+d,wait_in_query_cache_invalidate1';
|
SET DEBUG_SYNC="wait_in_query_cache_invalidate1 SIGNAL parked1_1 WAIT_FOR go1_1";
|
||||||
SET SESSION debug='+d,wait_in_query_cache_invalidate2';
|
SET DEBUG_SYNC="wait_in_query_cache_invalidate2 SIGNAL parked1_2 WAIT_FOR go1_2";
|
||||||
DELETE FROM t1 WHERE a like '%a%';;
|
DELETE FROM t1 WHERE a like '%a%';;
|
||||||
=================================== Connection default
|
=================================== Connection default
|
||||||
** Assert that the expect process status is obtained.
|
** Assert that the expect process status is obtained.
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR parked1_1";
|
||||||
**
|
**
|
||||||
=================================== Connection thd2
|
=================================== Connection thd2
|
||||||
** On THD2: Insert a result into the cache. This attempt will be blocked
|
** On THD2: Insert a result into the cache. This attempt will be blocked
|
||||||
** because of a debug hook placed just before the mutex lock after which
|
** because of a debug hook placed just before the mutex lock after which
|
||||||
** the first part of the result set is written.
|
** the first part of the result set is written.
|
||||||
SET SESSION debug='+d,wait_in_query_cache_insert';
|
SET DEBUG_SYNC="wait_in_query_cache_insert SIGNAL parked2 WAIT_FOR go2 EXECUTE 1";
|
||||||
SELECT SQL_CACHE * FROM t2 UNION SELECT * FROM t3;
|
SELECT SQL_CACHE * FROM t2 UNION SELECT * FROM t3;
|
||||||
|
=================================== Connection default
|
||||||
|
** Assert that the SELECT-stmt thread reaches the sync point.
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR parked2";
|
||||||
|
**
|
||||||
|
**
|
||||||
=================================== Connection thd3
|
=================================== Connection thd3
|
||||||
** On THD3: Insert another result into the cache and block on the same
|
** On THD3: Insert another result into the cache and block on the same
|
||||||
** debug hook.
|
** debug hook.
|
||||||
SET SESSION debug='+d,wait_in_query_cache_insert';
|
SET DEBUG_SYNC="wait_in_query_cache_insert SIGNAL parked3 WAIT_FOR go3 EXECUTE 1";
|
||||||
SELECT SQL_CACHE * FROM t4 UNION SELECT * FROM t5;;
|
SELECT SQL_CACHE * FROM t4 UNION SELECT * FROM t5;
|
||||||
=================================== Connection default
|
=================================== Connection default
|
||||||
** Assert that the two SELECT-stmt threads to reach the hook.
|
** Assert that the SELECT-stmt thread reaches the sync point.
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR parked3";
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** Signal the DELETE thread, THD1, to continue. It will enter the mutex
|
** Signal the DELETE thread, THD1, to continue. It will enter the mutex
|
||||||
** lock and set query cache status to TABLE_FLUSH_IN_PROGRESS and then
|
** lock and set query cache status to TABLE_FLUSH_IN_PROGRESS and then
|
||||||
** unlock the mutex before stopping on the next debug hook.
|
** unlock the mutex before stopping on the next debug hook.
|
||||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_invalidate1' LIMIT 1 INTO @flush_thread_id;
|
SET DEBUG_SYNC="now SIGNAL go1_1";
|
||||||
KILL QUERY @flush_thread_id;
|
|
||||||
** Assert that we reach the next debug hook.
|
** Assert that we reach the next debug hook.
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR parked1_2";
|
||||||
**
|
**
|
||||||
** Signal the remaining debug hooks blocking THD2 and THD3.
|
** Signal the remaining debug hooks blocking THD2 and THD3.
|
||||||
** The threads will grab the guard mutex enter the wait condition and
|
** The threads will grab the guard mutex enter the wait condition and
|
||||||
** and finally release the mutex. The threads will continue to wait
|
** and finally release the mutex. The threads will continue to wait
|
||||||
** until a broadcast signal reaches them causing both threads to
|
** until a broadcast signal reaches them causing both threads to
|
||||||
** come alive and check the condition.
|
** come alive and check the condition.
|
||||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_insert' ORDER BY id ASC LIMIT 1 INTO @thread_id;
|
SET DEBUG_SYNC="now SIGNAL go2";
|
||||||
KILL QUERY @thread_id;
|
SET DEBUG_SYNC="now SIGNAL go3";
|
||||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_insert' ORDER BY id DESC LIMIT 1 INTO @thread_id;
|
|
||||||
KILL QUERY @thread_id;
|
|
||||||
**
|
**
|
||||||
** Finally signal the DELETE statement on THD1 one last time.
|
** Finally signal the DELETE statement on THD1 one last time.
|
||||||
** The stmt will complete the query cache invalidation and return
|
** The stmt will complete the query cache invalidation and return
|
||||||
@ -152,8 +161,7 @@ KILL QUERY @thread_id;
|
|||||||
** One signal will be sent to the thread group waiting for executing
|
** One signal will be sent to the thread group waiting for executing
|
||||||
** invalidations and a broadcast signal will be sent to the thread
|
** invalidations and a broadcast signal will be sent to the thread
|
||||||
** group holding result set writers.
|
** group holding result set writers.
|
||||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_invalidate2' LIMIT 1 INTO @flush_thread_id;
|
SET DEBUG_SYNC="now SIGNAL go1_2";
|
||||||
KILL QUERY @flush_thread_id;
|
|
||||||
**
|
**
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
** No tables should be locked
|
** No tables should be locked
|
||||||
@ -172,6 +180,7 @@ DELETE FROM t4;
|
|||||||
DELETE FROM t5;
|
DELETE FROM t5;
|
||||||
=================================== Connection thd1
|
=================================== Connection thd1
|
||||||
** Done.
|
** Done.
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
SET GLOBAL query_cache_size= 0;
|
SET GLOBAL query_cache_size= 0;
|
||||||
# Restore defaults
|
# Restore defaults
|
||||||
RESET QUERY CACHE;
|
RESET QUERY CACHE;
|
||||||
@ -179,3 +188,35 @@ FLUSH STATUS;
|
|||||||
DROP TABLE t1,t2,t3,t4,t5;
|
DROP TABLE t1,t2,t3,t4,t5;
|
||||||
SET GLOBAL query_cache_size= DEFAULT;
|
SET GLOBAL query_cache_size= DEFAULT;
|
||||||
SET GLOBAL query_cache_type= DEFAULT;
|
SET GLOBAL query_cache_type= DEFAULT;
|
||||||
|
#
|
||||||
|
# Bug#56822: Add a thread state for sessions waiting on the query cache lock
|
||||||
|
#
|
||||||
|
SET @old_query_cache_size= @@GLOBAL.query_cache_size;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
SET GLOBAL concurrent_insert= 1;
|
||||||
|
SET GLOBAL query_cache_size= 1024*512;
|
||||||
|
SET GLOBAL query_cache_type= ON;
|
||||||
|
# Switch to connection con1
|
||||||
|
SET DEBUG_SYNC = "wait_in_query_cache_invalidate2 SIGNAL parked WAIT_FOR go";
|
||||||
|
# Send INSERT, will wait in the query cache table invalidation
|
||||||
|
INSERT INTO t1 VALUES (4);;
|
||||||
|
# Switch to connection default
|
||||||
|
# Wait for insert to reach the debug point
|
||||||
|
SET DEBUG_SYNC = "now WAIT_FOR parked";
|
||||||
|
# Switch to connection con2
|
||||||
|
# Send a query that should wait on the query cache lock
|
||||||
|
RESET QUERY CACHE;
|
||||||
|
# Switch to connection default
|
||||||
|
# Wait for the state to be reflected in the processlist
|
||||||
|
# Signal that the query cache can be unlocked
|
||||||
|
SET DEBUG_SYNC="now SIGNAL go";
|
||||||
|
# Reap con1 and disconnect
|
||||||
|
# Reap con2 and disconnect
|
||||||
|
# Restore defaults
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
RESET QUERY CACHE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL query_cache_size= DEFAULT;
|
||||||
|
SET GLOBAL query_cache_type= DEFAULT;
|
||||||
|
@ -4887,3 +4887,22 @@ col_int_key
|
|||||||
DROP VIEW view_t1;
|
DROP VIEW view_t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# End of test BUG#54515
|
# End of test BUG#54515
|
||||||
|
#
|
||||||
|
# Bug #57203 Assertion `field_length <= 255' failed.
|
||||||
|
#
|
||||||
|
SELECT coalesce((avg(distinct (geomfromtext("point(25379 -22010)")))))
|
||||||
|
UNION ALL
|
||||||
|
SELECT coalesce((avg(distinct (geomfromtext("point(25379 -22010)")))))
|
||||||
|
AS foo
|
||||||
|
;
|
||||||
|
coalesce((avg(distinct (geomfromtext("point(25379 -22010)")))))
|
||||||
|
0.0000
|
||||||
|
0.0000
|
||||||
|
CREATE table t1(a text);
|
||||||
|
INSERT INTO t1 VALUES (''), ('');
|
||||||
|
SELECT avg(distinct(t1.a)) FROM t1, t1 t2
|
||||||
|
GROUP BY t2.a ORDER BY t1.a;
|
||||||
|
avg(distinct(t1.a))
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of test BUG#57203
|
||||||
|
@ -1379,9 +1379,6 @@ MESSAGE_TEXT = msg,
|
|||||||
MYSQL_ERRNO = 1012;
|
MYSQL_ERRNO = 1012;
|
||||||
end $$
|
end $$
|
||||||
insert into t1 values (1), (2) $$
|
insert into t1 values (1), (2) $$
|
||||||
Warnings:
|
|
||||||
Warning 1012 This trigger SIGNAL a warning, a=1
|
|
||||||
Warning 1012 This trigger SIGNAL a warning, a=2
|
|
||||||
drop trigger t1_ai $$
|
drop trigger t1_ai $$
|
||||||
create trigger t1_ai after insert on t1 for each row
|
create trigger t1_ai after insert on t1 for each row
|
||||||
begin
|
begin
|
||||||
@ -1416,11 +1413,7 @@ MESSAGE_TEXT = NEW.msg,
|
|||||||
MYSQL_ERRNO = NEW.errno;
|
MYSQL_ERRNO = NEW.errno;
|
||||||
end $$
|
end $$
|
||||||
insert into t1 set errno=1012, msg='Warning message 1 in trigger' $$
|
insert into t1 set errno=1012, msg='Warning message 1 in trigger' $$
|
||||||
Warnings:
|
|
||||||
Warning 1012 Warning message 1 in trigger
|
|
||||||
insert into t1 set errno=1013, msg='Warning message 2 in trigger' $$
|
insert into t1 set errno=1013, msg='Warning message 2 in trigger' $$
|
||||||
Warnings:
|
|
||||||
Warning 1013 Warning message 2 in trigger
|
|
||||||
drop table t1 $$
|
drop table t1 $$
|
||||||
drop table if exists t1 $$
|
drop table if exists t1 $$
|
||||||
drop procedure if exists p1 $$
|
drop procedure if exists p1 $$
|
||||||
|
@ -1877,9 +1877,6 @@ DROP PROCEDURE p1;
|
|||||||
#
|
#
|
||||||
# Bug#5889: Exit handler for a warning doesn't hide the warning in trigger
|
# Bug#5889: Exit handler for a warning doesn't hide the warning in trigger
|
||||||
#
|
#
|
||||||
|
|
||||||
# - Case 1
|
|
||||||
|
|
||||||
CREATE TABLE t1(a INT, b INT);
|
CREATE TABLE t1(a INT, b INT);
|
||||||
INSERT INTO t1 VALUES (1, 2);
|
INSERT INTO t1 VALUES (1, 2);
|
||||||
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
|
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
|
||||||
@ -1889,40 +1886,13 @@ SET NEW.a = 10;
|
|||||||
SET NEW.a = 99999999999;
|
SET NEW.a = 99999999999;
|
||||||
END|
|
END|
|
||||||
UPDATE t1 SET b = 20;
|
UPDATE t1 SET b = 20;
|
||||||
Warnings:
|
|
||||||
Warning 1264 Out of range value for column 'a' at row 1
|
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Warning 1264 Out of range value for column 'a' at row 1
|
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
a b
|
a b
|
||||||
10 20
|
10 20
|
||||||
DROP TRIGGER t1_bu;
|
DROP TRIGGER t1_bu;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# - Case 2
|
|
||||||
|
|
||||||
CREATE TABLE t1(a INT);
|
|
||||||
CREATE TABLE t2(b CHAR(1));
|
|
||||||
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
INSERT INTO t2 VALUES('ab'); # Produces a warning.
|
|
||||||
INSERT INTO t2 VALUES('b'); # Does not produce a warning,
|
|
||||||
# previous warning should be cleared.
|
|
||||||
END|
|
|
||||||
INSERT INTO t1 VALUES(0);
|
|
||||||
SHOW WARNINGS;
|
|
||||||
Level Code Message
|
|
||||||
SELECT * FROM t1;
|
|
||||||
a
|
|
||||||
0
|
|
||||||
SELECT * FROM t2;
|
|
||||||
b
|
|
||||||
a
|
|
||||||
b
|
|
||||||
DROP TRIGGER t1_bi;
|
|
||||||
DROP TABLE t1;
|
|
||||||
DROP TABLE t2;
|
|
||||||
#
|
#
|
||||||
# Bug#9857: Stored procedures: handler for sqlwarning ignored
|
# Bug#9857: Stored procedures: handler for sqlwarning ignored
|
||||||
#
|
#
|
||||||
@ -1961,3 +1931,64 @@ Warning 1365 Division by 0
|
|||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP PROCEDURE p2;
|
DROP PROCEDURE p2;
|
||||||
SET sql_mode = @sql_mode_saved;
|
SET sql_mode = @sql_mode_saved;
|
||||||
|
#
|
||||||
|
# Bug#55850: Trigger warnings not cleared.
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
|
CREATE TABLE t1(x SMALLINT, y SMALLINT, z SMALLINT);
|
||||||
|
CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT,
|
||||||
|
d SMALLINT, e SMALLINT, f SMALLINT);
|
||||||
|
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||||
|
INSERT INTO t2(a, b, c) VALUES(99999, 99999, 99999);
|
||||||
|
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
|
||||||
|
INSERT INTO t2(d, e, f) VALUES(99999, 99999, 99999);
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
INSERT INTO t1 VALUES(99999, 99999, 99999);
|
||||||
|
|
||||||
|
CALL p1();
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'x' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'y' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'z' at row 1
|
||||||
|
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Warning 1264 Out of range value for column 'x' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'y' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'z' at row 1
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
CREATE TABLE t1(x SMALLINT, y SMALLINT, z SMALLINT);
|
||||||
|
CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT NOT NULL);
|
||||||
|
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO t2 VALUES(
|
||||||
|
CAST('111111 ' AS SIGNED),
|
||||||
|
CAST('222222 ' AS SIGNED),
|
||||||
|
NULL);
|
||||||
|
END|
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
INSERT INTO t1 VALUES(99999, 99999, 99999);
|
||||||
|
|
||||||
|
CALL p1();
|
||||||
|
ERROR 23000: Column 'c' cannot be null
|
||||||
|
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Warning 1264 Out of range value for column 'x' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'y' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'z' at row 1
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '111111 '
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '222222 '
|
||||||
|
Warning 1264 Out of range value for column 'b' at row 1
|
||||||
|
Error 1048 Column 'c' cannot be null
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
@ -44,7 +44,7 @@ ERROR 42000: SELECT command denied to user 'user1'@'localhost' for table 't1'
|
|||||||
create procedure db1_secret.dummy() begin end;
|
create procedure db1_secret.dummy() begin end;
|
||||||
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
||||||
drop procedure db1_secret.dummy;
|
drop procedure db1_secret.dummy;
|
||||||
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
ERROR 42000: alter routine command denied to user 'user1'@'localhost' for routine 'db1_secret.dummy'
|
||||||
drop procedure db1_secret.stamp;
|
drop procedure db1_secret.stamp;
|
||||||
ERROR 42000: alter routine command denied to user 'user1'@'localhost' for routine 'db1_secret.stamp'
|
ERROR 42000: alter routine command denied to user 'user1'@'localhost' for routine 'db1_secret.stamp'
|
||||||
drop function db1_secret.db;
|
drop function db1_secret.db;
|
||||||
@ -58,7 +58,7 @@ ERROR 42000: SELECT command denied to user ''@'localhost' for table 't1'
|
|||||||
create procedure db1_secret.dummy() begin end;
|
create procedure db1_secret.dummy() begin end;
|
||||||
ERROR 42000: Access denied for user ''@'%' to database 'db1_secret'
|
ERROR 42000: Access denied for user ''@'%' to database 'db1_secret'
|
||||||
drop procedure db1_secret.dummy;
|
drop procedure db1_secret.dummy;
|
||||||
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
ERROR 42000: alter routine command denied to user ''@'%' for routine 'db1_secret.dummy'
|
||||||
drop procedure db1_secret.stamp;
|
drop procedure db1_secret.stamp;
|
||||||
ERROR 42000: alter routine command denied to user ''@'%' for routine 'db1_secret.stamp'
|
ERROR 42000: alter routine command denied to user ''@'%' for routine 'db1_secret.stamp'
|
||||||
drop function db1_secret.db;
|
drop function db1_secret.db;
|
||||||
@ -567,3 +567,28 @@ DROP USER 'tester';
|
|||||||
DROP USER 'Tester';
|
DROP USER 'Tester';
|
||||||
DROP DATABASE B48872;
|
DROP DATABASE B48872;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
#
|
||||||
|
# Test for bug#57061 "User without privilege on routine can discover
|
||||||
|
# its existence."
|
||||||
|
#
|
||||||
|
drop database if exists mysqltest_db;
|
||||||
|
create database mysqltest_db;
|
||||||
|
# Create user with no privileges on mysqltest_db database.
|
||||||
|
create user bug57061_user@localhost;
|
||||||
|
create function mysqltest_db.f1() returns int return 0;
|
||||||
|
create procedure mysqltest_db.p1() begin end;
|
||||||
|
# Connect as user 'bug57061_user@localhost'
|
||||||
|
# Attempt to drop routine on which user doesn't have privileges
|
||||||
|
# should result in the same 'access denied' type of error whether
|
||||||
|
# routine exists or not.
|
||||||
|
drop function if exists mysqltest_db.f_does_not_exist;
|
||||||
|
ERROR 42000: alter routine command denied to user 'bug57061_user'@'localhost' for routine 'mysqltest_db.f_does_not_exist'
|
||||||
|
drop procedure if exists mysqltest_db.p_does_not_exist;
|
||||||
|
ERROR 42000: alter routine command denied to user 'bug57061_user'@'localhost' for routine 'mysqltest_db.p_does_not_exist'
|
||||||
|
drop function if exists mysqltest_db.f1;
|
||||||
|
ERROR 42000: alter routine command denied to user 'bug57061_user'@'localhost' for routine 'mysqltest_db.f1'
|
||||||
|
drop procedure if exists mysqltest_db.p1;
|
||||||
|
ERROR 42000: alter routine command denied to user 'bug57061_user'@'localhost' for routine 'mysqltest_db.p1'
|
||||||
|
# Connection 'default'.
|
||||||
|
drop user bug57061_user@localhost;
|
||||||
|
drop database mysqltest_db;
|
||||||
|
@ -585,3 +585,20 @@ UPDATE t1_aux SET f2 = 2 WHERE f1 = f1_two_inserts()|
|
|||||||
ERROR 23000: Column 'f2' cannot be null
|
ERROR 23000: Column 'f2' cannot be null
|
||||||
DROP TABLE t1_aux, t1_not_null|
|
DROP TABLE t1_aux, t1_not_null|
|
||||||
DROP FUNCTION f1_two_inserts|
|
DROP FUNCTION f1_two_inserts|
|
||||||
|
#
|
||||||
|
# Bug#49938: Failing assertion: inode or deadlock in fsp/fsp0fsp.c
|
||||||
|
#
|
||||||
|
DROP PROCEDURE IF EXISTS p1|
|
||||||
|
DROP TABLE IF EXISTS t1|
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=INNODB|
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
END|
|
||||||
|
LOCK TABLES t1 WRITE|
|
||||||
|
CALL p1()|
|
||||||
|
FLUSH TABLES;
|
||||||
|
UNLOCK TABLES|
|
||||||
|
CALL p1()|
|
||||||
|
DROP PROCEDURE p1|
|
||||||
|
DROP TABLE t1|
|
||||||
|
@ -151,9 +151,14 @@ CREATE TRIGGER t1_ad AFTER DELETE ON t1 FOR EACH ROW SET @b = 1;
|
|||||||
SET @a = 0;
|
SET @a = 0;
|
||||||
SET @b = 0;
|
SET @b = 0;
|
||||||
TRUNCATE t1;
|
TRUNCATE t1;
|
||||||
|
ERROR 42000: Cannot truncate a table referenced in a foreign key constraint (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `test`.`t1` (`a`))
|
||||||
SELECT @a, @b;
|
SELECT @a, @b;
|
||||||
@a @b
|
@a @b
|
||||||
0 0
|
0 0
|
||||||
|
DELETE FROM t1;
|
||||||
|
SELECT @a, @b;
|
||||||
|
@a @b
|
||||||
|
1 1
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
SELECT @a, @b;
|
SELECT @a, @b;
|
||||||
|
@ -1072,8 +1072,6 @@ SELECT @x;
|
|||||||
NULL
|
NULL
|
||||||
SET @x=2;
|
SET @x=2;
|
||||||
UPDATE t1 SET i1 = @x;
|
UPDATE t1 SET i1 = @x;
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
SELECT @x;
|
SELECT @x;
|
||||||
@x
|
@x
|
||||||
NULL
|
NULL
|
||||||
@ -1085,9 +1083,6 @@ SELECT @x;
|
|||||||
NULL
|
NULL
|
||||||
SET @x=4;
|
SET @x=4;
|
||||||
UPDATE t1 SET i1 = @x;
|
UPDATE t1 SET i1 = @x;
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
SELECT @x;
|
SELECT @x;
|
||||||
@x
|
@x
|
||||||
NULL
|
NULL
|
||||||
@ -1198,8 +1193,6 @@ Warnings:
|
|||||||
Warning 1365 Division by 0
|
Warning 1365 Division by 0
|
||||||
create trigger t1_bi before insert on t1 for each row set @a:=1/0|
|
create trigger t1_bi before insert on t1 for each row set @a:=1/0|
|
||||||
insert into t1 values(20, 20)|
|
insert into t1 values(20, 20)|
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
drop trigger t1_bi|
|
drop trigger t1_bi|
|
||||||
create trigger t1_bi before insert on t1 for each row
|
create trigger t1_bi before insert on t1 for each row
|
||||||
begin
|
begin
|
||||||
@ -1218,8 +1211,6 @@ set @a:=1/0;
|
|||||||
end|
|
end|
|
||||||
set @check=0, @t4_bi_called=0, @t4_bu_called=0|
|
set @check=0, @t4_bi_called=0, @t4_bu_called=0|
|
||||||
insert into t1 values(30, 30)|
|
insert into t1 values(30, 30)|
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
select @check, @t4_bi_called, @t4_bu_called|
|
select @check, @t4_bi_called, @t4_bu_called|
|
||||||
@check @t4_bi_called @t4_bu_called
|
@check @t4_bi_called @t4_bu_called
|
||||||
2 1 1
|
2 1 1
|
||||||
@ -2090,12 +2081,8 @@ SELECT 1 FROM t1 c WHERE
|
|||||||
END//
|
END//
|
||||||
SET @bug51650 = 1;
|
SET @bug51650 = 1;
|
||||||
INSERT IGNORE INTO t2 VALUES();
|
INSERT IGNORE INTO t2 VALUES();
|
||||||
Warnings:
|
|
||||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
|
||||||
INSERT IGNORE INTO t1 SET b = '777';
|
INSERT IGNORE INTO t1 SET b = '777';
|
||||||
INSERT IGNORE INTO t2 SET a = '111';
|
INSERT IGNORE INTO t2 SET a = '111';
|
||||||
Warnings:
|
|
||||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
|
||||||
SET @bug51650 = 1;
|
SET @bug51650 = 1;
|
||||||
INSERT IGNORE INTO t2 SET a = '777';
|
INSERT IGNORE INTO t2 SET a = '777';
|
||||||
DROP TRIGGER trg1;
|
DROP TRIGGER trg1;
|
||||||
@ -2177,8 +2164,6 @@ SELECT 'ab' INTO a;
|
|||||||
SELECT 'a' INTO a;
|
SELECT 'a' INTO a;
|
||||||
END|
|
END|
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
Warnings:
|
|
||||||
Warning 1265 Data truncated for column 'a' at row 1
|
|
||||||
DROP TRIGGER trg1;
|
DROP TRIGGER trg1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TRIGGER IF EXISTS trg1;
|
DROP TRIGGER IF EXISTS trg1;
|
||||||
@ -2196,20 +2181,12 @@ DECLARE trg2 CHAR;
|
|||||||
SELECT 'ab' INTO trg2;
|
SELECT 'ab' INTO trg2;
|
||||||
END|
|
END|
|
||||||
INSERT INTO t1 VALUES (0);
|
INSERT INTO t1 VALUES (0);
|
||||||
Warnings:
|
|
||||||
Warning 1265 Data truncated for column 'trg1' at row 1
|
|
||||||
Warning 1265 Data truncated for column 'trg2' at row 1
|
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
a
|
a
|
||||||
0
|
0
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
INSERT INTO t1 VALUES (1),(2);
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
Warnings:
|
|
||||||
Warning 1265 Data truncated for column 'trg1' at row 1
|
|
||||||
Warning 1265 Data truncated for column 'trg2' at row 1
|
|
||||||
Warning 1265 Data truncated for column 'trg1' at row 1
|
|
||||||
Warning 1265 Data truncated for column 'trg2' at row 1
|
|
||||||
DROP TRIGGER trg1;
|
DROP TRIGGER trg1;
|
||||||
DROP TRIGGER trg2;
|
DROP TRIGGER trg2;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -680,5 +680,17 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t2 const PRIMARY PRIMARY 8 const 1 Using index
|
1 SIMPLE t2 const PRIMARY PRIMARY 8 const 1 Using index
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
#
|
#
|
||||||
|
# Bug#57095: Wrongly chosen expression cache type led to a wrong
|
||||||
|
# result.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (`b` datetime );
|
||||||
|
INSERT INTO t1 VALUES ('2010-01-01 00:00:00'), ('2010-01-01 00:00:00');
|
||||||
|
SELECT * FROM t1 WHERE b <= coalesce(NULL, now());
|
||||||
|
b
|
||||||
|
2010-01-01 00:00:00
|
||||||
|
2010-01-01 00:00:00
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user