mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Merge mysql-5.5-bugteam -> mysql-5.5-innodb
This commit is contained in:
commit
afe6ec6649
175 changed files with 4142 additions and 642 deletions
|
@ -111,7 +111,7 @@ else
|
|||
# C++ warnings
|
||||
cxx_warnings="$warnings -Wno-unused-parameter"
|
||||
# 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"
|
||||
fi
|
||||
|
||||
|
|
|
@ -61,6 +61,13 @@ SET(BUILDTYPE_DOCSTRING
|
|||
|
||||
IF(WITH_DEBUG)
|
||||
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)
|
||||
ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
|
||||
IF(CUSTOM_C_FLAGS)
|
||||
|
|
|
@ -3739,7 +3739,8 @@ print_tab_data(MYSQL_RES *result)
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
|
@ -3798,7 +3799,8 @@ com_notee(String *buffer __attribute__((unused)),
|
|||
|
||||
#ifdef USE_POPEN
|
||||
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;
|
||||
|
||||
|
@ -3923,7 +3925,8 @@ com_rehash(String *buffer __attribute__((unused)),
|
|||
|
||||
#ifdef USE_POPEN
|
||||
static int
|
||||
com_shell(String *buffer, char *line __attribute__((unused)))
|
||||
com_shell(String *buffer __attribute__((unused)),
|
||||
char *line __attribute__((unused)))
|
||||
{
|
||||
char *shell_cmd;
|
||||
|
||||
|
@ -4015,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;
|
||||
LINE_BUFFER *line_buff;
|
||||
|
@ -4929,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, ' ');
|
||||
prompt_counter = 0;
|
||||
|
|
|
@ -5398,8 +5398,13 @@ void do_connect(struct st_command *command)
|
|||
opt_charsets_dir);
|
||||
|
||||
#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,
|
||||
opt_ssl_capath, opt_ssl_cipher);
|
||||
#if MYSQL_VERSION_ID >= 50000
|
||||
|
@ -5408,36 +5413,37 @@ void do_connect(struct st_command *command)
|
|||
mysql_options(&con_slot->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
||||
&opt_ssl_verify_server_cert);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __WIN__
|
||||
if (con_pipe)
|
||||
{
|
||||
#ifdef __WIN__
|
||||
opt_protocol= MYSQL_PROTOCOL_PIPE;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (opt_protocol)
|
||||
mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
||||
|
||||
#ifdef HAVE_SMEM
|
||||
if (con_shm)
|
||||
{
|
||||
#ifdef HAVE_SMEM
|
||||
uint protocol= MYSQL_PROTOCOL_MEMORY;
|
||||
if (!ds_shm.length)
|
||||
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_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,
|
||||
shared_memory_base_name);
|
||||
shared_memory_base_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Use default db name */
|
||||
if (ds_database.length == 0)
|
||||
dynstr_set(&ds_database, opt_db);
|
||||
|
@ -5877,7 +5883,7 @@ int read_line(char *buf, int size)
|
|||
/* Could be a multibyte character */
|
||||
/* This code is based on the code in "sql_load.cc" */
|
||||
#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 */
|
||||
/* completed before we pass buf_end */
|
||||
if ((charlen > 1) && (p + charlen) <= buf_end)
|
||||
|
@ -5889,16 +5895,16 @@ int read_line(char *buf, int size)
|
|||
|
||||
for (i= 1; i < charlen; i++)
|
||||
{
|
||||
c= my_getc(cur_file->file);
|
||||
if (feof(cur_file->file))
|
||||
goto found_eof;
|
||||
c= my_getc(cur_file->file);
|
||||
*p++ = c;
|
||||
}
|
||||
if (! my_ismbchar(charset_info, mb_start, p))
|
||||
{
|
||||
/* It was not a multiline char, push back the characters */
|
||||
/* We leave first 'c', i.e. pretend it was a normal char */
|
||||
while (p > mb_start)
|
||||
while (p-1 > mb_start)
|
||||
my_ungetc(*--p);
|
||||
}
|
||||
}
|
||||
|
@ -9959,6 +9965,7 @@ void free_pointer_array(POINTER_ARRAY *pa)
|
|||
void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
||||
const char *val, int len)
|
||||
{
|
||||
char lower[512];
|
||||
#ifdef __WIN__
|
||||
fix_win_paths(val, len);
|
||||
#endif
|
||||
|
@ -9966,7 +9973,6 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
|||
if (display_result_lower)
|
||||
{
|
||||
/* Convert to lower case, and do this first */
|
||||
char lower[512];
|
||||
char *c= lower;
|
||||
for (const char *v= val; *v; v++)
|
||||
*c++= my_tolower(charset_info, *v);
|
||||
|
|
|
@ -69,9 +69,13 @@ public:
|
|||
}
|
||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
||||
{ return (void*) alloc_root(mem_root, (uint) 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)
|
||||
static void operator delete(void *ptr_arg, size_t size)
|
||||
{
|
||||
(void) ptr_arg;
|
||||
(void) size;
|
||||
TRASH(ptr_arg, size);
|
||||
}
|
||||
static void operator delete(void *, MEM_ROOT *)
|
||||
{ /* never called */ }
|
||||
~String() { free(); }
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ ENDFOREACH()
|
|||
|
||||
# Ensure we have clean build for shared libraries
|
||||
# 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
|
||||
SET(_FILE_OFFSET_BITS 64)
|
||||
|
|
|
@ -136,7 +136,7 @@ ed_delete_prev_word(EditLine *el, int c __attribute__((__unused__)))
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
ed_delete_next_char(EditLine *el, int c)
|
||||
ed_delete_next_char(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
#ifdef notdef /* XXX */
|
||||
#define EL el->el_line
|
||||
|
@ -431,7 +431,8 @@ ed_argument_digit(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
ed_unassigned(EditLine *el, int c __attribute__((__unused__)))
|
||||
ed_unassigned(EditLine *el __attribute__((__unused__)),
|
||||
int c __attribute__((__unused__)))
|
||||
{
|
||||
|
||||
return (CC_ERROR);
|
||||
|
|
|
@ -202,7 +202,7 @@ _move_history(int op)
|
|||
*/
|
||||
static int
|
||||
/*ARGSUSED*/
|
||||
_getc_function(EditLine *el, char *c)
|
||||
_getc_function(EditLine *el __attribute__((__unused__)), char *c)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -1613,7 +1613,8 @@ rl_insert(int count, int c)
|
|||
|
||||
/*ARGSUSED*/
|
||||
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.
|
||||
|
@ -1623,7 +1624,7 @@ rl_newline(int count, int c)
|
|||
|
||||
/*ARGSUSED*/
|
||||
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)
|
||||
return CC_ERROR;
|
||||
|
@ -1718,7 +1719,7 @@ rl_get_previous_history(int count, int key)
|
|||
|
||||
void
|
||||
/*ARGSUSED*/
|
||||
rl_prep_terminal(int meta_flag)
|
||||
rl_prep_terminal(int meta_flag __attribute__((__unused__)))
|
||||
{
|
||||
el_set(e, EL_PREP_TERM, 1);
|
||||
}
|
||||
|
@ -1922,7 +1923,8 @@ _rl_qsort_string_compare(char **s1, char **s2)
|
|||
|
||||
int
|
||||
/*ARGSUSED*/
|
||||
rl_kill_text(int from, int to)
|
||||
rl_kill_text(int from __attribute__((__unused__)),
|
||||
int to __attribute__((__unused__)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -1941,20 +1943,25 @@ rl_get_keymap(void)
|
|||
|
||||
void
|
||||
/*ARGSUSED*/
|
||||
rl_set_keymap(Keymap k)
|
||||
rl_set_keymap(Keymap k __attribute__((__unused__)))
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
/*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;
|
||||
}
|
||||
|
||||
int
|
||||
/*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;
|
||||
}
|
||||
|
|
|
@ -145,7 +145,7 @@ vi_paste_prev(EditLine *el, int c __attribute__((__unused__)))
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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)
|
||||
|
@ -195,7 +195,7 @@ vi_prev_word(EditLine *el, int c __attribute__((__unused__)))
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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)
|
||||
|
@ -462,7 +462,7 @@ vi_delete_meta(EditLine *el, int c __attribute__((__unused__)))
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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)
|
||||
|
@ -797,7 +797,7 @@ vi_repeat_prev_char(EditLine *el, int c __attribute__((__unused__)))
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_match(EditLine *el, int c)
|
||||
vi_match(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
const char match_chars[] = "()[]{}";
|
||||
char *cp;
|
||||
|
@ -844,7 +844,7 @@ vi_match(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_undo_line(EditLine *el, int c)
|
||||
vi_undo_line(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
|
||||
cv_undo(el);
|
||||
|
@ -858,7 +858,7 @@ vi_undo_line(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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;
|
||||
|
@ -872,7 +872,7 @@ vi_to_column(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_yank_end(EditLine *el, int c)
|
||||
vi_yank_end(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
|
||||
cv_yank(el, el->el_line.cursor,
|
||||
|
@ -886,7 +886,7 @@ vi_yank_end(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_yank(EditLine *el, int c)
|
||||
vi_yank(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
|
||||
return cv_action(el, YANK);
|
||||
|
@ -898,7 +898,7 @@ vi_yank(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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;
|
||||
|
@ -919,7 +919,8 @@ extern char *get_alias_text(const char *) __weak_reference(get_alias_text);
|
|||
#endif
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_alias(EditLine *el, int c)
|
||||
vi_alias(EditLine *el __attribute__((__unused__)),
|
||||
int c __attribute__((__unused__)))
|
||||
{
|
||||
#if defined(__weak_reference) && !defined(__FreeBSD__)
|
||||
char alias_name[3];
|
||||
|
@ -949,7 +950,7 @@ vi_alias(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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;
|
||||
el_action_t rval;
|
||||
|
@ -994,7 +995,7 @@ vi_to_history_line(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_histedit(EditLine *el, int c)
|
||||
vi_histedit(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
int fd;
|
||||
pid_t pid;
|
||||
|
@ -1050,7 +1051,7 @@ vi_histedit(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*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 *wep, *wsp;
|
||||
|
@ -1099,7 +1100,7 @@ vi_history_word(EditLine *el, int c)
|
|||
*/
|
||||
protected el_action_t
|
||||
/*ARGSUSED*/
|
||||
vi_redo(EditLine *el, int c)
|
||||
vi_redo(EditLine *el, int c __attribute__((__unused__)))
|
||||
{
|
||||
c_redo_t *r = &el->el_chared.c_redo;
|
||||
|
||||
|
|
|
@ -1839,8 +1839,11 @@ rl_username_completion_function (text, state)
|
|||
#else /* !__WIN32__ && !__OPENNT) */
|
||||
static char *username = (char *)NULL;
|
||||
static struct passwd *entry;
|
||||
static int namelen, first_char, first_char_loc;
|
||||
static int first_char, first_char_loc;
|
||||
char *value;
|
||||
#if defined (HAVE_GETPWENT)
|
||||
static int namelen;
|
||||
#endif
|
||||
|
||||
if (state == 0)
|
||||
{
|
||||
|
@ -1850,7 +1853,9 @@ rl_username_completion_function (text, state)
|
|||
first_char_loc = first_char == '~';
|
||||
|
||||
username = savestring (&text[first_char_loc]);
|
||||
#if defined (HAVE_GETPWENT)
|
||||
namelen = strlen (username);
|
||||
#endif
|
||||
setpwent ();
|
||||
}
|
||||
|
||||
|
|
|
@ -693,7 +693,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
|
|||
case 's':
|
||||
{
|
||||
char *new_event;
|
||||
int delimiter, failed, si, l_temp, ws, we;
|
||||
int delimiter, failed, si, l_temp, we;
|
||||
|
||||
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++)
|
||||
;
|
||||
ws = 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))
|
||||
{
|
||||
bytes_written= write (file, bp, chars_read - (bp - buffer));
|
||||
(void) bytes_written;
|
||||
|
||||
#if defined (__BEOS__)
|
||||
/* BeOS ignores O_TRUNC. */
|
||||
|
|
|
@ -617,7 +617,7 @@ rl_search_history (direction, invoking_key)
|
|||
int direction, invoking_key __attribute__((unused));
|
||||
{
|
||||
_rl_search_cxt *cxt; /* local for now, but saved globally */
|
||||
int c, r;
|
||||
int r;
|
||||
|
||||
RL_SETSTATE(RL_STATE_ISEARCH);
|
||||
cxt = _rl_isearch_init (direction);
|
||||
|
@ -632,7 +632,7 @@ rl_search_history (direction, invoking_key)
|
|||
r = -1;
|
||||
for (;;)
|
||||
{
|
||||
c = _rl_search_getchar (cxt);
|
||||
_rl_search_getchar (cxt);
|
||||
/* We might want to handle EOF here (c == 0) */
|
||||
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
||||
if (r <= 0)
|
||||
|
@ -655,9 +655,9 @@ int
|
|||
_rl_isearch_callback (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 */
|
||||
r = _rl_isearch_dispatch (cxt, cxt->lastc);
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ rl_insert_close (count, invoking_key)
|
|||
else
|
||||
{
|
||||
#if defined (HAVE_SELECT)
|
||||
int orig_point, match_point, ready;
|
||||
int orig_point, match_point;
|
||||
struct timeval timer;
|
||||
fd_set readfds;
|
||||
|
||||
|
@ -136,7 +136,7 @@ rl_insert_close (count, invoking_key)
|
|||
orig_point = rl_point;
|
||||
rl_point = match_point;
|
||||
(*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;
|
||||
#else /* !HAVE_SELECT */
|
||||
_rl_insert_char (count, invoking_key);
|
||||
|
|
|
@ -447,11 +447,10 @@ readline_internal_char ()
|
|||
readline_internal_charloop ()
|
||||
#endif
|
||||
{
|
||||
static int lastc, eof_found;
|
||||
static int lastc;
|
||||
int c, code, lk;
|
||||
|
||||
lastc = -1;
|
||||
eof_found = 0;
|
||||
|
||||
#if !defined (READLINE_CALLBACKS)
|
||||
while (rl_done == 0)
|
||||
|
|
|
@ -268,7 +268,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||
|
||||
#if !defined (__DJGPP__)
|
||||
if (_rl_screenwidth <= 0 && term_string_buffer)
|
||||
_rl_screenwidth = tgetnum ("co");
|
||||
_rl_screenwidth = tgetnum ((char *)"co");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -284,7 +284,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||
|
||||
#if !defined (__DJGPP__)
|
||||
if (_rl_screenheight <= 0 && term_string_buffer)
|
||||
_rl_screenheight = tgetnum ("li");
|
||||
_rl_screenheight = tgetnum ((char *)"li");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -516,7 +516,7 @@ _rl_init_terminal_io (terminal_name)
|
|||
if (!_rl_term_cr)
|
||||
_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
|
||||
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
|
||||
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)
|
||||
_rl_term_mm = _rl_term_mo = (char *)NULL;
|
||||
|
||||
|
|
|
@ -811,11 +811,10 @@ _rl_overwrite_char (count, c)
|
|||
int i;
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
char mbkey[MB_LEN_MAX];
|
||||
int k;
|
||||
|
||||
/* Read an entire multibyte character sequence to insert COUNT times. */
|
||||
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
|
||||
|
||||
rl_begin_undo_group ();
|
||||
|
|
|
@ -8,7 +8,8 @@ AC_DEFUN([MY_MAINTAINER_MODE], [
|
|||
[AS_HELP_STRING([--enable-mysql-maintainer-mode],
|
||||
[Enable a MySQL maintainer-specific development environment])],
|
||||
[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])
|
||||
])
|
||||
|
||||
|
|
|
@ -299,7 +299,8 @@ CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN)
|
|||
CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD)
|
||||
CHECK_FUNCTION_EXISTS (fcntl HAVE_FCNTL)
|
||||
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 (fpsetmask HAVE_FPSETMASK)
|
||||
CHECK_FUNCTION_EXISTS (fseeko HAVE_FSEEKO)
|
||||
|
|
18
configure.in
18
configure.in
|
@ -118,6 +118,13 @@ AC_SUBST(SHARED_LIB_MAJOR_VERSION)
|
|||
AC_SUBST(SHARED_LIB_VERSION)
|
||||
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.
|
||||
MY_MAINTAINER_MODE
|
||||
|
||||
|
@ -1689,10 +1696,6 @@ then
|
|||
DEBUG_OPTIMIZE_CXX=""
|
||||
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"
|
||||
then
|
||||
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||
|
@ -2117,6 +2120,13 @@ MYSQL_TYPE_QSORT
|
|||
AC_FUNC_UTIME_NULL
|
||||
AC_FUNC_VPRINTF
|
||||
|
||||
AC_CHECK_DECLS([fdatasync],,,
|
||||
[
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
])
|
||||
|
||||
AC_CHECK_FUNCS(alarm bfill bmove bsearch bzero \
|
||||
chsize cuserid fchmod fcntl \
|
||||
fdatasync fesetround finite fpresetsticky fpsetmask fsync ftruncate \
|
||||
|
|
|
@ -905,6 +905,7 @@ void _db_set_init_(const char *control)
|
|||
CODE_STATE tmp_cs;
|
||||
bzero((uchar*) &tmp_cs, sizeof(tmp_cs));
|
||||
tmp_cs.stack= &init_settings;
|
||||
tmp_cs.process= db_process ? db_process : "dbug";
|
||||
DbugParse(&tmp_cs, control);
|
||||
}
|
||||
|
||||
|
@ -2370,7 +2371,7 @@ static void DbugFlush(CODE_STATE *cs)
|
|||
|
||||
void _db_flush_()
|
||||
{
|
||||
CODE_STATE *cs;
|
||||
CODE_STATE *cs= NULL;
|
||||
get_code_state_or_return;
|
||||
(void) fflush(cs->stack->out_file);
|
||||
}
|
||||
|
|
|
@ -32,8 +32,15 @@
|
|||
|
||||
/* GNU C/C++ */
|
||||
#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... */
|
||||
# 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++ */
|
||||
#elif defined _MSC_VER
|
||||
|
@ -67,7 +74,7 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
Generic compiler-dependent features.
|
||||
Generic (compiler-independent) features.
|
||||
*/
|
||||
#ifndef MY_ALIGNOF
|
||||
# ifdef __cplusplus
|
||||
|
@ -79,6 +86,10 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef MY_ASSERT_UNREACHABLE
|
||||
# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
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
|
||||
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
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#ifndef _dbug_h
|
||||
#define _dbug_h
|
||||
#ifndef MY_DBUG_INCLUDED
|
||||
#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
|
||||
extern "C" {
|
||||
|
@ -111,6 +121,20 @@ extern const char* _db_get_func_(void);
|
|||
#define DBUG_CRASH_VOID_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 */
|
||||
|
||||
#define DBUG_ENTER(a1)
|
||||
|
@ -139,10 +163,11 @@ extern const char* _db_get_func_(void);
|
|||
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||
#define DEBUGGER_OFF 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_RETURN(val) do { return(val); } while(0)
|
||||
#define DBUG_CRASH_VOID_RETURN do { return; } while(0)
|
||||
#define DBUG_SUICIDE() do { } while(0)
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -164,4 +189,5 @@ void debug_sync_point(const char* lock_name, uint lock_timeout);
|
|||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* MY_DBUG_INCLUDED */
|
||||
|
|
|
@ -39,6 +39,13 @@ C_MODE_START
|
|||
#define GET_ASK_ADDR 128
|
||||
#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 };
|
||||
|
||||
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,
|
||||
uint line);
|
||||
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_end(FILE *file);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ INSERT INTO t1 VALUES (1);
|
|||
source include/show_binlog_events.inc;
|
||||
eval $statement;
|
||||
source include/show_binlog_events.inc;
|
||||
if (`select '$cleanup' != ''`) {
|
||||
if ($cleanup) {
|
||||
eval $cleanup;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ INSERT INTO t1 VALUES (3);
|
|||
source include/show_binlog_events.inc;
|
||||
COMMIT;
|
||||
source include/show_binlog_events.inc;
|
||||
if (`select '$cleanup' != ''`) {
|
||||
if ($cleanup) {
|
||||
eval $cleanup;
|
||||
}
|
||||
|
||||
|
|
|
@ -285,10 +285,10 @@ if (`SELECT $CRC_ARG_type = 7`) {
|
|||
}
|
||||
|
||||
######## execute! ########
|
||||
if (`SELECT '$CRC_RET_stmt_sidef' != ''`) {
|
||||
if ($CRC_RET_stmt_sidef) {
|
||||
--echo
|
||||
--echo Invoking $CRC_RET_desc.
|
||||
if (`SELECT '$CRC_create' != ''`) {
|
||||
if ($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
|
||||
# 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.
|
||||
--disable_result_log
|
||||
--eval $CRC_RET_sel_retval
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#
|
||||
|
||||
connection slave;
|
||||
if (`SELECT $debug_sync_action = ''`)
|
||||
if (!$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.
|
||||
let $lower_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,
|
||||
#this will change the result of rpl_loaddata test case. so $lock_option
|
||||
|
|
|
@ -35,10 +35,23 @@ connection master1;
|
|||
send CALL test.p1();
|
||||
|
||||
connection master;
|
||||
# To make sure tha the call on master1 arrived at the get_lock
|
||||
sleep 1;
|
||||
# Make sure that the call on master1 arrived at the get_lock.
|
||||
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();
|
||||
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;
|
||||
#show binlog events;
|
||||
--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;
|
||||
CALL test.p2();
|
||||
CALL test.p1();
|
||||
SELECT release_lock("test");
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
|
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.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
if ($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;
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
if ($restore_table)
|
||||
{
|
||||
--eval truncate table $restore_table;
|
||||
--eval insert into $restore_table select * from t_backup;
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
# Reset DEBUG_SYNC facility for safety.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
if ($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;
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
if ($restore_table)
|
||||
{
|
||||
--eval truncate table $restore_table;
|
||||
--eval insert into $restore_table select * from t_backup;
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
# # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position
|
||||
# # in $relay_log_file: $relay_log_pos.
|
||||
|
||||
if (`SELECT '$relay_log_file' = ''`)
|
||||
if (!$relay_log_file)
|
||||
{
|
||||
--die 'variable $relay_log_file is null'
|
||||
}
|
||||
|
||||
if (`SELECT '$master_log_pos' = ''`)
|
||||
if (!$master_log_pos)
|
||||
{
|
||||
--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
|
|
@ -44,7 +44,7 @@ connection master;
|
|||
# kill the query that is waiting
|
||||
eval kill query $connection_id;
|
||||
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
if ($debug_lock)
|
||||
{
|
||||
# release the lock to allow binlog continue
|
||||
eval SELECT RELEASE_LOCK($debug_lock);
|
||||
|
@ -57,7 +57,7 @@ reap;
|
|||
|
||||
connection master;
|
||||
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
if ($debug_lock)
|
||||
{
|
||||
# get lock again to make the next query wait
|
||||
eval SELECT GET_LOCK($debug_lock, 10);
|
||||
|
|
|
@ -25,7 +25,7 @@ source include/kill_query.inc;
|
|||
connection master;
|
||||
disable_query_log;
|
||||
disable_result_log;
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
if ($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
|
||||
connection master;
|
||||
disable_query_log; disable_result_log; if (`SELECT '$debug_lock' !=
|
||||
''`) { eval SELECT GET_LOCK($debug_lock, 10); } enable_result_log;
|
||||
enable_query_log;
|
||||
disable_query_log; disable_result_log;
|
||||
if ($debug_lock) { eval SELECT GET_LOCK($debug_lock, 10); }
|
||||
enable_result_log; enable_query_log;
|
||||
|
||||
connection $connection_name;
|
||||
|
|
|
@ -56,7 +56,7 @@ if (`SELECT "$_sql_running" = "Yes" OR "$_io_running" = "Yes"`) {
|
|||
# Read server variables.
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
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 server option --relay-log=FILE.
|
||||
}
|
||||
|
|
|
@ -18,13 +18,15 @@ if ($is_relay_log)
|
|||
--let $_statement=show relaylog events
|
||||
}
|
||||
|
||||
if (`SELECT '$binlog_file' <> ''`)
|
||||
if ($binlog_file)
|
||||
{
|
||||
--let $_statement= $_statement in '$binlog_file'
|
||||
}
|
||||
|
||||
--let $_statement= $_statement from $binlog_start
|
||||
|
||||
# Cannot use if($binlog_limit) since the variable may begin with a 0
|
||||
|
||||
if (`SELECT '$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';
|
||||
|
||||
let $_master_con= $master_connection;
|
||||
if (`SELECT '$_master_con' = ''`)
|
||||
if (!$_master_con)
|
||||
{
|
||||
if (`SELECT '$_con' = 'slave'`)
|
||||
{
|
||||
let $_master_con= master;
|
||||
}
|
||||
if (`SELECT '$_master_con' = ''`)
|
||||
if (!$_master_con)
|
||||
{
|
||||
--echo Unable to determine master connection. No debug info printed for master.
|
||||
--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);
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
# $master_connection
|
||||
# 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
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ if (!$_slave_timeout_counter)
|
|||
let $slave_tcnt= $_slave_timeout_counter;
|
||||
|
||||
let $_slave_param_comparison= $slave_param_comparison;
|
||||
if (`SELECT '$_slave_param_comparison' = ''`)
|
||||
if (!$_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)
|
||||
{
|
||||
--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
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
# $master_connection
|
||||
# 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
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ if (!$_status_timeout_counter)
|
|||
}
|
||||
|
||||
let $_status_var_comparsion= $status_var_comparsion;
|
||||
if (`SELECT '$_status_var_comparsion' = ''`)
|
||||
if (!$_status_var_comparsion)
|
||||
{
|
||||
let $_status_var_comparsion= =;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,13 @@ sub mtr_exe_maybe_exists(@);
|
|||
sub mtr_milli_sleep($);
|
||||
sub start_timer($);
|
||||
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]; }
|
||||
|
||||
# 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;
|
||||
|
|
|
@ -116,18 +116,20 @@ sub sleep_until_file_created ($$$) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
my $seconds= ($loop * $sleeptime) / 1000;
|
||||
|
||||
# Check if it died after the fork() was successful
|
||||
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;
|
||||
}
|
||||
|
||||
mtr_debug("Sleep $sleeptime milliseconds waiting for $pidfile");
|
||||
|
||||
# Print extra message every 60 seconds
|
||||
my $seconds= ($loop * $sleeptime) / 1000;
|
||||
if ( $seconds > 1 and int($seconds * 10) % 600 == 0 )
|
||||
if ( $seconds > 1 && int($seconds * 10) % 600 == 0 && $seconds < $timeout )
|
||||
{
|
||||
my $left= $timeout - $seconds;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -131,6 +131,9 @@ my $opt_start_dirty;
|
|||
my $opt_start_exit;
|
||||
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_plugin; # the path to the authentication test plugin
|
||||
|
||||
|
@ -198,6 +201,7 @@ sub using_extern { return (keys %opts_extern > 0);};
|
|||
our $opt_fast= 0;
|
||||
our $opt_force;
|
||||
our $opt_mem= $ENV{'MTR_MEM'};
|
||||
our $opt_clean_vardir= $ENV{'MTR_CLEAN_VARDIR'};
|
||||
|
||||
our $opt_gcov;
|
||||
our $opt_gcov_exe= "gcov";
|
||||
|
@ -238,6 +242,7 @@ my $opt_skip_core;
|
|||
our $opt_check_testcases= 1;
|
||||
my $opt_mark_progress;
|
||||
my $opt_max_connections;
|
||||
our $opt_report_times= 0;
|
||||
|
||||
my $opt_sleep;
|
||||
|
||||
|
@ -351,8 +356,11 @@ sub main {
|
|||
}
|
||||
}
|
||||
|
||||
init_timers();
|
||||
|
||||
mtr_report("Collecting tests...");
|
||||
my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list);
|
||||
mark_time_used('collect');
|
||||
|
||||
if ( $opt_report_features ) {
|
||||
# Put "report features" as the first test to run
|
||||
|
@ -421,6 +429,7 @@ sub main {
|
|||
$opt_tmpdir= "$opt_tmpdir/$child_num";
|
||||
}
|
||||
|
||||
init_timers();
|
||||
run_worker($server_port, $child_num);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -433,6 +442,8 @@ sub main {
|
|||
mtr_print_thick_line();
|
||||
mtr_print_header();
|
||||
|
||||
mark_time_used('init');
|
||||
|
||||
my $completed= run_test_server($server, $tests, $opt_parallel);
|
||||
|
||||
exit(0) if $opt_start_exit;
|
||||
|
@ -478,8 +489,12 @@ sub main {
|
|||
$opt_gcov_msg, $opt_gcov_err);
|
||||
}
|
||||
|
||||
print_total_times($opt_parallel) if $opt_report_times;
|
||||
|
||||
mtr_report_stats("Completed", $completed);
|
||||
|
||||
remove_vardir_subs() if $opt_clean_vardir;
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
@ -610,13 +625,15 @@ sub run_test_server ($$$) {
|
|||
if ($test_has_failed and $retries <= $opt_retry){
|
||||
# Test should be run one more time unless it has failed
|
||||
# too many times already
|
||||
my $tname= $result->{name};
|
||||
my $failures= $result->{failures};
|
||||
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");
|
||||
}
|
||||
else {
|
||||
mtr_report("\nRetrying test, attempt($retries/$opt_retry)...\n");
|
||||
mtr_report("\nRetrying test $tname, ".
|
||||
"attempt($retries/$opt_retry)...\n");
|
||||
delete($result->{result});
|
||||
$result->{retries}= $retries+1;
|
||||
$result->write_test($sock, 'TESTCASE');
|
||||
|
@ -652,6 +669,9 @@ sub run_test_server ($$$) {
|
|||
elsif ($line eq 'START'){
|
||||
; # Send first test
|
||||
}
|
||||
elsif ($line =~ /^SPENT/) {
|
||||
add_total_times($line);
|
||||
}
|
||||
else {
|
||||
mtr_error("Unknown response: '$line' from client");
|
||||
}
|
||||
|
@ -783,7 +803,9 @@ sub run_worker ($) {
|
|||
# Ask server for first test
|
||||
print $server "START\n";
|
||||
|
||||
while(my $line= <$server>){
|
||||
mark_time_used('init');
|
||||
|
||||
while (my $line= <$server>){
|
||||
chomp($line);
|
||||
if ($line eq 'TESTCASE'){
|
||||
my $test= My::Test::read_test($server);
|
||||
|
@ -801,16 +823,20 @@ sub run_worker ($) {
|
|||
# Send it back, now with results set
|
||||
#$test->print_test();
|
||||
$test->write_test($server, 'TESTRESULT');
|
||||
mark_time_used('restart');
|
||||
}
|
||||
elsif ($line eq 'BYE'){
|
||||
mtr_report("Server said BYE");
|
||||
stop_all_servers($opt_shutdown_timeout);
|
||||
mark_time_used('restart');
|
||||
if ($opt_valgrind_mysqld) {
|
||||
valgrind_exit_reports();
|
||||
}
|
||||
if ( $opt_gprof ) {
|
||||
gprof_collect (find_mysqld($basedir), keys %gprof_dirs);
|
||||
}
|
||||
mark_time_used('init');
|
||||
print_times_used($server, $thread_num);
|
||||
exit(0);
|
||||
}
|
||||
else {
|
||||
|
@ -951,6 +977,7 @@ sub command_line_setup {
|
|||
'tmpdir=s' => \$opt_tmpdir,
|
||||
'vardir=s' => \$opt_vardir,
|
||||
'mem' => \$opt_mem,
|
||||
'clean-vardir' => \$opt_clean_vardir,
|
||||
'client-bindir=s' => \$path_client_bindir,
|
||||
'client-libdir=s' => \$path_client_libdir,
|
||||
|
||||
|
@ -983,6 +1010,7 @@ sub command_line_setup {
|
|||
'timediff' => \&report_option,
|
||||
'max-connections=i' => \$opt_max_connections,
|
||||
'default-myisam!' => \&collect_option,
|
||||
'report-times' => \$opt_report_times,
|
||||
|
||||
'help|h' => \$opt_usage,
|
||||
'list-options' => \$opt_list_options,
|
||||
|
@ -1062,14 +1090,20 @@ sub command_line_setup {
|
|||
"$basedir/sql/share/charsets",
|
||||
"$basedir/share/charsets");
|
||||
|
||||
# Look for client test plugin
|
||||
# Look for auth test plugins
|
||||
if (IS_WINDOWS)
|
||||
{
|
||||
$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
|
||||
{
|
||||
$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=
|
||||
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_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
|
||||
{
|
||||
$ENV{'PLUGIN_AUTH'}= "";
|
||||
$ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir=";
|
||||
$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
|
||||
|
@ -2285,11 +2331,7 @@ sub remove_stale_vardir () {
|
|||
mtr_error("The destination for symlink $opt_vardir does not exist")
|
||||
if ! -d readlink($opt_vardir);
|
||||
|
||||
foreach my $bin ( glob("$opt_vardir/*") )
|
||||
{
|
||||
mtr_verbose("Removing bin $bin");
|
||||
rmtree($bin);
|
||||
}
|
||||
remove_vardir_subs();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -3207,6 +3249,7 @@ sub check_testcase($$)
|
|||
|
||||
if ( keys(%started) == 0){
|
||||
# All checks completed
|
||||
mark_time_used('check');
|
||||
return 0;
|
||||
}
|
||||
# Wait for next process to exit
|
||||
|
@ -3222,7 +3265,8 @@ sub check_testcase($$)
|
|||
"\nMTR's internal check of the test case '$tname' failed.
|
||||
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
|
||||
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
|
||||
test case was executed:\n";
|
||||
$tinfo->{check}.= $report;
|
||||
|
@ -3264,6 +3308,11 @@ test case was executed:\n";
|
|||
# Kill any check processes still running
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -3573,6 +3622,7 @@ sub run_testcase ($) {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
mark_time_used('restart');
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# If --start or --start-dirty given, stop here to let user manually
|
||||
|
@ -3625,6 +3675,8 @@ sub run_testcase ($) {
|
|||
|
||||
do_before_run_mysqltest($tinfo);
|
||||
|
||||
mark_time_used('init');
|
||||
|
||||
if ( $opt_check_testcases and check_testcase($tinfo, "before") ){
|
||||
# Failed to record state of server or server crashed
|
||||
report_failure_and_restart($tinfo);
|
||||
|
@ -3671,6 +3723,7 @@ sub run_testcase ($) {
|
|||
}
|
||||
mtr_verbose("Got $proc");
|
||||
|
||||
mark_time_used('test');
|
||||
# ----------------------------------------------------
|
||||
# Was it the test program that exited
|
||||
# ----------------------------------------------------
|
||||
|
@ -3897,7 +3950,9 @@ sub get_log_from_proc ($$) {
|
|||
foreach my $mysqld (mysqlds()) {
|
||||
if ($mysqld->{proc} eq $proc) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -4074,6 +4129,7 @@ sub check_warnings ($) {
|
|||
|
||||
if ( keys(%started) == 0){
|
||||
# All checks completed
|
||||
mark_time_used('ch-warn');
|
||||
return $result;
|
||||
}
|
||||
# Wait for next process to exit
|
||||
|
@ -4106,6 +4162,7 @@ sub check_warnings ($) {
|
|||
# Kill any check processes still running
|
||||
map($_->kill(), values(%started));
|
||||
|
||||
mark_time_used('ch-warn');
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
@ -5069,6 +5126,8 @@ sub start_mysqltest ($) {
|
|||
my $exe= $exe_mysqltest;
|
||||
my $args;
|
||||
|
||||
mark_time_used('init');
|
||||
|
||||
mtr_init_args(\$args);
|
||||
|
||||
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||
|
@ -5550,6 +5609,8 @@ Options to control directories to use
|
|||
for tmpfs (/dev/shm)
|
||||
The option can also be set using environment
|
||||
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-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
|
||||
tests. This is needed after switching default storage
|
||||
engine to InnoDB.
|
||||
report-times Report how much time has been spent on different
|
||||
phases of test execution.
|
||||
HERE
|
||||
exit(1);
|
||||
|
||||
|
|
|
@ -1448,8 +1448,6 @@ CREATE USER 'userbug33464'@'localhost';
|
|||
GRANT CREATE ROUTINE ON dbbug33464.* TO 'userbug33464'@'localhost';
|
||||
|
||||
userbug33464@localhost dbbug33464
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
SELECT * from dbbug33464.t6 where t6.f2= 'xyz';
|
||||
|
|
|
@ -21,123 +21,108 @@ grant select on test.* to CUser@LOCALHOST;
|
|||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||
user host db select_priv
|
||||
CUser LOCALHOST test Y
|
||||
CUser localhost test Y
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||
user host db select_priv
|
||||
CUser localhost test Y
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||
user host db select_priv
|
||||
DROP USER CUser@localhost;
|
||||
DROP USER CUser@LOCALHOST;
|
||||
ERROR HY000: Operation DROP USER failed for 'CUser'@'localhost'
|
||||
create table t1 (a int);
|
||||
grant select on test.t1 to CUser@localhost;
|
||||
grant select on test.t1 to CUser@LOCALHOST;
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
CUser LOCALHOST test t1 Select
|
||||
CUser localhost test t1 Select
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
CUser localhost test t1 Select
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
DROP USER CUser@localhost;
|
||||
DROP USER CUser@LOCALHOST;
|
||||
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;
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
CUser LOCALHOST test t1 Select
|
||||
CUser localhost test t1 Select
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
CUser localhost test t1 Select
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
||||
user host
|
||||
CUser LOCALHOST
|
||||
CUser localhost
|
||||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
user host db Table_name Table_priv Column_priv
|
||||
DROP USER CUser@localhost;
|
||||
DROP USER CUser@LOCALHOST;
|
||||
ERROR HY000: Operation DROP USER failed for 'CUser'@'localhost'
|
||||
drop table t1;
|
||||
grant select on test.* to CUser2@localhost;
|
||||
grant select on test.* to CUser2@LOCALHOST;
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||
user host
|
||||
CUser2 LOCALHOST
|
||||
CUser2 localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||
user host db select_priv
|
||||
CUser2 LOCALHOST test Y
|
||||
CUser2 localhost test Y
|
||||
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||
user host
|
||||
CUser2 LOCALHOST
|
||||
CUser2 localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||
user host db select_priv
|
||||
CUser2 localhost test Y
|
||||
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
||||
ERROR 42000: There is no such grant defined for user 'CUser2' on host 'localhost'
|
||||
flush privileges;
|
||||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||
user host
|
||||
CUser2 LOCALHOST
|
||||
CUser2 localhost
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||
user host db select_priv
|
||||
DROP USER CUser2@localhost;
|
||||
DROP USER CUser2@LOCALHOST;
|
||||
ERROR HY000: Operation DROP USER failed for 'CUser2'@'localhost'
|
||||
CREATE DATABASE mysqltest_1;
|
||||
CREATE TABLE mysqltest_1.t1 (a INT);
|
||||
CREATE USER 'mysqltest1'@'%';
|
||||
|
|
|
@ -1807,3 +1807,47 @@ USING (TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME)
|
|||
WHERE COLUMNS.TABLE_SCHEMA = 'test'
|
||||
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
|
||||
#
|
||||
# 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';
|
||||
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';
|
||||
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 ALL PRIVILEGES ON `test`.* TO '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 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');
|
||||
SELECT @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';
|
||||
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';
|
||||
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 ALL PRIVILEGES ON `test`.* TO '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 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');
|
||||
SELECT @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';
|
||||
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';
|
||||
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 ALL PRIVILEGES ON `test`.* TO '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 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');
|
||||
SELECT @nip;
|
||||
@nip
|
||||
|
@ -119,9 +119,9 @@ mysqld is alive
|
|||
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';
|
||||
SHOW 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 ALL PRIVILEGES ON `test`.* TO '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 ALL PRIVILEGES ON `test`.* TO 'testuser'@'0::0000:ffff:127.0.0.1'
|
||||
SET @nip= inet_aton('0::0000:FFFF:127.0.0.1');
|
||||
SELECT @nip;
|
||||
@nip
|
||||
|
@ -149,9 +149,9 @@ mysqld is alive
|
|||
CREATE USER testuser@'::FFFF:127.0.0.1' identified by '1234';
|
||||
GRANT ALL ON test.* TO testuser@'::FFFF:127.0.0.1';
|
||||
SHOW 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 ALL PRIVILEGES ON `test`.* TO '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 ALL PRIVILEGES ON `test`.* TO 'testuser'@'::ffff:127.0.0.1'
|
||||
SET @nip= inet_aton('::FFFF:127.0.0.1');
|
||||
SELECT @nip;
|
||||
@nip
|
||||
|
|
|
@ -704,3 +704,37 @@ SET DEBUG_SYNC="now SIGNAL query";
|
|||
# Connection default
|
||||
DROP EVENT e2;
|
||||
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;
|
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;
|
|
@ -3005,6 +3005,44 @@ EXECUTE stmt;
|
|||
1
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#54494 crash with explain extended and prepared statements
|
||||
#
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
PREPARE stmt FROM 'EXPLAIN EXTENDED SELECT 1 FROM t1 RIGHT JOIN t1 t2 ON 1';
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` `t2` left join `test`.`t1` on(1) where 1
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` `t2` left join `test`.`t1` on(1) where 1
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#54488 crash when using explain and prepared statements with subqueries
|
||||
#
|
||||
CREATE TABLE t1(f1 INT);
|
||||
INSERT INTO t1 VALUES (1),(1);
|
||||
PREPARE stmt FROM 'EXPLAIN SELECT 1 FROM t1 WHERE (SELECT (SELECT 1 FROM t1 GROUP BY f1))';
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
3 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
3 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1;
|
||||
|
||||
End of 5.1 tests.
|
||||
|
||||
|
|
|
@ -4887,3 +4887,22 @@ col_int_key
|
|||
DROP VIEW view_t1;
|
||||
DROP TABLE t1;
|
||||
# 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;
|
||||
end $$
|
||||
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 $$
|
||||
create trigger t1_ai after insert on t1 for each row
|
||||
begin
|
||||
|
@ -1416,11 +1413,7 @@ MESSAGE_TEXT = NEW.msg,
|
|||
MYSQL_ERRNO = NEW.errno;
|
||||
end $$
|
||||
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' $$
|
||||
Warnings:
|
||||
Warning 1013 Warning message 2 in trigger
|
||||
drop table t1 $$
|
||||
drop table if exists t1 $$
|
||||
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
|
||||
#
|
||||
|
||||
# - Case 1
|
||||
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1, 2);
|
||||
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
|
||||
|
@ -1889,40 +1886,13 @@ SET NEW.a = 10;
|
|||
SET NEW.a = 99999999999;
|
||||
END|
|
||||
UPDATE t1 SET b = 20;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
10 20
|
||||
DROP TRIGGER t1_bu;
|
||||
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
|
||||
#
|
||||
|
@ -1961,3 +1931,64 @@ Warning 1365 Division by 0
|
|||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p2;
|
||||
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;
|
||||
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
||||
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;
|
||||
ERROR 42000: alter routine command denied to user 'user1'@'localhost' for routine 'db1_secret.stamp'
|
||||
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;
|
||||
ERROR 42000: Access denied for user ''@'%' to database 'db1_secret'
|
||||
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;
|
||||
ERROR 42000: alter routine command denied to user ''@'%' for routine 'db1_secret.stamp'
|
||||
drop function db1_secret.db;
|
||||
|
@ -567,3 +567,28 @@ DROP USER 'tester';
|
|||
DROP USER 'Tester';
|
||||
DROP DATABASE B48872;
|
||||
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;
|
||||
|
|
|
@ -1072,8 +1072,6 @@ SELECT @x;
|
|||
NULL
|
||||
SET @x=2;
|
||||
UPDATE t1 SET i1 = @x;
|
||||
Warnings:
|
||||
Warning 1365 Division by 0
|
||||
SELECT @x;
|
||||
@x
|
||||
NULL
|
||||
|
@ -1085,9 +1083,6 @@ SELECT @x;
|
|||
NULL
|
||||
SET @x=4;
|
||||
UPDATE t1 SET i1 = @x;
|
||||
Warnings:
|
||||
Warning 1365 Division by 0
|
||||
Warning 1365 Division by 0
|
||||
SELECT @x;
|
||||
@x
|
||||
NULL
|
||||
|
@ -1198,8 +1193,6 @@ Warnings:
|
|||
Warning 1365 Division by 0
|
||||
create trigger t1_bi before insert on t1 for each row set @a:=1/0|
|
||||
insert into t1 values(20, 20)|
|
||||
Warnings:
|
||||
Warning 1365 Division by 0
|
||||
drop trigger t1_bi|
|
||||
create trigger t1_bi before insert on t1 for each row
|
||||
begin
|
||||
|
@ -1218,8 +1211,6 @@ set @a:=1/0;
|
|||
end|
|
||||
set @check=0, @t4_bi_called=0, @t4_bu_called=0|
|
||||
insert into t1 values(30, 30)|
|
||||
Warnings:
|
||||
Warning 1365 Division by 0
|
||||
select @check, @t4_bi_called, @t4_bu_called|
|
||||
@check @t4_bi_called @t4_bu_called
|
||||
2 1 1
|
||||
|
@ -2090,12 +2081,8 @@ SELECT 1 FROM t1 c WHERE
|
|||
END//
|
||||
SET @bug51650 = 1;
|
||||
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 t2 SET a = '111';
|
||||
Warnings:
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
SET @bug51650 = 1;
|
||||
INSERT IGNORE INTO t2 SET a = '777';
|
||||
DROP TRIGGER trg1;
|
||||
|
@ -2177,8 +2164,6 @@ SELECT 'ab' INTO a;
|
|||
SELECT 'a' INTO a;
|
||||
END|
|
||||
INSERT INTO t1 VALUES (1);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'a' at row 1
|
||||
DROP TRIGGER trg1;
|
||||
DROP TABLE t1;
|
||||
DROP TRIGGER IF EXISTS trg1;
|
||||
|
@ -2196,20 +2181,12 @@ DECLARE trg2 CHAR;
|
|||
SELECT 'ab' INTO trg2;
|
||||
END|
|
||||
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;
|
||||
a
|
||||
0
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
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 trg2;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -321,7 +321,7 @@ while (`SELECT $unsafe_type < 9`) {
|
|||
--source extra/rpl_tests/create_recursive_construct.inc
|
||||
|
||||
# Drop created object.
|
||||
if (`SELECT '$drop_3' != ''`) {
|
||||
if ($drop_3) {
|
||||
--eval $drop_3
|
||||
}
|
||||
--inc $call_type_3
|
||||
|
@ -330,7 +330,7 @@ while (`SELECT $unsafe_type < 9`) {
|
|||
} # if (!is_toplevel_2)
|
||||
|
||||
# Drop created object.
|
||||
if (`SELECT '$drop_2' != ''`) {
|
||||
if ($drop_2) {
|
||||
--eval $drop_2
|
||||
}
|
||||
--inc $call_type_2
|
||||
|
@ -338,7 +338,7 @@ while (`SELECT $unsafe_type < 9`) {
|
|||
} # if (!is_toplevel_1)
|
||||
|
||||
# Drop created object.
|
||||
if (`SELECT '$drop_1' != ''`) {
|
||||
if ($drop_1) {
|
||||
--eval $drop_1
|
||||
}
|
||||
--inc $call_type_1
|
||||
|
|
|
@ -9,6 +9,5 @@
|
|||
# Do not use any TAB characters for whitespace.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
binlog_truncate_innodb : BUG#42643 2009-02-06 mats Changes to InnoDB requires to complete fix for BUG#36763
|
||||
binlog_truncate_innodb : BUG#57291 2010-10-20 anitha Originally disabled due to BUG#42643. Product bug fixed, but test changes needed
|
||||
binlog_spurious_ddl_errors : BUG#54195 2010-06-03 alik binlog_spurious_ddl_errors.test fails, thus disabled
|
||||
|
|
|
@ -110,10 +110,10 @@ Ensure that root always has the GRANT CREATE ROUTINE privilege.
|
|||
--------------------------------------------------------------------------------
|
||||
grant create routine on db_storedproc_1.* to 'user_1'@'localhost';
|
||||
flush privileges;
|
||||
DROP PROCEDURE IF EXISTS db_storedproc_1.sp3;
|
||||
DROP FUNCTION IF EXISTS db_storedproc_1.fn1;
|
||||
|
||||
user_1@localhost db_storedproc_1
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
SELECT * from db_storedproc_1.t6 where t6.f2= 'xyz';
|
||||
|
|
|
@ -353,8 +353,6 @@ B Test 3.5.8.5-case 00191 0000000016 C=one
|
|||
C Test 3.5.8.5-case 00200 0000000001 C=one
|
||||
Insert into tb3 (f120, f122, f136)
|
||||
values ('d', 'Test 3.5.8.5-case', 152);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
@ -364,8 +362,6 @@ B Test 3.5.8.5-case 00191 0000000016 1*0000099999
|
|||
C Test 3.5.8.5-case 00200 0000000001 1*0000099999
|
||||
Insert into tb3 (f120, f122, f136, f144)
|
||||
values ('e', 'Test 3.5.8.5-case', 200, 8);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
|
|
@ -111,10 +111,10 @@ Ensure that root always has the GRANT CREATE ROUTINE privilege.
|
|||
--------------------------------------------------------------------------------
|
||||
grant create routine on db_storedproc_1.* to 'user_1'@'localhost';
|
||||
flush privileges;
|
||||
DROP PROCEDURE IF EXISTS db_storedproc_1.sp3;
|
||||
DROP FUNCTION IF EXISTS db_storedproc_1.fn1;
|
||||
|
||||
user_1@localhost db_storedproc_1
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
SELECT * from db_storedproc_1.t6 where t6.f2= 'xyz';
|
||||
|
|
|
@ -354,8 +354,6 @@ B Test 3.5.8.5-case 00191 0000000016 C=one
|
|||
C Test 3.5.8.5-case 00200 0000000001 C=one
|
||||
Insert into tb3 (f120, f122, f136)
|
||||
values ('d', 'Test 3.5.8.5-case', 152);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
@ -365,8 +363,6 @@ B Test 3.5.8.5-case 00191 0000000016 1*0000099999
|
|||
C Test 3.5.8.5-case 00200 0000000001 1*0000099999
|
||||
Insert into tb3 (f120, f122, f136, f144)
|
||||
values ('e', 'Test 3.5.8.5-case', 200, 8);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
|
|
@ -111,10 +111,10 @@ Ensure that root always has the GRANT CREATE ROUTINE privilege.
|
|||
--------------------------------------------------------------------------------
|
||||
grant create routine on db_storedproc_1.* to 'user_1'@'localhost';
|
||||
flush privileges;
|
||||
DROP PROCEDURE IF EXISTS db_storedproc_1.sp3;
|
||||
DROP FUNCTION IF EXISTS db_storedproc_1.fn1;
|
||||
|
||||
user_1@localhost db_storedproc_1
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
SELECT * from db_storedproc_1.t6 where t6.f2= 'xyz';
|
||||
|
|
|
@ -354,8 +354,6 @@ B Test 3.5.8.5-case 00191 0000000016 C=one
|
|||
C Test 3.5.8.5-case 00200 0000000001 C=one
|
||||
Insert into tb3 (f120, f122, f136)
|
||||
values ('d', 'Test 3.5.8.5-case', 152);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
@ -365,8 +363,6 @@ B Test 3.5.8.5-case 00191 0000000016 1*0000099999
|
|||
C Test 3.5.8.5-case 00200 0000000001 1*0000099999
|
||||
Insert into tb3 (f120, f122, f136, f144)
|
||||
values ('e', 'Test 3.5.8.5-case', 200, 8);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'f120' at row 1
|
||||
select f120, f122, f136, f144, @test_var
|
||||
from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
|
||||
f120 f122 f136 f144 @test_var
|
||||
|
|
|
@ -117,15 +117,15 @@ create user 'user_1'@'localhost';
|
|||
grant create routine on db_storedproc_1.* to 'user_1'@'localhost';
|
||||
flush privileges;
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS db_storedproc_1.sp3;
|
||||
DROP FUNCTION IF EXISTS db_storedproc_1.fn1;
|
||||
--enable_warnings
|
||||
|
||||
# disconnect default;
|
||||
connect (user2, localhost, user_1, , db_storedproc_1);
|
||||
--source suite/funcs_1/include/show_connection.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
--enable_warnings
|
||||
|
||||
delimiter //;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
|
|
10
mysql-test/suite/innodb/r/innodb_bug57255.result
Normal file
10
mysql-test/suite/innodb/r/innodb_bug57255.result
Normal file
|
@ -0,0 +1,10 @@
|
|||
create table A(id int not null primary key) engine=innodb;
|
||||
create table B(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references A(id) on delete cascade) engine=innodb;
|
||||
create table C(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references B(id) on delete cascade) engine=innodb;
|
||||
insert into A values(1), (2);
|
||||
DELETE FROM A where id = 1;
|
||||
DELETE FROM C where f1 = 2;
|
||||
DELETE FROM A where id = 1;
|
||||
DROP TABLE C;
|
||||
DROP TABLE B;
|
||||
DROP TABLE A;
|
36
mysql-test/suite/innodb/t/innodb_bug57255.test
Normal file
36
mysql-test/suite/innodb/t/innodb_bug57255.test
Normal file
|
@ -0,0 +1,36 @@
|
|||
# Test Bug #57255. Cascade deletes that affect different rows should not
|
||||
# result in DB_FOREIGN_EXCEED_MAX_CASCADE error
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
create table A(id int not null primary key) engine=innodb;
|
||||
|
||||
create table B(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references A(id) on delete cascade) engine=innodb;
|
||||
|
||||
create table C(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references B(id) on delete cascade) engine=innodb;
|
||||
|
||||
insert into A values(1), (2);
|
||||
|
||||
--disable_query_log
|
||||
let $i=257;
|
||||
while ($i)
|
||||
{
|
||||
insert into B(f1) values(1);
|
||||
dec $i;
|
||||
}
|
||||
let $i=486;
|
||||
while ($i)
|
||||
{
|
||||
insert into C(f1) values(2);
|
||||
dec $i;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Following Deletes should not report error
|
||||
DELETE FROM A where id = 1;
|
||||
DELETE FROM C where f1 = 2;
|
||||
DELETE FROM A where id = 1;
|
||||
|
||||
DROP TABLE C;
|
||||
DROP TABLE B;
|
||||
DROP TABLE A;
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2009 Sun Microsystems, Inc
|
||||
# Copyright (c) 2009, 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
|
||||
|
@ -10,8 +10,8 @@
|
|||
# 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
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
# Tests for PERFORMANCE_SCHEMA
|
||||
|
||||
|
@ -26,17 +26,17 @@ update performance_schema.SETUP_CONSUMERS set enabled='YES';
|
|||
connect (con1, localhost, root, , );
|
||||
|
||||
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID in (select connection_id())`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connect (con2, localhost, root, , );
|
||||
|
||||
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID in (select connection_id())`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connect (con3, localhost, root, , );
|
||||
|
||||
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID in (select connection_id())`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connection default;
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
select * from performance_schema.THREADS
|
||||
where name like 'Thread/%' limit 1;
|
||||
THREAD_ID ID NAME
|
||||
THREAD_ID PROCESSLIST_ID NAME
|
||||
# # #
|
||||
select * from performance_schema.THREADS
|
||||
where name='FOO';
|
||||
THREAD_ID ID NAME
|
||||
THREAD_ID PROCESSLIST_ID NAME
|
||||
insert into performance_schema.THREADS
|
||||
set name='FOO', thread_id=1, id=2;
|
||||
set name='FOO', thread_id=1, processlist_id=2;
|
||||
ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'THREADS'
|
||||
update performance_schema.THREADS
|
||||
set thread_id=12;
|
||||
|
|
|
@ -94,24 +94,9 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
|
|||
WHERE COUNT_STAR > 0
|
||||
ORDER BY SUM_TIMER_WAIT DESC
|
||||
LIMIT 10;
|
||||
SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
|
||||
# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
GROUP BY i.user
|
||||
ORDER BY SUM_WAIT DESC
|
||||
LIMIT 20;
|
||||
SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
WHERE p.ID = 1
|
||||
WHERE p.PROCESSLIST_ID = 1
|
||||
GROUP BY h.EVENT_NAME
|
||||
HAVING TOTAL_WAIT > 0;
|
||||
SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
GROUP BY i.user, h.operation
|
||||
HAVING BYTES > 0
|
||||
ORDER BY i.user, h.operation;
|
||||
|
|
|
@ -195,6 +195,6 @@ show create table THREADS;
|
|||
Table Create Table
|
||||
THREADS CREATE TABLE `THREADS` (
|
||||
`THREAD_ID` int(11) NOT NULL,
|
||||
`ID` int(11) NOT NULL,
|
||||
`NAME` varchar(64) NOT NULL
|
||||
`PROCESSLIST_ID` int(11) DEFAULT NULL,
|
||||
`NAME` varchar(128) NOT NULL
|
||||
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
|
||||
|
|
|
@ -84,22 +84,22 @@ id c
|
|||
13 [EVENT_ID]
|
||||
DROP TRIGGER t_ps_trigger;
|
||||
DROP PROCEDURE IF EXISTS t_ps_proc;
|
||||
CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
|
||||
CREATE PROCEDURE t_ps_proc(IN conid INT, OUT pid INT)
|
||||
BEGIN
|
||||
SELECT id FROM performance_schema.THREADS
|
||||
WHERE THREAD_ID = tid INTO pid;
|
||||
SELECT thread_id FROM performance_schema.THREADS
|
||||
WHERE PROCESSLIST_ID = conid INTO pid;
|
||||
END;
|
||||
|
|
||||
CALL t_ps_proc(0, @p_id);
|
||||
CALL t_ps_proc(connection_id(), @p_id);
|
||||
DROP FUNCTION IF EXISTS t_ps_proc;
|
||||
CREATE FUNCTION t_ps_func(tid INT) RETURNS int
|
||||
CREATE FUNCTION t_ps_func(conid INT) RETURNS int
|
||||
BEGIN
|
||||
return (SELECT id FROM performance_schema.THREADS
|
||||
WHERE THREAD_ID = tid);
|
||||
return (SELECT thread_id FROM performance_schema.THREADS
|
||||
WHERE PROCESSLIST_ID = conid);
|
||||
END;
|
||||
|
|
||||
SELECT t_ps_func(0) = @p_id;
|
||||
t_ps_func(0) = @p_id
|
||||
SELECT t_ps_func(connection_id()) = @p_id;
|
||||
t_ps_func(connection_id()) = @p_id
|
||||
1
|
||||
SELECT * FROM t_event;
|
||||
EVENT_ID
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2009 Sun Microsystems, Inc
|
||||
# Copyright (c) 2009, 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
|
||||
|
@ -10,8 +10,8 @@
|
|||
# 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
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
# Tests for PERFORMANCE_SCHEMA
|
||||
|
||||
|
@ -28,7 +28,7 @@ select * from performance_schema.THREADS
|
|||
--replace_result '\'threads' '\'THREADS'
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
insert into performance_schema.THREADS
|
||||
set name='FOO', thread_id=1, id=2;
|
||||
set name='FOO', thread_id=1, processlist_id=2;
|
||||
|
||||
--replace_result '\'threads' '\'THREADS'
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2008-2009 Sun Microsystems, Inc
|
||||
# Copyright (c) 2008, 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
|
||||
|
@ -10,8 +10,8 @@
|
|||
# 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
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
##
|
||||
## WL#4814, 4.1.4 FILE IO
|
||||
|
@ -154,16 +154,16 @@ LIMIT 10;
|
|||
# Total and average wait time for different users
|
||||
#
|
||||
|
||||
--disable_result_log
|
||||
SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
|
||||
# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
GROUP BY i.user
|
||||
ORDER BY SUM_WAIT DESC
|
||||
LIMIT 20;
|
||||
--enable_result_log
|
||||
## --disable_result_log
|
||||
## SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
|
||||
## # ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
|
||||
## FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
## INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
## LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
## GROUP BY i.user
|
||||
## ORDER BY SUM_WAIT DESC
|
||||
## LIMIT 20;
|
||||
## --enable_result_log
|
||||
|
||||
#
|
||||
# Total and average wait times for different events for a session
|
||||
|
@ -172,7 +172,7 @@ LIMIT 20;
|
|||
SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
WHERE p.ID = 1
|
||||
WHERE p.PROCESSLIST_ID = 1
|
||||
GROUP BY h.EVENT_NAME
|
||||
HAVING TOTAL_WAIT > 0;
|
||||
--enable_result_log
|
||||
|
@ -181,12 +181,12 @@ HAVING TOTAL_WAIT > 0;
|
|||
# Which user reads and writes data
|
||||
#
|
||||
|
||||
--disable_result_log
|
||||
SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
|
||||
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
GROUP BY i.user, h.operation
|
||||
HAVING BYTES > 0
|
||||
ORDER BY i.user, h.operation;
|
||||
--enable_result_log
|
||||
## --disable_result_log
|
||||
## SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
|
||||
## FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
|
||||
## INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
|
||||
## LEFT JOIN information_schema.PROCESSLIST i USING (ID)
|
||||
## GROUP BY i.user, h.operation
|
||||
## HAVING BYTES > 0
|
||||
## ORDER BY i.user, h.operation;
|
||||
## --enable_result_log
|
||||
|
|
|
@ -136,17 +136,17 @@ DROP PROCEDURE IF EXISTS t_ps_proc;
|
|||
--enable_warnings
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
|
||||
CREATE PROCEDURE t_ps_proc(IN conid INT, OUT pid INT)
|
||||
BEGIN
|
||||
SELECT id FROM performance_schema.THREADS
|
||||
WHERE THREAD_ID = tid INTO pid;
|
||||
SELECT thread_id FROM performance_schema.THREADS
|
||||
WHERE PROCESSLIST_ID = conid INTO pid;
|
||||
END;
|
||||
|
||||
|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL t_ps_proc(0, @p_id);
|
||||
CALL t_ps_proc(connection_id(), @p_id);
|
||||
|
||||
# FUNCTION
|
||||
|
||||
|
@ -155,17 +155,17 @@ DROP FUNCTION IF EXISTS t_ps_proc;
|
|||
--enable_warnings
|
||||
delimiter |;
|
||||
|
||||
CREATE FUNCTION t_ps_func(tid INT) RETURNS int
|
||||
CREATE FUNCTION t_ps_func(conid INT) RETURNS int
|
||||
BEGIN
|
||||
return (SELECT id FROM performance_schema.THREADS
|
||||
WHERE THREAD_ID = tid);
|
||||
return (SELECT thread_id FROM performance_schema.THREADS
|
||||
WHERE PROCESSLIST_ID = conid);
|
||||
END;
|
||||
|
||||
|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
SELECT t_ps_func(0) = @p_id;
|
||||
SELECT t_ps_func(connection_id()) = @p_id;
|
||||
|
||||
# We might reach this point too early which means the event scheduler has not
|
||||
# execute our "t_ps_event". Therefore we poll till the record was inserted
|
||||
|
|
|
@ -31,14 +31,14 @@ connect (con1, localhost, root, , );
|
|||
let $con1_ID=`select connection_id()`;
|
||||
|
||||
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connect (con2, localhost, root, , );
|
||||
|
||||
let $con2_ID=`select connection_id()`;
|
||||
|
||||
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connection default;
|
||||
|
||||
|
@ -59,7 +59,7 @@ connect (con3, localhost, root, , );
|
|||
let $con3_ID=`select connection_id()`;
|
||||
|
||||
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
disconnect con3;
|
||||
disconnect con1;
|
||||
|
@ -83,14 +83,14 @@ connect (con1, localhost, root, , );
|
|||
let $con1_ID=`select connection_id()`;
|
||||
|
||||
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connect (con2, localhost, root, , );
|
||||
|
||||
let $con2_ID=`select connection_id()`;
|
||||
|
||||
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
connection default;
|
||||
|
||||
|
@ -109,7 +109,7 @@ connect (con3, localhost, root, , );
|
|||
let $con3_ID=`select connection_id()`;
|
||||
|
||||
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
|
||||
where ID = connection_id()`;
|
||||
where PROCESSLIST_ID = connection_id()`;
|
||||
|
||||
disconnect con3;
|
||||
disconnect con1;
|
||||
|
|
|
@ -264,4 +264,27 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
|||
master-bin.000001 # Query # # use `test`; grant all on *.* to foo@"1.2.3.4"
|
||||
master-bin.000001 # Query # # use `test`; revoke all privileges, grant option from "foo"
|
||||
DROP USER foo@"1.2.3.4";
|
||||
|
||||
# Bug#27606 GRANT statement should be replicated with DEFINER information
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
GRANT SELECT, INSERT ON mysql.user TO user_bug27606@localhost;
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
Grantor
|
||||
root@localhost
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
Grantor
|
||||
root@localhost
|
||||
REVOKE SELECT ON mysql.user FROM user_bug27606@localhost;
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
Grantor
|
||||
root@localhost
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
Grantor
|
||||
root@localhost
|
||||
DROP USER user_bug27606@localhost;
|
||||
"End of test"
|
||||
|
|
|
@ -26,6 +26,11 @@ CALL test.p2();
|
|||
SELECT release_lock("test");
|
||||
release_lock("test")
|
||||
1
|
||||
get_lock("test", 100)
|
||||
1
|
||||
SELECT release_lock("test");
|
||||
release_lock("test")
|
||||
1
|
||||
SELECT * FROM test.t1;
|
||||
a
|
||||
5
|
||||
|
@ -37,7 +42,10 @@ CREATE TABLE test.t1(a INT,PRIMARY KEY(a))ENGINE=INNODB;
|
|||
CALL test.p2();
|
||||
CALL test.p1();
|
||||
get_lock("test", 100)
|
||||
0
|
||||
1
|
||||
SELECT release_lock("test");
|
||||
release_lock("test")
|
||||
1
|
||||
SELECT * FROM test.t1;
|
||||
a
|
||||
8
|
||||
|
|
|
@ -69,15 +69,9 @@ INSERT INTO test.t2 VALUES(NULL,0,'Testing MySQL databases is a cool ', 'MySQL C
|
|||
UPDATE test.t1 SET b1 = 0 WHERE b1 = 1;
|
||||
INSERT INTO test.t2 VALUES(NULL,1,'This is an after update test.', 'If this works, total will not be zero on the master or slave',1.4321,5.221,0,YEAR(NOW()),NOW());
|
||||
UPDATE test.t2 SET b1 = 0 WHERE b1 = 1;
|
||||
Warnings:
|
||||
Error 1329 No data - zero rows fetched, selected, or processed
|
||||
INSERT INTO test.t1 VALUES(NULL,1,'add some more test data test.', 'and hope for the best', 3.321,5.221,0,YEAR(NOW()),NOW());
|
||||
DELETE FROM test.t1 WHERE id = 1;
|
||||
Warnings:
|
||||
Error 1329 No data - zero rows fetched, selected, or processed
|
||||
DELETE FROM test.t2 WHERE id = 1;
|
||||
Warnings:
|
||||
Error 1329 No data - zero rows fetched, selected, or processed
|
||||
DROP TRIGGER test.t1_bi;
|
||||
DROP TRIGGER test.t2_ai;
|
||||
DROP TRIGGER test.t1_bu;
|
||||
|
|
77
mysql-test/suite/rpl/r/rpl_stop_slave.result
Normal file
77
mysql-test/suite/rpl/r/rpl_stop_slave.result
Normal file
|
@ -0,0 +1,77 @@
|
|||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
|
||||
# BUG#56118 STOP SLAVE does not wait till trx with CREATE TMP TABLE ends
|
||||
#
|
||||
# If a temporary table is created or dropped, the transaction should be
|
||||
# regarded similarly that a non-transactional table is modified. So
|
||||
# STOP SLAVE should wait until the transaction has finished.
|
||||
CREATE TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(c1 INT) ENGINE=InnoDB;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
include/stop_slave.inc
|
||||
|
||||
# Suspend the INSERT statement in current transaction on SQL thread.
|
||||
# It guarantees that SQL thread is applying the transaction when
|
||||
# STOP SLAVE command launchs.
|
||||
SET GLOBAL debug= 'd,after_mysql_insert';
|
||||
include/start_slave.inc
|
||||
|
||||
# CREATE TEMPORARY TABLE with InnoDB engine
|
||||
# -----------------------------------------
|
||||
|
||||
[ On Master ]
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
CREATE TEMPORARY TABLE tt1(c1 INT) ENGINE = InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
DROP TEMPORARY TABLE tt1;
|
||||
COMMIT;
|
||||
|
||||
[ On Slave ]
|
||||
STOP SLAVE SQL_THREAD;
|
||||
|
||||
[ On Slave1 ]
|
||||
# To resume slave SQL thread
|
||||
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
||||
[ On Slave ]
|
||||
# Slave should stop after the transaction has committed.
|
||||
# So t1 on master is same to t1 on slave.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
START SLAVE SQL_THREAD;
|
||||
|
||||
# CREATE TEMPORARY TABLE ... SELECT with InnoDB engine
|
||||
# ----------------------------------------------------
|
||||
|
||||
[ On Master ]
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
CREATE TEMPORARY TABLE tt1(c1 INT) ENGINE = InnoDB
|
||||
SELECT c1 FROM t2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
DROP TEMPORARY TABLE tt1;
|
||||
COMMIT;
|
||||
|
||||
[ On Slave ]
|
||||
STOP SLAVE SQL_THREAD;
|
||||
|
||||
[ On Slave1 ]
|
||||
# To resume slave SQL thread
|
||||
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
||||
[ On Slave ]
|
||||
# Slave should stop after the transaction has committed.
|
||||
# So t1 on master is same to t1 on slave.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
START SLAVE SQL_THREAD;
|
||||
|
||||
# Test end
|
||||
SET GLOBAL debug= '$debug_save';
|
||||
DROP TABLE t1, t2;
|
|
@ -65,9 +65,53 @@ slave-bin.000001 # Query # # use `test`; DROP TABLE `t2` /* generated by server
|
|||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2_tmp` /* generated by server */
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000001 # Query # # use `test`; DROP TABLE `t3`,`t1` /* generated by server */
|
||||
|
||||
# Bug#55478 Row events wrongly apply on the temporary table of the same name
|
||||
# ==========================================================================
|
||||
# The statement should be binlogged
|
||||
CREATE TEMPORARY TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||
|
||||
# Case 1: CREATE TABLE t1 ... SELECT
|
||||
# ----------------------------------
|
||||
|
||||
# The statement generates row events on t1. And the rows events should
|
||||
# be inserted into the base table on slave.
|
||||
CREATE TABLE t1 ENGINE=MyISAM SELECT rand();
|
||||
show binlog events in 'master-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE `t1` (
|
||||
`rand()` double NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
|
||||
# Case 2: DROP TEMPORARY TABLE in a transacation
|
||||
# ----------------------------------------------
|
||||
|
||||
BEGIN;
|
||||
DROP TEMPORARY TABLE t1;
|
||||
# The rows event will binlogged before 'DROP TEMPORARY TABLE t1',
|
||||
# as t1 is non-transactional table
|
||||
INSERT INTO t1 VALUES(Rand());
|
||||
COMMIT;
|
||||
show binlog events in 'master-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
# Compare the base table.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -347,4 +347,25 @@ revoke all privileges, grant option from "foo";
|
|||
DROP USER foo@"1.2.3.4";
|
||||
-- sync_slave_with_master
|
||||
|
||||
--echo
|
||||
--echo # Bug#27606 GRANT statement should be replicated with DEFINER information
|
||||
--connection master
|
||||
--source include/master-slave-reset.inc
|
||||
--connection master
|
||||
GRANT SELECT, INSERT ON mysql.user TO user_bug27606@localhost;
|
||||
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
sync_slave_with_master;
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
|
||||
--connection master
|
||||
REVOKE SELECT ON mysql.user FROM user_bug27606@localhost;
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
sync_slave_with_master;
|
||||
SELECT Grantor FROM mysql.tables_priv WHERE User='user_bug27606';
|
||||
|
||||
--connection master
|
||||
DROP USER user_bug27606@localhost;
|
||||
|
||||
--source include/master-slave-end.inc
|
||||
--echo "End of test"
|
||||
|
|
|
@ -119,7 +119,7 @@ echo [on master];
|
|||
|
||||
# This will block the execution of a statement at the DBUG_SYNC_POINT
|
||||
# with given lock name
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
if ($debug_lock)
|
||||
{
|
||||
disable_query_log;
|
||||
disable_result_log;
|
||||
|
|
51
mysql-test/suite/rpl/t/rpl_stop_slave.test
Normal file
51
mysql-test/suite/rpl/t/rpl_stop_slave.test
Normal file
|
@ -0,0 +1,51 @@
|
|||
source include/master-slave.inc;
|
||||
source include/have_innodb.inc;
|
||||
source include/have_debug.inc;
|
||||
source include/have_debug_sync.inc;
|
||||
source include/have_binlog_format_mixed_or_statement.inc;
|
||||
|
||||
--echo
|
||||
--echo # BUG#56118 STOP SLAVE does not wait till trx with CREATE TMP TABLE ends
|
||||
--echo #
|
||||
--echo # If a temporary table is created or dropped, the transaction should be
|
||||
--echo # regarded similarly that a non-transactional table is modified. So
|
||||
--echo # STOP SLAVE should wait until the transaction has finished.
|
||||
|
||||
CREATE TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(c1 INT) ENGINE=InnoDB;
|
||||
|
||||
sync_slave_with_master;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
source include/stop_slave.inc;
|
||||
|
||||
--echo
|
||||
--echo # Suspend the INSERT statement in current transaction on SQL thread.
|
||||
--echo # It guarantees that SQL thread is applying the transaction when
|
||||
--echo # STOP SLAVE command launchs.
|
||||
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||
SET GLOBAL debug= 'd,after_mysql_insert';
|
||||
source include/start_slave.inc;
|
||||
|
||||
--echo
|
||||
--echo # CREATE TEMPORARY TABLE with InnoDB engine
|
||||
--echo # -----------------------------------------
|
||||
let $tmp_table_stm= CREATE TEMPORARY TABLE tt1(c1 INT) ENGINE = InnoDB;
|
||||
source extra/rpl_tests/rpl_stop_slave.test;
|
||||
|
||||
--echo
|
||||
--echo # CREATE TEMPORARY TABLE ... SELECT with InnoDB engine
|
||||
--echo # ----------------------------------------------------
|
||||
let $tmp_table_stm= CREATE TEMPORARY TABLE tt1(c1 INT) ENGINE = InnoDB
|
||||
SELECT c1 FROM t2;
|
||||
source extra/rpl_tests/rpl_stop_slave.test;
|
||||
|
||||
# Don't need to verify 'CREATE TEMPORARY TABLE' with MyIASM engine, as it
|
||||
# never is binlogged into a transaction since 5.5.
|
||||
|
||||
--echo
|
||||
--echo # Test end
|
||||
SET GLOBAL debug= '$debug_save';
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2;
|
||||
source include/master-slave-end.inc;
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
source include/master-slave.inc;
|
||||
source include/have_binlog_format_mixed.inc;
|
||||
source include/have_innodb.inc;
|
||||
|
||||
--echo ==== Initialize ====
|
||||
|
||||
|
@ -146,3 +147,59 @@ DROP TABLE t3, t1;
|
|||
-- sync_slave_with_master
|
||||
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
--echo
|
||||
--echo # Bug#55478 Row events wrongly apply on the temporary table of the same name
|
||||
--echo # ==========================================================================
|
||||
connection master;
|
||||
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
--echo # The statement should be binlogged
|
||||
CREATE TEMPORARY TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||
|
||||
--echo
|
||||
--echo # Case 1: CREATE TABLE t1 ... SELECT
|
||||
--echo # ----------------------------------
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
--echo
|
||||
--echo # The statement generates row events on t1. And the rows events should
|
||||
--echo # be inserted into the base table on slave.
|
||||
CREATE TABLE t1 ENGINE=MyISAM SELECT rand();
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
--echo
|
||||
--echo # Case 2: DROP TEMPORARY TABLE in a transacation
|
||||
--echo # ----------------------------------------------
|
||||
--echo
|
||||
|
||||
BEGIN;
|
||||
DROP TEMPORARY TABLE t1;
|
||||
|
||||
# The patch for BUG#55478 fixed the problem only on RBR. The problem on SBR
|
||||
# will be fixed by the patch for bug#55709. So This statement cannot be
|
||||
# executed until Bug#55709 is fixed
|
||||
#
|
||||
# INSERT INTO t1 VALUES(1);
|
||||
|
||||
--echo # The rows event will binlogged before 'DROP TEMPORARY TABLE t1',
|
||||
--echo # as t1 is non-transactional table
|
||||
INSERT INTO t1 VALUES(Rand());
|
||||
COMMIT;
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--echo # Compare the base table.
|
||||
let diff_table= test.t1;
|
||||
source include/rpl_diff_tables.inc;
|
||||
|
||||
--echo
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
source include/master-slave-end.inc;
|
||||
|
|
|
@ -11,8 +11,7 @@
|
|||
##############################################################################
|
||||
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
|
||||
lowercase_table3 : Bug#54845 2010-06-30 alik main.lowercase_table3 on Mac OSX
|
||||
mysqlhotcopy_myisam : Bug#54129 2010-08-31 alik mysqlhotcopy* fails
|
||||
mysqlhotcopy_archive : Bug#54129 2010-08-31 alik mysqlhotcopy* fails
|
||||
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadically
|
||||
sp_sync : Bug#48157 2010-02-06 5.5-m3 demands a differnt solution
|
||||
ctype_utf8mb4_ndb : Bug#55799, Bug#51907, disabled by Konstantin 2010-08-06
|
||||
main.mysqlhotcopy_myisam : Bug#56817 2010-10-21 anitha mysqlhotcopy* fails
|
||||
main.mysqlhotcopy_archive: Bug#56817 2010-10-21 anitha mysqlhotcopy* fails
|
||||
|
|
|
@ -1419,11 +1419,6 @@ GRANT CREATE ROUTINE ON dbbug33464.* TO 'userbug33464'@'localhost';
|
|||
connect (connbug33464, localhost, userbug33464, , dbbug33464);
|
||||
--source suite/funcs_1/include/show_connection.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS sp3;
|
||||
DROP FUNCTION IF EXISTS fn1;
|
||||
--enable_warnings
|
||||
|
||||
delimiter //;
|
||||
CREATE PROCEDURE sp3(v1 char(20))
|
||||
BEGIN
|
||||
|
|
|
@ -64,6 +64,7 @@ SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
|||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
|
||||
|
||||
DROP USER CUser@localhost;
|
||||
--error ER_CANNOT_USER
|
||||
DROP USER CUser@LOCALHOST;
|
||||
|
||||
#### table grants
|
||||
|
@ -88,6 +89,7 @@ SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
|||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
|
||||
DROP USER CUser@localhost;
|
||||
--error ER_CANNOT_USER
|
||||
DROP USER CUser@LOCALHOST;
|
||||
|
||||
### column grants
|
||||
|
@ -112,6 +114,7 @@ SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
|
|||
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
|
||||
|
||||
DROP USER CUser@localhost;
|
||||
--error ER_CANNOT_USER
|
||||
DROP USER CUser@LOCALHOST;
|
||||
|
||||
drop table t1;
|
||||
|
@ -131,6 +134,7 @@ flush privileges;
|
|||
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
||||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||
|
||||
--error ER_NONEXISTING_GRANT
|
||||
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
|
||||
flush privileges;
|
||||
|
||||
|
@ -138,6 +142,7 @@ SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
|
|||
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
|
||||
|
||||
DROP USER CUser2@localhost;
|
||||
--error ER_CANNOT_USER
|
||||
DROP USER CUser2@LOCALHOST;
|
||||
|
||||
|
||||
|
|
|
@ -1555,3 +1555,56 @@ WHERE COLUMNS.TABLE_SCHEMA = 'test'
|
|||
AND COLUMNS.TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # A test case for Bug#56540 "Exception (crash) in sql_show.cc
|
||||
--echo # during rqg_info_schema test on Windows"
|
||||
--echo # Ensure that we never access memory of a closed table,
|
||||
--echo # in particular, never access table->field[] array.
|
||||
--echo # Before the fix, the below test case, produced
|
||||
--echo # valgrind errors.
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop view if exists v1;
|
||||
--enable_warnings
|
||||
|
||||
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;
|
||||
connect(con1, localhost, root,,);
|
||||
--echo # --> connection con1
|
||||
connection con1;
|
||||
send flush tables;
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table flush" and
|
||||
info = "flush tables";
|
||||
--source include/wait_condition.inc
|
||||
--vertical_results
|
||||
select * from information_schema.views;
|
||||
--horizontal_results
|
||||
unlock tables;
|
||||
|
||||
--echo #
|
||||
--echo # Cleanup.
|
||||
--echo #
|
||||
|
||||
--echo # --> connection con1
|
||||
connection con1;
|
||||
--echo # Reaping 'flush tables'
|
||||
reap;
|
||||
disconnect con1;
|
||||
--source include/wait_until_disconnected.inc
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
|
|
@ -1023,6 +1023,61 @@ DROP EVENT e2;
|
|||
SET DEBUG_SYNC="RESET";
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#55930 Assertion `thd->transaction.stmt.is_empty() ||
|
||||
--echo # thd->in_sub_stmt || (thd->state..
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1(a INT) engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
|
||||
connect (con1, localhost, root);
|
||||
connect (con2, localhost, root);
|
||||
|
||||
--echo # Connection con1
|
||||
connection con1;
|
||||
SET SESSION lock_wait_timeout= 1;
|
||||
SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL opti_recreate WAIT_FOR opti_analyze';
|
||||
--echo # Sending:
|
||||
--send OPTIMIZE TABLE t1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR opti_recreate';
|
||||
SET DEBUG_SYNC= 'after_lock_tables_takes_lock SIGNAL thrlock WAIT_FOR release_thrlock';
|
||||
--echo # Sending:
|
||||
--send INSERT INTO t1 VALUES (3)
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR thrlock';
|
||||
SET DEBUG_SYNC= 'now SIGNAL opti_analyze';
|
||||
|
||||
--echo # Connection con1
|
||||
connection con1;
|
||||
--echo # Reaping: OPTIMIZE TABLE t1
|
||||
--reap
|
||||
SET DEBUG_SYNC= 'now SIGNAL release_thrlock';
|
||||
disconnect con1;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: INSERT INTO t1 VALUES (3)
|
||||
--reap
|
||||
disconnect con2;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
|
1
mysql-test/t/lowercase_table4-master.opt
Executable file
1
mysql-test/t/lowercase_table4-master.opt
Executable file
|
@ -0,0 +1 @@
|
|||
--lower-case-table-names=2
|
56
mysql-test/t/lowercase_table4.test
Executable file
56
mysql-test/t/lowercase_table4.test
Executable file
|
@ -0,0 +1,56 @@
|
|||
--source include/have_case_insensitive_file_system.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#46941 crash with lower_case_table_names=2 and
|
||||
--echo # foreign data dictionary confusion
|
||||
--echo #
|
||||
|
||||
CREATE DATABASE XY;
|
||||
USE XY;
|
||||
|
||||
#
|
||||
# Logs are disabled, since the number of creates tables
|
||||
# and subsequent select statements may vary between
|
||||
# versions
|
||||
#
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
|
||||
let $tcs = `SELECT @@table_open_cache + 1`;
|
||||
|
||||
let $i = $tcs;
|
||||
|
||||
while ($i)
|
||||
{
|
||||
eval CREATE TABLE XY.T_$i (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, d INT,
|
||||
primary key(a, b), unique(b)) ENGINE=InnoDB;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
eval ALTER TABLE XY.T_$tcs ADD INDEX I1 (c, b),
|
||||
ADD CONSTRAINT C1 FOREIGN KEY (c, b) REFERENCES XY.T_1 (a, b);
|
||||
|
||||
eval ALTER TABLE XY.T_$tcs ADD INDEX I2 (b),
|
||||
ADD CONSTRAINT C2 FOREIGN KEY (b) REFERENCES XY.T_1(a);
|
||||
|
||||
let $i = $tcs;
|
||||
while ($i)
|
||||
{
|
||||
eval SELECT * FROM XY.T_$i LIMIT 1;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
DROP DATABASE XY;
|
||||
CREATE DATABASE XY;
|
||||
USE XY;
|
||||
eval CREATE TABLE XY.T_$tcs (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, d INT,
|
||||
PRIMARY KEY(a, b), UNIQUE(b)) ENGINE=InnoDB;
|
||||
#
|
||||
# The bug causes this SELECT to err
|
||||
eval SELECT * FROM XY.T_$tcs LIMIT 1;
|
||||
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
DROP DATABASE XY;
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue