Merge branch '5.5' into 10.0
This commit is contained in:
commit
810cf362ea
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -12,12 +12,16 @@
|
||||
|
||||
# These files should be checked out as is
|
||||
*.result -text -whitespace
|
||||
*.dat -text -whitespace
|
||||
|
||||
storage/connect/mysql-test/connect/std_data/*.txt -text
|
||||
storage/connect/mysql-test/connect/std_data/*.dat -text
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.frm binary
|
||||
*.MYD binary
|
||||
*.MYI binary
|
||||
|
||||
*.c diff=cpp
|
||||
*.h diff=cpp
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -175,7 +175,6 @@ storage/tokudb/ft-index/ft/log_print.cc
|
||||
storage/tokudb/ft-index/ft/logformat
|
||||
storage/tokudb/ft-index/ft/ftverify
|
||||
storage/tokudb/ft-index/ft/tdb-recover
|
||||
storage/tokudb/ft-index/ft/tdb_logprint
|
||||
storage/tokudb/ft-index/ft/tokuftdump
|
||||
storage/tokudb/ft-index/portability/merge_archives_tokuportability_static.cmake
|
||||
storage/tokudb/ft-index/portability/toku_config.h
|
||||
@ -186,11 +185,11 @@ storage/tokudb/ft-index/toku_include/toku_config.h
|
||||
storage/tokudb/ft-index/tools/ba_replay
|
||||
storage/tokudb/ft-index/tools/ftverify
|
||||
storage/tokudb/ft-index/tools/tdb-recover
|
||||
storage/tokudb/ft-index/tools/tdb_logprint
|
||||
storage/tokudb/ft-index/tools/tokudb_dump
|
||||
storage/tokudb/ft-index/tools/tokudb_gen
|
||||
storage/tokudb/ft-index/tools/tokudb_load
|
||||
storage/tokudb/ft-index/tools/tokuftdump
|
||||
storage/tokudb/ft-index/tools/tokuft_logprint
|
||||
storage/tokudb/ft-index/xz/
|
||||
support-files/MySQL-shared-compat.spec
|
||||
support-files/binary-configure
|
||||
|
@ -54,6 +54,7 @@ static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||
static int first_error = 0;
|
||||
static char *opt_skip_database;
|
||||
DYNAMIC_ARRAY tables4repair, tables4rebuild, alter_table_cmds;
|
||||
DYNAMIC_ARRAY views4repair;
|
||||
static char *shared_memory_base_name=0;
|
||||
static uint opt_protocol=0;
|
||||
|
||||
@ -877,11 +878,19 @@ static int handle_request_for_tables(char *tables, size_t length, my_bool view)
|
||||
switch (what_to_do) {
|
||||
case DO_CHECK:
|
||||
op = "CHECK";
|
||||
if (view)
|
||||
{
|
||||
if (opt_fast || opt_check_only_changed)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (opt_quick) end = strmov(end, " QUICK");
|
||||
if (opt_fast) end = strmov(end, " FAST");
|
||||
if (opt_medium_check) end = strmov(end, " MEDIUM"); /* Default */
|
||||
if (opt_extended) end = strmov(end, " EXTENDED");
|
||||
if (opt_medium_check) end = strmov(end, " MEDIUM"); /* Default */
|
||||
if (opt_check_only_changed) end = strmov(end, " CHANGED");
|
||||
}
|
||||
if (opt_upgrade) end = strmov(end, " FOR UPGRADE");
|
||||
break;
|
||||
case DO_REPAIR:
|
||||
@ -966,6 +975,7 @@ static void print_result()
|
||||
uint length_of_db;
|
||||
uint i;
|
||||
my_bool found_error=0, table_rebuild=0;
|
||||
DYNAMIC_ARRAY *array4repair= &tables4repair;
|
||||
DBUG_ENTER("print_result");
|
||||
|
||||
res = mysql_use_result(sock);
|
||||
@ -1002,9 +1012,10 @@ static void print_result()
|
||||
else
|
||||
{
|
||||
char *table_name= prev + (length_of_db+1);
|
||||
insert_dynamic(&tables4repair, table_name);
|
||||
insert_dynamic(array4repair, table_name);
|
||||
}
|
||||
}
|
||||
array4repair= &tables4repair;
|
||||
found_error=0;
|
||||
table_rebuild=0;
|
||||
prev_alter[0]= 0;
|
||||
@ -1020,8 +1031,11 @@ static void print_result()
|
||||
we have to run upgrade on it. In this case we write a nicer message
|
||||
than "Please do "REPAIR TABLE""...
|
||||
*/
|
||||
if (!strcmp(row[2],"error") && strstr(row[3],"REPAIR TABLE"))
|
||||
if (!strcmp(row[2],"error") && strstr(row[3],"REPAIR "))
|
||||
{
|
||||
printf("%-50s %s", row[0], "Needs upgrade");
|
||||
array4repair= strstr(row[3], "VIEW") ? &views4repair : &tables4repair;
|
||||
}
|
||||
else
|
||||
printf("%s\n%-9s: %s", row[0], row[2], row[3]);
|
||||
if (opt_auto_repair && strcmp(row[2],"note"))
|
||||
@ -1052,7 +1066,7 @@ static void print_result()
|
||||
else
|
||||
{
|
||||
char *table_name= prev + (length_of_db+1);
|
||||
insert_dynamic(&tables4repair, table_name);
|
||||
insert_dynamic(array4repair, table_name);
|
||||
}
|
||||
}
|
||||
mysql_free_result(res);
|
||||
@ -1172,6 +1186,8 @@ int main(int argc, char **argv)
|
||||
if (opt_auto_repair &&
|
||||
(my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,
|
||||
64, MYF(0)) ||
|
||||
my_init_dynamic_array(&views4repair, sizeof(char)*(NAME_LEN*2+2),16,
|
||||
64, MYF(0)) ||
|
||||
my_init_dynamic_array(&tables4rebuild, sizeof(char)*(NAME_LEN*2+2),16,
|
||||
64, MYF(0)) ||
|
||||
my_init_dynamic_array(&alter_table_cmds, MAX_ALTER_STR_SIZE, 0, 1,
|
||||
@ -1202,6 +1218,13 @@ int main(int argc, char **argv)
|
||||
rebuild_table((char*) dynamic_array_ptr(&tables4rebuild, i));
|
||||
for (i = 0; i < alter_table_cmds.elements ; i++)
|
||||
run_query((char*) dynamic_array_ptr(&alter_table_cmds, i), 1);
|
||||
if (!opt_silent && views4repair.elements)
|
||||
puts("\nRepairing views");
|
||||
for (i = 0; i < views4repair.elements ; i++)
|
||||
{
|
||||
char *name= (char*) dynamic_array_ptr(&views4repair, i);
|
||||
handle_request_for_tables(name, fixed_name_length(name), TRUE);
|
||||
}
|
||||
}
|
||||
ret= MY_TEST(first_error);
|
||||
|
||||
@ -1209,8 +1232,10 @@ int main(int argc, char **argv)
|
||||
dbDisconnect(current_host);
|
||||
if (opt_auto_repair)
|
||||
{
|
||||
delete_dynamic(&views4repair);
|
||||
delete_dynamic(&tables4repair);
|
||||
delete_dynamic(&tables4rebuild);
|
||||
delete_dynamic(&alter_table_cmds);
|
||||
}
|
||||
end1:
|
||||
my_free(opt_password);
|
||||
|
@ -58,7 +58,7 @@ FOREACH(file ${ABI_HEADERS})
|
||||
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND ${COMPILER}
|
||||
-E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
|
||||
-E -nostdinc -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
|
||||
-I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql
|
||||
${file}
|
||||
ERROR_QUIET OUTPUT_FILE ${tmpfile})
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2009, 2015, Oracle and/or its affiliates.
|
||||
#
|
||||
# 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
|
||||
@ -60,9 +60,9 @@ IF(NOT GIT_EXECUTABLE)
|
||||
|
||||
# Save bison output first.
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
|
||||
${CMAKE_BINARY_DIR}/sql_yacc.cc COPY_ONLY)
|
||||
${CMAKE_BINARY_DIR}/sql_yacc.cc COPYONLY)
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
|
||||
${CMAKE_BINARY_DIR}/sql_yacc.h COPY_ONLY)
|
||||
${CMAKE_BINARY_DIR}/sql_yacc.h COPYONLY)
|
||||
|
||||
IF(CMAKE_GENERATOR MATCHES "Makefiles")
|
||||
# make clean
|
||||
@ -74,9 +74,9 @@ IF(NOT GIT_EXECUTABLE)
|
||||
|
||||
# Restore bison output
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.cc
|
||||
${CMAKE_BINARY_DIR}/sql/sql_yacc.cc COPY_ONLY)
|
||||
${CMAKE_BINARY_DIR}/sql/sql_yacc.cc COPYONLY)
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.h
|
||||
${CMAKE_BINARY_DIR}/sql/sql_yacc.h COPY_ONLY)
|
||||
${CMAKE_BINARY_DIR}/sql/sql_yacc.h COPYONLY)
|
||||
FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.cc)
|
||||
FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.h)
|
||||
ENDIF()
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $NetBSD: terminal.h,v 1.3 2011/07/29 23:44:45 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* Copyright (c) 1992, 2015
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
@ -103,7 +103,7 @@ protected int terminal_settc(EditLine *, int, const Char **);
|
||||
protected int terminal_gettc(EditLine *, int, char **);
|
||||
protected int terminal_telltc(EditLine *, int, const Char **);
|
||||
protected int terminal_echotc(EditLine *, int, const Char **);
|
||||
protected void terminal_writec(EditLine *, Int);
|
||||
protected int terminal_writec(EditLine *, Int);
|
||||
protected int terminal__putc(EditLine *, Int);
|
||||
protected void terminal__flush(EditLine *);
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $NetBSD: emacs.c,v 1.25 2011/07/29 15:16:33 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* Copyright (c) 1992, 2015
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
@ -58,8 +58,10 @@ em_delete_or_list(EditLine *el, Int c)
|
||||
/* if I'm at the end */
|
||||
if (el->el_line.cursor == el->el_line.buffer) {
|
||||
/* and the beginning */
|
||||
terminal_writec(el, c); /* then do an EOF */
|
||||
if(!(terminal_writec(el, c))) /* then do an EOF */
|
||||
return CC_EOF;
|
||||
else
|
||||
return CC_ERROR;
|
||||
} else {
|
||||
/*
|
||||
* Here we could list completions, but it is an
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $NetBSD: terminal.c,v 1.10 2011/10/04 15:27:04 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* Copyright (c) 1992, 2015
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
@ -1271,14 +1271,19 @@ terminal__flush(EditLine *el)
|
||||
/* terminal_writec():
|
||||
* Write the given character out, in a human readable form
|
||||
*/
|
||||
protected void
|
||||
protected int
|
||||
terminal_writec(EditLine *el, Int c)
|
||||
{
|
||||
Char visbuf[VISUAL_WIDTH_MAX +1];
|
||||
ssize_t vcnt = ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c);
|
||||
if(vcnt == -1)
|
||||
return 1; /* Error due to insufficient space */
|
||||
else {
|
||||
visbuf[vcnt] = '\0';
|
||||
terminal_overwrite(el, visbuf, (size_t)vcnt);
|
||||
terminal__flush(el);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $NetBSD: vi.c,v 1.41 2011/10/04 15:27:04 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* Copyright (c) 1992, 2015
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
@ -607,8 +607,10 @@ vi_list_or_eof(EditLine *el, Int c)
|
||||
|
||||
if (el->el_line.cursor == el->el_line.lastchar) {
|
||||
if (el->el_line.cursor == el->el_line.buffer) {
|
||||
terminal_writec(el, c); /* then do a EOF */
|
||||
if(!(terminal_writec(el, c))) /* then do a EOF */
|
||||
return CC_EOF;
|
||||
else
|
||||
return CC_ERROR;
|
||||
} else {
|
||||
/*
|
||||
* Here we could list completions, but it is an
|
||||
|
@ -202,7 +202,7 @@
|
||||
#cmakedefine HAVE_MADVISE 1
|
||||
#cmakedefine HAVE_DECL_MADVISE 1
|
||||
#cmakedefine HAVE_DECL_TGOTO 1
|
||||
#cmakedefine HAVE_DECL_MHA_MAPSIZE_VA
|
||||
#cmakedefine HAVE_DECL_MHA_MAPSIZE_VA 1
|
||||
#cmakedefine HAVE_MALLINFO 1
|
||||
#cmakedefine HAVE_MEMCPY 1
|
||||
#cmakedefine HAVE_MEMMOVE 1
|
||||
@ -395,7 +395,7 @@
|
||||
|
||||
#cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@
|
||||
|
||||
#cmakedefine HAVE_MBSTATE_T
|
||||
#cmakedefine HAVE_MBSTATE_T 1
|
||||
|
||||
#define MAX_INDEXES 64
|
||||
|
||||
@ -430,15 +430,15 @@
|
||||
#cmakedefine HAVE_WCTYPE_H 1
|
||||
#cmakedefine HAVE_WCHAR_H 1
|
||||
#cmakedefine HAVE_LANGINFO_H 1
|
||||
#cmakedefine HAVE_MBRLEN
|
||||
#cmakedefine HAVE_MBSCMP
|
||||
#cmakedefine HAVE_MBSRTOWCS
|
||||
#cmakedefine HAVE_WCRTOMB
|
||||
#cmakedefine HAVE_MBRTOWC
|
||||
#cmakedefine HAVE_WCSCOLL
|
||||
#cmakedefine HAVE_WCSDUP
|
||||
#cmakedefine HAVE_WCWIDTH
|
||||
#cmakedefine HAVE_WCTYPE
|
||||
#cmakedefine HAVE_MBRLEN 1
|
||||
#cmakedefine HAVE_MBSCMP 1
|
||||
#cmakedefine HAVE_MBSRTOWCS 1
|
||||
#cmakedefine HAVE_WCRTOMB 1
|
||||
#cmakedefine HAVE_MBRTOWC 1
|
||||
#cmakedefine HAVE_WCSCOLL 1
|
||||
#cmakedefine HAVE_WCSDUP 1
|
||||
#cmakedefine HAVE_WCWIDTH 1
|
||||
#cmakedefine HAVE_WCTYPE 1
|
||||
#cmakedefine HAVE_ISWLOWER 1
|
||||
#cmakedefine HAVE_ISWUPPER 1
|
||||
#cmakedefine HAVE_TOWLOWER 1
|
||||
@ -452,7 +452,7 @@
|
||||
#cmakedefine HAVE_STRCASECMP 1
|
||||
#cmakedefine HAVE_STRNCASECMP 1
|
||||
#cmakedefine HAVE_STRDUP 1
|
||||
#cmakedefine HAVE_LANGINFO_CODESET
|
||||
#cmakedefine HAVE_LANGINFO_CODESET 1
|
||||
#cmakedefine HAVE_TCGETATTR 1
|
||||
#cmakedefine HAVE_FLOCKFILE 1
|
||||
|
||||
|
7
debian/dist/Debian/control
vendored
7
debian/dist/Debian/control
vendored
@ -4,7 +4,12 @@ Priority: optional
|
||||
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
||||
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper, ${CMAKE_DEP}libaio-dev, libjemalloc-dev (>= 3.0.0)
|
||||
Build-Depends: procps | hurd, debhelper, libncurses5-dev (>= 5.0-6),
|
||||
perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3),
|
||||
zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV},
|
||||
libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath,
|
||||
dpatch, gawk, bison, lsb-release, hardening-wrapper,
|
||||
${CMAKE_DEP}libaio-dev, libjemalloc-dev (>= 3.0.0)
|
||||
Standards-Version: 3.8.3
|
||||
Homepage: http://mariadb.org/
|
||||
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files
|
||||
|
7
debian/dist/Ubuntu/control
vendored
7
debian/dist/Ubuntu/control
vendored
@ -4,7 +4,12 @@ Priority: optional
|
||||
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
||||
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper, ${CMAKE_DEP}libaio-dev, libjemalloc-dev (>= 3.0.0)
|
||||
Build-Depends: procps | hurd, debhelper, libncurses5-dev (>= 5.0-6),
|
||||
perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3),
|
||||
zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV},
|
||||
libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath,
|
||||
dpatch, gawk, bison, lsb-release, hardening-wrapper,
|
||||
${CMAKE_DEP}libaio-dev, libjemalloc-dev (>= 3.0.0)
|
||||
Standards-Version: 3.8.2
|
||||
Homepage: http://mariadb.org/
|
||||
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files
|
||||
|
@ -1,7 +1,5 @@
|
||||
typedef char my_bool;
|
||||
typedef int my_socket;
|
||||
#include "mysql_version.h"
|
||||
#include "mysql_com.h"
|
||||
enum enum_server_command
|
||||
{
|
||||
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
|
||||
@ -145,7 +143,6 @@ void get_tty_password_buff(const char *opt_message, char *to, size_t length);
|
||||
const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
|
||||
my_bool my_thread_init(void);
|
||||
void my_thread_end(void);
|
||||
#include "mysql_time.h"
|
||||
typedef long my_time_t;
|
||||
enum enum_mysql_timestamp_type
|
||||
{
|
||||
@ -159,7 +156,6 @@ typedef struct st_mysql_time
|
||||
my_bool neg;
|
||||
enum enum_mysql_timestamp_type time_type;
|
||||
} MYSQL_TIME;
|
||||
#include "my_list.h"
|
||||
typedef struct st_list {
|
||||
struct st_list *prev,*next;
|
||||
void *data;
|
||||
@ -201,8 +197,6 @@ typedef struct st_mysql_field {
|
||||
typedef char **MYSQL_ROW;
|
||||
typedef unsigned int MYSQL_FIELD_OFFSET;
|
||||
typedef unsigned long long my_ulonglong;
|
||||
#include "typelib.h"
|
||||
#include "my_alloc.h"
|
||||
typedef struct st_used_mem
|
||||
{
|
||||
struct st_used_mem *next;
|
||||
@ -246,7 +240,6 @@ typedef struct st_mysql_rows {
|
||||
unsigned long length;
|
||||
} MYSQL_ROWS;
|
||||
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET;
|
||||
#include "my_alloc.h"
|
||||
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
|
||||
typedef struct st_mysql_data {
|
||||
MYSQL_ROWS *data;
|
||||
|
@ -3,7 +3,6 @@ struct st_mysql_client_plugin
|
||||
int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *);
|
||||
};
|
||||
struct st_mysql;
|
||||
#include <mysql/plugin_auth_common.h>
|
||||
typedef struct st_plugin_vio_info
|
||||
{
|
||||
enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,
|
||||
@ -24,7 +23,6 @@ struct st_mysql_client_plugin_AUTHENTICATION
|
||||
int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *);
|
||||
int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql);
|
||||
};
|
||||
#include <mysql/auth_dialog_client.h>
|
||||
struct st_mysql;
|
||||
typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql,
|
||||
int type, const char *prompt, char *buf, int buf_len);
|
||||
|
@ -1,15 +1,11 @@
|
||||
#include "plugin.h"
|
||||
typedef char my_bool;
|
||||
typedef void * MYSQL_PLUGIN;
|
||||
#include <mysql/services.h>
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
extern struct my_snprintf_service_st {
|
||||
size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
|
||||
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
|
||||
} *my_snprintf_service;
|
||||
size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
|
||||
#include <mysql/service_thd_alloc.h>
|
||||
struct st_mysql_lex_string
|
||||
{
|
||||
char *str;
|
||||
@ -33,7 +29,6 @@ void *thd_memdup(void* thd, const void* str, unsigned int size);
|
||||
MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
|
||||
const char *str, unsigned int size,
|
||||
int allocate_lex_string);
|
||||
#include <mysql/service_thd_wait.h>
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_SLEEP= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
|
||||
} *thd_wait_service;
|
||||
void thd_wait_begin(void* thd, int wait_type);
|
||||
void thd_wait_end(void* thd);
|
||||
#include <mysql/service_progress_report.h>
|
||||
extern struct progress_report_service_st {
|
||||
void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
|
||||
void (*thd_progress_report_func)(void* thd,
|
||||
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
|
||||
void thd_progress_end(void* thd);
|
||||
const char *set_thd_proc_info(void*, const char * info, const char *func,
|
||||
const char *file, unsigned int line);
|
||||
#include <mysql/service_debug_sync.h>
|
||||
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
|
||||
#include <mysql/service_kill_statement.h>
|
||||
enum thd_kill_levels {
|
||||
THD_IS_NOT_KILLED=0,
|
||||
THD_ABORT_SOFTLY=50,
|
||||
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
|
||||
enum thd_kill_levels (*thd_kill_level_func)(const void*);
|
||||
} *thd_kill_statement_service;
|
||||
enum thd_kill_levels thd_kill_level(const void*);
|
||||
#include <mysql/service_thd_timezone.h>
|
||||
#include "mysql_time.h"
|
||||
typedef long my_time_t;
|
||||
enum enum_mysql_timestamp_type
|
||||
{
|
||||
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
|
||||
} *thd_timezone_service;
|
||||
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode);
|
||||
void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t);
|
||||
#include <mysql/service_sha1.h>
|
||||
extern struct my_sha1_service_st {
|
||||
void (*my_sha1_type)(unsigned char*, const char*, size_t);
|
||||
void (*my_sha1_multi_type)(unsigned char*, ...);
|
||||
} *my_sha1_service;
|
||||
void my_sha1(unsigned char*, const char*, size_t);
|
||||
void my_sha1_multi(unsigned char*, ...);
|
||||
#include <mysql/service_logger.h>
|
||||
typedef struct logger_handle_st LOGGER_HANDLE;
|
||||
extern struct logger_service_st {
|
||||
void (*logger_init_mutexes)();
|
||||
@ -137,14 +125,12 @@ extern struct logger_service_st {
|
||||
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
|
||||
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
|
||||
int logger_rotate(LOGGER_HANDLE *log);
|
||||
#include <mysql/service_thd_autoinc.h>
|
||||
extern struct thd_autoinc_service_st {
|
||||
void (*thd_get_autoinc_func)(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
} *thd_autoinc_service;
|
||||
void thd_get_autoinc(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
#include <mysql/service_thd_error_context.h>
|
||||
extern struct thd_error_context_service_st {
|
||||
const char *(*thd_get_error_message_func)(const void* thd);
|
||||
unsigned int (*thd_get_error_number_func)(const void* thd);
|
||||
@ -223,8 +209,6 @@ struct st_maria_plugin
|
||||
const char *version_info;
|
||||
unsigned int maturity;
|
||||
};
|
||||
#include "plugin_ftparser.h"
|
||||
#include "plugin.h"
|
||||
enum enum_ftparser_mode
|
||||
{
|
||||
MYSQL_FTPARSER_SIMPLE_MODE= 0,
|
||||
|
@ -1,15 +1,11 @@
|
||||
#include <mysql/plugin.h>
|
||||
typedef char my_bool;
|
||||
typedef void * MYSQL_PLUGIN;
|
||||
#include <mysql/services.h>
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
extern struct my_snprintf_service_st {
|
||||
size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
|
||||
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
|
||||
} *my_snprintf_service;
|
||||
size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
|
||||
#include <mysql/service_thd_alloc.h>
|
||||
struct st_mysql_lex_string
|
||||
{
|
||||
char *str;
|
||||
@ -33,7 +29,6 @@ void *thd_memdup(void* thd, const void* str, unsigned int size);
|
||||
MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
|
||||
const char *str, unsigned int size,
|
||||
int allocate_lex_string);
|
||||
#include <mysql/service_thd_wait.h>
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_SLEEP= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
|
||||
} *thd_wait_service;
|
||||
void thd_wait_begin(void* thd, int wait_type);
|
||||
void thd_wait_end(void* thd);
|
||||
#include <mysql/service_progress_report.h>
|
||||
extern struct progress_report_service_st {
|
||||
void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
|
||||
void (*thd_progress_report_func)(void* thd,
|
||||
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
|
||||
void thd_progress_end(void* thd);
|
||||
const char *set_thd_proc_info(void*, const char * info, const char *func,
|
||||
const char *file, unsigned int line);
|
||||
#include <mysql/service_debug_sync.h>
|
||||
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
|
||||
#include <mysql/service_kill_statement.h>
|
||||
enum thd_kill_levels {
|
||||
THD_IS_NOT_KILLED=0,
|
||||
THD_ABORT_SOFTLY=50,
|
||||
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
|
||||
enum thd_kill_levels (*thd_kill_level_func)(const void*);
|
||||
} *thd_kill_statement_service;
|
||||
enum thd_kill_levels thd_kill_level(const void*);
|
||||
#include <mysql/service_thd_timezone.h>
|
||||
#include "mysql_time.h"
|
||||
typedef long my_time_t;
|
||||
enum enum_mysql_timestamp_type
|
||||
{
|
||||
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
|
||||
} *thd_timezone_service;
|
||||
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode);
|
||||
void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t);
|
||||
#include <mysql/service_sha1.h>
|
||||
extern struct my_sha1_service_st {
|
||||
void (*my_sha1_type)(unsigned char*, const char*, size_t);
|
||||
void (*my_sha1_multi_type)(unsigned char*, ...);
|
||||
} *my_sha1_service;
|
||||
void my_sha1(unsigned char*, const char*, size_t);
|
||||
void my_sha1_multi(unsigned char*, ...);
|
||||
#include <mysql/service_logger.h>
|
||||
typedef struct logger_handle_st LOGGER_HANDLE;
|
||||
extern struct logger_service_st {
|
||||
void (*logger_init_mutexes)();
|
||||
@ -137,14 +125,12 @@ extern struct logger_service_st {
|
||||
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
|
||||
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
|
||||
int logger_rotate(LOGGER_HANDLE *log);
|
||||
#include <mysql/service_thd_autoinc.h>
|
||||
extern struct thd_autoinc_service_st {
|
||||
void (*thd_get_autoinc_func)(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
} *thd_autoinc_service;
|
||||
void thd_get_autoinc(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
#include <mysql/service_thd_error_context.h>
|
||||
extern struct thd_error_context_service_st {
|
||||
const char *(*thd_get_error_message_func)(const void* thd);
|
||||
unsigned int (*thd_get_error_number_func)(const void* thd);
|
||||
@ -223,8 +209,6 @@ struct st_maria_plugin
|
||||
const char *version_info;
|
||||
unsigned int maturity;
|
||||
};
|
||||
#include "plugin_ftparser.h"
|
||||
#include "plugin.h"
|
||||
enum enum_ftparser_mode
|
||||
{
|
||||
MYSQL_FTPARSER_SIMPLE_MODE= 0,
|
||||
@ -314,7 +298,6 @@ void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_set_ha_data(void* thd, const struct handlerton *hton,
|
||||
const void *ha_data);
|
||||
void thd_wakeup_subsequent_commits(void* thd, int wakeup_error);
|
||||
#include <mysql/plugin_auth_common.h>
|
||||
typedef struct st_plugin_vio_info
|
||||
{
|
||||
enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,
|
||||
|
@ -1,15 +1,11 @@
|
||||
#include "plugin.h"
|
||||
typedef char my_bool;
|
||||
typedef void * MYSQL_PLUGIN;
|
||||
#include <mysql/services.h>
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
extern struct my_snprintf_service_st {
|
||||
size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
|
||||
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
|
||||
} *my_snprintf_service;
|
||||
size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
|
||||
#include <mysql/service_thd_alloc.h>
|
||||
struct st_mysql_lex_string
|
||||
{
|
||||
char *str;
|
||||
@ -33,7 +29,6 @@ void *thd_memdup(void* thd, const void* str, unsigned int size);
|
||||
MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
|
||||
const char *str, unsigned int size,
|
||||
int allocate_lex_string);
|
||||
#include <mysql/service_thd_wait.h>
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_SLEEP= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
|
||||
} *thd_wait_service;
|
||||
void thd_wait_begin(void* thd, int wait_type);
|
||||
void thd_wait_end(void* thd);
|
||||
#include <mysql/service_progress_report.h>
|
||||
extern struct progress_report_service_st {
|
||||
void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
|
||||
void (*thd_progress_report_func)(void* thd,
|
||||
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
|
||||
void thd_progress_end(void* thd);
|
||||
const char *set_thd_proc_info(void*, const char * info, const char *func,
|
||||
const char *file, unsigned int line);
|
||||
#include <mysql/service_debug_sync.h>
|
||||
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
|
||||
#include <mysql/service_kill_statement.h>
|
||||
enum thd_kill_levels {
|
||||
THD_IS_NOT_KILLED=0,
|
||||
THD_ABORT_SOFTLY=50,
|
||||
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
|
||||
enum thd_kill_levels (*thd_kill_level_func)(const void*);
|
||||
} *thd_kill_statement_service;
|
||||
enum thd_kill_levels thd_kill_level(const void*);
|
||||
#include <mysql/service_thd_timezone.h>
|
||||
#include "mysql_time.h"
|
||||
typedef long my_time_t;
|
||||
enum enum_mysql_timestamp_type
|
||||
{
|
||||
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
|
||||
} *thd_timezone_service;
|
||||
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode);
|
||||
void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t);
|
||||
#include <mysql/service_sha1.h>
|
||||
extern struct my_sha1_service_st {
|
||||
void (*my_sha1_type)(unsigned char*, const char*, size_t);
|
||||
void (*my_sha1_multi_type)(unsigned char*, ...);
|
||||
} *my_sha1_service;
|
||||
void my_sha1(unsigned char*, const char*, size_t);
|
||||
void my_sha1_multi(unsigned char*, ...);
|
||||
#include <mysql/service_logger.h>
|
||||
typedef struct logger_handle_st LOGGER_HANDLE;
|
||||
extern struct logger_service_st {
|
||||
void (*logger_init_mutexes)();
|
||||
@ -137,14 +125,12 @@ extern struct logger_service_st {
|
||||
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
|
||||
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
|
||||
int logger_rotate(LOGGER_HANDLE *log);
|
||||
#include <mysql/service_thd_autoinc.h>
|
||||
extern struct thd_autoinc_service_st {
|
||||
void (*thd_get_autoinc_func)(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
} *thd_autoinc_service;
|
||||
void thd_get_autoinc(const void* thd,
|
||||
unsigned long* off, unsigned long* inc);
|
||||
#include <mysql/service_thd_error_context.h>
|
||||
extern struct thd_error_context_service_st {
|
||||
const char *(*thd_get_error_message_func)(const void* thd);
|
||||
unsigned int (*thd_get_error_number_func)(const void* thd);
|
||||
@ -223,7 +209,6 @@ struct st_maria_plugin
|
||||
const char *version_info;
|
||||
unsigned int maturity;
|
||||
};
|
||||
#include "plugin_ftparser.h"
|
||||
struct st_mysql_daemon
|
||||
{
|
||||
int interface_version;
|
||||
|
@ -1,4 +1,3 @@
|
||||
#include "mysql/psi/psi.h"
|
||||
C_MODE_START
|
||||
struct TABLE_SHARE;
|
||||
struct sql_digest_storage;
|
||||
|
@ -1,4 +1,3 @@
|
||||
#include "mysql/psi/psi.h"
|
||||
C_MODE_START
|
||||
struct TABLE_SHARE;
|
||||
struct sql_digest_storage;
|
||||
|
@ -381,7 +381,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
CONFIGURE_FILE(
|
||||
${VERSION_SCRIPT_TEMPLATE}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld
|
||||
@ONLY@
|
||||
@ONLY
|
||||
)
|
||||
SET(VERSION_SCRIPT_LINK_FLAGS
|
||||
"-Wl,${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld")
|
||||
|
@ -6040,6 +6040,21 @@ DROP TABLE t1;
|
||||
# End of ctype_utf8_ilseq.inc
|
||||
#
|
||||
#
|
||||
# MDEV-8067 correct fix for MySQL Bug # 19699237: UNINITIALIZED VARIABLE IN ITEM_FIELD::STR_RESULT
|
||||
#
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8);
|
||||
CREATE TABLE t2 (a VARCHAR(10) CHARACTER SET latin1);
|
||||
INSERT INTO t1 VALUES ('aaa');
|
||||
INSERT INTO t2 VALUES ('aaa');
|
||||
SELECT (SELECT CONCAT(a),1 FROM t1) <=> (SELECT CONCAT(a),1 FROM t2);
|
||||
(SELECT CONCAT(a),1 FROM t1) <=> (SELECT CONCAT(a),1 FROM t2)
|
||||
1
|
||||
INSERT INTO t1 VALUES ('aaa');
|
||||
INSERT INTO t2 VALUES ('aaa');
|
||||
SELECT (SELECT CONCAT(a),1 FROM t1) <=> (SELECT CONCAT(a),1 FROM t2);
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
#
|
||||
|
@ -1455,6 +1455,12 @@ Warnings:
|
||||
Warning 1918 Encountered illegal value '18446744073709552001' when converting to INT
|
||||
Note 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||
#
|
||||
# MDEV-7505 - Too large scale in DECIMAL dynamic column getter crashes
|
||||
# mysqld
|
||||
#
|
||||
SELECT COLUMN_GET(`x`, 'y' AS DECIMAL(5,34));
|
||||
ERROR 42000: Too big scale 34 specified for ''y''. Maximum is 30.
|
||||
#
|
||||
# test of symbolic names
|
||||
#
|
||||
# creation test (names)
|
||||
|
1
mysql-test/r/empty_server_name-8224.result
Normal file
1
mysql-test/r/empty_server_name-8224.result
Normal file
@ -0,0 +1 @@
|
||||
create server '' foreign data wrapper w2 options (host '127.0.0.1');
|
@ -2342,7 +2342,7 @@ DROP TABLE t1;
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
|
||||
create table t2 (c int, d int);
|
||||
insert into t2 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
|
||||
insert into t2 values (1,11), (2,22), (4,44);
|
||||
select distinct a,sum(b), (select d from t2 where c=a order by max(b) limit 1) from t1 group by a order by max(b);
|
||||
a sum(b) (select d from t2 where c=a order by max(b) limit 1)
|
||||
1 23 11
|
||||
|
@ -6,3 +6,15 @@ select variable_name from information_schema.session_variables where variable_na
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
variable_name
|
||||
BASEDIR
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
a exists (select 1 from information_schema.columns where table_schema=concat('tes',a))
|
||||
a 0
|
||||
t 1
|
||||
z 0
|
||||
show status like 'created_tmp_tables';
|
||||
Variable_name Value
|
||||
Created_tmp_tables 43
|
||||
drop table t1;
|
||||
|
@ -2527,6 +2527,17 @@ test.t1 check error Size of indexfile is: 1024 Should be: 2048
|
||||
test.t1 check warning Size of datafile is: 14 Should be: 7
|
||||
test.t1 check error Corrupt
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-3870 - Valgrind warnings on OPTIMIZE MyISAM or Aria TABLE with
|
||||
# disabled keys
|
||||
#
|
||||
CREATE TABLE t1 (a INT, KEY(a)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(0);
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
DROP TABLE t1;
|
||||
show variables like 'myisam_block_size';
|
||||
Variable_name Value
|
||||
myisam_block_size 1024
|
||||
|
@ -60,3 +60,12 @@ INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset,
|
||||
#
|
||||
TRUNCATE TABLE time_zone_leap_second;
|
||||
ALTER TABLE time_zone_leap_second ORDER BY Transition_time;
|
||||
#
|
||||
# MDEV-6236 - [PATCH] mysql_tzinfo_to_sql may produce invalid SQL
|
||||
#
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
TRUNCATE TABLE time_zone_transition_type;
|
||||
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
||||
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
||||
|
@ -3,6 +3,41 @@ drop table if exists t1,v1,v2,v3,v4,v1badcheck;
|
||||
drop view if exists t1,v1,v2,v3,v4,v1badcheck;
|
||||
create table t1(a int);
|
||||
create table kv(k varchar(30) NOT NULL PRIMARY KEY,v varchar(50));
|
||||
create view v1 as select 1;
|
||||
repair table t1 quick;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
repair table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
repair table t1 use_frm;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
repair table t1 from mysql;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'from mysql' at line 1
|
||||
repair view v1 quick;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'quick' at line 1
|
||||
repair view v1 extended;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'extended' at line 1
|
||||
repair view v1 use_frm;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'use_frm' at line 1
|
||||
repair view v1 from mysql;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 repair status OK
|
||||
check view v1 quick;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'quick' at line 1
|
||||
check view v1 fast;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'fast' at line 1
|
||||
check view v1 medium;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'medium' at line 1
|
||||
check view v1 extended;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'extended' at line 1
|
||||
check view v1 changed;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'changed' at line 1
|
||||
check view v1 for upgrade;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 check status OK
|
||||
drop view v1;
|
||||
flush tables;
|
||||
check view v1;
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -347,3 +347,26 @@ CREATE TABLE test.`t.1` (id int);
|
||||
mysqlcheck test t.1
|
||||
test.t.1 OK
|
||||
drop table test.`t.1`;
|
||||
create view v1 as select 1;
|
||||
mysqlcheck --process-views test
|
||||
test.v1 OK
|
||||
mysqlcheck --process-views --extended test
|
||||
test.v1 OK
|
||||
mysqlcheck --process-views --fast test
|
||||
mysqlcheck --process-views --quick test
|
||||
test.v1 OK
|
||||
mysqlcheck --process-views --check-only-changed test
|
||||
mysqlcheck --process-views --medium-check test
|
||||
test.v1 OK
|
||||
mysqlcheck --process-views --check-upgrade test
|
||||
test.v1 OK
|
||||
drop view v1;
|
||||
create table t1(a int);
|
||||
mysqlcheck --process-views --check-upgrade --auto-repair test
|
||||
test.t1 OK
|
||||
test.v1 Needs upgrade
|
||||
|
||||
Repairing views
|
||||
test.v1 OK
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
@ -380,33 +380,33 @@ DROP TABLE t1;
|
||||
create table t1 (a int) engine=innodb partition by hash(a) ;
|
||||
show table status like 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
engine = innodb
|
||||
partition by key (a);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
insert into t1 values (0), (1), (2), (3);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 4 4096 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 4 4096 16384 0 0 # NULL # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
drop table t1;
|
||||
create table t1 (a int auto_increment primary key)
|
||||
engine = innodb
|
||||
partition by key (a);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # 1 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 2 8192 16384 0 0 # 1 # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 4 4096 16384 0 0 # 5 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 4 4096 16384 0 0 # 5 # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB 10 Compact 8 2048 16384 0 0 # 9 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||
t1 InnoDB 10 Compact 8 2048 16384 0 0 # 9 # NULL NULL latin1_swedish_ci NULL partitioned
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
partition by key (a)
|
||||
@ -588,6 +588,17 @@ a b
|
||||
0 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #17299181 CREATE_TIME AND UPDATE_TIME ARE
|
||||
# WRONG FOR PARTITIONED TABLES
|
||||
#
|
||||
CREATE TABLE t1 (a int, PRIMARY KEY (a)) ENGINE=InnoDB
|
||||
PARTITION BY HASH (a) PARTITIONS 2;
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE
|
||||
CREATE_TIME IS NOT NULL AND TABLE_NAME='t1';
|
||||
COUNT(*)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# BUG#12912171 - ASSERTION FAILED: QUICK->HEAD->READ_SET ==
|
||||
# SAVE_READ_SET
|
||||
#
|
||||
|
39
mysql-test/r/range_innodb.result
Normal file
39
mysql-test/r/range_innodb.result
Normal file
@ -0,0 +1,39 @@
|
||||
#
|
||||
# Range optimizer (and related) tests that need InnoDB.
|
||||
#
|
||||
drop table if exists t0, t1, t2;
|
||||
#
|
||||
# MDEV-6735: Range checked for each record used with key
|
||||
#
|
||||
create table t0(a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1(a int);
|
||||
insert into t1 select A.a + B.a* 10 + C.a * 100 + D.a * 1000
|
||||
from t0 A, t0 B, t0 C, t0 D;
|
||||
create table t2 (
|
||||
a int,
|
||||
b int,
|
||||
filler1 char(100),
|
||||
filler2 char(100),
|
||||
filler3 char(100),
|
||||
filler4 char(100),
|
||||
key(a),
|
||||
key(b)
|
||||
) engine=innodb;
|
||||
insert into t2
|
||||
select
|
||||
a,a,
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10)
|
||||
from t1;
|
||||
analyze table t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
# The following must not use "Range checked for each record":
|
||||
explain select * from t0 left join t2 on t2.a <t0.a and t2.b between 50 and 250;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 ALL NULL NULL NULL NULL 10
|
||||
1 SIMPLE t2 range a,b b 5 NULL 201 Using where; Using join buffer (flat, BNL join)
|
||||
drop table t0,t1,t2;
|
15
mysql-test/r/ssl_7937,nossl.result
Normal file
15
mysql-test/r/ssl_7937,nossl.result
Normal file
@ -0,0 +1,15 @@
|
||||
create procedure have_ssl()
|
||||
select if(variable_value > '','yes','no') as 'have_ssl'
|
||||
from information_schema.session_status
|
||||
where variable_name='ssl_cipher';
|
||||
mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
|
||||
have_ssl
|
||||
no
|
||||
mysql --ssl -e "call test.have_ssl()"
|
||||
have_ssl
|
||||
no
|
||||
mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it
|
||||
mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it
|
||||
drop procedure have_ssl;
|
16
mysql-test/r/ssl_7937.result
Normal file
16
mysql-test/r/ssl_7937.result
Normal file
@ -0,0 +1,16 @@
|
||||
create procedure have_ssl()
|
||||
select if(variable_value > '','yes','no') as 'have_ssl'
|
||||
from information_schema.session_status
|
||||
where variable_name='ssl_cipher';
|
||||
mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
|
||||
have_ssl
|
||||
yes
|
||||
mysql --ssl -e "call test.have_ssl()"
|
||||
have_ssl
|
||||
yes
|
||||
mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
have_ssl
|
||||
yes
|
||||
mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate
|
||||
drop procedure have_ssl;
|
33
mysql-test/r/truncate-stale-6500.result
Normal file
33
mysql-test/r/truncate-stale-6500.result
Normal file
@ -0,0 +1,33 @@
|
||||
SET GLOBAL query_cache_size=1024*1024*8;
|
||||
CREATE TABLE `test` (
|
||||
`uniqueId` INT NOT NULL,
|
||||
`partitionId` INT NOT NULL,
|
||||
PRIMARY KEY (`uniqueId`,`partitionId`)
|
||||
) ENGINE=InnoDB PARTITION BY LIST (partitionId) (
|
||||
PARTITION p01 VALUES IN (1),
|
||||
PARTITION p02 VALUES IN (2)
|
||||
);
|
||||
INSERT INTO `test`(`uniqueId`,`partitionId`) VALUES(407237055, 2);
|
||||
SELECT * FROM `test`;
|
||||
uniqueId partitionId
|
||||
407237055 2
|
||||
#Confirms 1 row in partition 'p02'
|
||||
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS FROM information_schema.PARTITIONS where TABLE_NAME = 'test';
|
||||
TABLE_NAME PARTITION_NAME TABLE_ROWS
|
||||
test p01 0
|
||||
test p02 1
|
||||
ALTER TABLE `test` TRUNCATE PARTITION `p02`;
|
||||
#Confirms no more rows in partition 'p02'
|
||||
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS FROM information_schema.PARTITIONS where TABLE_NAME = 'test';
|
||||
TABLE_NAME PARTITION_NAME TABLE_ROWS
|
||||
test p01 0
|
||||
test p02 0
|
||||
#Before the patch, this returned the previously existing values.
|
||||
SELECT * FROM `test`;
|
||||
uniqueId partitionId
|
||||
SELECT SQL_CACHE * FROM `test`;
|
||||
uniqueId partitionId
|
||||
SELECT SQL_NO_CACHE * FROM `test`;
|
||||
uniqueId partitionId
|
||||
DROP TABLE test;
|
||||
SET GLOBAL query_cache_size=DEFAULT;
|
@ -994,3 +994,24 @@ GROUP BY t2.col0
|
||||
WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL));
|
||||
1
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
#
|
||||
#
|
||||
# MDEV-8267 Add /*old*/ comment into I_S.COLUMN_TYPE for old DECIMAL
|
||||
#
|
||||
SHOW CREATE TABLE t1dec102;
|
||||
Table Create Table
|
||||
t1dec102 CREATE TABLE `t1dec102` (
|
||||
`a` decimal(10,2)/*old*/ DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SHOW COLUMNS FROM t1dec102;
|
||||
Field Type Null Key Default Extra
|
||||
a decimal(10,2)/*old*/ YES NULL
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1dec102';
|
||||
COLUMN_NAME DATA_TYPE COLUMN_TYPE
|
||||
a decimal decimal(10,2)/*old*/
|
||||
DROP TABLE t1dec102;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
31
mysql-test/r/update_innodb.result
Normal file
31
mysql-test/r/update_innodb.result
Normal file
@ -0,0 +1,31 @@
|
||||
CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
CREATE TABLE `t2` (
|
||||
`c0` varchar(10) NOT NULL,
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`c0`,`c1`),
|
||||
KEY `c1` (`c1`),
|
||||
KEY `c2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
CREATE TABLE `t3` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`c1` datetime NOT NULL,
|
||||
`c2` bigint(20) NOT NULL,
|
||||
`c3` int(4) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `c2` (`c2`),
|
||||
KEY `c3` (`c3`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
CREATE TABLE `t4` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` bigint(20) DEFAULT NULL,
|
||||
`c3` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
CREATE ALGORITHM=UNDEFINED VIEW `v1` AS select `t4`.`c1` AS `c1`,`t4`.`c2` AS `c2`,`t4`.`c3` AS `c3` from `t4`;
|
||||
UPDATE t1 a JOIN t2 b ON a.c1 = b.c1 JOIN v1 vw ON b.c2 = vw.c1 JOIN t3 del ON vw.c2 = del.c2 SET a.c2 = ( SELECT max(t.c1) FROM t3 t, v1 i WHERE del.c2 = t.c2 AND vw.c3 = i.c3 AND t.c3 = 4 ) WHERE a.c2 IS NULL OR a.c2 < '2011-05-01';
|
||||
drop view v1;
|
||||
drop table t1,t2,t3,t4;
|
@ -5409,6 +5409,24 @@ create view v2 as select t2.* from (t2 left join v1 using (id));
|
||||
update t3 left join v2 using (id) set flag=flag+1;
|
||||
drop view v2, v1;
|
||||
drop table t1, t2, t3;
|
||||
#
|
||||
# MDEV-7207 - ALTER VIEW does not change ALGORITM
|
||||
#
|
||||
create table t1 (a int, b int);
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select (`t1`.`b` + 1) AS `c` from `t1` latin1 latin1_swedish_ci
|
||||
alter algorithm=undefined view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select (`t1`.`b` + 1) AS `c` from `t1` latin1 latin1_swedish_ci
|
||||
alter algorithm=merge view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select (`t1`.`b` + 1) AS `c` from `t1` latin1 latin1_swedish_ci
|
||||
drop view v2;
|
||||
drop table t1;
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.5 tests.
|
||||
# -----------------------------------------------------------------
|
||||
|
1
mysql-test/std_data/old_decimal/t1dec102.MYD
Normal file
1
mysql-test/std_data/old_decimal/t1dec102.MYD
Normal file
@ -0,0 +1 @@
|
||||
<EFBFBD> 123.45<EFBFBD> 123.46<EFBFBD> 123.47
|
BIN
mysql-test/std_data/old_decimal/t1dec102.MYI
Normal file
BIN
mysql-test/std_data/old_decimal/t1dec102.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/old_decimal/t1dec102.frm
Normal file
BIN
mysql-test/std_data/old_decimal/t1dec102.frm
Normal file
Binary file not shown.
@ -327,6 +327,18 @@ INSERT INTO t2 SET a=1;
|
||||
INSERT INTO t2 SET b=1;
|
||||
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
||||
DROP TABLE t1,t2;
|
||||
INSERT INTO t1dec102 VALUES (-999.99);
|
||||
INSERT INTO t1dec102 VALUES (0);
|
||||
INSERT INTO t1dec102 VALUES (999.99);
|
||||
SELECT * FROM t1dec102 ORDER BY a;
|
||||
a
|
||||
-999.99
|
||||
0.00
|
||||
123.45
|
||||
123.46
|
||||
123.47
|
||||
999.99
|
||||
DROP TABLE t1dec102;
|
||||
flush logs;
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
@ -4554,6 +4566,62 @@ SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE `t1`,`t2` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # GTID 0-1-317
|
||||
/*!100001 SET @@session.gtid_seq_no=317*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1dec102` mapped to number #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1dec102`
|
||||
### SET
|
||||
### @1=!! Old DECIMAL (mysql-4.1 or earlier). Not enough metadata to display the value. # at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # GTID 0-1-318
|
||||
/*!100001 SET @@session.gtid_seq_no=318*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1dec102` mapped to number #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1dec102`
|
||||
### SET
|
||||
### @1=!! Old DECIMAL (mysql-4.1 or earlier). Not enough metadata to display the value. # at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # GTID 0-1-319
|
||||
/*!100001 SET @@session.gtid_seq_no=319*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1dec102` mapped to number #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1dec102`
|
||||
### SET
|
||||
### @1=!! Old DECIMAL (mysql-4.1 or earlier). Not enough metadata to display the value. # at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # GTID 0-1-320
|
||||
/*!100001 SET @@session.gtid_seq_no=320*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE `t1dec102` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
|
@ -438,9 +438,20 @@ INSERT INTO t2 SET b=1;
|
||||
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--copy_file std_data/old_decimal/t1dec102.frm $MYSQLD_DATADIR/test/t1dec102.frm
|
||||
--copy_file std_data/old_decimal/t1dec102.MYD $MYSQLD_DATADIR/test/t1dec102.MYD
|
||||
--copy_file std_data/old_decimal/t1dec102.MYI $MYSQLD_DATADIR/test/t1dec102.MYI
|
||||
|
||||
INSERT INTO t1dec102 VALUES (-999.99);
|
||||
INSERT INTO t1dec102 VALUES (0);
|
||||
INSERT INTO t1dec102 VALUES (999.99);
|
||||
SELECT * FROM t1dec102 ORDER BY a;
|
||||
DROP TABLE t1dec102;
|
||||
|
||||
flush logs;
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/
|
||||
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
|
||||
|
17
mysql-test/suite/innodb/r/xa_recovery.result
Normal file
17
mysql-test/suite/innodb/r/xa_recovery.result
Normal file
@ -0,0 +1,17 @@
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
XA START 'x';
|
||||
UPDATE t1 set a=2;
|
||||
XA END 'x';
|
||||
XA PREPARE 'x';
|
||||
call mtr.add_suppression("Found 1 prepared XA transactions");
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2
|
||||
XA ROLLBACK 'x';
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
DROP TABLE t1;
|
@ -1,11 +1,6 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
if (`select plugin_auth_version <= "5.5.39-MariaDB-36.0" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB as of 5.5.39-MariaDB-36.0 or earlier
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE
|
||||
--echo # ADD FOREIGN KEY
|
||||
|
@ -1,8 +1,3 @@
|
||||
if (`select plugin_auth_version <= "5.5.37-MariaDB-34.0" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB as of 5.5.37-MariaDB-34.0 or earlier
|
||||
}
|
||||
|
||||
--source include/have_innodb.inc
|
||||
# embedded server ignores 'delayed', so skip this
|
||||
-- source include/not_embedded.inc
|
||||
|
@ -2,11 +2,6 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/have_partition.inc
|
||||
|
||||
if (`select plugin_auth_version < "5.6.22" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in InnoDB/XtraDB as of 5.6.21 or earlier
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1
|
||||
--echo # CAUSES INFINITE PAGE SPLIT
|
||||
|
@ -1,11 +1,6 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
|
||||
if (`select plugin_auth_version < "5.6.22" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in InnoDB/XtraDB as of 5.6.21 or earlier
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE
|
||||
--echo # CALLED FROM A FUNCTION
|
||||
|
@ -1,10 +1,5 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
if (`select plugin_auth_version <= "5.5.40-MariaDB-36.1" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB as of 5.5.40-MariaDB-36.1 or earlier
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN
|
||||
--echo # INNODB_STRICT_MODE = 1
|
||||
|
47
mysql-test/suite/innodb/t/xa_recovery.test
Normal file
47
mysql-test/suite/innodb/t/xa_recovery.test
Normal file
@ -0,0 +1,47 @@
|
||||
if (`select plugin_auth_version <= "5.6.24" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in InnoDB as of 5.6.24 or earlier
|
||||
}
|
||||
--source include/have_innodb.inc
|
||||
# Embedded server does not support restarting.
|
||||
--source include/not_embedded.inc
|
||||
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connect (con1,localhost,root);
|
||||
XA START 'x'; UPDATE t1 set a=2; XA END 'x'; XA PREPARE 'x';
|
||||
connection default;
|
||||
|
||||
call mtr.add_suppression("Found 1 prepared XA transactions");
|
||||
|
||||
# Kill and restart the server.
|
||||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- shutdown_server 0
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
-- exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
-- source include/wait_until_connected_again.inc
|
||||
-- disable_reconnect
|
||||
|
||||
disconnect con1;
|
||||
connect (con1,localhost,root);
|
||||
--send SELECT * FROM t1 LOCK IN SHARE MODE
|
||||
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = 'Sending data' and
|
||||
info = 'SELECT * FROM t1 LOCK IN SHARE MODE';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
disconnect con1;
|
||||
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
SELECT * FROM t1;
|
||||
XA ROLLBACK 'x';
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
@ -6,3 +6,14 @@ OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-3870 - Valgrind warnings on OPTIMIZE MyISAM or Aria TABLE with
|
||||
# disabled keys
|
||||
#
|
||||
CREATE TABLE t1 (a INT, KEY(a)) ENGINE=Aria;
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(0);
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
DROP TABLE t1;
|
||||
|
@ -160,3 +160,13 @@ INSERT /*! IGNORE */ INTO t1 VALUES ('urxjxqvwabikpugvexxbxdpxjkeqiuhhuadbcuhoz
|
||||
check table t1;
|
||||
OPTIMIZE TABLE t1;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-3870 - Valgrind warnings on OPTIMIZE MyISAM or Aria TABLE with
|
||||
--echo # disabled keys
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT, KEY(a)) ENGINE=Aria;
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(0);
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
OPTIMIZE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
@ -58,7 +58,10 @@ t1.frm
|
||||
t1.par
|
||||
SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open';
|
||||
SET DEBUG_SYNC='partition_open_error SIGNAL alter WAIT_FOR finish';
|
||||
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION,
|
||||
PARTITION_DESCRIPTION, TABLE_ROWS
|
||||
FROM INFORMATION_SCHEMA.PARTITIONS
|
||||
WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR parked';
|
||||
# When waiting for the name lock in get_all_tables in sql_show.cc
|
||||
# this will not be concurrent any more, thus the TIMEOUT
|
||||
@ -70,9 +73,9 @@ ALTER TABLE t1 REORGANIZE PARTITION p0 INTO
|
||||
PARTITION p10 VALUES LESS THAN MAXVALUE);
|
||||
Warnings:
|
||||
Warning 1639 debug sync point wait timed out
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
def test t1 p0 NULL 1 NULL RANGE NULL a NULL 10 1 16384 16384 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
def test t1 p10 NULL 2 NULL RANGE NULL a NULL MAXVALUE 3 5461 16384 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
TABLE_SCHEMA TABLE_NAME PARTITION_NAME PARTITION_ORDINAL_POSITION PARTITION_DESCRIPTION TABLE_ROWS
|
||||
test t1 p0 1 10 1
|
||||
test t1 p10 2 MAXVALUE 3
|
||||
t1#P#p0.ibd
|
||||
t1#P#p10.ibd
|
||||
t1.frm
|
||||
|
@ -62,7 +62,10 @@ SHOW CREATE TABLE t1;
|
||||
SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open';
|
||||
SET DEBUG_SYNC='partition_open_error SIGNAL alter WAIT_FOR finish';
|
||||
send
|
||||
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION,
|
||||
PARTITION_DESCRIPTION, TABLE_ROWS
|
||||
FROM INFORMATION_SCHEMA.PARTITIONS
|
||||
WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||
|
||||
connect (con1, localhost, root,,);
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR parked';
|
||||
|
@ -45,6 +45,11 @@ id
|
||||
2
|
||||
alter table t1 rename renamed_t1;
|
||||
set global server_audit_events='connect,query';
|
||||
select 1,
|
||||
2,
|
||||
3;
|
||||
1 2 3
|
||||
1 2 3
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
id
|
||||
@ -157,6 +162,8 @@ id
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
SET PASSWORD FOR u1=<secret>;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=<secret>' at line 1
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
select 2;
|
||||
@ -246,6 +253,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,RENAME,test,t1|test.renamed_t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'alter table t1 rename renamed_t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'connect,query\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1, 2, 3',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID
|
||||
@ -329,6 +337,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*comment*/ select 2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1=<secret>',ID
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_events=\'\'',0
|
||||
|
367
mysql-test/suite/plugins/r/thread_pool_server_audit.result
Normal file
367
mysql-test/suite/plugins/r/thread_pool_server_audit.result
Normal file
@ -0,0 +1,367 @@
|
||||
install plugin server_audit soname 'server_audit';
|
||||
show variables like 'server_audit%';
|
||||
Variable_name Value
|
||||
server_audit_events
|
||||
server_audit_excl_users
|
||||
server_audit_file_path server_audit.log
|
||||
server_audit_file_rotate_now OFF
|
||||
server_audit_file_rotate_size 1000000
|
||||
server_audit_file_rotations 9
|
||||
server_audit_incl_users
|
||||
server_audit_logging OFF
|
||||
server_audit_mode 0
|
||||
server_audit_output_type file
|
||||
server_audit_query_log_limit 1024
|
||||
server_audit_syslog_facility LOG_USER
|
||||
server_audit_syslog_ident mysql-server_auditing
|
||||
server_audit_syslog_info
|
||||
server_audit_syslog_priority LOG_INFO
|
||||
set global server_audit_file_path=null;
|
||||
set global server_audit_incl_users=null;
|
||||
set global server_audit_file_path='server_audit.log';
|
||||
set global server_audit_output_type=file;
|
||||
set global server_audit_logging=on;
|
||||
connect(localhost,no_such_user,,mysql,MASTER_PORT,MASTER_SOCKET);
|
||||
ERROR 28000: Access denied for user 'no_such_user'@'localhost' (using password: NO)
|
||||
set global server_audit_incl_users='odin, dva, tri';
|
||||
create table t1 (id int);
|
||||
set global server_audit_incl_users='odin, root, dva, tri';
|
||||
create table t2 (id int);
|
||||
set global server_audit_excl_users='odin, dva, tri';
|
||||
Warnings:
|
||||
Warning 1 User 'odin' is in the server_audit_incl_users, so wasn't added.
|
||||
Warning 1 User 'dva' is in the server_audit_incl_users, so wasn't added.
|
||||
Warning 1 User 'tri' is in the server_audit_incl_users, so wasn't added.
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
set global server_audit_incl_users='odin, root, dva, tri';
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
id
|
||||
1
|
||||
2
|
||||
alter table t1 rename renamed_t1;
|
||||
set global server_audit_events='connect,query';
|
||||
select 1,
|
||||
2,
|
||||
3;
|
||||
1 2 3
|
||||
1 2 3
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
id
|
||||
1
|
||||
2
|
||||
1
|
||||
2
|
||||
select * from t_doesnt_exist;
|
||||
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
|
||||
syntax_error_query;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'syntax_error_query' at line 1
|
||||
drop table renamed_t1, t2;
|
||||
show variables like 'server_audit%';
|
||||
Variable_name Value
|
||||
server_audit_events CONNECT,QUERY
|
||||
server_audit_excl_users
|
||||
server_audit_file_path server_audit.log
|
||||
server_audit_file_rotate_now OFF
|
||||
server_audit_file_rotate_size 1000000
|
||||
server_audit_file_rotations 9
|
||||
server_audit_incl_users odin, root, dva, tri
|
||||
server_audit_logging ON
|
||||
server_audit_mode 0
|
||||
server_audit_output_type file
|
||||
server_audit_query_log_limit 1024
|
||||
server_audit_syslog_facility LOG_USER
|
||||
server_audit_syslog_ident mysql-server_auditing
|
||||
server_audit_syslog_info
|
||||
server_audit_syslog_priority LOG_INFO
|
||||
set global server_audit_mode=1;
|
||||
set global server_audit_events='';
|
||||
create database sa_db;
|
||||
create table t1 (id2 int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id2
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
use sa_db;
|
||||
create table sa_t1(id int);
|
||||
insert into sa_t1 values (1), (2);
|
||||
drop table sa_t1;
|
||||
drop database sa_db;
|
||||
create database sa_db;
|
||||
use sa_db;
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
set global server_audit_events='query_ddl';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
select 2;
|
||||
2
|
||||
2
|
||||
(select 2);
|
||||
2
|
||||
2
|
||||
/*! select 2*/;
|
||||
2
|
||||
2
|
||||
/*comment*/ select 2;
|
||||
2
|
||||
2
|
||||
drop table t1;
|
||||
set global server_audit_events='query_ddl,query_dml';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
select 2;
|
||||
2
|
||||
2
|
||||
drop table t1;
|
||||
set global server_audit_events='query_dml';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
select 2;
|
||||
2
|
||||
2
|
||||
(select 2);
|
||||
2
|
||||
2
|
||||
/*! select 2*/;
|
||||
2
|
||||
2
|
||||
/*comment*/ select 2;
|
||||
2
|
||||
2
|
||||
drop table t1;
|
||||
set global server_audit_events='query_dcl';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
SET PASSWORD FOR u1=<secret>;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=<secret>' at line 1
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
select 2;
|
||||
2
|
||||
2
|
||||
(select 2);
|
||||
2
|
||||
2
|
||||
/*! select 2*/;
|
||||
2
|
||||
2
|
||||
/*comment*/ select 2;
|
||||
2
|
||||
2
|
||||
drop table t1;
|
||||
set global server_audit_events='';
|
||||
set global server_audit_query_log_limit= 15;
|
||||
select (1), (2), (3), (4);
|
||||
1 2 3 4
|
||||
1 2 3 4
|
||||
select 'A', 'B', 'C', 'D';
|
||||
A B C D
|
||||
A B C D
|
||||
set global server_audit_query_log_limit= 1024;
|
||||
drop database sa_db;
|
||||
set global server_audit_file_path='.';
|
||||
show status like 'server_audit_current_log';
|
||||
Variable_name Value
|
||||
Server_audit_current_log HOME_DIR/server_audit.log
|
||||
set global server_audit_file_path='';
|
||||
show status like 'server_audit_current_log';
|
||||
Variable_name Value
|
||||
Server_audit_current_log server_audit.log
|
||||
set global server_audit_file_path=' ';
|
||||
show status like 'server_audit_current_log';
|
||||
Variable_name Value
|
||||
Server_audit_current_log server_audit.log
|
||||
set global server_audit_file_path='nonexisting_dir/';
|
||||
Warnings:
|
||||
Warning 1 SERVER AUDIT plugin can't create file 'nonexisting_dir/'.
|
||||
show status like 'server_audit_current_log';
|
||||
Variable_name Value
|
||||
Server_audit_current_log server_audit.log
|
||||
show variables like 'server_audit%';
|
||||
Variable_name Value
|
||||
server_audit_events
|
||||
server_audit_excl_users
|
||||
server_audit_file_path
|
||||
server_audit_file_rotate_now OFF
|
||||
server_audit_file_rotate_size 1000000
|
||||
server_audit_file_rotations 9
|
||||
server_audit_incl_users odin, root, dva, tri
|
||||
server_audit_logging ON
|
||||
server_audit_mode 1
|
||||
server_audit_output_type file
|
||||
server_audit_query_log_limit 1024
|
||||
server_audit_syslog_facility LOG_USER
|
||||
server_audit_syslog_ident mysql-server_auditing
|
||||
server_audit_syslog_info
|
||||
server_audit_syslog_priority LOG_INFO
|
||||
uninstall plugin server_audit;
|
||||
Warnings:
|
||||
Warning 1620 Plugin is busy and will be uninstalled on shutdown
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_logging=on',0
|
||||
TIME,HOSTNAME,root,localhost,ID,0,CONNECT,mysql,,0
|
||||
TIME,HOSTNAME,root,localhost,ID,0,DISCONNECT,mysql,,0
|
||||
TIME,HOSTNAME,no_such_user,localhost,ID,0,FAILED_CONNECT,,,ID
|
||||
TIME,HOSTNAME,no_such_user,localhost,ID,0,DISCONNECT,,,0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_incl_users=\'odin, root, dva, tri\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,test,t2,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create table t2 (id int)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_excl_users=\'odin, dva, tri\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'SHOW WARNINGS',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t1 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_incl_users=\'odin, root, dva, tri\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t2,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t2,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,ALTER,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,RENAME,test,t1|test.renamed_t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'alter table t1 rename renamed_t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'connect,query\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1, 2, 3',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'syntax_error_query',ID
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'drop table renamed_t1, t2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show variables like \'server_audit%\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_mode=1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create database sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,0,CONNECT,test,,0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create table t1 (id2 int)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t1 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,DROP,test,t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'drop table t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'use sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,sa_db,sa_t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table sa_t1(id int)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,sa_db,sa_t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into sa_t1 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,DROP,sa_db,sa_t1,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table sa_t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,READ,mysql,proc,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proc,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,event,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop database sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,0,DISCONNECT,sa_db,,0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create database sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'use sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,roles_mapping,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,roles_mapping,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,roles_mapping,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table t1(id int)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table t1(id int)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into t1 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select * from t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select 2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into t1 values (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select * from t1',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select 2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'(select 2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*! select 2*/',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*comment*/ select 2',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1=<secret>',ID
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_events=\'\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global serv',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select (1), (2)',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select \'A\', ',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_query_log_limit= 1024',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,READ,mysql,proc,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proc,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,event,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop database sa_db',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'.\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'.\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\' \'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\' \'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'nonexisting_dir/\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'nonexisting_dir/\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SHOW WARNINGS',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show variables like \'server_audit%\'',0
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,plugin,
|
||||
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'uninstall plugin server_audit',0
|
@ -13,6 +13,7 @@ set global server_audit_incl_users=null;
|
||||
set global server_audit_file_path='server_audit.log';
|
||||
set global server_audit_output_type=file;
|
||||
set global server_audit_logging=on;
|
||||
--sleep 2
|
||||
connect (con1,localhost,root,,mysql);
|
||||
connection default;
|
||||
disconnect con1;
|
||||
@ -35,6 +36,9 @@ insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
alter table t1 rename renamed_t1;
|
||||
set global server_audit_events='connect,query';
|
||||
select 1,
|
||||
2,
|
||||
3;
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
--error ER_NO_SUCH_TABLE
|
||||
@ -103,6 +107,8 @@ select * from t1;
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
--error 1064
|
||||
SET PASSWORD FOR u1=<secret>;
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
select 2;
|
||||
|
2
mysql-test/suite/plugins/t/thread_pool_server_audit.opt
Normal file
2
mysql-test/suite/plugins/t/thread_pool_server_audit.opt
Normal file
@ -0,0 +1,2 @@
|
||||
--thread_handling=pool-of-threads
|
||||
|
144
mysql-test/suite/plugins/t/thread_pool_server_audit.test
Normal file
144
mysql-test/suite/plugins/t/thread_pool_server_audit.test
Normal file
@ -0,0 +1,144 @@
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_pool_of_threads.inc
|
||||
|
||||
if (!$SERVER_AUDIT_SO) {
|
||||
skip No SERVER_AUDIT plugin;
|
||||
}
|
||||
|
||||
install plugin server_audit soname 'server_audit';
|
||||
|
||||
show variables like 'server_audit%';
|
||||
set global server_audit_file_path=null;
|
||||
set global server_audit_incl_users=null;
|
||||
set global server_audit_file_path='server_audit.log';
|
||||
set global server_audit_output_type=file;
|
||||
set global server_audit_logging=on;
|
||||
--sleep 2
|
||||
connect (con1,localhost,root,,mysql);
|
||||
connection default;
|
||||
disconnect con1;
|
||||
--sleep 2
|
||||
--sleep 2
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (con1,localhost,no_such_user,,mysql);
|
||||
connection default;
|
||||
--sleep 2
|
||||
set global server_audit_incl_users='odin, dva, tri';
|
||||
create table t1 (id int);
|
||||
set global server_audit_incl_users='odin, root, dva, tri';
|
||||
create table t2 (id int);
|
||||
set global server_audit_excl_users='odin, dva, tri';
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
set global server_audit_incl_users='odin, root, dva, tri';
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
alter table t1 rename renamed_t1;
|
||||
set global server_audit_events='connect,query';
|
||||
select 1,
|
||||
2,
|
||||
3;
|
||||
insert into t2 values (1), (2);
|
||||
select * from t2;
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t_doesnt_exist;
|
||||
--error 1064
|
||||
syntax_error_query;
|
||||
drop table renamed_t1, t2;
|
||||
show variables like 'server_audit%';
|
||||
set global server_audit_mode=1;
|
||||
set global server_audit_events='';
|
||||
create database sa_db;
|
||||
--sleep 2
|
||||
connect (con1,localhost,root,,test);
|
||||
connection con1;
|
||||
--sleep 2
|
||||
--sleep 2
|
||||
create table t1 (id2 int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
use sa_db;
|
||||
create table sa_t1(id int);
|
||||
insert into sa_t1 values (1), (2);
|
||||
drop table sa_t1;
|
||||
drop database sa_db;
|
||||
connection default;
|
||||
disconnect con1;
|
||||
--sleep 2
|
||||
--sleep 2
|
||||
create database sa_db;
|
||||
use sa_db;
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
|
||||
set global server_audit_events='query_ddl';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
select 2;
|
||||
(select 2);
|
||||
/*! select 2*/;
|
||||
/*comment*/ select 2;
|
||||
drop table t1;
|
||||
set global server_audit_events='query_ddl,query_dml';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
select 2;
|
||||
drop table t1;
|
||||
set global server_audit_events='query_dml';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
select 2;
|
||||
(select 2);
|
||||
/*! select 2*/;
|
||||
/*comment*/ select 2;
|
||||
drop table t1;
|
||||
set global server_audit_events='query_dcl';
|
||||
create table t1(id int);
|
||||
insert into t1 values (1), (2);
|
||||
select * from t1;
|
||||
CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||
--error 1064
|
||||
SET PASSWORD FOR u1=<secret>;
|
||||
CREATE USER u3 IDENTIFIED BY '';
|
||||
drop user u1, u2, u3;
|
||||
select 2;
|
||||
(select 2);
|
||||
/*! select 2*/;
|
||||
/*comment*/ select 2;
|
||||
drop table t1;
|
||||
set global server_audit_events='';
|
||||
|
||||
set global server_audit_query_log_limit= 15;
|
||||
select (1), (2), (3), (4);
|
||||
select 'A', 'B', 'C', 'D';
|
||||
set global server_audit_query_log_limit= 1024;
|
||||
drop database sa_db;
|
||||
|
||||
set global server_audit_file_path='.';
|
||||
--replace_regex /\.[\\\/]/HOME_DIR\//
|
||||
show status like 'server_audit_current_log';
|
||||
set global server_audit_file_path='';
|
||||
show status like 'server_audit_current_log';
|
||||
set global server_audit_file_path=' ';
|
||||
show status like 'server_audit_current_log';
|
||||
set global server_audit_file_path='nonexisting_dir/';
|
||||
show status like 'server_audit_current_log';
|
||||
show variables like 'server_audit%';
|
||||
uninstall plugin server_audit;
|
||||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
# replace the timestamp and the hostname with constant values
|
||||
--replace_regex /[0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\,[^,]*\,/TIME,HOSTNAME,/ /\,[1-9][0-9]*\,/,1,/ /\,[1-9][0-9]*/,ID/
|
||||
cat_file $MYSQLD_DATADIR/server_audit.log;
|
||||
remove_file $MYSQLD_DATADIR/server_audit.log;
|
||||
|
9
mysql-test/suite/rpl/r/rpl_old_decimal.result
Normal file
9
mysql-test/suite/rpl/r/rpl_old_decimal.result
Normal file
@ -0,0 +1,9 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
CREATE TABLE t1dec102 (a DECIMAL(10,2));
|
||||
INSERT INTO t1dec102 VALUES(999.99);
|
||||
call mtr.add_suppression("Slave SQL.*Column 0 of table .* cannot be converted from type.* Error_code: 1677");
|
||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||
Last_SQL_Error = 'Column 0 of table 'test.t1dec102' cannot be converted from type 'decimal(0,?)/*old*/' to type 'decimal(10,2)''
|
||||
DROP TABLE t1dec102;
|
||||
include/rpl_end.inc
|
@ -182,6 +182,11 @@ DROP USER test_3@localhost;
|
||||
ERROR HY000: Table 'user' was not locked with LOCK TABLES
|
||||
INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked");
|
||||
UNLOCK TABLE;
|
||||
CREATE DATABASE db;
|
||||
CREATE TABLE db.t1 LIKE t2;
|
||||
CREATE TABLE t3 LIKE t2;
|
||||
DROP TABLE t3;
|
||||
DROP DATABASE db;
|
||||
DROP USER test_3@localhost;
|
||||
DROP FUNCTION f2;
|
||||
DROP PROCEDURE p2;
|
||||
|
25
mysql-test/suite/rpl/t/rpl_old_decimal.test
Normal file
25
mysql-test/suite/rpl/t/rpl_old_decimal.test
Normal file
@ -0,0 +1,25 @@
|
||||
--source include/have_binlog_format_row.inc
|
||||
--source include/master-slave.inc
|
||||
|
||||
|
||||
--connection slave
|
||||
CREATE TABLE t1dec102 (a DECIMAL(10,2));
|
||||
|
||||
--connection master
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--copy_file std_data/old_decimal/t1dec102.frm $MYSQLD_DATADIR/test/t1dec102.frm
|
||||
--copy_file std_data/old_decimal/t1dec102.MYD $MYSQLD_DATADIR/test/t1dec102.MYD
|
||||
--copy_file std_data/old_decimal/t1dec102.MYI $MYSQLD_DATADIR/test/t1dec102.MYI
|
||||
INSERT INTO t1dec102 VALUES(999.99);
|
||||
|
||||
--let $slave_sql_errno=1677
|
||||
--let $show_slave_sql_error= 1
|
||||
call mtr.add_suppression("Slave SQL.*Column 0 of table .* cannot be converted from type.* Error_code: 1677");
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--connection master
|
||||
DROP TABLE t1dec102;
|
||||
--sync_slave_with_master
|
||||
|
||||
--source include/rpl_end.inc
|
@ -150,6 +150,16 @@ DROP USER test_3@localhost;
|
||||
INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked");
|
||||
|
||||
UNLOCK TABLE;
|
||||
|
||||
# Bug #20439913 CREATE TABLE DB.TABLE LIKE TMPTABLE IS
|
||||
# BINLOGGED INCORRECTLY - BREAKS A SLAVE
|
||||
CREATE DATABASE db;
|
||||
CREATE TABLE db.t1 LIKE t2;
|
||||
CREATE TABLE t3 LIKE t2;
|
||||
DROP TABLE t3;
|
||||
DROP DATABASE db;
|
||||
# end of Bug #20439913 test
|
||||
|
||||
DROP USER test_3@localhost;
|
||||
DROP FUNCTION f2;
|
||||
DROP PROCEDURE p2;
|
||||
|
@ -2,11 +2,6 @@
|
||||
# This is a debug variable for now
|
||||
-- source include/have_debug.inc
|
||||
|
||||
if (`select plugin_auth_version <= "5.6.10" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in InnoDB 5.6.10 or earlier
|
||||
}
|
||||
|
||||
SELECT @@global.innodb_buffer_pool_evict;
|
||||
|
||||
SET GLOBAL innodb_buffer_pool_evict = 'uncompressed';
|
||||
|
@ -1,8 +1,3 @@
|
||||
if (`select plugin_auth_version <= "5.5.37-MariaDB-34.0" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB as of 5.5.37-MariaDB-34.0 or earlier
|
||||
}
|
||||
|
||||
#
|
||||
# 2010-01-27 - Added
|
||||
#
|
||||
|
@ -1635,6 +1635,22 @@ SET NAMES utf8 COLLATE utf8_general_ci;
|
||||
--let ENGINE=HEAP
|
||||
--source include/ctype_utf8_ilseq.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-8067 correct fix for MySQL Bug # 19699237: UNINITIALIZED VARIABLE IN ITEM_FIELD::STR_RESULT
|
||||
--echo #
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8);
|
||||
CREATE TABLE t2 (a VARCHAR(10) CHARACTER SET latin1);
|
||||
INSERT INTO t1 VALUES ('aaa');
|
||||
INSERT INTO t2 VALUES ('aaa');
|
||||
SELECT (SELECT CONCAT(a),1 FROM t1) <=> (SELECT CONCAT(a),1 FROM t2);
|
||||
INSERT INTO t1 VALUES ('aaa');
|
||||
INSERT INTO t2 VALUES ('aaa');
|
||||
# Running the below query crashed with two rows
|
||||
--error ER_SUBQUERY_NO_1_ROW
|
||||
SELECT (SELECT CONCAT(a),1 FROM t1) <=> (SELECT CONCAT(a),1 FROM t2);
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -656,6 +656,13 @@ SELECT
|
||||
#
|
||||
select column_get(column_create(1, "18446744073709552001" as char), 1 as int);
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7505 - Too large scale in DECIMAL dynamic column getter crashes
|
||||
--echo # mysqld
|
||||
--echo #
|
||||
--error ER_TOO_BIG_SCALE
|
||||
SELECT COLUMN_GET(`x`, 'y' AS DECIMAL(5,34));
|
||||
|
||||
--echo #
|
||||
--echo # test of symbolic names
|
||||
--echo #
|
||||
|
9
mysql-test/t/empty_server_name-8224.test
Normal file
9
mysql-test/t/empty_server_name-8224.test
Normal file
@ -0,0 +1,9 @@
|
||||
#
|
||||
# MDEV-8224 Server crashes in get_server_from_table_to_cache on empty name
|
||||
#
|
||||
--source include/not_embedded.inc
|
||||
create server '' foreign data wrapper w2 options (host '127.0.0.1');
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server 10
|
||||
--source include/wait_until_disconnected.inc
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
@ -1522,7 +1522,7 @@ DROP TABLE t1;
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
|
||||
create table t2 (c int, d int);
|
||||
insert into t2 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
|
||||
insert into t2 values (1,11), (2,22), (4,44);
|
||||
select distinct a,sum(b), (select d from t2 where c=a order by max(b) limit 1) from t1 group by a order by max(b);
|
||||
drop table t1, t2;
|
||||
|
||||
|
@ -7,3 +7,16 @@ select variable_name from information_schema.session_status where variable_name
|
||||
select variable_name from information_schema.session_variables where variable_name =
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
|
||||
#
|
||||
# information_schema tables inside subqueries, they should not be re-populated
|
||||
# (i_s.columns needs to scan i_s itself, creating a tmp table for every i_s
|
||||
# table. if it's re-populated, it'll do that multiple times)
|
||||
#
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
# fix the result in ps-protocol
|
||||
--replace_result 44 43
|
||||
show status like 'created_tmp_tables';
|
||||
drop table t1;
|
||||
|
@ -1751,6 +1751,16 @@ CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-3870 - Valgrind warnings on OPTIMIZE MyISAM or Aria TABLE with
|
||||
--echo # disabled keys
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT, KEY(a)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(0);
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
OPTIMIZE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Check some variables
|
||||
#
|
||||
|
@ -37,3 +37,14 @@
|
||||
#
|
||||
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6236 - [PATCH] mysql_tzinfo_to_sql may produce invalid SQL
|
||||
--echo #
|
||||
--exec mkdir $MYSQLTEST_VARDIR/zoneinfo
|
||||
--copy_file std_data/zoneinfo/GMT $MYSQLTEST_VARDIR/zoneinfo/Factory
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
||||
|
@ -8,6 +8,35 @@ drop view if exists t1,v1,v2,v3,v4,v1badcheck;
|
||||
|
||||
create table t1(a int);
|
||||
create table kv(k varchar(30) NOT NULL PRIMARY KEY,v varchar(50));
|
||||
create view v1 as select 1;
|
||||
|
||||
repair table t1 quick;
|
||||
repair table t1 extended;
|
||||
repair table t1 use_frm;
|
||||
--error ER_PARSE_ERROR
|
||||
repair table t1 from mysql;
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
repair view v1 quick;
|
||||
--error ER_PARSE_ERROR
|
||||
repair view v1 extended;
|
||||
--error ER_PARSE_ERROR
|
||||
repair view v1 use_frm;
|
||||
repair view v1 from mysql;
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
check view v1 quick;
|
||||
--error ER_PARSE_ERROR
|
||||
check view v1 fast;
|
||||
--error ER_PARSE_ERROR
|
||||
check view v1 medium;
|
||||
--error ER_PARSE_ERROR
|
||||
check view v1 extended;
|
||||
--error ER_PARSE_ERROR
|
||||
check view v1 changed;
|
||||
check view v1 for upgrade;
|
||||
|
||||
drop view v1;
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
|
@ -8,6 +8,7 @@ call mtr.add_suppression("Invalid .old.. table or database name");
|
||||
# check that CSV engine was compiled in, as the result of the test
|
||||
# depends on the presence of the log tables (which are CSV-based).
|
||||
--source include/have_csv.inc
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
#
|
||||
# Clean up after previous tests
|
||||
@ -66,7 +67,6 @@ create table t_bug25347 (a int) engine=myisam;
|
||||
create view v_bug25347 as select * from t_bug25347;
|
||||
insert into t_bug25347 values (1),(2),(3);
|
||||
flush tables;
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--echo removing and creating
|
||||
--remove_file $MYSQLD_DATADIR/d_bug25347/t_bug25347.MYI
|
||||
--write_file $MYSQLD_DATADIR/d_bug25347/t_bug25347.MYI
|
||||
@ -119,7 +119,6 @@ DROP TABLE t1, t2;
|
||||
create table t1(a int) engine=myisam;
|
||||
create view v1 as select * from t1;
|
||||
show tables;
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--copy_file $MYSQLD_DATADIR/test/v1.frm $MYSQLD_DATADIR/test/v-1.frm
|
||||
show tables;
|
||||
--exec $MYSQL_CHECK --check-upgrade --databases test
|
||||
@ -164,24 +163,23 @@ CREATE TABLE `#mysql50#c@d` (a INT) engine=myisam;
|
||||
CREATE TABLE t1 (a INT) engine=myisam;
|
||||
|
||||
# Create 5.0 like triggers
|
||||
let $MYSQLTEST_VARDIR= `select @@datadir`;
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/c@d.TRG
|
||||
--write_file $MYSQLD_DATADIR/a@b/c@d.TRG
|
||||
TYPE=TRIGGERS
|
||||
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON `c@d` FOR EACH ROW SET NEW.a = 10 * NEW.a'
|
||||
sql_modes=0
|
||||
definers='root@localhost'
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/tr1.TRN
|
||||
--write_file $MYSQLD_DATADIR/a@b/tr1.TRN
|
||||
TYPE=TRIGGERNAME
|
||||
trigger_table=c@d
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/t1.TRG
|
||||
--write_file $MYSQLD_DATADIR/a@b/t1.TRG
|
||||
TYPE=TRIGGERS
|
||||
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr2 BEFORE INSERT ON `a@b`.t1 FOR EACH ROW SET NEW.a = 100 * NEW.a'
|
||||
sql_modes=0
|
||||
definers='root@localhost'
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/tr2.TRN
|
||||
--write_file $MYSQLD_DATADIR/a@b/tr2.TRN
|
||||
TYPE=TRIGGERNAME
|
||||
trigger_table=t1
|
||||
EOF
|
||||
@ -255,7 +253,6 @@ INSERT INTO bug47205 VALUES ("foobar");
|
||||
FLUSH TABLE bug47205;
|
||||
|
||||
--echo # Replace the FRM with a 5.0 FRM that will require upgrade
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--remove_file $MYSQLD_DATADIR/test/bug47205.frm
|
||||
--copy_file std_data/bug47205.frm $MYSQLD_DATADIR/test/bug47205.frm
|
||||
|
||||
@ -279,7 +276,6 @@ CREATE TABLE bug47205(a VARCHAR(20) PRIMARY KEY)
|
||||
FLUSH TABLE bug47205;
|
||||
|
||||
--echo # Replace the FRM with a 5.0 FRM that will require upgrade
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--remove_file $MYSQLD_DATADIR/test/bug47205.frm
|
||||
--copy_file std_data/bug47205.frm $MYSQLD_DATADIR/test/bug47205.frm
|
||||
|
||||
@ -322,3 +318,34 @@ CREATE TABLE test.`t.1` (id int);
|
||||
--exec $MYSQL_CHECK test t.1
|
||||
|
||||
drop table test.`t.1`;
|
||||
|
||||
#
|
||||
# MDEV-8123 mysqlcheck: new --process-views option conflicts with --quick, --extended and such
|
||||
#
|
||||
create view v1 as select 1;
|
||||
--echo mysqlcheck --process-views test
|
||||
--exec $MYSQL_CHECK --process-views test
|
||||
--echo mysqlcheck --process-views --extended test
|
||||
--exec $MYSQL_CHECK --process-views --extended test
|
||||
--echo mysqlcheck --process-views --fast test
|
||||
--exec $MYSQL_CHECK --process-views --fast test
|
||||
--echo mysqlcheck --process-views --quick test
|
||||
--exec $MYSQL_CHECK --process-views --quick test
|
||||
--echo mysqlcheck --process-views --check-only-changed test
|
||||
--exec $MYSQL_CHECK --process-views --check-only-changed test
|
||||
--echo mysqlcheck --process-views --medium-check test
|
||||
--exec $MYSQL_CHECK --process-views --medium-check test
|
||||
--echo mysqlcheck --process-views --check-upgrade test
|
||||
--exec $MYSQL_CHECK --process-views --check-upgrade test
|
||||
drop view v1;
|
||||
|
||||
|
||||
#
|
||||
# MDEV-8124 mysqlcheck: --auto-repair runs REPAIR TABLE instead of REPAIR VIEW on views
|
||||
#
|
||||
create table t1(a int);
|
||||
--copy_file $MYSQL_TEST_DIR/std_data/mysql_upgrade/v1.frm $MYSQLD_DATADIR/test/v1.frm
|
||||
--echo mysqlcheck --process-views --check-upgrade --auto-repair test
|
||||
--exec $MYSQL_CHECK --process-views --check-upgrade --auto-repair test
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
@ -1,3 +1,7 @@
|
||||
if (`select plugin_auth_version <= "5.6.24" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in InnoDB as of 5.6.24 or earlier
|
||||
}
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_partition.inc
|
||||
--source include/have_innodb.inc
|
||||
@ -403,7 +407,7 @@ DROP TABLE t1;
|
||||
create table t1 (a int) engine=innodb partition by hash(a) ;
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status like 't1';
|
||||
drop table t1;
|
||||
|
||||
@ -415,12 +419,12 @@ engine = innodb
|
||||
partition by key (a);
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status;
|
||||
insert into t1 values (0), (1), (2), (3);
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status;
|
||||
drop table t1;
|
||||
|
||||
@ -429,17 +433,17 @@ engine = innodb
|
||||
partition by key (a);
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status;
|
||||
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status;
|
||||
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
||||
# Data_free for InnoDB tablespace varies depending on which
|
||||
# tests have been run before this one
|
||||
--replace_column 10 #
|
||||
--replace_column 10 # 12 #
|
||||
show table status;
|
||||
drop table t1;
|
||||
|
||||
@ -674,6 +678,18 @@ ALTER TABLE t1 ADD UNIQUE KEY (b);
|
||||
--echo # have left table intact.
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
--echo #
|
||||
--echo # Bug #17299181 CREATE_TIME AND UPDATE_TIME ARE
|
||||
--echo # WRONG FOR PARTITIONED TABLES
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a int, PRIMARY KEY (a)) ENGINE=InnoDB
|
||||
PARTITION BY HASH (a) PARTITIONS 2;
|
||||
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE
|
||||
CREATE_TIME IS NOT NULL AND TABLE_NAME='t1';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
|
47
mysql-test/t/range_innodb.test
Normal file
47
mysql-test/t/range_innodb.test
Normal file
@ -0,0 +1,47 @@
|
||||
--echo #
|
||||
--echo # Range optimizer (and related) tests that need InnoDB.
|
||||
--echo #
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t0, t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6735: Range checked for each record used with key
|
||||
--echo #
|
||||
|
||||
create table t0(a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
|
||||
create table t1(a int);
|
||||
insert into t1 select A.a + B.a* 10 + C.a * 100 + D.a * 1000
|
||||
from t0 A, t0 B, t0 C, t0 D;
|
||||
|
||||
create table t2 (
|
||||
a int,
|
||||
b int,
|
||||
filler1 char(100),
|
||||
filler2 char(100),
|
||||
filler3 char(100),
|
||||
filler4 char(100),
|
||||
key(a),
|
||||
key(b)
|
||||
) engine=innodb;
|
||||
|
||||
insert into t2
|
||||
select
|
||||
a,a,
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10),
|
||||
repeat('0123456789', 10)
|
||||
from t1;
|
||||
|
||||
analyze table t2;
|
||||
--echo # The following must not use "Range checked for each record":
|
||||
explain select * from t0 left join t2 on t2.a <t0.a and t2.b between 50 and 250;
|
||||
|
||||
drop table t0,t1,t2;
|
||||
|
5
mysql-test/t/ssl_7937.combinations
Normal file
5
mysql-test/t/ssl_7937.combinations
Normal file
@ -0,0 +1,5 @@
|
||||
[ssl]
|
||||
--loose-enable-ssl
|
||||
|
||||
[nossl]
|
||||
--loose-disable-ssl
|
35
mysql-test/t/ssl_7937.test
Normal file
35
mysql-test/t/ssl_7937.test
Normal file
@ -0,0 +1,35 @@
|
||||
#
|
||||
# MDEV-7937: Enforce SSL when --ssl client option is used
|
||||
#
|
||||
|
||||
source include/have_ssl_crypto_functs.inc;
|
||||
|
||||
# create a procedure instead of SHOW STATUS LIKE 'ssl_cipher'
|
||||
# because the cipher depends on openssl (or yassl) version,
|
||||
# and it's actual value doesn't matter here anyway
|
||||
create procedure have_ssl()
|
||||
select if(variable_value > '','yes','no') as 'have_ssl'
|
||||
from information_schema.session_status
|
||||
where variable_name='ssl_cipher';
|
||||
|
||||
--disable_abort_on_error
|
||||
--echo mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
|
||||
--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem -e "call test.have_ssl()" 2>&1
|
||||
--echo mysql --ssl -e "call test.have_ssl()"
|
||||
--exec $MYSQL --ssl -e "call test.have_ssl()" 2>&1
|
||||
--echo mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()" 2>&1
|
||||
|
||||
--echo mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
|
||||
# this is the test where certificate verification fails.
|
||||
# but yassl doesn't support certificate verification, so
|
||||
# we fake the test result for yassl
|
||||
let yassl=`select variable_value='Unknown' from information_schema.session_status where variable_name='Ssl_session_cache_mode'`;
|
||||
if (!$yassl) {
|
||||
--exec $MYSQL --ssl --ssl-verify-server-cert -e "call test.have_ssl()" 2>&1
|
||||
}
|
||||
if ($yassl) {
|
||||
--echo ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate
|
||||
}
|
||||
|
||||
drop procedure have_ssl;
|
32
mysql-test/t/truncate-stale-6500.test
Normal file
32
mysql-test/t/truncate-stale-6500.test
Normal file
@ -0,0 +1,32 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_partition.inc
|
||||
|
||||
SET GLOBAL query_cache_size=1024*1024*8;
|
||||
CREATE TABLE `test` (
|
||||
`uniqueId` INT NOT NULL,
|
||||
`partitionId` INT NOT NULL,
|
||||
PRIMARY KEY (`uniqueId`,`partitionId`)
|
||||
) ENGINE=InnoDB PARTITION BY LIST (partitionId) (
|
||||
PARTITION p01 VALUES IN (1),
|
||||
PARTITION p02 VALUES IN (2)
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO `test`(`uniqueId`,`partitionId`) VALUES(407237055, 2);
|
||||
|
||||
SELECT * FROM `test`;
|
||||
|
||||
--echo #Confirms 1 row in partition 'p02'
|
||||
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS FROM information_schema.PARTITIONS where TABLE_NAME = 'test';
|
||||
ALTER TABLE `test` TRUNCATE PARTITION `p02`;
|
||||
|
||||
--echo #Confirms no more rows in partition 'p02'
|
||||
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS FROM information_schema.PARTITIONS where TABLE_NAME = 'test';
|
||||
|
||||
--echo #Before the patch, this returned the previously existing values.
|
||||
SELECT * FROM `test`;
|
||||
SELECT SQL_CACHE * FROM `test`;
|
||||
SELECT SQL_NO_CACHE * FROM `test`;
|
||||
|
||||
DROP TABLE test;
|
||||
SET GLOBAL query_cache_size=DEFAULT;
|
@ -583,3 +583,27 @@ JOIN
|
||||
WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL));
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-8267 Add /*old*/ comment into I_S.COLUMN_TYPE for old DECIMAL
|
||||
--echo #
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--copy_file std_data/old_decimal/t1dec102.frm $MYSQLD_DATADIR/test/t1dec102.frm
|
||||
--copy_file std_data/old_decimal/t1dec102.MYD $MYSQLD_DATADIR/test/t1dec102.MYD
|
||||
--copy_file std_data/old_decimal/t1dec102.MYI $MYSQLD_DATADIR/test/t1dec102.MYI
|
||||
|
||||
SHOW CREATE TABLE t1dec102;
|
||||
SHOW COLUMNS FROM t1dec102;
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1dec102';
|
||||
DROP TABLE t1dec102;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
39
mysql-test/t/update_innodb.test
Normal file
39
mysql-test/t/update_innodb.test
Normal file
@ -0,0 +1,39 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `t2` (
|
||||
`c0` varchar(10) NOT NULL,
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`c0`,`c1`),
|
||||
KEY `c1` (`c1`),
|
||||
KEY `c2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `t3` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`c1` datetime NOT NULL,
|
||||
`c2` bigint(20) NOT NULL,
|
||||
`c3` int(4) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `c2` (`c2`),
|
||||
KEY `c3` (`c3`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `t4` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` bigint(20) DEFAULT NULL,
|
||||
`c3` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE ALGORITHM=UNDEFINED VIEW `v1` AS select `t4`.`c1` AS `c1`,`t4`.`c2` AS `c2`,`t4`.`c3` AS `c3` from `t4`;
|
||||
|
||||
UPDATE t1 a JOIN t2 b ON a.c1 = b.c1 JOIN v1 vw ON b.c2 = vw.c1 JOIN t3 del ON vw.c2 = del.c2 SET a.c2 = ( SELECT max(t.c1) FROM t3 t, v1 i WHERE del.c2 = t.c2 AND vw.c3 = i.c3 AND t.c3 = 4 ) WHERE a.c2 IS NULL OR a.c2 < '2011-05-01';
|
||||
|
||||
drop view v1;
|
||||
drop table t1,t2,t3,t4;
|
@ -5367,6 +5367,19 @@ update t3 left join v2 using (id) set flag=flag+1;
|
||||
drop view v2, v1;
|
||||
drop table t1, t2, t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7207 - ALTER VIEW does not change ALGORITM
|
||||
--echo #
|
||||
create table t1 (a int, b int);
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
alter algorithm=undefined view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
alter algorithm=merge view v2 (c) as select b+1 from t1;
|
||||
show create view v2;
|
||||
drop view v2;
|
||||
drop table t1;
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- End of 5.5 tests.
|
||||
--echo # -----------------------------------------------------------------
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2000, 2015, 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
|
||||
@ -370,7 +370,7 @@ Obsoletes: mariadb-embedded
|
||||
Obsoletes: MySQL-embedded < %{version}-%{release}
|
||||
Obsoletes: mysql-embedded < %{version}-%{release}
|
||||
Provides: mysql-embedded = %{version}-%{release}
|
||||
Provides: mysql-emdedded%{?_isa} = %{version}-%{release}
|
||||
Provides: mysql-embedded%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description embedded
|
||||
This package contains the MySQL server as an embedded library.
|
||||
|
@ -1128,6 +1128,8 @@ static size_t escape_string(const char *str, unsigned int len,
|
||||
*(result++)= '\\';
|
||||
*(result++)= '\\';
|
||||
}
|
||||
else if (is_space(*str))
|
||||
*(result++)= ' ';
|
||||
else
|
||||
*(result++)= *str;
|
||||
str++;
|
||||
@ -1183,9 +1185,15 @@ static size_t escape_string_hide_passwords(const char *str, unsigned int len,
|
||||
for (c=0; c<d_len; c++)
|
||||
result[c]= is_space(str[c]) ? ' ' : str[c];
|
||||
|
||||
if (*next_s)
|
||||
{
|
||||
memmove(result + d_len, "*****", 5);
|
||||
result+= d_len + 5;
|
||||
b_char= *(next_s++);
|
||||
}
|
||||
else
|
||||
result+= d_len;
|
||||
|
||||
while (*next_s)
|
||||
{
|
||||
if (*next_s == b_char)
|
||||
|
@ -1848,6 +1848,7 @@ mysql_ssl_set(MYSQL *mysql __attribute__((unused)) ,
|
||||
mysql_options(mysql, MYSQL_OPT_SSL_CAPATH, capath) |
|
||||
mysql_options(mysql, MYSQL_OPT_SSL_CIPHER, cipher) ?
|
||||
1 : 0);
|
||||
mysql->options.use_ssl= TRUE;
|
||||
#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
@ -2652,16 +2653,10 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
|
||||
mysql->client_flag|= CLIENT_MULTI_RESULTS;
|
||||
|
||||
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||
if (mysql->options.ssl_key || mysql->options.ssl_cert ||
|
||||
mysql->options.ssl_ca || mysql->options.ssl_capath ||
|
||||
mysql->options.ssl_cipher ||
|
||||
(mysql->options.extension &&
|
||||
(mysql->options.extension->ssl_crl ||
|
||||
mysql->options.extension->ssl_crlpath)))
|
||||
mysql->options.use_ssl= 1;
|
||||
if (mysql->options.use_ssl)
|
||||
mysql->client_flag|= CLIENT_SSL;
|
||||
#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY*/
|
||||
|
||||
if (mpvio->db)
|
||||
mysql->client_flag|= CLIENT_CONNECT_WITH_DB;
|
||||
|
||||
@ -2690,6 +2685,23 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
|
||||
end= buff+5;
|
||||
}
|
||||
#ifdef HAVE_OPENSSL
|
||||
|
||||
/*
|
||||
If client uses ssl and client also has to verify the server
|
||||
certificate, a ssl connection is required.
|
||||
If the server does not support ssl, we abort the connection.
|
||||
*/
|
||||
if (mysql->options.use_ssl &&
|
||||
(mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) &&
|
||||
!(mysql->server_capabilities & CLIENT_SSL))
|
||||
{
|
||||
set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate,
|
||||
ER(CR_SSL_CONNECTION_ERROR),
|
||||
"SSL is required, but the server does not "
|
||||
"support it");
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (mysql->client_flag & CLIENT_SSL)
|
||||
{
|
||||
/* Do the SSL layering. */
|
||||
|
10
sql/field.cc
10
sql/field.cc
@ -2633,7 +2633,7 @@ void Field_decimal::sql_type(String &res) const
|
||||
if (dec)
|
||||
tmp--;
|
||||
res.length(cs->cset->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
|
||||
"decimal(%d,%d)",tmp,dec));
|
||||
"decimal(%d,%d)/*old*/",tmp,dec));
|
||||
add_zerofill_and_unsigned(res);
|
||||
}
|
||||
|
||||
@ -7923,6 +7923,14 @@ err_exit:
|
||||
return -1;
|
||||
}
|
||||
|
||||
Field::geometry_type Field_geom::geometry_type_merge(geometry_type a,
|
||||
geometry_type b)
|
||||
{
|
||||
if (a == b)
|
||||
return a;
|
||||
return Field::GEOM_GEOMETRY;
|
||||
}
|
||||
|
||||
#endif /*HAVE_SPATIAL*/
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -2591,6 +2591,7 @@ public:
|
||||
int reset(void) { return Field_blob::reset() || !maybe_null(); }
|
||||
|
||||
geometry_type get_geometry_type() { return geom_type; };
|
||||
static geometry_type geometry_type_merge(geometry_type, geometry_type);
|
||||
};
|
||||
#endif /*HAVE_SPATIAL*/
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2014, Monty Program Ab.
|
||||
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2015, MariaDB
|
||||
|
||||
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
|
||||
|
@ -1,5 +1,4 @@
|
||||
/* Copyright (c) 2006, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2012, 2013, Monty Proram Ab.
|
||||
/* Copyright (c) 2006, 2015, Oracle and/or its affiliates.
|
||||
|
||||
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
|
||||
@ -2529,7 +2528,8 @@ ndbcluster_check_if_local_tables_in_db(THD *thd, const char *dbname)
|
||||
char path[FN_REFLEN + 1];
|
||||
|
||||
build_table_filename(path, sizeof(path) - 1, dbname, "", "", 0);
|
||||
if (find_files(thd, &files, dbname, path, NullS, 0) != FIND_FILES_OK)
|
||||
if (find_files(thd, &files, dbname, path, NullS, 0, NULL) !=
|
||||
FIND_FILES_OK)
|
||||
{
|
||||
DBUG_PRINT("info", ("Failed to find files"));
|
||||
DBUG_RETURN(true);
|
||||
|
41
sql/item.cc
41
sql/item.cc
@ -1178,6 +1178,42 @@ Item *Item::safe_charset_converter(CHARSET_INFO *tocs)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Some pieces of the code do not support changing of
|
||||
Item_cache to other Item types.
|
||||
|
||||
Example:
|
||||
Item_singlerow_subselect has "Item_cache **row".
|
||||
Creating of Item_func_conv_charset followed by THD::change_item_tree()
|
||||
should not change row[i] from Item_cache directly to Item_func_conv_charset, because Item_singlerow_subselect
|
||||
because Item_singlerow_subselect later calls Item_cache-specific methods,
|
||||
e.g. row[i]->store() and row[i]->cache_value().
|
||||
|
||||
Let's wrap Item_func_conv_charset in a new Item_cache,
|
||||
so the Item_cache-specific methods can still be used for
|
||||
Item_singlerow_subselect::row[i] safely.
|
||||
|
||||
As a bonus we cache the converted value, instead of converting every time
|
||||
|
||||
TODO: we should eventually check all other use cases of change_item_tree().
|
||||
Perhaps some more potentially dangerous substitution examples exist.
|
||||
*/
|
||||
Item *Item_cache::safe_charset_converter(CHARSET_INFO *tocs)
|
||||
{
|
||||
if (!example)
|
||||
return Item::safe_charset_converter(tocs);
|
||||
Item *conv= example->safe_charset_converter(tocs);
|
||||
if (conv == example)
|
||||
return this;
|
||||
Item_cache *cache;
|
||||
if (!conv || !(cache= new Item_cache_str(conv)))
|
||||
return NULL; // Safe conversion is not possible, or OEM
|
||||
cache->setup(conv);
|
||||
cache->fixed= false; // Make Item::fix_fields() happy
|
||||
return cache;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@details
|
||||
Created mostly for mysql_prepare_table(). Important
|
||||
@ -9471,6 +9507,11 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
||||
item_decimals= 0;
|
||||
decimals= MY_MAX(decimals, item_decimals);
|
||||
}
|
||||
|
||||
if (fld_type == FIELD_TYPE_GEOMETRY)
|
||||
geometry_type=
|
||||
Field_geom::geometry_type_merge(geometry_type, item->get_geometry_type());
|
||||
|
||||
if (Field::result_merge_type(fld_type) == DECIMAL_RESULT)
|
||||
{
|
||||
decimals= MY_MIN(MY_MAX(decimals, item->decimals), DECIMAL_MAX_SCALE);
|
||||
|
@ -4477,7 +4477,6 @@ class Item_cache: public Item_basic_constant
|
||||
{
|
||||
protected:
|
||||
Item *example;
|
||||
table_map used_table_map;
|
||||
/**
|
||||
Field that this object will get value from. This is used by
|
||||
index-based subquery engines to detect and remove the equality injected
|
||||
@ -4495,7 +4494,7 @@ protected:
|
||||
bool value_cached;
|
||||
public:
|
||||
Item_cache():
|
||||
example(0), used_table_map(0), cached_field(0),
|
||||
example(0), cached_field(0),
|
||||
cached_field_type(MYSQL_TYPE_STRING),
|
||||
value_cached(0)
|
||||
{
|
||||
@ -4504,7 +4503,7 @@ public:
|
||||
null_value= 1;
|
||||
}
|
||||
Item_cache(enum_field_types field_type_arg):
|
||||
example(0), used_table_map(0), cached_field(0),
|
||||
example(0), cached_field(0),
|
||||
cached_field_type(field_type_arg),
|
||||
value_cached(0)
|
||||
{
|
||||
@ -4513,8 +4512,6 @@ public:
|
||||
null_value= 1;
|
||||
}
|
||||
|
||||
void set_used_tables(table_map map) { used_table_map= map; }
|
||||
|
||||
virtual bool allocate(uint i) { return 0; }
|
||||
virtual bool setup(Item *item)
|
||||
{
|
||||
@ -4531,7 +4528,6 @@ public:
|
||||
enum_field_types field_type() const { return cached_field_type; }
|
||||
static Item_cache* get_cache(const Item *item);
|
||||
static Item_cache* get_cache(const Item* item, const Item_result type);
|
||||
table_map used_tables() const { return used_table_map; }
|
||||
virtual void keep_array() {}
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool eq_def(Field *field)
|
||||
@ -4582,6 +4578,7 @@ public:
|
||||
return TRUE;
|
||||
return (this->*processor)(arg);
|
||||
}
|
||||
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
};
|
||||
|
||||
|
||||
|
@ -5122,6 +5122,16 @@ null:
|
||||
|
||||
void Item_dyncol_get::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
/*
|
||||
Parent cast doesn't exist yet, only print dynamic column name. This happens
|
||||
when called from create_func_cast() / wrong_precision_error().
|
||||
*/
|
||||
if (!str->length())
|
||||
{
|
||||
args[1]->print(str, query_type);
|
||||
return;
|
||||
}
|
||||
|
||||
/* see create_func_dyncol_get */
|
||||
DBUG_ASSERT(str->length() >= 5);
|
||||
DBUG_ASSERT(strncmp(str->ptr() + str->length() - 5, "cast(", 5) == 0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2014, SkySQL Ab.
|
||||
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2015, MariaDB
|
||||
|
||||
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
|
||||
@ -3311,7 +3311,19 @@ void Item_func_group_concat::cleanup()
|
||||
}
|
||||
DBUG_ASSERT(tree == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
As the ORDER structures pointed to by the elements of the
|
||||
'order' array may be modified in find_order_in_list() called
|
||||
from Item_func_group_concat::setup() to point to runtime
|
||||
created objects, we need to reset them back to the original
|
||||
arguments of the function.
|
||||
*/
|
||||
ORDER **order_ptr= order;
|
||||
for (uint i= 0; i < arg_count_order; i++)
|
||||
{
|
||||
(*order_ptr)->item= &args[arg_count_field + i];
|
||||
order_ptr++;
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -990,11 +990,9 @@ uint purge_log_get_error_code(int res);
|
||||
|
||||
int vprint_msg_to_log(enum loglevel level, const char *format, va_list args);
|
||||
void sql_print_error(const char *format, ...);
|
||||
void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||
void sql_print_information(const char *format, ...)
|
||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||
typedef void (*sql_print_message_func)(const char *format, ...)
|
||||
ATTRIBUTE_FORMAT_FPTR(printf, 1, 2);
|
||||
void sql_print_warning(const char *format, ...);
|
||||
void sql_print_information(const char *format, ...);
|
||||
typedef void (*sql_print_message_func)(const char *format, ...);
|
||||
extern sql_print_message_func sql_print_message_handlers[];
|
||||
|
||||
int error_log_print(enum loglevel level, const char *format,
|
||||
|
@ -2406,6 +2406,12 @@ log_event_print_value(IO_CACHE *file, const uchar *ptr,
|
||||
my_snprintf(typestr, typestr_length, "STRING(%d)", length);
|
||||
return my_b_write_quoted_with_length(file, ptr, length);
|
||||
|
||||
case MYSQL_TYPE_DECIMAL:
|
||||
my_b_printf(file,
|
||||
"!! Old DECIMAL (mysql-4.1 or earlier). "
|
||||
"Not enough metadata to display the value. ");
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
char tmp[5];
|
||||
|
@ -452,7 +452,7 @@ void show_sql_type(enum_field_types type, uint16 metadata, String *str, CHARSET_
|
||||
CHARSET_INFO *cs= str->charset();
|
||||
uint32 length=
|
||||
cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
||||
"decimal(%d,?)", metadata);
|
||||
"decimal(%d,?)/*old*/", metadata);
|
||||
str->length(length);
|
||||
}
|
||||
break;
|
||||
|
@ -8015,9 +8015,10 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
|
||||
if (select_lex->first_cond_optimization)
|
||||
{
|
||||
leaves.empty();
|
||||
if (!select_lex->is_prep_leaf_list_saved)
|
||||
if (select_lex->prep_leaf_list_state != SELECT_LEX::SAVED)
|
||||
{
|
||||
make_leaves_list(leaves, tables, full_table_list, first_select_table);
|
||||
select_lex->prep_leaf_list_state= SELECT_LEX::READY;
|
||||
select_lex->leaf_tables_exec.empty();
|
||||
}
|
||||
else
|
||||
|
@ -1122,7 +1122,7 @@ bool setup_connection_thread_globals(THD *thd)
|
||||
bool login_connection(THD *thd)
|
||||
{
|
||||
NET *net= &thd->net;
|
||||
int error;
|
||||
int error= 0;
|
||||
DBUG_ENTER("login_connection");
|
||||
DBUG_PRINT("info", ("login_connection called by thread %lu",
|
||||
thd->thread_id));
|
||||
@ -1141,7 +1141,8 @@ bool login_connection(THD *thd)
|
||||
my_sleep(1000); /* must wait after eof() */
|
||||
#endif
|
||||
statistic_increment(aborted_connects,&LOCK_status);
|
||||
DBUG_RETURN(1);
|
||||
error=1;
|
||||
goto exit;
|
||||
}
|
||||
/* Connect completed, set read/write timeouts back to default */
|
||||
my_net_set_read_timeout(net, thd->variables.net_read_timeout);
|
||||
@ -1151,10 +1152,13 @@ bool login_connection(THD *thd)
|
||||
if (increment_connection_count(thd, TRUE))
|
||||
{
|
||||
my_error(ER_OUTOFMEMORY, MYF(0), 2*sizeof(USER_STATS));
|
||||
DBUG_RETURN(1);
|
||||
error= 1;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
DBUG_RETURN(0);
|
||||
exit:
|
||||
mysql_audit_notify_connection_connect(thd);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
@ -1295,7 +1299,6 @@ bool thd_prepare_connection(THD *thd)
|
||||
bool rc;
|
||||
lex_start(thd);
|
||||
rc= login_connection(thd);
|
||||
mysql_audit_notify_connection_connect(thd);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
@ -556,6 +556,7 @@ void lex_start(THD *thd)
|
||||
|
||||
lex->is_lex_started= TRUE;
|
||||
lex->used_tables= 0;
|
||||
lex->only_view= FALSE;
|
||||
lex->reset_slave_info.all= false;
|
||||
lex->limit_rows_examined= 0;
|
||||
lex->limit_rows_examined_cnt= ULONGLONG_MAX;
|
||||
@ -1873,7 +1874,7 @@ void st_select_lex::init_query()
|
||||
exclude_from_table_unique_test= no_wrap_view_item= FALSE;
|
||||
nest_level= 0;
|
||||
link_next= 0;
|
||||
is_prep_leaf_list_saved= FALSE;
|
||||
prep_leaf_list_state= UNINIT;
|
||||
have_merged_subqueries= FALSE;
|
||||
bzero((char*) expr_cache_may_be_used, sizeof(expr_cache_may_be_used));
|
||||
m_non_agg_field_used= false;
|
||||
@ -4152,12 +4153,22 @@ bool st_select_lex::save_prep_leaf_tables(THD *thd)
|
||||
{
|
||||
List_iterator_fast<TABLE_LIST> li(leaf_tables);
|
||||
TABLE_LIST *table;
|
||||
|
||||
/*
|
||||
Check that the SELECT_LEX was really prepared and so tables are setup.
|
||||
|
||||
It can be subquery in SET clause of UPDATE which was not prepared yet, so
|
||||
its tables are not yet setup and ready for storing.
|
||||
*/
|
||||
if (prep_leaf_list_state != READY)
|
||||
return FALSE;
|
||||
|
||||
while ((table= li++))
|
||||
{
|
||||
if (leaf_tables_prep.push_back(table))
|
||||
return TRUE;
|
||||
}
|
||||
is_prep_leaf_list_saved= TRUE;
|
||||
prep_leaf_list_state= SAVED;
|
||||
for (SELECT_LEX_UNIT *u= first_inner_unit(); u; u= u->next_unit())
|
||||
{
|
||||
for (SELECT_LEX *sl= u->first_select(); sl; sl= sl->next_select())
|
||||
|
@ -733,7 +733,8 @@ public:
|
||||
List<TABLE_LIST> leaf_tables;
|
||||
List<TABLE_LIST> leaf_tables_exec;
|
||||
List<TABLE_LIST> leaf_tables_prep;
|
||||
bool is_prep_leaf_list_saved;
|
||||
enum leaf_list_state {UNINIT, READY, SAVED};
|
||||
enum leaf_list_state prep_leaf_list_state;
|
||||
uint insert_tables;
|
||||
st_select_lex *merged_into; /* select which this select is merged into */
|
||||
/* (not 0 only for views/derived tables) */
|
||||
|
@ -824,9 +824,16 @@ bool Sql_cmd_alter_table_truncate_partition::execute(THD *thd)
|
||||
log. The exception is a unimplemented truncate method or failure
|
||||
before any call to handler::truncate() is done.
|
||||
Also, it is logged in statement format, regardless of the binlog format.
|
||||
|
||||
Since we've changed data within the table, we also have to invalidate
|
||||
the query cache for it.
|
||||
*/
|
||||
if (error != HA_ERR_WRONG_COMMAND && binlog_stmt)
|
||||
if (error != HA_ERR_WRONG_COMMAND)
|
||||
{
|
||||
query_cache_invalidate3(thd, first_table, FALSE);
|
||||
if (binlog_stmt)
|
||||
error|= write_bin_log(thd, !error, thd->query(), thd->query_length());
|
||||
}
|
||||
|
||||
/*
|
||||
A locked table ticket was upgraded to a exclusive lock. After the
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user