Merge branch '5.5' into 10.0

This commit is contained in:
Sergei Golubchik 2015-06-11 20:20:35 +02:00
commit 810cf362ea
165 changed files with 3364 additions and 1399 deletions

6
.gitattributes vendored
View file

@ -12,12 +12,16 @@
# These files should be checked out as is # These files should be checked out as is
*.result -text -whitespace *.result -text -whitespace
*.dat -text -whitespace
storage/connect/mysql-test/connect/std_data/*.txt -text 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. # Denote all files that are truly binary and should not be modified.
*.png binary *.png binary
*.jpg binary *.jpg binary
*.frm binary
*.MYD binary
*.MYI binary
*.c diff=cpp *.c diff=cpp
*.h diff=cpp *.h diff=cpp

3
.gitignore vendored
View file

@ -175,7 +175,6 @@ storage/tokudb/ft-index/ft/log_print.cc
storage/tokudb/ft-index/ft/logformat storage/tokudb/ft-index/ft/logformat
storage/tokudb/ft-index/ft/ftverify storage/tokudb/ft-index/ft/ftverify
storage/tokudb/ft-index/ft/tdb-recover storage/tokudb/ft-index/ft/tdb-recover
storage/tokudb/ft-index/ft/tdb_logprint
storage/tokudb/ft-index/ft/tokuftdump storage/tokudb/ft-index/ft/tokuftdump
storage/tokudb/ft-index/portability/merge_archives_tokuportability_static.cmake storage/tokudb/ft-index/portability/merge_archives_tokuportability_static.cmake
storage/tokudb/ft-index/portability/toku_config.h 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/ba_replay
storage/tokudb/ft-index/tools/ftverify storage/tokudb/ft-index/tools/ftverify
storage/tokudb/ft-index/tools/tdb-recover 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_dump
storage/tokudb/ft-index/tools/tokudb_gen storage/tokudb/ft-index/tools/tokudb_gen
storage/tokudb/ft-index/tools/tokudb_load storage/tokudb/ft-index/tools/tokudb_load
storage/tokudb/ft-index/tools/tokuftdump storage/tokudb/ft-index/tools/tokuftdump
storage/tokudb/ft-index/tools/tokuft_logprint
storage/tokudb/ft-index/xz/ storage/tokudb/ft-index/xz/
support-files/MySQL-shared-compat.spec support-files/MySQL-shared-compat.spec
support-files/binary-configure support-files/binary-configure

View file

@ -54,6 +54,7 @@ static char *opt_plugin_dir= 0, *opt_default_auth= 0;
static int first_error = 0; static int first_error = 0;
static char *opt_skip_database; static char *opt_skip_database;
DYNAMIC_ARRAY tables4repair, tables4rebuild, alter_table_cmds; DYNAMIC_ARRAY tables4repair, tables4rebuild, alter_table_cmds;
DYNAMIC_ARRAY views4repair;
static char *shared_memory_base_name=0; static char *shared_memory_base_name=0;
static uint opt_protocol=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) { switch (what_to_do) {
case DO_CHECK: case DO_CHECK:
op = "CHECK"; op = "CHECK";
if (opt_quick) end = strmov(end, " QUICK"); if (view)
if (opt_fast) end = strmov(end, " FAST"); {
if (opt_medium_check) end = strmov(end, " MEDIUM"); /* Default */ if (opt_fast || opt_check_only_changed)
if (opt_extended) end = strmov(end, " EXTENDED"); DBUG_RETURN(0);
if (opt_check_only_changed) end = strmov(end, " CHANGED"); }
else
{
if (opt_quick) end = strmov(end, " QUICK");
if (opt_fast) end = strmov(end, " FAST");
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"); if (opt_upgrade) end = strmov(end, " FOR UPGRADE");
break; break;
case DO_REPAIR: case DO_REPAIR:
@ -966,6 +975,7 @@ static void print_result()
uint length_of_db; uint length_of_db;
uint i; uint i;
my_bool found_error=0, table_rebuild=0; my_bool found_error=0, table_rebuild=0;
DYNAMIC_ARRAY *array4repair= &tables4repair;
DBUG_ENTER("print_result"); DBUG_ENTER("print_result");
res = mysql_use_result(sock); res = mysql_use_result(sock);
@ -1002,9 +1012,10 @@ static void print_result()
else else
{ {
char *table_name= prev + (length_of_db+1); char *table_name= prev + (length_of_db+1);
insert_dynamic(&tables4repair, table_name); insert_dynamic(array4repair, table_name);
} }
} }
array4repair= &tables4repair;
found_error=0; found_error=0;
table_rebuild=0; table_rebuild=0;
prev_alter[0]= 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 we have to run upgrade on it. In this case we write a nicer message
than "Please do "REPAIR TABLE""... 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"); printf("%-50s %s", row[0], "Needs upgrade");
array4repair= strstr(row[3], "VIEW") ? &views4repair : &tables4repair;
}
else else
printf("%s\n%-9s: %s", row[0], row[2], row[3]); printf("%s\n%-9s: %s", row[0], row[2], row[3]);
if (opt_auto_repair && strcmp(row[2],"note")) if (opt_auto_repair && strcmp(row[2],"note"))
@ -1052,7 +1066,7 @@ static void print_result()
else else
{ {
char *table_name= prev + (length_of_db+1); char *table_name= prev + (length_of_db+1);
insert_dynamic(&tables4repair, table_name); insert_dynamic(array4repair, table_name);
} }
} }
mysql_free_result(res); mysql_free_result(res);
@ -1172,6 +1186,8 @@ int main(int argc, char **argv)
if (opt_auto_repair && if (opt_auto_repair &&
(my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16, (my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,
64, MYF(0)) || 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, my_init_dynamic_array(&tables4rebuild, sizeof(char)*(NAME_LEN*2+2),16,
64, MYF(0)) || 64, MYF(0)) ||
my_init_dynamic_array(&alter_table_cmds, MAX_ALTER_STR_SIZE, 0, 1, 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)); rebuild_table((char*) dynamic_array_ptr(&tables4rebuild, i));
for (i = 0; i < alter_table_cmds.elements ; i++) for (i = 0; i < alter_table_cmds.elements ; i++)
run_query((char*) dynamic_array_ptr(&alter_table_cmds, i), 1); 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); ret= MY_TEST(first_error);
@ -1209,8 +1232,10 @@ int main(int argc, char **argv)
dbDisconnect(current_host); dbDisconnect(current_host);
if (opt_auto_repair) if (opt_auto_repair)
{ {
delete_dynamic(&views4repair);
delete_dynamic(&tables4repair); delete_dynamic(&tables4repair);
delete_dynamic(&tables4rebuild); delete_dynamic(&tables4rebuild);
delete_dynamic(&alter_table_cmds);
} }
end1: end1:
my_free(opt_password); my_free(opt_password);

View file

@ -58,7 +58,7 @@ FOREACH(file ${ABI_HEADERS})
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${COMPILER} 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 -I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql
${file} ${file}
ERROR_QUIET OUTPUT_FILE ${tmpfile}) ERROR_QUIET OUTPUT_FILE ${tmpfile})

View file

@ -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 # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -60,9 +60,9 @@ IF(NOT GIT_EXECUTABLE)
# Save bison output first. # Save bison output first.
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc 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 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") IF(CMAKE_GENERATOR MATCHES "Makefiles")
# make clean # make clean
@ -74,9 +74,9 @@ IF(NOT GIT_EXECUTABLE)
# Restore bison output # Restore bison output
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.cc 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 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.cc)
FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.h) FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.h)
ENDIF() ENDIF()

View file

@ -1,7 +1,7 @@
/* $NetBSD: terminal.h,v 1.3 2011/07/29 23:44:45 christos Exp $ */ /* $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. * The Regents of the University of California. All rights reserved.
* *
* This code is derived from software contributed to Berkeley by * 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_gettc(EditLine *, int, char **);
protected int terminal_telltc(EditLine *, int, const Char **); protected int terminal_telltc(EditLine *, int, const Char **);
protected int terminal_echotc(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 int terminal__putc(EditLine *, Int);
protected void terminal__flush(EditLine *); protected void terminal__flush(EditLine *);

View file

@ -1,7 +1,7 @@
/* $NetBSD: emacs.c,v 1.25 2011/07/29 15:16:33 christos Exp $ */ /* $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. * The Regents of the University of California. All rights reserved.
* *
* This code is derived from software contributed to Berkeley by * 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 I'm at the end */
if (el->el_line.cursor == el->el_line.buffer) { if (el->el_line.cursor == el->el_line.buffer) {
/* and the beginning */ /* and the beginning */
terminal_writec(el, c); /* then do an EOF */ if(!(terminal_writec(el, c))) /* then do an EOF */
return CC_EOF; return CC_EOF;
else
return CC_ERROR;
} else { } else {
/* /*
* Here we could list completions, but it is an * Here we could list completions, but it is an

View file

@ -1,7 +1,7 @@
/* $NetBSD: terminal.c,v 1.10 2011/10/04 15:27:04 christos Exp $ */ /* $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. * The Regents of the University of California. All rights reserved.
* *
* This code is derived from software contributed to Berkeley by * This code is derived from software contributed to Berkeley by
@ -1271,14 +1271,19 @@ terminal__flush(EditLine *el)
/* terminal_writec(): /* terminal_writec():
* Write the given character out, in a human readable form * Write the given character out, in a human readable form
*/ */
protected void protected int
terminal_writec(EditLine *el, Int c) terminal_writec(EditLine *el, Int c)
{ {
Char visbuf[VISUAL_WIDTH_MAX +1]; Char visbuf[VISUAL_WIDTH_MAX +1];
ssize_t vcnt = ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c); ssize_t vcnt = ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c);
visbuf[vcnt] = '\0'; if(vcnt == -1)
terminal_overwrite(el, visbuf, (size_t)vcnt); return 1; /* Error due to insufficient space */
terminal__flush(el); else {
visbuf[vcnt] = '\0';
terminal_overwrite(el, visbuf, (size_t)vcnt);
terminal__flush(el);
return 0;
}
} }

View file

@ -1,7 +1,7 @@
/* $NetBSD: vi.c,v 1.41 2011/10/04 15:27:04 christos Exp $ */ /* $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. * The Regents of the University of California. All rights reserved.
* *
* This code is derived from software contributed to Berkeley by * 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.lastchar) {
if (el->el_line.cursor == el->el_line.buffer) { 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; return CC_EOF;
else
return CC_ERROR;
} else { } else {
/* /*
* Here we could list completions, but it is an * Here we could list completions, but it is an

View file

@ -202,7 +202,7 @@
#cmakedefine HAVE_MADVISE 1 #cmakedefine HAVE_MADVISE 1
#cmakedefine HAVE_DECL_MADVISE 1 #cmakedefine HAVE_DECL_MADVISE 1
#cmakedefine HAVE_DECL_TGOTO 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_MALLINFO 1
#cmakedefine HAVE_MEMCPY 1 #cmakedefine HAVE_MEMCPY 1
#cmakedefine HAVE_MEMMOVE 1 #cmakedefine HAVE_MEMMOVE 1
@ -395,7 +395,7 @@
#cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@ #cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@
#cmakedefine HAVE_MBSTATE_T #cmakedefine HAVE_MBSTATE_T 1
#define MAX_INDEXES 64 #define MAX_INDEXES 64
@ -430,15 +430,15 @@
#cmakedefine HAVE_WCTYPE_H 1 #cmakedefine HAVE_WCTYPE_H 1
#cmakedefine HAVE_WCHAR_H 1 #cmakedefine HAVE_WCHAR_H 1
#cmakedefine HAVE_LANGINFO_H 1 #cmakedefine HAVE_LANGINFO_H 1
#cmakedefine HAVE_MBRLEN #cmakedefine HAVE_MBRLEN 1
#cmakedefine HAVE_MBSCMP #cmakedefine HAVE_MBSCMP 1
#cmakedefine HAVE_MBSRTOWCS #cmakedefine HAVE_MBSRTOWCS 1
#cmakedefine HAVE_WCRTOMB #cmakedefine HAVE_WCRTOMB 1
#cmakedefine HAVE_MBRTOWC #cmakedefine HAVE_MBRTOWC 1
#cmakedefine HAVE_WCSCOLL #cmakedefine HAVE_WCSCOLL 1
#cmakedefine HAVE_WCSDUP #cmakedefine HAVE_WCSDUP 1
#cmakedefine HAVE_WCWIDTH #cmakedefine HAVE_WCWIDTH 1
#cmakedefine HAVE_WCTYPE #cmakedefine HAVE_WCTYPE 1
#cmakedefine HAVE_ISWLOWER 1 #cmakedefine HAVE_ISWLOWER 1
#cmakedefine HAVE_ISWUPPER 1 #cmakedefine HAVE_ISWUPPER 1
#cmakedefine HAVE_TOWLOWER 1 #cmakedefine HAVE_TOWLOWER 1
@ -452,7 +452,7 @@
#cmakedefine HAVE_STRCASECMP 1 #cmakedefine HAVE_STRCASECMP 1
#cmakedefine HAVE_STRNCASECMP 1 #cmakedefine HAVE_STRNCASECMP 1
#cmakedefine HAVE_STRDUP 1 #cmakedefine HAVE_STRDUP 1
#cmakedefine HAVE_LANGINFO_CODESET #cmakedefine HAVE_LANGINFO_CODESET 1
#cmakedefine HAVE_TCGETATTR 1 #cmakedefine HAVE_TCGETATTR 1
#cmakedefine HAVE_FLOCKFILE 1 #cmakedefine HAVE_FLOCKFILE 1

View file

@ -4,7 +4,12 @@ Priority: optional
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net> Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net> XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
Uploaders: MariaDB 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 Standards-Version: 3.8.3
Homepage: http://mariadb.org/ Homepage: http://mariadb.org/
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files

View file

@ -4,7 +4,12 @@ Priority: optional
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net> Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net> XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
Uploaders: MariaDB 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 Standards-Version: 3.8.2
Homepage: http://mariadb.org/ Homepage: http://mariadb.org/
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/10.0/files

View file

@ -1,7 +1,5 @@
typedef char my_bool; typedef char my_bool;
typedef int my_socket; typedef int my_socket;
#include "mysql_version.h"
#include "mysql_com.h"
enum enum_server_command enum enum_server_command
{ {
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, 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); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
my_bool my_thread_init(void); my_bool my_thread_init(void);
void my_thread_end(void); void my_thread_end(void);
#include "mysql_time.h"
typedef long my_time_t; typedef long my_time_t;
enum enum_mysql_timestamp_type enum enum_mysql_timestamp_type
{ {
@ -159,7 +156,6 @@ typedef struct st_mysql_time
my_bool neg; my_bool neg;
enum enum_mysql_timestamp_type time_type; enum enum_mysql_timestamp_type time_type;
} MYSQL_TIME; } MYSQL_TIME;
#include "my_list.h"
typedef struct st_list { typedef struct st_list {
struct st_list *prev,*next; struct st_list *prev,*next;
void *data; void *data;
@ -201,8 +197,6 @@ typedef struct st_mysql_field {
typedef char **MYSQL_ROW; typedef char **MYSQL_ROW;
typedef unsigned int MYSQL_FIELD_OFFSET; typedef unsigned int MYSQL_FIELD_OFFSET;
typedef unsigned long long my_ulonglong; typedef unsigned long long my_ulonglong;
#include "typelib.h"
#include "my_alloc.h"
typedef struct st_used_mem typedef struct st_used_mem
{ {
struct st_used_mem *next; struct st_used_mem *next;
@ -246,7 +240,6 @@ typedef struct st_mysql_rows {
unsigned long length; unsigned long length;
} MYSQL_ROWS; } MYSQL_ROWS;
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; typedef MYSQL_ROWS *MYSQL_ROW_OFFSET;
#include "my_alloc.h"
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
typedef struct st_mysql_data { typedef struct st_mysql_data {
MYSQL_ROWS *data; MYSQL_ROWS *data;

View file

@ -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 *); 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; struct st_mysql;
#include <mysql/plugin_auth_common.h>
typedef struct st_plugin_vio_info typedef struct st_plugin_vio_info
{ {
enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, 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 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); int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql);
}; };
#include <mysql/auth_dialog_client.h>
struct st_mysql; struct st_mysql;
typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql,
int type, const char *prompt, char *buf, int buf_len); int type, const char *prompt, char *buf, int buf_len);

View file

@ -1,15 +1,11 @@
#include "plugin.h"
typedef char my_bool; typedef char my_bool;
typedef void * MYSQL_PLUGIN; typedef void * MYSQL_PLUGIN;
#include <mysql/services.h>
#include <mysql/service_my_snprintf.h>
extern struct my_snprintf_service_st { extern struct my_snprintf_service_st {
size_t (*my_snprintf_type)(char*, size_t, const char*, ...); size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
} *my_snprintf_service; } *my_snprintf_service;
size_t my_snprintf(char* to, size_t n, const char* fmt, ...); 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); 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 struct st_mysql_lex_string
{ {
char *str; 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, MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
const char *str, unsigned int size, const char *str, unsigned int size,
int allocate_lex_string); int allocate_lex_string);
#include <mysql/service_thd_wait.h>
typedef enum _thd_wait_type_e { typedef enum _thd_wait_type_e {
THD_WAIT_SLEEP= 1, THD_WAIT_SLEEP= 1,
THD_WAIT_DISKIO= 2, THD_WAIT_DISKIO= 2,
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
} *thd_wait_service; } *thd_wait_service;
void thd_wait_begin(void* thd, int wait_type); void thd_wait_begin(void* thd, int wait_type);
void thd_wait_end(void* thd); void thd_wait_end(void* thd);
#include <mysql/service_progress_report.h>
extern struct progress_report_service_st { extern struct progress_report_service_st {
void (*thd_progress_init_func)(void* thd, unsigned int max_stage); void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
void (*thd_progress_report_func)(void* thd, void (*thd_progress_report_func)(void* thd,
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
void thd_progress_end(void* thd); void thd_progress_end(void* thd);
const char *set_thd_proc_info(void*, const char * info, const char *func, const char *set_thd_proc_info(void*, const char * info, const char *func,
const char *file, unsigned int line); const char *file, unsigned int line);
#include <mysql/service_debug_sync.h>
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
#include <mysql/service_kill_statement.h>
enum thd_kill_levels { enum thd_kill_levels {
THD_IS_NOT_KILLED=0, THD_IS_NOT_KILLED=0,
THD_ABORT_SOFTLY=50, THD_ABORT_SOFTLY=50,
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
enum thd_kill_levels (*thd_kill_level_func)(const void*); enum thd_kill_levels (*thd_kill_level_func)(const void*);
} *thd_kill_statement_service; } *thd_kill_statement_service;
enum thd_kill_levels thd_kill_level(const void*); enum thd_kill_levels thd_kill_level(const void*);
#include <mysql/service_thd_timezone.h>
#include "mysql_time.h"
typedef long my_time_t; typedef long my_time_t;
enum enum_mysql_timestamp_type enum enum_mysql_timestamp_type
{ {
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
} *thd_timezone_service; } *thd_timezone_service;
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); 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); 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 { extern struct my_sha1_service_st {
void (*my_sha1_type)(unsigned char*, const char*, size_t); void (*my_sha1_type)(unsigned char*, const char*, size_t);
void (*my_sha1_multi_type)(unsigned char*, ...); void (*my_sha1_multi_type)(unsigned char*, ...);
} *my_sha1_service; } *my_sha1_service;
void my_sha1(unsigned char*, const char*, size_t); void my_sha1(unsigned char*, const char*, size_t);
void my_sha1_multi(unsigned char*, ...); void my_sha1_multi(unsigned char*, ...);
#include <mysql/service_logger.h>
typedef struct logger_handle_st LOGGER_HANDLE; typedef struct logger_handle_st LOGGER_HANDLE;
extern struct logger_service_st { extern struct logger_service_st {
void (*logger_init_mutexes)(); void (*logger_init_mutexes)();
@ -137,14 +125,12 @@ extern struct logger_service_st {
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log); int logger_rotate(LOGGER_HANDLE *log);
#include <mysql/service_thd_autoinc.h>
extern struct thd_autoinc_service_st { extern struct thd_autoinc_service_st {
void (*thd_get_autoinc_func)(const void* thd, void (*thd_get_autoinc_func)(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
} *thd_autoinc_service; } *thd_autoinc_service;
void thd_get_autoinc(const void* thd, void thd_get_autoinc(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
#include <mysql/service_thd_error_context.h>
extern struct thd_error_context_service_st { extern struct thd_error_context_service_st {
const char *(*thd_get_error_message_func)(const void* thd); const char *(*thd_get_error_message_func)(const void* thd);
unsigned int (*thd_get_error_number_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; const char *version_info;
unsigned int maturity; unsigned int maturity;
}; };
#include "plugin_ftparser.h"
#include "plugin.h"
enum enum_ftparser_mode enum enum_ftparser_mode
{ {
MYSQL_FTPARSER_SIMPLE_MODE= 0, MYSQL_FTPARSER_SIMPLE_MODE= 0,

View file

@ -1,15 +1,11 @@
#include <mysql/plugin.h>
typedef char my_bool; typedef char my_bool;
typedef void * MYSQL_PLUGIN; typedef void * MYSQL_PLUGIN;
#include <mysql/services.h>
#include <mysql/service_my_snprintf.h>
extern struct my_snprintf_service_st { extern struct my_snprintf_service_st {
size_t (*my_snprintf_type)(char*, size_t, const char*, ...); size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
} *my_snprintf_service; } *my_snprintf_service;
size_t my_snprintf(char* to, size_t n, const char* fmt, ...); 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); 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 struct st_mysql_lex_string
{ {
char *str; 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, MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
const char *str, unsigned int size, const char *str, unsigned int size,
int allocate_lex_string); int allocate_lex_string);
#include <mysql/service_thd_wait.h>
typedef enum _thd_wait_type_e { typedef enum _thd_wait_type_e {
THD_WAIT_SLEEP= 1, THD_WAIT_SLEEP= 1,
THD_WAIT_DISKIO= 2, THD_WAIT_DISKIO= 2,
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
} *thd_wait_service; } *thd_wait_service;
void thd_wait_begin(void* thd, int wait_type); void thd_wait_begin(void* thd, int wait_type);
void thd_wait_end(void* thd); void thd_wait_end(void* thd);
#include <mysql/service_progress_report.h>
extern struct progress_report_service_st { extern struct progress_report_service_st {
void (*thd_progress_init_func)(void* thd, unsigned int max_stage); void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
void (*thd_progress_report_func)(void* thd, void (*thd_progress_report_func)(void* thd,
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
void thd_progress_end(void* thd); void thd_progress_end(void* thd);
const char *set_thd_proc_info(void*, const char * info, const char *func, const char *set_thd_proc_info(void*, const char * info, const char *func,
const char *file, unsigned int line); const char *file, unsigned int line);
#include <mysql/service_debug_sync.h>
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
#include <mysql/service_kill_statement.h>
enum thd_kill_levels { enum thd_kill_levels {
THD_IS_NOT_KILLED=0, THD_IS_NOT_KILLED=0,
THD_ABORT_SOFTLY=50, THD_ABORT_SOFTLY=50,
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
enum thd_kill_levels (*thd_kill_level_func)(const void*); enum thd_kill_levels (*thd_kill_level_func)(const void*);
} *thd_kill_statement_service; } *thd_kill_statement_service;
enum thd_kill_levels thd_kill_level(const void*); enum thd_kill_levels thd_kill_level(const void*);
#include <mysql/service_thd_timezone.h>
#include "mysql_time.h"
typedef long my_time_t; typedef long my_time_t;
enum enum_mysql_timestamp_type enum enum_mysql_timestamp_type
{ {
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
} *thd_timezone_service; } *thd_timezone_service;
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); 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); 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 { extern struct my_sha1_service_st {
void (*my_sha1_type)(unsigned char*, const char*, size_t); void (*my_sha1_type)(unsigned char*, const char*, size_t);
void (*my_sha1_multi_type)(unsigned char*, ...); void (*my_sha1_multi_type)(unsigned char*, ...);
} *my_sha1_service; } *my_sha1_service;
void my_sha1(unsigned char*, const char*, size_t); void my_sha1(unsigned char*, const char*, size_t);
void my_sha1_multi(unsigned char*, ...); void my_sha1_multi(unsigned char*, ...);
#include <mysql/service_logger.h>
typedef struct logger_handle_st LOGGER_HANDLE; typedef struct logger_handle_st LOGGER_HANDLE;
extern struct logger_service_st { extern struct logger_service_st {
void (*logger_init_mutexes)(); void (*logger_init_mutexes)();
@ -137,14 +125,12 @@ extern struct logger_service_st {
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log); int logger_rotate(LOGGER_HANDLE *log);
#include <mysql/service_thd_autoinc.h>
extern struct thd_autoinc_service_st { extern struct thd_autoinc_service_st {
void (*thd_get_autoinc_func)(const void* thd, void (*thd_get_autoinc_func)(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
} *thd_autoinc_service; } *thd_autoinc_service;
void thd_get_autoinc(const void* thd, void thd_get_autoinc(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
#include <mysql/service_thd_error_context.h>
extern struct thd_error_context_service_st { extern struct thd_error_context_service_st {
const char *(*thd_get_error_message_func)(const void* thd); const char *(*thd_get_error_message_func)(const void* thd);
unsigned int (*thd_get_error_number_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; const char *version_info;
unsigned int maturity; unsigned int maturity;
}; };
#include "plugin_ftparser.h"
#include "plugin.h"
enum enum_ftparser_mode enum enum_ftparser_mode
{ {
MYSQL_FTPARSER_SIMPLE_MODE= 0, 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, void thd_set_ha_data(void* thd, const struct handlerton *hton,
const void *ha_data); const void *ha_data);
void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); void thd_wakeup_subsequent_commits(void* thd, int wakeup_error);
#include <mysql/plugin_auth_common.h>
typedef struct st_plugin_vio_info typedef struct st_plugin_vio_info
{ {
enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,

View file

@ -1,15 +1,11 @@
#include "plugin.h"
typedef char my_bool; typedef char my_bool;
typedef void * MYSQL_PLUGIN; typedef void * MYSQL_PLUGIN;
#include <mysql/services.h>
#include <mysql/service_my_snprintf.h>
extern struct my_snprintf_service_st { extern struct my_snprintf_service_st {
size_t (*my_snprintf_type)(char*, size_t, const char*, ...); size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
} *my_snprintf_service; } *my_snprintf_service;
size_t my_snprintf(char* to, size_t n, const char* fmt, ...); 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); 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 struct st_mysql_lex_string
{ {
char *str; 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, MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
const char *str, unsigned int size, const char *str, unsigned int size,
int allocate_lex_string); int allocate_lex_string);
#include <mysql/service_thd_wait.h>
typedef enum _thd_wait_type_e { typedef enum _thd_wait_type_e {
THD_WAIT_SLEEP= 1, THD_WAIT_SLEEP= 1,
THD_WAIT_DISKIO= 2, THD_WAIT_DISKIO= 2,
@ -54,7 +49,6 @@ extern struct thd_wait_service_st {
} *thd_wait_service; } *thd_wait_service;
void thd_wait_begin(void* thd, int wait_type); void thd_wait_begin(void* thd, int wait_type);
void thd_wait_end(void* thd); void thd_wait_end(void* thd);
#include <mysql/service_progress_report.h>
extern struct progress_report_service_st { extern struct progress_report_service_st {
void (*thd_progress_init_func)(void* thd, unsigned int max_stage); void (*thd_progress_init_func)(void* thd, unsigned int max_stage);
void (*thd_progress_report_func)(void* thd, void (*thd_progress_report_func)(void* thd,
@ -75,9 +69,7 @@ void thd_progress_next_stage(void* thd);
void thd_progress_end(void* thd); void thd_progress_end(void* thd);
const char *set_thd_proc_info(void*, const char * info, const char *func, const char *set_thd_proc_info(void*, const char * info, const char *func,
const char *file, unsigned int line); const char *file, unsigned int line);
#include <mysql/service_debug_sync.h>
extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t);
#include <mysql/service_kill_statement.h>
enum thd_kill_levels { enum thd_kill_levels {
THD_IS_NOT_KILLED=0, THD_IS_NOT_KILLED=0,
THD_ABORT_SOFTLY=50, THD_ABORT_SOFTLY=50,
@ -87,8 +79,6 @@ extern struct kill_statement_service_st {
enum thd_kill_levels (*thd_kill_level_func)(const void*); enum thd_kill_levels (*thd_kill_level_func)(const void*);
} *thd_kill_statement_service; } *thd_kill_statement_service;
enum thd_kill_levels thd_kill_level(const void*); enum thd_kill_levels thd_kill_level(const void*);
#include <mysql/service_thd_timezone.h>
#include "mysql_time.h"
typedef long my_time_t; typedef long my_time_t;
enum enum_mysql_timestamp_type enum enum_mysql_timestamp_type
{ {
@ -108,14 +98,12 @@ extern struct thd_timezone_service_st {
} *thd_timezone_service; } *thd_timezone_service;
my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); 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); 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 { extern struct my_sha1_service_st {
void (*my_sha1_type)(unsigned char*, const char*, size_t); void (*my_sha1_type)(unsigned char*, const char*, size_t);
void (*my_sha1_multi_type)(unsigned char*, ...); void (*my_sha1_multi_type)(unsigned char*, ...);
} *my_sha1_service; } *my_sha1_service;
void my_sha1(unsigned char*, const char*, size_t); void my_sha1(unsigned char*, const char*, size_t);
void my_sha1_multi(unsigned char*, ...); void my_sha1_multi(unsigned char*, ...);
#include <mysql/service_logger.h>
typedef struct logger_handle_st LOGGER_HANDLE; typedef struct logger_handle_st LOGGER_HANDLE;
extern struct logger_service_st { extern struct logger_service_st {
void (*logger_init_mutexes)(); void (*logger_init_mutexes)();
@ -137,14 +125,12 @@ extern struct logger_service_st {
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log); int logger_rotate(LOGGER_HANDLE *log);
#include <mysql/service_thd_autoinc.h>
extern struct thd_autoinc_service_st { extern struct thd_autoinc_service_st {
void (*thd_get_autoinc_func)(const void* thd, void (*thd_get_autoinc_func)(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
} *thd_autoinc_service; } *thd_autoinc_service;
void thd_get_autoinc(const void* thd, void thd_get_autoinc(const void* thd,
unsigned long* off, unsigned long* inc); unsigned long* off, unsigned long* inc);
#include <mysql/service_thd_error_context.h>
extern struct thd_error_context_service_st { extern struct thd_error_context_service_st {
const char *(*thd_get_error_message_func)(const void* thd); const char *(*thd_get_error_message_func)(const void* thd);
unsigned int (*thd_get_error_number_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; const char *version_info;
unsigned int maturity; unsigned int maturity;
}; };
#include "plugin_ftparser.h"
struct st_mysql_daemon struct st_mysql_daemon
{ {
int interface_version; int interface_version;

View file

@ -1,4 +1,3 @@
#include "mysql/psi/psi.h"
C_MODE_START C_MODE_START
struct TABLE_SHARE; struct TABLE_SHARE;
struct sql_digest_storage; struct sql_digest_storage;

View file

@ -1,4 +1,3 @@
#include "mysql/psi/psi.h"
C_MODE_START C_MODE_START
struct TABLE_SHARE; struct TABLE_SHARE;
struct sql_digest_storage; struct sql_digest_storage;

View file

@ -381,7 +381,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
CONFIGURE_FILE( CONFIGURE_FILE(
${VERSION_SCRIPT_TEMPLATE} ${VERSION_SCRIPT_TEMPLATE}
${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld ${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld
@ONLY@ @ONLY
) )
SET(VERSION_SCRIPT_LINK_FLAGS SET(VERSION_SCRIPT_LINK_FLAGS
"-Wl,${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld") "-Wl,${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld")

View file

@ -6040,6 +6040,21 @@ DROP TABLE t1;
# End of ctype_utf8_ilseq.inc # 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 # End of 5.5 tests
# #
# #

View file

@ -1455,6 +1455,12 @@ Warnings:
Warning 1918 Encountered illegal value '18446744073709552001' when converting to INT 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 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 # test of symbolic names
# #
# creation test (names) # creation test (names)

View file

@ -0,0 +1 @@
create server '' foreign data wrapper w2 options (host '127.0.0.1');

View file

@ -2342,7 +2342,7 @@ DROP TABLE t1;
create table t1 (a int, b int); create table t1 (a int, b int);
insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45); insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
create table t2 (c int, d int); 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); 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) a sum(b) (select d from t2 where c=a order by max(b) limit 1)
1 23 11 1 23 11

View file

@ -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'); (select variable_name from information_schema.session_variables where variable_name = 'basedir');
variable_name variable_name
BASEDIR 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;

View file

@ -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 warning Size of datafile is: 14 Should be: 7
test.t1 check error Corrupt test.t1 check error Corrupt
DROP TABLE t1; 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'; show variables like 'myisam_block_size';
Variable_name Value Variable_name Value
myisam_block_size 1024 myisam_block_size 1024

View file

@ -60,3 +60,12 @@ INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset,
# #
TRUNCATE TABLE time_zone_leap_second; TRUNCATE TABLE time_zone_leap_second;
ALTER TABLE time_zone_leap_second ORDER BY Transition_time; 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;

View file

@ -3,6 +3,41 @@ drop table if exists t1,v1,v2,v3,v4,v1badcheck;
drop view 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 t1(a int);
create table kv(k varchar(30) NOT NULL PRIMARY KEY,v varchar(50)); 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; flush tables;
check view v1; check view v1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text

View file

@ -347,3 +347,26 @@ CREATE TABLE test.`t.1` (id int);
mysqlcheck test t.1 mysqlcheck test t.1
test.t.1 OK test.t.1 OK
drop table test.`t.1`; 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;

View file

@ -380,33 +380,33 @@ DROP TABLE t1;
create table t1 (a int) engine=innodb partition by hash(a) ; create table t1 (a int) engine=innodb partition by hash(a) ;
show table status like 't1'; 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 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; drop table t1;
create table t1 (a int) create table t1 (a int)
engine = innodb engine = innodb
partition by key (a); partition by key (a);
show table status; 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 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); insert into t1 values (0), (1), (2), (3);
show table status; 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 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; drop table t1;
create table t1 (a int auto_increment primary key) create table t1 (a int auto_increment primary key)
engine = innodb engine = innodb
partition by key (a); partition by key (a);
show table status; 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 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); insert into t1 values (NULL), (NULL), (NULL), (NULL);
show table status; 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 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); insert into t1 values (NULL), (NULL), (NULL), (NULL);
show table status; 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 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; drop table t1;
create table t1 (a int) create table t1 (a int)
partition by key (a) partition by key (a)
@ -588,6 +588,17 @@ a b
0 1 0 1
DROP TABLE t1; 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 == # BUG#12912171 - ASSERTION FAILED: QUICK->HEAD->READ_SET ==
# SAVE_READ_SET # SAVE_READ_SET
# #

View 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;

View 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;

View 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;

View 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;

View file

@ -994,3 +994,24 @@ GROUP BY t2.col0
WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL)); WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL));
1 1
DROP TABLE t1, t2; 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
#

View 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;

View file

@ -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; update t3 left join v2 using (id) set flag=flag+1;
drop view v2, v1; drop view v2, v1;
drop table t1, t2, t3; 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. # -- End of 5.5 tests.
# ----------------------------------------------------------------- # -----------------------------------------------------------------

View file

@ -0,0 +1 @@
<EFBFBD> 123.45<EFBFBD> 123.46<EFBFBD> 123.47

Binary file not shown.

Binary file not shown.

View file

@ -327,6 +327,18 @@ INSERT INTO t2 SET a=1;
INSERT INTO t2 SET b=1; INSERT INTO t2 SET b=1;
UPDATE t1, t2 SET t1.a=10, t2.a=20; UPDATE t1, t2 SET t1.a=10, t2.a=20;
DROP TABLE t1,t2; 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; flush logs;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
@ -4554,6 +4566,62 @@ SET TIMESTAMP=1000000000/*!*/;
DROP TABLE `t1`,`t2` /* generated by server */ DROP TABLE `t1`,`t2` /* generated by server */
/*!*/; /*!*/;
# at # # 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 #010909 4:46:40 server id 1 end_log_pos # Rotate to master-bin.000002 pos: 4
DELIMITER ; DELIMITER ;
# End of log file # End of log file

View file

@ -438,9 +438,20 @@ INSERT INTO t2 SET b=1;
UPDATE t1, t2 SET t1.a=10, t2.a=20; UPDATE t1, t2 SET t1.a=10, t2.a=20;
DROP TABLE t1,t2; 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; flush logs;
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --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/ --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 --exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001

View 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;

View file

@ -1,11 +1,6 @@
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/have_debug.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 #
--echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE --echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE
--echo # ADD FOREIGN KEY --echo # ADD FOREIGN KEY

View file

@ -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 --source include/have_innodb.inc
# embedded server ignores 'delayed', so skip this # embedded server ignores 'delayed', so skip this
-- source include/not_embedded.inc -- source include/not_embedded.inc

View file

@ -2,11 +2,6 @@
--source include/have_debug.inc --source include/have_debug.inc
--source include/have_partition.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 #
--echo # Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1 --echo # Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1
--echo # CAUSES INFINITE PAGE SPLIT --echo # CAUSES INFINITE PAGE SPLIT

View file

@ -1,11 +1,6 @@
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/big_test.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 #
--echo # Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE --echo # Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE
--echo # CALLED FROM A FUNCTION --echo # CALLED FROM A FUNCTION

View file

@ -1,10 +1,5 @@
--source include/have_innodb.inc --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 #
--echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN --echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN
--echo # INNODB_STRICT_MODE = 1 --echo # INNODB_STRICT_MODE = 1

View 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;

View file

@ -6,3 +6,14 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 optimize status OK test.t1 optimize status OK
drop table t1; 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;

View file

@ -160,3 +160,13 @@ INSERT /*! IGNORE */ INTO t1 VALUES ('urxjxqvwabikpugvexxbxdpxjkeqiuhhuadbcuhoz
check table t1; check table t1;
OPTIMIZE TABLE t1; OPTIMIZE TABLE t1;
drop 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;

View file

@ -58,7 +58,10 @@ t1.frm
t1.par t1.par
SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open'; 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'; 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'; SET DEBUG_SYNC = 'now WAIT_FOR parked';
# When waiting for the name lock in get_all_tables in sql_show.cc # When waiting for the name lock in get_all_tables in sql_show.cc
# this will not be concurrent any more, thus the TIMEOUT # 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); PARTITION p10 VALUES LESS THAN MAXVALUE);
Warnings: Warnings:
Warning 1639 debug sync point wait timed out 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 TABLE_SCHEMA TABLE_NAME PARTITION_NAME PARTITION_ORDINAL_POSITION PARTITION_DESCRIPTION TABLE_ROWS
def test t1 p0 NULL 1 NULL RANGE NULL a NULL 10 1 16384 16384 NULL 0 0 NULL NULL NULL NULL default NULL test t1 p0 1 10 1
def test t1 p10 NULL 2 NULL RANGE NULL a NULL MAXVALUE 3 5461 16384 NULL 0 0 NULL NULL NULL NULL default NULL test t1 p10 2 MAXVALUE 3
t1#P#p0.ibd t1#P#p0.ibd
t1#P#p10.ibd t1#P#p10.ibd
t1.frm t1.frm

View file

@ -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='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open';
SET DEBUG_SYNC='partition_open_error SIGNAL alter WAIT_FOR finish'; SET DEBUG_SYNC='partition_open_error SIGNAL alter WAIT_FOR finish';
send 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,,); connect (con1, localhost, root,,);
SET DEBUG_SYNC = 'now WAIT_FOR parked'; SET DEBUG_SYNC = 'now WAIT_FOR parked';

View file

@ -45,6 +45,11 @@ id
2 2
alter table t1 rename renamed_t1; alter table t1 rename renamed_t1;
set global server_audit_events='connect,query'; set global server_audit_events='connect,query';
select 1,
2,
3;
1 2 3
1 2 3
insert into t2 values (1), (2); insert into t2 values (1), (2);
select * from t2; select * from t2;
id id
@ -157,6 +162,8 @@ id
CREATE USER u1 IDENTIFIED BY 'pwd-123'; CREATE USER u1 IDENTIFIED BY 'pwd-123';
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
SET PASSWORD FOR u1 = PASSWORD('pwd 098'); 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 ''; CREATE USER u3 IDENTIFIED BY '';
drop user u1, u2, u3; drop user u1, u2, u3;
select 2; 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,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,'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,'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,'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 t2',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID 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,'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,'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 = 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,'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,'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 server_audit_events=\'\'',0

View 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

View file

@ -13,6 +13,7 @@ set global server_audit_incl_users=null;
set global server_audit_file_path='server_audit.log'; set global server_audit_file_path='server_audit.log';
set global server_audit_output_type=file; set global server_audit_output_type=file;
set global server_audit_logging=on; set global server_audit_logging=on;
--sleep 2
connect (con1,localhost,root,,mysql); connect (con1,localhost,root,,mysql);
connection default; connection default;
disconnect con1; disconnect con1;
@ -35,6 +36,9 @@ insert into t2 values (1), (2);
select * from t2; select * from t2;
alter table t1 rename renamed_t1; alter table t1 rename renamed_t1;
set global server_audit_events='connect,query'; set global server_audit_events='connect,query';
select 1,
2,
3;
insert into t2 values (1), (2); insert into t2 values (1), (2);
select * from t2; select * from t2;
--error ER_NO_SUCH_TABLE --error ER_NO_SUCH_TABLE
@ -103,6 +107,8 @@ select * from t1;
CREATE USER u1 IDENTIFIED BY 'pwd-123'; CREATE USER u1 IDENTIFIED BY 'pwd-123';
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
SET PASSWORD FOR u1 = PASSWORD('pwd 098'); SET PASSWORD FOR u1 = PASSWORD('pwd 098');
--error 1064
SET PASSWORD FOR u1=<secret>;
CREATE USER u3 IDENTIFIED BY ''; CREATE USER u3 IDENTIFIED BY '';
drop user u1, u2, u3; drop user u1, u2, u3;
select 2; select 2;

View file

@ -0,0 +1,2 @@
--thread_handling=pool-of-threads

View 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;

View 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

View file

@ -182,6 +182,11 @@ DROP USER test_3@localhost;
ERROR HY000: Table 'user' was not locked with LOCK TABLES ERROR HY000: Table 'user' was not locked with LOCK TABLES
INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked"); INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked");
UNLOCK TABLE; 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 USER test_3@localhost;
DROP FUNCTION f2; DROP FUNCTION f2;
DROP PROCEDURE p2; DROP PROCEDURE p2;

View 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

View file

@ -150,6 +150,16 @@ DROP USER test_3@localhost;
INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked"); INSERT INTO t2 VALUES ("DROP USER test_3@localhost with table locked");
UNLOCK TABLE; 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 USER test_3@localhost;
DROP FUNCTION f2; DROP FUNCTION f2;
DROP PROCEDURE p2; DROP PROCEDURE p2;

View file

@ -2,11 +2,6 @@
# This is a debug variable for now # This is a debug variable for now
-- source include/have_debug.inc -- 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; SELECT @@global.innodb_buffer_pool_evict;
SET GLOBAL innodb_buffer_pool_evict = 'uncompressed'; SET GLOBAL innodb_buffer_pool_evict = 'uncompressed';

View file

@ -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 # 2010-01-27 - Added
# #

View file

@ -1635,6 +1635,22 @@ SET NAMES utf8 COLLATE utf8_general_ci;
--let ENGINE=HEAP --let ENGINE=HEAP
--source include/ctype_utf8_ilseq.inc --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 #
--echo # End of 5.5 tests --echo # End of 5.5 tests
--echo # --echo #

View file

@ -656,6 +656,13 @@ SELECT
# #
select column_get(column_create(1, "18446744073709552001" as char), 1 as int); 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 #
--echo # test of symbolic names --echo # test of symbolic names
--echo # --echo #

View 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

View file

@ -1522,7 +1522,7 @@ DROP TABLE t1;
create table t1 (a int, b int); create table t1 (a int, b int);
insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45); insert into t1 values (1,11), (1,12), (2,22),(2,23), (4,44),(4,45);
create table t2 (c int, d int); 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); 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; drop table t1, t2;

View file

@ -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 =
(select variable_name from information_schema.session_variables where variable_name = 'basedir'); (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;

View file

@ -1751,6 +1751,16 @@ CHECK TABLE t1;
DROP 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 # Check some variables
# #

View file

@ -37,3 +37,14 @@
# #
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo --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

View file

@ -8,6 +8,35 @@ drop view if exists t1,v1,v2,v3,v4,v1badcheck;
create table t1(a int); create table t1(a int);
create table kv(k varchar(30) NOT NULL PRIMARY KEY,v varchar(50)); 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`; let $MYSQLD_DATADIR= `select @@datadir`;

View file

@ -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 # 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). # depends on the presence of the log tables (which are CSV-based).
--source include/have_csv.inc --source include/have_csv.inc
let $MYSQLD_DATADIR= `select @@datadir`;
# #
# Clean up after previous tests # 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; create view v_bug25347 as select * from t_bug25347;
insert into t_bug25347 values (1),(2),(3); insert into t_bug25347 values (1),(2),(3);
flush tables; flush tables;
let $MYSQLD_DATADIR= `select @@datadir`;
--echo removing and creating --echo removing and creating
--remove_file $MYSQLD_DATADIR/d_bug25347/t_bug25347.MYI --remove_file $MYSQLD_DATADIR/d_bug25347/t_bug25347.MYI
--write_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 table t1(a int) engine=myisam;
create view v1 as select * from t1; create view v1 as select * from t1;
show tables; show tables;
let $MYSQLD_DATADIR= `select @@datadir`;
--copy_file $MYSQLD_DATADIR/test/v1.frm $MYSQLD_DATADIR/test/v-1.frm --copy_file $MYSQLD_DATADIR/test/v1.frm $MYSQLD_DATADIR/test/v-1.frm
show tables; show tables;
--exec $MYSQL_CHECK --check-upgrade --databases test --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 TABLE t1 (a INT) engine=myisam;
# Create 5.0 like triggers # Create 5.0 like triggers
let $MYSQLTEST_VARDIR= `select @@datadir`; --write_file $MYSQLD_DATADIR/a@b/c@d.TRG
--write_file $MYSQLTEST_VARDIR/a@b/c@d.TRG
TYPE=TRIGGERS TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON `c@d` FOR EACH ROW SET NEW.a = 10 * NEW.a' triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON `c@d` FOR EACH ROW SET NEW.a = 10 * NEW.a'
sql_modes=0 sql_modes=0
definers='root@localhost' definers='root@localhost'
EOF EOF
--write_file $MYSQLTEST_VARDIR/a@b/tr1.TRN --write_file $MYSQLD_DATADIR/a@b/tr1.TRN
TYPE=TRIGGERNAME TYPE=TRIGGERNAME
trigger_table=c@d trigger_table=c@d
EOF EOF
--write_file $MYSQLTEST_VARDIR/a@b/t1.TRG --write_file $MYSQLD_DATADIR/a@b/t1.TRG
TYPE=TRIGGERS TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr2 BEFORE INSERT ON `a@b`.t1 FOR EACH ROW SET NEW.a = 100 * NEW.a' 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 sql_modes=0
definers='root@localhost' definers='root@localhost'
EOF EOF
--write_file $MYSQLTEST_VARDIR/a@b/tr2.TRN --write_file $MYSQLD_DATADIR/a@b/tr2.TRN
TYPE=TRIGGERNAME TYPE=TRIGGERNAME
trigger_table=t1 trigger_table=t1
EOF EOF
@ -255,7 +253,6 @@ INSERT INTO bug47205 VALUES ("foobar");
FLUSH TABLE bug47205; FLUSH TABLE bug47205;
--echo # Replace the FRM with a 5.0 FRM that will require upgrade --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 --remove_file $MYSQLD_DATADIR/test/bug47205.frm
--copy_file std_data/bug47205.frm $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; FLUSH TABLE bug47205;
--echo # Replace the FRM with a 5.0 FRM that will require upgrade --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 --remove_file $MYSQLD_DATADIR/test/bug47205.frm
--copy_file std_data/bug47205.frm $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 --exec $MYSQL_CHECK test t.1
drop table 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;

View file

@ -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/not_embedded.inc
--source include/have_partition.inc --source include/have_partition.inc
--source include/have_innodb.inc --source include/have_innodb.inc
@ -403,7 +407,7 @@ DROP TABLE t1;
create table t1 (a int) engine=innodb partition by hash(a) ; create table t1 (a int) engine=innodb partition by hash(a) ;
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status like 't1'; show table status like 't1';
drop table t1; drop table t1;
@ -415,12 +419,12 @@ engine = innodb
partition by key (a); partition by key (a);
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status; show table status;
insert into t1 values (0), (1), (2), (3); insert into t1 values (0), (1), (2), (3);
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status; show table status;
drop table t1; drop table t1;
@ -429,17 +433,17 @@ engine = innodb
partition by key (a); partition by key (a);
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status; show table status;
insert into t1 values (NULL), (NULL), (NULL), (NULL); insert into t1 values (NULL), (NULL), (NULL), (NULL);
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status; show table status;
insert into t1 values (NULL), (NULL), (NULL), (NULL); insert into t1 values (NULL), (NULL), (NULL), (NULL);
# Data_free for InnoDB tablespace varies depending on which # Data_free for InnoDB tablespace varies depending on which
# tests have been run before this one # tests have been run before this one
--replace_column 10 # --replace_column 10 # 12 #
show table status; show table status;
drop table t1; drop table t1;
@ -674,6 +678,18 @@ ALTER TABLE t1 ADD UNIQUE KEY (b);
--echo # have left table intact. --echo # have left table intact.
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
SELECT * FROM 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; DROP TABLE t1;
--echo # --echo #

View 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;

View file

@ -0,0 +1,5 @@
[ssl]
--loose-enable-ssl
[nossl]
--loose-disable-ssl

View 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;

View 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;

View file

@ -583,3 +583,27 @@ JOIN
WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL)); WHERE CONCAT(t1.col1, CAST(subq.col0 AS DECIMAL));
DROP TABLE t1, t2; 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 #

View 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;

View file

@ -5367,6 +5367,19 @@ update t3 left join v2 using (id) set flag=flag+1;
drop view v2, v1; drop view v2, v1;
drop table t1, t2, t3; 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 # -----------------------------------------------------------------
--echo # -- End of 5.5 tests. --echo # -- End of 5.5 tests.
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------

View file

@ -1,119 +1,119 @@
# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. # the Free Software Foundation; version 2 of the License.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
IF(ESSENTIALS) IF(ESSENTIALS)
SET(CPACK_COMPONENTS_USED "Server;Client;DataFiles") SET(CPACK_COMPONENTS_USED "Server;Client;DataFiles")
SET(CPACK_WIX_UI "WixUI_InstallDir") SET(CPACK_WIX_UI "WixUI_InstallDir")
IF(CMAKE_SIZEOF_VOID_P MATCHES 8) IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
SET(CPACK_PACKAGE_FILE_NAME "mysql-essential-${VERSION}-winx64") SET(CPACK_PACKAGE_FILE_NAME "mysql-essential-${VERSION}-winx64")
ELSE() ELSE()
SET(CPACK_PACKAGE_FILE_NAME "mysql-essential-${VERSION}-win32") SET(CPACK_PACKAGE_FILE_NAME "mysql-essential-${VERSION}-win32")
ENDIF() ENDIF()
ELSE() ELSE()
SET(CPACK_COMPONENTS_USED SET(CPACK_COMPONENTS_USED
"Server;Client;DataFiles;Development;SharedLibraries;Documentation;IniFiles;Readme;Server_Scripts;DebugBinaries") "Server;Client;DataFiles;Development;SharedLibraries;Documentation;IniFiles;Readme;Server_Scripts;DebugBinaries")
ENDIF() ENDIF()
# Some components like Embedded are optional # Some components like Embedded are optional
# We will build MSI without embedded if it was not selected for build # We will build MSI without embedded if it was not selected for build
#(need to modify CPACK_COMPONENTS_ALL for that) #(need to modify CPACK_COMPONENTS_ALL for that)
SET(CPACK_ALL) SET(CPACK_ALL)
FOREACH(comp1 ${CPACK_COMPONENTS_USED}) FOREACH(comp1 ${CPACK_COMPONENTS_USED})
SET(found) SET(found)
FOREACH(comp2 ${CPACK_COMPONENTS_ALL}) FOREACH(comp2 ${CPACK_COMPONENTS_ALL})
IF(comp1 STREQUAL comp2) IF(comp1 STREQUAL comp2)
SET(found 1) SET(found 1)
BREAK() BREAK()
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
IF(found) IF(found)
SET(CPACK_ALL ${CPACK_ALL} ${comp1}) SET(CPACK_ALL ${CPACK_ALL} ${comp1})
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
SET(CPACK_COMPONENTS_ALL ${CPACK_ALL}) SET(CPACK_COMPONENTS_ALL ${CPACK_ALL})
# Always install (hidden), includes Readme files # Always install (hidden), includes Readme files
SET(CPACK_COMPONENT_GROUP_ALWAYSINSTALL_HIDDEN 1) SET(CPACK_COMPONENT_GROUP_ALWAYSINSTALL_HIDDEN 1)
SET(CPACK_COMPONENT_README_GROUP "AlwaysInstall") SET(CPACK_COMPONENT_README_GROUP "AlwaysInstall")
# Feature MySQL Server # Feature MySQL Server
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DISPLAY_NAME "MySQL Server") SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DISPLAY_NAME "MySQL Server")
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_EXPANDED "1") SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_EXPANDED "1")
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DESCRIPTION "Install MySQL Server") SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DESCRIPTION "Install MySQL Server")
# Subfeature "Server" (hidden) # Subfeature "Server" (hidden)
SET(CPACK_COMPONENT_SERVER_GROUP "MySQLServer") SET(CPACK_COMPONENT_SERVER_GROUP "MySQLServer")
SET(CPACK_COMPONENT_SERVER_HIDDEN 1) SET(CPACK_COMPONENT_SERVER_HIDDEN 1)
# Subfeature "Client" # Subfeature "Client"
SET(CPACK_COMPONENT_CLIENT_GROUP "MySQLServer") SET(CPACK_COMPONENT_CLIENT_GROUP "MySQLServer")
SET(CPACK_COMPONENT_CLIENT_DISPLAY_NAME "Client Programs") SET(CPACK_COMPONENT_CLIENT_DISPLAY_NAME "Client Programs")
SET(CPACK_COMPONENT_CLIENT_DESCRIPTION SET(CPACK_COMPONENT_CLIENT_DESCRIPTION
"Various helpful (commandline) tools including the mysql command line client" ) "Various helpful (commandline) tools including the mysql command line client" )
# Subfeature "Debug binaries" # Subfeature "Debug binaries"
SET(CPACK_COMPONENT_DEBUGBINARIES_GROUP "MySQLServer") SET(CPACK_COMPONENT_DEBUGBINARIES_GROUP "MySQLServer")
SET(CPACK_COMPONENT_DEBUGBINARIES_DISPLAY_NAME "Debug binaries") SET(CPACK_COMPONENT_DEBUGBINARIES_DISPLAY_NAME "Debug binaries")
SET(CPACK_COMPONENT_DEBUGBINARIES_DESCRIPTION SET(CPACK_COMPONENT_DEBUGBINARIES_DESCRIPTION
"Debug/trace versions of executables and libraries" ) "Debug/trace versions of executables and libraries" )
#SET(CPACK_COMPONENT_DEBUGBINARIES_WIX_LEVEL 2) #SET(CPACK_COMPONENT_DEBUGBINARIES_WIX_LEVEL 2)
#Subfeature "Data Files" #Subfeature "Data Files"
SET(CPACK_COMPONENT_DATAFILES_GROUP "MySQLServer") SET(CPACK_COMPONENT_DATAFILES_GROUP "MySQLServer")
SET(CPACK_COMPONENT_DATAFILES_DISPLAY_NAME "Server data files") SET(CPACK_COMPONENT_DATAFILES_DISPLAY_NAME "Server data files")
SET(CPACK_COMPONENT_DATAFILES_DESCRIPTION "Server data files" ) SET(CPACK_COMPONENT_DATAFILES_DESCRIPTION "Server data files" )
SET(CPACK_COMPONENT_DATAFILES_HIDDEN 1) SET(CPACK_COMPONENT_DATAFILES_HIDDEN 1)
#Feature "Devel" #Feature "Devel"
SET(CPACK_COMPONENT_GROUP_DEVEL_DISPLAY_NAME "Development Components") SET(CPACK_COMPONENT_GROUP_DEVEL_DISPLAY_NAME "Development Components")
SET(CPACK_COMPONENT_GROUP_DEVEL_DESCRIPTION "Installs C/C++ header files and libraries") SET(CPACK_COMPONENT_GROUP_DEVEL_DESCRIPTION "Installs C/C++ header files and libraries")
#Subfeature "Development" #Subfeature "Development"
SET(CPACK_COMPONENT_DEVELOPMENT_GROUP "Devel") SET(CPACK_COMPONENT_DEVELOPMENT_GROUP "Devel")
SET(CPACK_COMPONENT_DEVELOPMENT_HIDDEN 1) SET(CPACK_COMPONENT_DEVELOPMENT_HIDDEN 1)
#Subfeature "Shared libraries" #Subfeature "Shared libraries"
SET(CPACK_COMPONENT_SHAREDLIBRARIES_GROUP "Devel") SET(CPACK_COMPONENT_SHAREDLIBRARIES_GROUP "Devel")
SET(CPACK_COMPONENT_SHAREDLIBRARIES_DISPLAY_NAME "Client C API library (shared)") SET(CPACK_COMPONENT_SHAREDLIBRARIES_DISPLAY_NAME "Client C API library (shared)")
SET(CPACK_COMPONENT_SHAREDLIBRARIES_DESCRIPTION "Installs shared client library") SET(CPACK_COMPONENT_SHAREDLIBRARIES_DESCRIPTION "Installs shared client library")
#Subfeature "Embedded" #Subfeature "Embedded"
SET(CPACK_COMPONENT_EMBEDDED_GROUP "Devel") SET(CPACK_COMPONENT_EMBEDDED_GROUP "Devel")
SET(CPACK_COMPONENT_EMBEDDED_DISPLAY_NAME "Embedded server library") SET(CPACK_COMPONENT_EMBEDDED_DISPLAY_NAME "Embedded server library")
SET(CPACK_COMPONENT_EMBEDDED_DESCRIPTION "Installs embedded server library") SET(CPACK_COMPONENT_EMBEDDED_DESCRIPTION "Installs embedded server library")
SET(CPACK_COMPONENT_EMBEDDED_WIX_LEVEL 2) SET(CPACK_COMPONENT_EMBEDDED_WIX_LEVEL 2)
#Feature Debug Symbols #Feature Debug Symbols
SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DISPLAY_NAME "Debug Symbols") SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DISPLAY_NAME "Debug Symbols")
SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DESCRIPTION "Installs Debug Symbols") SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DESCRIPTION "Installs Debug Symbols")
SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_WIX_LEVEL 2) SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_WIX_LEVEL 2)
SET(CPACK_COMPONENT_DEBUGINFO_GROUP "DebugSymbols") SET(CPACK_COMPONENT_DEBUGINFO_GROUP "DebugSymbols")
SET(CPACK_COMPONENT_DEBUGINFO_HIDDEN 1) SET(CPACK_COMPONENT_DEBUGINFO_HIDDEN 1)
#Feature Documentation #Feature Documentation
SET(CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation") SET(CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation")
SET(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "Installs documentation") SET(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "Installs documentation")
SET(CPACK_COMPONENT_DOCUMENTATION_WIX_LEVEL 2) SET(CPACK_COMPONENT_DOCUMENTATION_WIX_LEVEL 2)
#Feature tests #Feature tests
SET(CPACK_COMPONENT_TEST_DISPLAY_NAME "Tests") SET(CPACK_COMPONENT_TEST_DISPLAY_NAME "Tests")
SET(CPACK_COMPONENT_TEST_DESCRIPTION "Installs unittests (requires Perl to run)") SET(CPACK_COMPONENT_TEST_DESCRIPTION "Installs unittests (requires Perl to run)")
SET(CPACK_COMPONENT_TEST_WIX_LEVEL 2) SET(CPACK_COMPONENT_TEST_WIX_LEVEL 2)
#Feature Misc (hidden, installs only if everything is installed) #Feature Misc (hidden, installs only if everything is installed)
SET(CPACK_COMPONENT_GROUP_MISC_HIDDEN 1) SET(CPACK_COMPONENT_GROUP_MISC_HIDDEN 1)
SET(CPACK_COMPONENT_GROUP_MISC_WIX_LEVEL 100) SET(CPACK_COMPONENT_GROUP_MISC_WIX_LEVEL 100)
SET(CPACK_COMPONENT_INIFILES_GROUP "Misc") SET(CPACK_COMPONENT_INIFILES_GROUP "Misc")
SET(CPACK_COMPONENT_SERVER_SCRIPTS_GROUP "Misc") SET(CPACK_COMPONENT_SERVER_SCRIPTS_GROUP "Misc")

View file

@ -1,398 +1,398 @@
# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. # the Free Software Foundation; version 2 of the License.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@")
SET(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") SET(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
SET(CANDLE_EXECUTABLE "@CANDLE_EXECUTABLE@") SET(CANDLE_EXECUTABLE "@CANDLE_EXECUTABLE@")
SET(LIGHT_EXECUTABLE "@LIGHT_EXECUTABLE@") SET(LIGHT_EXECUTABLE "@LIGHT_EXECUTABLE@")
SET(CMAKE_COMMAND "@CMAKE_COMMAND@") SET(CMAKE_COMMAND "@CMAKE_COMMAND@")
SET(CMAKE_CFG_INTDIR "@CMAKE_CFG_INTDIR@") SET(CMAKE_CFG_INTDIR "@CMAKE_CFG_INTDIR@")
SET(VERSION "@VERSION@") SET(VERSION "@VERSION@")
SET(MAJOR_VERSION "@MAJOR_VERSION@") SET(MAJOR_VERSION "@MAJOR_VERSION@")
SET(MINOR_VERSION "@MINOR_VERSION@") SET(MINOR_VERSION "@MINOR_VERSION@")
SET(PATCH_VERSION "@PATCH_VERSION@") SET(PATCH_VERSION "@PATCH_VERSION@")
SET(CMAKE_SIZEOF_VOID_P @CMAKE_SIZEOF_VOID_P@) SET(CMAKE_SIZEOF_VOID_P @CMAKE_SIZEOF_VOID_P@)
SET(MANUFACTURER "@MANUFACTURER@") SET(MANUFACTURER "@MANUFACTURER@")
SET(WIXCA_LOCATION "@WIXCA_LOCATION@") SET(WIXCA_LOCATION "@WIXCA_LOCATION@")
SET(COPYING_RTF "@COPYING_RTF@") SET(COPYING_RTF "@COPYING_RTF@")
SET(CPACK_WIX_CONFIG "@CPACK_WIX_CONFIG@") SET(CPACK_WIX_CONFIG "@CPACK_WIX_CONFIG@")
SET(CPACK_WIX_INCLUDE "@CPACK_WIX_INCLUDE@") SET(CPACK_WIX_INCLUDE "@CPACK_WIX_INCLUDE@")
LIST(APPEND EXCLUDE_DIRS LIST(APPEND EXCLUDE_DIRS
bin/debug bin/debug
data/test data/test
lib/plugin/debug lib/plugin/debug
mysql-test mysql-test
scripts scripts
sql-bench sql-bench
) )
LIST(APPEND EXCLUDE_FILES LIST(APPEND EXCLUDE_FILES
bin/echo.exe bin/echo.exe
bin/mysql_client_test_embedded.exe bin/mysql_client_test_embedded.exe
bin/mysqld-debug.exe bin/mysqld-debug.exe
bin/mysqltest_embedded.exe bin/mysqltest_embedded.exe
bin/replace.exe bin/replace.exe
lib/debug/mysqlserver.lib lib/debug/mysqlserver.lib
lib/libmysqld.dll lib/libmysqld.dll
lib/libmysqld.lib lib/libmysqld.lib
lib/mysqlserver.lib lib/mysqlserver.lib
lib/mysqlservices.lib lib/mysqlservices.lib
) )
IF(CMAKE_SIZEOF_VOID_P EQUAL 8) IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(Win64 " Win64='yes'") SET(Win64 " Win64='yes'")
SET(Platform x64) SET(Platform x64)
SET(PlatformProgramFilesFolder ProgramFiles64Folder) SET(PlatformProgramFilesFolder ProgramFiles64Folder)
ELSE() ELSE()
SET(Platform x86) SET(Platform x86)
SET(PlatformProgramFilesFolder ProgramFilesFolder) SET(PlatformProgramFilesFolder ProgramFilesFolder)
SET(Win64) SET(Win64)
ENDIF() ENDIF()
SET(ENV{VS_UNICODE_OUTPUT}) SET(ENV{VS_UNICODE_OUTPUT})
# Switch off the monolithic install # Switch off the monolithic install
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=0 ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=0 ${CMAKE_BINARY_DIR}
OUTPUT_QUIET OUTPUT_QUIET
) )
INCLUDE(${CMAKE_BINARY_DIR}/CPackConfig.cmake) INCLUDE(${CMAKE_BINARY_DIR}/CPackConfig.cmake)
IF(CPACK_WIX_CONFIG) IF(CPACK_WIX_CONFIG)
INCLUDE(${CPACK_WIX_CONFIG}) INCLUDE(${CPACK_WIX_CONFIG})
ENDIF() ENDIF()
IF(NOT CPACK_WIX_UI) IF(NOT CPACK_WIX_UI)
SET(CPACK_WIX_UI "WixUI_Mondo_Custom") SET(CPACK_WIX_UI "WixUI_Mondo_Custom")
ENDIF() ENDIF()
SET(WIX_FEATURES) SET(WIX_FEATURES)
FOREACH(comp ${CPACK_COMPONENTS_ALL}) FOREACH(comp ${CPACK_COMPONENTS_ALL})
STRING(TOUPPER "${comp}" comp_upper) STRING(TOUPPER "${comp}" comp_upper)
IF(NOT CPACK_COMPONENT_${comp_upper}_GROUP) IF(NOT CPACK_COMPONENT_${comp_upper}_GROUP)
SET(WIX_FEATURE_${comp_upper}_COMPONENTS "${comp}") SET(WIX_FEATURE_${comp_upper}_COMPONENTS "${comp}")
SET(CPACK_COMPONENT_${comp_upper}_HIDDEN 1) SET(CPACK_COMPONENT_${comp_upper}_HIDDEN 1)
SET(CPACK_COMPONENT_GROUP_${comp_upper}_DISPLAY_NAME ${CPACK_COMPONENT_${comp_upper}_DISPLAY_NAME}) SET(CPACK_COMPONENT_GROUP_${comp_upper}_DISPLAY_NAME ${CPACK_COMPONENT_${comp_upper}_DISPLAY_NAME})
SET(CPACK_COMPONENT_GROUP_${comp_upper}_DESCRIPTION ${CPACK_COMPONENT_${comp_upper}_DESCRIPTION}) SET(CPACK_COMPONENT_GROUP_${comp_upper}_DESCRIPTION ${CPACK_COMPONENT_${comp_upper}_DESCRIPTION})
SET(CPACK_COMPONENT_GROUP_${comp_upper}_WIX_LEVEL ${CPACK_COMPONENT_${comp_upper}_WIX_LEVEL}) SET(CPACK_COMPONENT_GROUP_${comp_upper}_WIX_LEVEL ${CPACK_COMPONENT_${comp_upper}_WIX_LEVEL})
SET(WIX_FEATURES ${WIX_FEATURES} WIX_FEATURE_${comp_upper}) SET(WIX_FEATURES ${WIX_FEATURES} WIX_FEATURE_${comp_upper})
ELSE() ELSE()
SET(FEATURE_NAME WIX_FEATURE_${CPACK_COMPONENT_${comp_upper}_GROUP}) SET(FEATURE_NAME WIX_FEATURE_${CPACK_COMPONENT_${comp_upper}_GROUP})
SET(WIX_FEATURES ${WIX_FEATURES} ${FEATURE_NAME}) SET(WIX_FEATURES ${WIX_FEATURES} ${FEATURE_NAME})
LIST(APPEND ${FEATURE_NAME}_COMPONENTS ${comp}) LIST(APPEND ${FEATURE_NAME}_COMPONENTS ${comp})
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
LIST(REMOVE_DUPLICATES WIX_FEATURES) LIST(REMOVE_DUPLICATES WIX_FEATURES)
SET(CPACK_WIX_FEATURES) SET(CPACK_WIX_FEATURES)
FOREACH(f ${WIX_FEATURES}) FOREACH(f ${WIX_FEATURES})
STRING(TOUPPER "${f}" f_upper) STRING(TOUPPER "${f}" f_upper)
STRING(REPLACE "WIX_FEATURE_" "" f_upper ${f_upper}) STRING(REPLACE "WIX_FEATURE_" "" f_upper ${f_upper})
IF (CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME) IF (CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME)
SET(TITLE ${CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME}) SET(TITLE ${CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME})
ELSE() ELSE()
SET(TITLE CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME) SET(TITLE CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME)
ENDIF() ENDIF()
IF (CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION) IF (CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION)
SET(DESCRIPTION ${CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION}) SET(DESCRIPTION ${CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION})
ELSE() ELSE()
SET(DESCRIPTION CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION) SET(DESCRIPTION CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION)
ENDIF() ENDIF()
IF(CPACK_COMPONENT_${f_upper}_WIX_LEVEL) IF(CPACK_COMPONENT_${f_upper}_WIX_LEVEL)
SET(Level ${CPACK_COMPONENT_${f_upper}_WIX_LEVEL}) SET(Level ${CPACK_COMPONENT_${f_upper}_WIX_LEVEL})
ELSE() ELSE()
SET(Level 1) SET(Level 1)
ENDIF() ENDIF()
IF(CPACK_COMPONENT_GROUP_${f_upper}_HIDDEN) IF(CPACK_COMPONENT_GROUP_${f_upper}_HIDDEN)
SET(DISPLAY "Display='hidden'") SET(DISPLAY "Display='hidden'")
SET(TITLE ${f_upper}) SET(TITLE ${f_upper})
SET(DESCRIPTION ${f_upper}) SET(DESCRIPTION ${f_upper})
ELSE() ELSE()
SET(DISPLAY) SET(DISPLAY)
IF(CPACK_COMPONENT_GROUP_${f_upper}_EXPANDED) IF(CPACK_COMPONENT_GROUP_${f_upper}_EXPANDED)
SET(DISPLAY "Display='expand'") SET(DISPLAY "Display='expand'")
ENDIF() ENDIF()
IF (CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME) IF (CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME)
SET(TITLE ${CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME}) SET(TITLE ${CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME})
ELSE() ELSE()
SET(TITLE CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME) SET(TITLE CPACK_COMPONENT_GROUP_${f_upper}_DISPLAY_NAME)
ENDIF() ENDIF()
IF (CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION) IF (CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION)
SET(DESCRIPTION ${CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION}) SET(DESCRIPTION ${CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION})
ELSE() ELSE()
SET(DESCRIPTION CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION) SET(DESCRIPTION CPACK_COMPONENT_GROUP_${f_upper}_DESCRIPTION)
ENDIF() ENDIF()
ENDIF() ENDIF()
SET(CPACK_WIX_FEATURES SET(CPACK_WIX_FEATURES
"${CPACK_WIX_FEATURES} "${CPACK_WIX_FEATURES}
<Feature Id='${f_upper}' <Feature Id='${f_upper}'
Title='${TITLE}' Title='${TITLE}'
Description='${DESCRIPTION}' Description='${DESCRIPTION}'
ConfigurableDirectory='INSTALLDIR' ConfigurableDirectory='INSTALLDIR'
Level='${Level}' ${DISPLAY} >" Level='${Level}' ${DISPLAY} >"
) )
FOREACH(c ${${f}_COMPONENTS}) FOREACH(c ${${f}_COMPONENTS})
STRING(TOUPPER "${c}" c_upper) STRING(TOUPPER "${c}" c_upper)
IF (CPACK_COMPONENT_${c_upper}_DISPLAY_NAME) IF (CPACK_COMPONENT_${c_upper}_DISPLAY_NAME)
SET(TITLE ${CPACK_COMPONENT_${c_upper}_DISPLAY_NAME}) SET(TITLE ${CPACK_COMPONENT_${c_upper}_DISPLAY_NAME})
ELSE() ELSE()
SET(TITLE CPACK_COMPONENT_${c_upper}_DISPLAY_NAME) SET(TITLE CPACK_COMPONENT_${c_upper}_DISPLAY_NAME)
ENDIF() ENDIF()
IF (CPACK_COMPONENT_${c_upper}_DESCRIPTION) IF (CPACK_COMPONENT_${c_upper}_DESCRIPTION)
SET(DESCRIPTION ${CPACK_COMPONENT_${c_upper}_DESCRIPTION}) SET(DESCRIPTION ${CPACK_COMPONENT_${c_upper}_DESCRIPTION})
ELSE() ELSE()
SET(DESCRIPTION CPACK_COMPONENT_${c_upper}_DESCRIPTION) SET(DESCRIPTION CPACK_COMPONENT_${c_upper}_DESCRIPTION)
ENDIF() ENDIF()
IF(CPACK_COMPONENT_${c_upper}_WIX_LEVEL) IF(CPACK_COMPONENT_${c_upper}_WIX_LEVEL)
SET(Level ${CPACK_COMPONENT_${c_upper}_WIX_LEVEL}) SET(Level ${CPACK_COMPONENT_${c_upper}_WIX_LEVEL})
ELSE() ELSE()
SET(Level 1) SET(Level 1)
ENDIF() ENDIF()
IF(CPACK_COMPONENT_${c_upper}_HIDDEN) IF(CPACK_COMPONENT_${c_upper}_HIDDEN)
SET(CPACK_WIX_FEATURES SET(CPACK_WIX_FEATURES
"${CPACK_WIX_FEATURES} "${CPACK_WIX_FEATURES}
<ComponentGroupRef Id='componentgroup.${c}'/>") <ComponentGroupRef Id='componentgroup.${c}'/>")
ELSE() ELSE()
SET(CPACK_WIX_FEATURES SET(CPACK_WIX_FEATURES
"${CPACK_WIX_FEATURES} "${CPACK_WIX_FEATURES}
<Feature Id='${c}' <Feature Id='${c}'
Title='${TITLE}' Title='${TITLE}'
Description='${DESCRIPTION}' Description='${DESCRIPTION}'
ConfigurableDirectory='INSTALLDIR' ConfigurableDirectory='INSTALLDIR'
Level='${Level}'> Level='${Level}'>
<ComponentGroupRef Id='componentgroup.${c}'/> <ComponentGroupRef Id='componentgroup.${c}'/>
</Feature>") </Feature>")
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
SET(CPACK_WIX_FEATURES SET(CPACK_WIX_FEATURES
"${CPACK_WIX_FEATURES} "${CPACK_WIX_FEATURES}
</Feature> </Feature>
") ")
ENDFOREACH() ENDFOREACH()
IF(CMAKE_INSTALL_CONFIG_NAME) IF(CMAKE_INSTALL_CONFIG_NAME)
STRING(REPLACE "${CMAKE_CFG_INTDIR}" "${CMAKE_INSTALL_CONFIG_NAME}" STRING(REPLACE "${CMAKE_CFG_INTDIR}" "${CMAKE_INSTALL_CONFIG_NAME}"
WIXCA_LOCATION "${WIXCA_LOCATION}") WIXCA_LOCATION "${WIXCA_LOCATION}")
SET(CONFIG_PARAM "-DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_INSTALL_CONFIG_NAME}") SET(CONFIG_PARAM "-DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_INSTALL_CONFIG_NAME}")
ENDIF() ENDIF()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server.wxs.in CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server.wxs.in
${CMAKE_CURRENT_BINARY_DIR}/mysql_server.wxs) ${CMAKE_CURRENT_BINARY_DIR}/mysql_server.wxs)
FOREACH(comp ${CPACK_COMPONENTS_ALL}) FOREACH(comp ${CPACK_COMPONENTS_ALL})
SET(ENV{DESTDIR} testinstall/${comp}) SET(ENV{DESTDIR} testinstall/${comp})
SET(DIRS ${DIRS} testinstall/${comp}) SET(DIRS ${DIRS} testinstall/${comp})
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} ${CONFIG_PARAM} -DCMAKE_INSTALL_COMPONENT=${comp} COMMAND ${CMAKE_COMMAND} ${CONFIG_PARAM} -DCMAKE_INSTALL_COMPONENT=${comp}
-DCMAKE_INSTALL_PREFIX= -P ${CMAKE_BINARY_DIR}/cmake_install.cmake -DCMAKE_INSTALL_PREFIX= -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
OUTPUT_QUIET OUTPUT_QUIET
) )
ENDFOREACH() ENDFOREACH()
MACRO(GENERATE_GUID VarName) MACRO(GENERATE_GUID VarName)
EXECUTE_PROCESS(COMMAND uuidgen -c EXECUTE_PROCESS(COMMAND uuidgen -c
OUTPUT_VARIABLE ${VarName} OUTPUT_VARIABLE ${VarName}
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
ENDMACRO() ENDMACRO()
SET(INC_VAR 0) SET(INC_VAR 0)
MACRO(MAKE_WIX_IDENTIFIER str varname) MACRO(MAKE_WIX_IDENTIFIER str varname)
STRING(REPLACE "/" "." ${varname} "${str}") STRING(REPLACE "/" "." ${varname} "${str}")
STRING(REGEX REPLACE "[^a-zA-Z_0-9.]" "_" ${varname} "${${varname}}") STRING(REGEX REPLACE "[^a-zA-Z_0-9.]" "_" ${varname} "${${varname}}")
STRING(LENGTH "${${varname}}" len) STRING(LENGTH "${${varname}}" len)
# Identifier should be smaller than 72 character # Identifier should be smaller than 72 character
# We have to cut down the length to 70 chars, since we add 2 char prefix # We have to cut down the length to 70 chars, since we add 2 char prefix
# pretty often # pretty often
IF(len GREATER 70) IF(len GREATER 70)
STRING(SUBSTRING "${${varname}}" 0 67 shortstr) STRING(SUBSTRING "${${varname}}" 0 67 shortstr)
MATH(EXPR INC_VAR ${INC_VAR}+1) MATH(EXPR INC_VAR ${INC_VAR}+1)
SET(${varname} "${shortstr}${INC_VAR}") SET(${varname} "${shortstr}${INC_VAR}")
ENDIF() ENDIF()
ENDMACRO() ENDMACRO()
FUNCTION(TRAVERSE_FILES dir topdir file file_comp dir_root) FUNCTION(TRAVERSE_FILES dir topdir file file_comp dir_root)
FILE(RELATIVE_PATH dir_rel ${topdir} ${dir}) FILE(RELATIVE_PATH dir_rel ${topdir} ${dir})
IF(dir_rel) IF(dir_rel)
LIST(FIND EXCLUDE_DIRS ${dir_rel} TO_EXCLUDE) LIST(FIND EXCLUDE_DIRS ${dir_rel} TO_EXCLUDE)
IF(NOT TO_EXCLUDE EQUAL -1) IF(NOT TO_EXCLUDE EQUAL -1)
MESSAGE(STATUS "excluding directory: ${dir_rel}") MESSAGE(STATUS "excluding directory: ${dir_rel}")
RETURN() RETURN()
ENDIF() ENDIF()
ENDIF() ENDIF()
FILE(GLOB all_files ${dir}/*) FILE(GLOB all_files ${dir}/*)
IF(NOT all_files) IF(NOT all_files)
RETURN() RETURN()
ENDIF() ENDIF()
IF(dir_rel) IF(dir_rel)
MAKE_DIRECTORY(${dir_root}/${dir_rel}) MAKE_DIRECTORY(${dir_root}/${dir_rel})
MAKE_WIX_IDENTIFIER("${dir_rel}" id) MAKE_WIX_IDENTIFIER("${dir_rel}" id)
SET(DirectoryRefId "D.${id}") SET(DirectoryRefId "D.${id}")
ELSE() ELSE()
SET(DirectoryRefId "INSTALLDIR") SET(DirectoryRefId "INSTALLDIR")
ENDIF() ENDIF()
FILE(APPEND ${file} "<DirectoryRef Id='${DirectoryRefId}'>\n") FILE(APPEND ${file} "<DirectoryRef Id='${DirectoryRefId}'>\n")
SET(NONEXEFILES) SET(NONEXEFILES)
FOREACH(f ${all_files}) FOREACH(f ${all_files})
IF(NOT IS_DIRECTORY ${f}) IF(NOT IS_DIRECTORY ${f})
FILE(RELATIVE_PATH rel ${topdir} ${f}) FILE(RELATIVE_PATH rel ${topdir} ${f})
SET(TO_EXCLUDE) SET(TO_EXCLUDE)
IF(rel MATCHES "\\.pdb$") IF(rel MATCHES "\\.pdb$")
SET(TO_EXCLUDE TRUE) SET(TO_EXCLUDE TRUE)
ELSE() ELSE()
LIST(FIND EXCLUDE_FILES ${rel} RES) LIST(FIND EXCLUDE_FILES ${rel} RES)
IF(NOT RES EQUAL -1) IF(NOT RES EQUAL -1)
SET(TO_EXCLUDE TRUE) SET(TO_EXCLUDE TRUE)
ENDIF() ENDIF()
ENDIF() ENDIF()
IF(TO_EXCLUDE) IF(TO_EXCLUDE)
MESSAGE(STATUS "excluding file: ${rel}") MESSAGE(STATUS "excluding file: ${rel}")
ELSE() ELSE()
MAKE_WIX_IDENTIFIER("${rel}" id) MAKE_WIX_IDENTIFIER("${rel}" id)
FILE(TO_NATIVE_PATH ${f} f_native) FILE(TO_NATIVE_PATH ${f} f_native)
GET_FILENAME_COMPONENT(f_ext "${f}" EXT) GET_FILENAME_COMPONENT(f_ext "${f}" EXT)
# According to MSDN each DLL or EXE should be in the own component # According to MSDN each DLL or EXE should be in the own component
IF(f_ext MATCHES ".exe" OR f_ext MATCHES ".dll") IF(f_ext MATCHES ".exe" OR f_ext MATCHES ".dll")
FILE(APPEND ${file} " <Component Id='C.${id}' Guid='*' ${Win64}>\n") FILE(APPEND ${file} " <Component Id='C.${id}' Guid='*' ${Win64}>\n")
FILE(APPEND ${file} " <File Id='F.${id}' KeyPath='yes' Source='${f_native}'/>\n") FILE(APPEND ${file} " <File Id='F.${id}' KeyPath='yes' Source='${f_native}'/>\n")
FILE(APPEND ${file} " </Component>\n") FILE(APPEND ${file} " </Component>\n")
FILE(APPEND ${file_comp} " <ComponentRef Id='C.${id}'/>\n") FILE(APPEND ${file_comp} " <ComponentRef Id='C.${id}'/>\n")
ELSE() ELSE()
SET(NONEXEFILES "${NONEXEFILES}\n<File Id='F.${id}' Source='${f_native}'/>" ) SET(NONEXEFILES "${NONEXEFILES}\n<File Id='F.${id}' Source='${f_native}'/>" )
ENDIF() ENDIF()
ENDIF() ENDIF()
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
FILE(APPEND ${file} "</DirectoryRef>\n") FILE(APPEND ${file} "</DirectoryRef>\n")
IF(NONEXEFILES) IF(NONEXEFILES)
GENERATE_GUID(guid) GENERATE_GUID(guid)
SET(ComponentId "C._files_${COMP_NAME}.${DirectoryRefId}") SET(ComponentId "C._files_${COMP_NAME}.${DirectoryRefId}")
FILE(APPEND ${file} FILE(APPEND ${file}
"<DirectoryRef Id='${DirectoryRefId}'>\n<Component Guid='${guid}' Id='${ComponentId}' ${Win64}>${NONEXEFILES}\n</Component></DirectoryRef>\n") "<DirectoryRef Id='${DirectoryRefId}'>\n<Component Guid='${guid}' Id='${ComponentId}' ${Win64}>${NONEXEFILES}\n</Component></DirectoryRef>\n")
FILE(APPEND ${file_comp} " <ComponentRef Id='${ComponentId}'/>\n") FILE(APPEND ${file_comp} " <ComponentRef Id='${ComponentId}'/>\n")
ENDIF() ENDIF()
FOREACH(f ${all_files}) FOREACH(f ${all_files})
IF(IS_DIRECTORY ${f}) IF(IS_DIRECTORY ${f})
TRAVERSE_FILES(${f} ${topdir} ${file} ${file_comp} ${dir_root}) TRAVERSE_FILES(${f} ${topdir} ${file} ${file_comp} ${dir_root})
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
ENDFUNCTION() ENDFUNCTION()
FUNCTION(TRAVERSE_DIRECTORIES dir topdir file prefix) FUNCTION(TRAVERSE_DIRECTORIES dir topdir file prefix)
FILE(RELATIVE_PATH rel ${topdir} ${dir}) FILE(RELATIVE_PATH rel ${topdir} ${dir})
IF(rel) IF(rel)
MAKE_WIX_IDENTIFIER("${rel}" id) MAKE_WIX_IDENTIFIER("${rel}" id)
GET_FILENAME_COMPONENT(name ${dir} NAME) GET_FILENAME_COMPONENT(name ${dir} NAME)
FILE(APPEND ${file} "${prefix}<Directory Id='D.${id}' Name='${name}'>\n") FILE(APPEND ${file} "${prefix}<Directory Id='D.${id}' Name='${name}'>\n")
ENDIF() ENDIF()
FILE(GLOB all_files ${dir}/*) FILE(GLOB all_files ${dir}/*)
FOREACH(f ${all_files}) FOREACH(f ${all_files})
IF(IS_DIRECTORY ${f}) IF(IS_DIRECTORY ${f})
TRAVERSE_DIRECTORIES(${f} ${topdir} ${file} "${prefix} ") TRAVERSE_DIRECTORIES(${f} ${topdir} ${file} "${prefix} ")
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
IF(rel) IF(rel)
FILE(APPEND ${file} "${prefix}</Directory>\n") FILE(APPEND ${file} "${prefix}</Directory>\n")
ENDIF() ENDIF()
ENDFUNCTION() ENDFUNCTION()
SET(CPACK_WIX_COMPONENTS) SET(CPACK_WIX_COMPONENTS)
SET(CPACK_WIX_COMPONENT_GROUPS) SET(CPACK_WIX_COMPONENT_GROUPS)
GET_FILENAME_COMPONENT(abs . ABSOLUTE) GET_FILENAME_COMPONENT(abs . ABSOLUTE)
FOREACH(d ${DIRS}) FOREACH(d ${DIRS})
GET_FILENAME_COMPONENT(d ${d} ABSOLUTE) GET_FILENAME_COMPONENT(d ${d} ABSOLUTE)
GET_FILENAME_COMPONENT(d_name ${d} NAME) GET_FILENAME_COMPONENT(d_name ${d} NAME)
FILE(WRITE ${abs}/${d_name}_component_group.wxs "<ComponentGroup Id='componentgroup.${d_name}'>") FILE(WRITE ${abs}/${d_name}_component_group.wxs "<ComponentGroup Id='componentgroup.${d_name}'>")
SET(COMP_NAME ${d_name}) SET(COMP_NAME ${d_name})
TRAVERSE_FILES(${d} ${d} ${abs}/${d_name}.wxs ${abs}/${d_name}_component_group.wxs "${abs}/dirs") TRAVERSE_FILES(${d} ${d} ${abs}/${d_name}.wxs ${abs}/${d_name}_component_group.wxs "${abs}/dirs")
FILE(APPEND ${abs}/${d_name}_component_group.wxs "</ComponentGroup>") FILE(APPEND ${abs}/${d_name}_component_group.wxs "</ComponentGroup>")
IF(EXISTS ${d_name}.wxs) IF(EXISTS ${d_name}.wxs)
FILE(READ ${d_name}.wxs WIX_TMP) FILE(READ ${d_name}.wxs WIX_TMP)
SET(CPACK_WIX_COMPONENTS "${CPACK_WIX_COMPONENTS}\n${WIX_TMP}") SET(CPACK_WIX_COMPONENTS "${CPACK_WIX_COMPONENTS}\n${WIX_TMP}")
FILE(REMOVE ${d_name}.wxs) FILE(REMOVE ${d_name}.wxs)
ENDIF() ENDIF()
FILE(READ ${d_name}_component_group.wxs WIX_TMP) FILE(READ ${d_name}_component_group.wxs WIX_TMP)
SET(CPACK_WIX_COMPONENT_GROUPS "${CPACK_WIX_COMPONENT_GROUPS}\n${WIX_TMP}") SET(CPACK_WIX_COMPONENT_GROUPS "${CPACK_WIX_COMPONENT_GROUPS}\n${WIX_TMP}")
FILE(REMOVE ${d_name}_component_group.wxs) FILE(REMOVE ${d_name}_component_group.wxs)
ENDFOREACH() ENDFOREACH()
FILE(WRITE directories.wxs "<DirectoryRef Id='INSTALLDIR'>\n") FILE(WRITE directories.wxs "<DirectoryRef Id='INSTALLDIR'>\n")
TRAVERSE_DIRECTORIES(${abs}/dirs ${abs}/dirs directories.wxs "") TRAVERSE_DIRECTORIES(${abs}/dirs ${abs}/dirs directories.wxs "")
FILE(APPEND directories.wxs "</DirectoryRef>\n") FILE(APPEND directories.wxs "</DirectoryRef>\n")
FILE(READ directories.wxs CPACK_WIX_DIRECTORIES) FILE(READ directories.wxs CPACK_WIX_DIRECTORIES)
FILE(REMOVE directories.wxs) FILE(REMOVE directories.wxs)
FOREACH(src ${CPACK_WIX_INCLUDE}) FOREACH(src ${CPACK_WIX_INCLUDE})
SET(CPACK_WIX_INCLUDES SET(CPACK_WIX_INCLUDES
"${CPACK_WIX_INCLUDES} "${CPACK_WIX_INCLUDES}
<?include ${src}?>" <?include ${src}?>"
) )
ENDFOREACH() ENDFOREACH()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server.wxs.in CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server.wxs.in
${CMAKE_CURRENT_BINARY_DIR}/mysql_server.wxs) ${CMAKE_CURRENT_BINARY_DIR}/mysql_server.wxs)
SET(EXTRA_CANDLE_ARGS) SET(EXTRA_CANDLE_ARGS)
IF("$ENV{EXTRA_CANDLE_ARGS}") IF("$ENV{EXTRA_CANDLE_ARGS}")
SET(EXTRA_CANDLE_ARGS "$ENV{EXTRA_CANDLE_ARGS}") SET(EXTRA_CANDLE_ARGS "$ENV{EXTRA_CANDLE_ARGS}")
ENDIF() ENDIF()
SET(EXTRA_LIGHT_ARGS) SET(EXTRA_LIGHT_ARGS)
IF("$ENV{EXTRA_LIGHT_ARGS}") IF("$ENV{EXTRA_LIGHT_ARGS}")
SET(EXTRA_LIGHT_ARGS "$ENV{EXTRA_LIGHT_ARGS}") SET(EXTRA_LIGHT_ARGS "$ENV{EXTRA_LIGHT_ARGS}")
ENDIF() ENDIF()
FILE(REMOVE mysql_server.wixobj) FILE(REMOVE mysql_server.wixobj)
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${CANDLE_EXECUTABLE} -ext WixUtilExtension mysql_server.wxs ${EXTRA_CANDLE_ARGS} COMMAND ${CANDLE_EXECUTABLE} -ext WixUtilExtension mysql_server.wxs ${EXTRA_CANDLE_ARGS}
RESULT_VARIABLE CANDLE_RESULT RESULT_VARIABLE CANDLE_RESULT
) )
IF(CANDLE_RESULT) IF(CANDLE_RESULT)
MESSAGE(FATAL_ERROR "ERROR: can't run candle") MESSAGE(FATAL_ERROR "ERROR: can't run candle")
ENDIF() ENDIF()
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${LIGHT_EXECUTABLE} -ext WixUIExtension -ext WixUtilExtension COMMAND ${LIGHT_EXECUTABLE} -ext WixUIExtension -ext WixUtilExtension
mysql_server.wixobj -out ${CPACK_PACKAGE_FILE_NAME}.msi mysql_server.wixobj -out ${CPACK_PACKAGE_FILE_NAME}.msi
${EXTRA_LIGHT_ARGS} ${EXTRA_LIGHT_ARGS}
RESULT_VARIABLE LIGHT_RESULT RESULT_VARIABLE LIGHT_RESULT
) )
IF(LIGHT_RESULT) IF(LIGHT_RESULT)
MESSAGE(FATAL_ERROR "ERROR: can't run light") MESSAGE(FATAL_ERROR "ERROR: can't run light")
ENDIF() ENDIF()
# Switch monolithic install on again # Switch monolithic install on again
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=1 ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=1 ${CMAKE_BINARY_DIR}
) )

View file

@ -1,115 +1,115 @@
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi" <Include xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!-- <!--
Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--> -->
<UI Id="WixUI_Mondo_Custom"> <UI Id="WixUI_Mondo_Custom">
<Dialog Id="CustomWelcomeDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes"> <Dialog Id="CustomWelcomeDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control> </Control>
<Control Id="Next" Type="PushButton" X="220" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"> <Control Id="Next" Type="PushButton" X="220" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Publish Event="NewDialog" Value="LicenseAgreementDlg">NOT OLDERVERSIONBEINGUPGRADED</Publish> <Publish Event="NewDialog" Value="LicenseAgreementDlg">NOT OLDERVERSIONBEINGUPGRADED</Publish>
<Publish Event="NewDialog" Value="UpgradeDlg">OLDERVERSIONBEINGUPGRADED</Publish> <Publish Event="NewDialog" Value="UpgradeDlg">OLDERVERSIONBEINGUPGRADED</Publish>
</Control> </Control>
<Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes" /> <Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes" />
<Control Id="Description" Type="Text" X="135" Y="80" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgDescription)" /> <Control Id="Description" Type="Text" X="135" Y="80" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgDescription)" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgTitle)" /> <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgTitle)" />
<Control Id="CopyrightText" Type="Text" X="135" Y="200" Width="220" Height="40" Transparent="yes" Text="Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved." /> <Control Id="CopyrightText" Type="Text" X="135" Y="200" Width="220" Height="40" Transparent="yes" Text="Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved." />
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.WelcomeDlgBitmap)" /> <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.WelcomeDlgBitmap)" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
</Dialog> </Dialog>
<Dialog Id="UpgradeDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes"> <Dialog Id="UpgradeDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
<Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Text="Upgrade"> <Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Text="Upgrade">
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish> <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish> <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish> <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control> </Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control> </Control>
<Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)"> <Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)">
<Condition Action="default">WixUI_InstallMode = "Remove"</Condition> <Condition Action="default">WixUI_InstallMode = "Remove"</Condition>
</Control> </Control>
<Control Id="InstallTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallTitle)"> <Control Id="InstallTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallTitle)">
<Condition Action="show">NOT Installed</Condition> <Condition Action="show">NOT Installed</Condition>
</Control> </Control>
<Control Id="InstallText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallText)"> <Control Id="InstallText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallText)">
<Condition Action="show">NOT Installed</Condition> <Condition Action="show">NOT Installed</Condition>
</Control> </Control>
<Control Id="UpgradeText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="no" NoPrefix="yes" <Control Id="UpgradeText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="no" NoPrefix="yes"
Text="Click Upgrade to upgrade your installation from version [OLDERVERSION] to version [ProductVersion]. Click Cancel to exit the upgrade."/> Text="Click Upgrade to upgrade your installation from version [OLDERVERSION] to version [ProductVersion]. Click Cancel to exit the upgrade."/>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.VerifyReadyDlgBannerBitmap)" /> <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.VerifyReadyDlgBannerBitmap)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
</Dialog> </Dialog>
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
<Property Id="WixUI_Mode" Value="Mondo" /> <Property Id="WixUI_Mode" Value="Mondo" />
<DialogRef Id="ErrorDlg" /> <DialogRef Id="ErrorDlg" />
<DialogRef Id="FatalError" /> <DialogRef Id="FatalError" />
<DialogRef Id="FilesInUse" /> <DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" /> <DialogRef Id="MsiRMFilesInUse" />
<DialogRef Id="PrepareDlg" /> <DialogRef Id="PrepareDlg" />
<DialogRef Id="ProgressDlg" /> <DialogRef Id="ProgressDlg" />
<DialogRef Id="ResumeDlg" /> <DialogRef Id="ResumeDlg" />
<DialogRef Id="UserExit" /> <DialogRef Id="UserExit" />
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
<Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="CustomWelcomeDlg">1</Publish> <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="CustomWelcomeDlg">1</Publish>
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg" Order="2">LicenseAccepted = "1"</Publish> <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg" Order="2">LicenseAccepted = "1"</Publish>
<Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish> <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
<Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="SetupTypeDlg" Control="CustomButton" Event="NewDialog" Value="CustomizeDlg">1</Publish> <Publish Dialog="SetupTypeDlg" Control="CustomButton" Event="NewDialog" Value="CustomizeDlg">1</Publish>
<Publish Dialog="SetupTypeDlg" Control="CompleteButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> <Publish Dialog="SetupTypeDlg" Control="CompleteButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">WixUI_InstallMode = "Change"</Publish> <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">WixUI_InstallMode = "Change"</Publish>
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallCustom"</Publish> <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallCustom"</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> <Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">WixUI_InstallMode = "InstallCustom"</Publish> <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">WixUI_InstallMode = "InstallCustom"</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallTypical" OR WixUI_InstallMode = "InstallComplete"</Publish> <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallTypical" OR WixUI_InstallMode = "InstallComplete"</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="3">WixUI_InstallMode = "Change"</Publish> <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="3">WixUI_InstallMode = "Change"</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="4">WixUI_InstallMode = "Repair" OR WixUI_InstallMode = "Remove"</Publish> <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="4">WixUI_InstallMode = "Repair" OR WixUI_InstallMode = "Remove"</Publish>
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
<Publish Dialog="UpgradeDlg" Control="Back" Event="NewDialog" Value="CustomWelcomeDlg">1</Publish> <Publish Dialog="UpgradeDlg" Control="Back" Event="NewDialog" Value="CustomWelcomeDlg">1</Publish>
<InstallUISequence> <InstallUISequence>
<Show Dialog="CustomWelcomeDlg" Before="ProgressDlg">NOT Installed</Show> <Show Dialog="CustomWelcomeDlg" Before="ProgressDlg">NOT Installed</Show>
</InstallUISequence> </InstallUISequence>
</UI> </UI>
<UIRef Id="WixUI_Common" /> <UIRef Id="WixUI_Common" />
</Include> </Include>

View file

@ -1,81 +1,81 @@
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi" <Include xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!-- <!--
Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--> -->
<!-- Datafiles that installation will copy to CommonAppData (initial database) <!-- Datafiles that installation will copy to CommonAppData (initial database)
They are declared Permanent and NeverOverwrite since it is user data --> They are declared Permanent and NeverOverwrite since it is user data -->
<DirectoryRef Id='TARGETDIR'> <DirectoryRef Id='TARGETDIR'>
<Directory Id="CommonAppDataFolder"> <Directory Id="CommonAppDataFolder">
<Directory Id="datadir.mysql" Name="MySQL"> <Directory Id="datadir.mysql" Name="MySQL">
<Directory Id="datadir.mysql.mysqlserver" <Directory Id="datadir.mysql.mysqlserver"
Name="MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@"> Name="MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@">
<Directory Id="DATADIR" Name="."> <Directory Id="DATADIR" Name=".">
<Component Id="component.datadir" Guid="d3491319-5dbc-4477-95f3-4f809ef1dd2d"> <Component Id="component.datadir" Guid="d3491319-5dbc-4477-95f3-4f809ef1dd2d">
<CreateFolder> <CreateFolder>
<util:PermissionEx User="[LogonUser]" GenericAll="yes" /> <util:PermissionEx User="[LogonUser]" GenericAll="yes" />
</CreateFolder> </CreateFolder>
</Component> </Component>
<Directory Id="datadir.mysql.mysqlserver.data" Name="data"> <Directory Id="datadir.mysql.mysqlserver.data" Name="data">
<Directory Id="datadir.mysql.mysqlserver.data.mysql" Name="mysql"> <Directory Id="datadir.mysql.mysqlserver.data.mysql" Name="mysql">
<Component Id="component.datadir.mysql" <Component Id="component.datadir.mysql"
Guid="19ec0f1f-1a7f-424e-a788-b09346c0a709" Guid="19ec0f1f-1a7f-424e-a788-b09346c0a709"
Permanent="yes" NeverOverwrite="yes"> Permanent="yes" NeverOverwrite="yes">
<CreateFolder> <CreateFolder>
<util:PermissionEx User="[LogonUser]" GenericAll="yes" /> <util:PermissionEx User="[LogonUser]" GenericAll="yes" />
</CreateFolder> </CreateFolder>
@DATADIR_MYSQL_FILES@ @DATADIR_MYSQL_FILES@
</Component> </Component>
</Directory> </Directory>
<Directory Id="datadir.mysql.mysqlserver.data.performance_schema" <Directory Id="datadir.mysql.mysqlserver.data.performance_schema"
Name="performance_schema"> Name="performance_schema">
<Component Id="component.datadir.performance_schema" <Component Id="component.datadir.performance_schema"
Guid="af2a6776-2655-431f-a748-9e9f4645acc3" Guid="af2a6776-2655-431f-a748-9e9f4645acc3"
Permanent="yes" NeverOverwrite="yes"> Permanent="yes" NeverOverwrite="yes">
<CreateFolder> <CreateFolder>
<util:PermissionEx User="[LogonUser]" GenericAll="yes" /> <util:PermissionEx User="[LogonUser]" GenericAll="yes" />
</CreateFolder> </CreateFolder>
@DATADIR_PERFORMANCE_SCHEMA_FILES@ @DATADIR_PERFORMANCE_SCHEMA_FILES@
</Component> </Component>
</Directory> </Directory>
<Directory Id="datadir.mysql.mysqlserver.data.test" Name="test"> <Directory Id="datadir.mysql.mysqlserver.data.test" Name="test">
<Component Id="component.datadir.test" Guid="52fa9f0a-fcd1-420a-b2ac-95a8f70ad20a"> <Component Id="component.datadir.test" Guid="52fa9f0a-fcd1-420a-b2ac-95a8f70ad20a">
<CreateFolder/> <CreateFolder/>
</Component> </Component>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
</DirectoryRef> </DirectoryRef>
<Feature Id='UserEditableDataFiles' <Feature Id='UserEditableDataFiles'
Title='Server data files' Title='Server data files'
Description='Server data files' Description='Server data files'
ConfigurableDirectory='DATADIR' ConfigurableDirectory='DATADIR'
Level='1'> Level='1'>
<ComponentRef Id="component.datadir"/> <ComponentRef Id="component.datadir"/>
<ComponentRef Id="component.datadir.mysql"/> <ComponentRef Id="component.datadir.mysql"/>
<ComponentRef Id="component.datadir.performance_schema"/> <ComponentRef Id="component.datadir.performance_schema"/>
<ComponentRef Id="component.datadir.test"/> <ComponentRef Id="component.datadir.test"/>
</Feature> </Feature>
</Include> </Include>

View file

@ -1,196 +1,196 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!-- <!--
Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--> -->
<Product <Product
Id="*" Id="*"
UpgradeCode="49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3" UpgradeCode="49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3"
Name="MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@" Name="MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@"
Version="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@" Version="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@"
Language="1033" Language="1033"
Manufacturer="@MANUFACTURER@"> Manufacturer="@MANUFACTURER@">
<Package Id='*' <Package Id='*'
Keywords='Installer' Keywords='Installer'
Description="MySQL Database Server" Description="MySQL Database Server"
Manufacturer='@MANUFACTURER@' Manufacturer='@MANUFACTURER@'
InstallerVersion='200' InstallerVersion='200'
Languages='1033' Languages='1033'
Compressed='yes' Compressed='yes'
SummaryCodepage='1252' SummaryCodepage='1252'
Platform='@Platform@' Platform='@Platform@'
InstallScope="perMachine"/> InstallScope="perMachine"/>
<Media Id='1' Cabinet='product.cab' EmbedCab='yes' /> <Media Id='1' Cabinet='product.cab' EmbedCab='yes' />
<!-- Upgrade --> <!-- Upgrade -->
<Upgrade Id="49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3"> <Upgrade Id="49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3">
<UpgradeVersion <UpgradeVersion
Minimum="@MAJOR_VERSION@.@MINOR_VERSION@.0" Minimum="@MAJOR_VERSION@.@MINOR_VERSION@.0"
IncludeMinimum="yes" IncludeMinimum="yes"
Maximum="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@" Maximum="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@"
IncludeMaximum="yes" IncludeMaximum="yes"
Property="OLDERVERSIONBEINGUPGRADED" Property="OLDERVERSIONBEINGUPGRADED"
MigrateFeatures="yes" MigrateFeatures="yes"
/> />
<UpgradeVersion <UpgradeVersion
Minimum="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@" Minimum="@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@"
IncludeMinimum="no" IncludeMinimum="no"
OnlyDetect="yes" OnlyDetect="yes"
Property="NEWERVERSIONDETECTED" /> Property="NEWERVERSIONDETECTED" />
</Upgrade> </Upgrade>
<Condition Message="A later version of [ProductName] is already installed. Setup will now exit."> <Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">
NOT NEWERVERSIONDETECTED OR Installed NOT NEWERVERSIONDETECTED OR Installed
</Condition> </Condition>
<InstallExecuteSequence> <InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize"/> <RemoveExistingProducts After="InstallInitialize"/>
</InstallExecuteSequence> </InstallExecuteSequence>
<!-- Save/restore install location --> <!-- Save/restore install location -->
<CustomAction Id="SaveTargetDir" Property="ARPINSTALLLOCATION" Value="[INSTALLDIR]" /> <CustomAction Id="SaveTargetDir" Property="ARPINSTALLLOCATION" Value="[INSTALLDIR]" />
<InstallExecuteSequence> <InstallExecuteSequence>
<Custom Action="SaveTargetDir" After="InstallValidate"> <Custom Action="SaveTargetDir" After="InstallValidate">
NOT NOT
Installed Installed
</Custom> </Custom>
</InstallExecuteSequence> </InstallExecuteSequence>
<InstallUISequence> <InstallUISequence>
<!-- App search is what does FindInstallLocation, and it is dependent on FindRelatedProducts --> <!-- App search is what does FindInstallLocation, and it is dependent on FindRelatedProducts -->
<AppSearch After="FindRelatedProducts"/> <AppSearch After="FindRelatedProducts"/>
</InstallUISequence> </InstallUISequence>
<!-- Find previous installation --> <!-- Find previous installation -->
<Property Id="INSTALLDIR"> <Property Id="INSTALLDIR">
<RegistrySearch Id="FindInstallLocation" <RegistrySearch Id="FindInstallLocation"
Root="HKLM" Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
Name="InstallLocation" Name="InstallLocation"
Type="raw" /> Type="raw" />
</Property> </Property>
<?if @Platform@ != "x64" ?> <?if @Platform@ != "x64" ?>
<Property Id="OLDERVERSION"> <Property Id="OLDERVERSION">
<RegistrySearch Id="FindOlderVersion" <RegistrySearch Id="FindOlderVersion"
Root="HKLM" Root="HKLM"
Win64 = "no" Win64 = "no"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
Name="DisplayVersion" Name="DisplayVersion"
Type="raw" /> Type="raw" />
</Property> </Property>
<?else ?> <?else ?>
<Property Id="OLDERVERSION"> <Property Id="OLDERVERSION">
<RegistrySearch Id="FindOlderVersion" <RegistrySearch Id="FindOlderVersion"
Root="HKLM" Root="HKLM"
Win64 = "yes" Win64 = "yes"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
Name="DisplayVersion" Name="DisplayVersion"
Type="raw" /> Type="raw" />
</Property> </Property>
<?endif ?> <?endif ?>
<Property Id="DATADIR"> <Property Id="DATADIR">
<RegistrySearch Id="FindDataDir" <RegistrySearch Id="FindDataDir"
Root="HKLM" Root="HKLM"
Key="SOFTWARE\MySQL AB\[ProductName]" Key="SOFTWARE\MySQL AB\[ProductName]"
Name="DataLocation" Name="DataLocation"
Type="raw" /> Type="raw" />
</Property> </Property>
<Property Id="INSTALLDIR2"> <Property Id="INSTALLDIR2">
<RegistrySearch Id="FindInstallLocation2" <RegistrySearch Id="FindInstallLocation2"
Root="HKLM" Root="HKLM"
Key="SOFTWARE\MySQL AB\[ProductName]" Key="SOFTWARE\MySQL AB\[ProductName]"
Name="Location" Name="Location"
Type="raw" /> Type="raw" />
</Property> </Property>
<CustomAction Id="SetInstallDir2" Property="INSTALLDIR" Value="[INSTALLDIR2]" /> <CustomAction Id="SetInstallDir2" Property="INSTALLDIR" Value="[INSTALLDIR2]" />
<InstallUISequence> <InstallUISequence>
<Custom Action="SetInstallDir2" After="AppSearch">INSTALLDIR2</Custom> <Custom Action="SetInstallDir2" After="AppSearch">INSTALLDIR2</Custom>
</InstallUISequence> </InstallUISequence>
<!-- UI --> <!-- UI -->
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR"></Property> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR"></Property>
<UIRef Id="@CPACK_WIX_UI@" /> <UIRef Id="@CPACK_WIX_UI@" />
<UIRef Id="WixUI_ErrorProgressText" /> <UIRef Id="WixUI_ErrorProgressText" />
<WixVariable <WixVariable
Id="WixUIBannerBmp" Id="WixUIBannerBmp"
Value="@CMAKE_CURRENT_SOURCE_DIR@/AdminHeader.jpg" /> Value="@CMAKE_CURRENT_SOURCE_DIR@/AdminHeader.jpg" />
<WixVariable <WixVariable
Id="WixUIDialogBmp" Id="WixUIDialogBmp"
Value="@CMAKE_CURRENT_SOURCE_DIR@/AdminBackground.jpg" /> Value="@CMAKE_CURRENT_SOURCE_DIR@/AdminBackground.jpg" />
<Icon <Icon
Id="icon.ico" Id="icon.ico"
SourceFile="@CMAKE_CURRENT_SOURCE_DIR@/MySQLServer.ico"/> SourceFile="@CMAKE_CURRENT_SOURCE_DIR@/MySQLServer.ico"/>
<Property <Property
Id="ARPPRODUCTICON" Id="ARPPRODUCTICON"
Value="icon.ico" /> Value="icon.ico" />
<!-- License --> <!-- License -->
<WixVariable <WixVariable
Id="WixUILicenseRtf" Id="WixUILicenseRtf"
Value="@COPYING_RTF@"/> Value="@COPYING_RTF@"/>
<!-- How to remove the service on uninstall --> <!-- How to remove the service on uninstall -->
<Binary Id='wixca.dll' SourceFile='@WIXCA_LOCATION@' /> <Binary Id='wixca.dll' SourceFile='@WIXCA_LOCATION@' />
<CustomAction Id="UnregisterProperty" Property="UnregisterService" Value="[INSTALLDIR]" Return="check" /> <CustomAction Id="UnregisterProperty" Property="UnregisterService" Value="[INSTALLDIR]" Return="check" />
<CustomAction Id="UnregisterPropertySilent" Property="UnregisterServiceSilently" Value="[INSTALLDIR]" Return="check" /> <CustomAction Id="UnregisterPropertySilent" Property="UnregisterServiceSilently" Value="[INSTALLDIR]" Return="check" />
<CustomAction Id="UnregisterService" <CustomAction Id="UnregisterService"
BinaryKey="wixca.dll" BinaryKey="wixca.dll"
DllEntry="RemoveService" DllEntry="RemoveService"
Execute="deferred" Execute="deferred"
Impersonate="no" Impersonate="no"
Return="check" /> Return="check" />
<CustomAction Id="UnregisterServiceSilently" <CustomAction Id="UnregisterServiceSilently"
BinaryKey="wixca.dll" BinaryKey="wixca.dll"
DllEntry="RemoveServiceNoninteractive" DllEntry="RemoveServiceNoninteractive"
Execute="deferred" Execute="deferred"
Impersonate="no" Impersonate="no"
Return="check" /> Return="check" />
<InstallExecuteSequence> <InstallExecuteSequence>
<Custom Action="UnregisterProperty" After="InstallInitialize">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL"</Custom> <Custom Action="UnregisterProperty" After="InstallInitialize">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL"</Custom>
<Custom Action="UnregisterPropertySilent" After="InstallInitialize">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL"</Custom> <Custom Action="UnregisterPropertySilent" After="InstallInitialize">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL"</Custom>
<Custom Action="UnregisterService" After="UnregisterProperty">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel&gt;4</Custom> <Custom Action="UnregisterService" After="UnregisterProperty">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel&gt;4</Custom>
<Custom Action="UnregisterServiceSilently" After="UnregisterPropertySilent">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel&lt;=4</Custom> <Custom Action="UnregisterServiceSilently" After="UnregisterPropertySilent">Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel&lt;=4</Custom>
</InstallExecuteSequence> </InstallExecuteSequence>
<!-- Installation root--> <!-- Installation root-->
<Directory Id='TARGETDIR' Name='SourceDir'> <Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='@PlatformProgramFilesFolder@'> <Directory Id='@PlatformProgramFilesFolder@'>
<Directory Id='directory.MySQL' Name='MySQL'> <Directory Id='directory.MySQL' Name='MySQL'>
<Directory Id='INSTALLDIR' Name='MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@'> <Directory Id='INSTALLDIR' Name='MySQL Server @MAJOR_VERSION@.@MINOR_VERSION@'>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
</Directory> </Directory>
<!-- CPACK_WIX_FEATURES --> <!-- CPACK_WIX_FEATURES -->
@CPACK_WIX_FEATURES@ @CPACK_WIX_FEATURES@
<!-- CPACK_WIX_DIRECTORIES --> <!-- CPACK_WIX_DIRECTORIES -->
@CPACK_WIX_DIRECTORIES@ @CPACK_WIX_DIRECTORIES@
<!--CPACK_WIX_COMPONENTS--> <!--CPACK_WIX_COMPONENTS-->
@CPACK_WIX_COMPONENTS@ @CPACK_WIX_COMPONENTS@
<!--CPACK_WIX_COMPONENTS_GROUPS --> <!--CPACK_WIX_COMPONENTS_GROUPS -->
@CPACK_WIX_COMPONENT_GROUPS@ @CPACK_WIX_COMPONENT_GROUPS@
<!--CPACK_WIX_INCLUDES --> <!--CPACK_WIX_INCLUDES -->
@CPACK_WIX_INCLUDES@ @CPACK_WIX_INCLUDES@
</Product> </Product>
</Wix> </Wix>

View file

@ -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 # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -370,7 +370,7 @@ Obsoletes: mariadb-embedded
Obsoletes: MySQL-embedded < %{version}-%{release} Obsoletes: MySQL-embedded < %{version}-%{release}
Obsoletes: mysql-embedded < %{version}-%{release} Obsoletes: mysql-embedded < %{version}-%{release}
Provides: mysql-embedded = %{version}-%{release} Provides: mysql-embedded = %{version}-%{release}
Provides: mysql-emdedded%{?_isa} = %{version}-%{release} Provides: mysql-embedded%{?_isa} = %{version}-%{release}
%description embedded %description embedded
This package contains the MySQL server as an embedded library. This package contains the MySQL server as an embedded library.

View file

@ -1128,6 +1128,8 @@ static size_t escape_string(const char *str, unsigned int len,
*(result++)= '\\'; *(result++)= '\\';
*(result++)= '\\'; *(result++)= '\\';
} }
else if (is_space(*str))
*(result++)= ' ';
else else
*(result++)= *str; *(result++)= *str;
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++) for (c=0; c<d_len; c++)
result[c]= is_space(str[c]) ? ' ' : str[c]; result[c]= is_space(str[c]) ? ' ' : str[c];
memmove(result + d_len, "*****", 5); if (*next_s)
result+= d_len + 5; {
b_char= *(next_s++); memmove(result + d_len, "*****", 5);
result+= d_len + 5;
b_char= *(next_s++);
}
else
result+= d_len;
while (*next_s) while (*next_s)
{ {
if (*next_s == b_char) if (*next_s == b_char)

View file

@ -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_CAPATH, capath) |
mysql_options(mysql, MYSQL_OPT_SSL_CIPHER, cipher) ? mysql_options(mysql, MYSQL_OPT_SSL_CIPHER, cipher) ?
1 : 0); 1 : 0);
mysql->options.use_ssl= TRUE;
#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */
DBUG_RETURN(result); DBUG_RETURN(result);
} }
@ -2652,16 +2653,10 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
mysql->client_flag|= CLIENT_MULTI_RESULTS; mysql->client_flag|= CLIENT_MULTI_RESULTS;
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) #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) if (mysql->options.use_ssl)
mysql->client_flag|= CLIENT_SSL; mysql->client_flag|= CLIENT_SSL;
#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY*/ #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY*/
if (mpvio->db) if (mpvio->db)
mysql->client_flag|= CLIENT_CONNECT_WITH_DB; mysql->client_flag|= CLIENT_CONNECT_WITH_DB;
@ -2690,6 +2685,23 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
end= buff+5; end= buff+5;
} }
#ifdef HAVE_OPENSSL #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) if (mysql->client_flag & CLIENT_SSL)
{ {
/* Do the SSL layering. */ /* Do the SSL layering. */

View file

@ -2633,7 +2633,7 @@ void Field_decimal::sql_type(String &res) const
if (dec) if (dec)
tmp--; tmp--;
res.length(cs->cset->snprintf(cs,(char*) res.ptr(),res.alloced_length(), 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); add_zerofill_and_unsigned(res);
} }
@ -7923,6 +7923,14 @@ err_exit:
return -1; 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*/ #endif /*HAVE_SPATIAL*/
/**************************************************************************** /****************************************************************************

View file

@ -2591,6 +2591,7 @@ public:
int reset(void) { return Field_blob::reset() || !maybe_null(); } int reset(void) { return Field_blob::reset() || !maybe_null(); }
geometry_type get_geometry_type() { return geom_type; }; geometry_type get_geometry_type() { return geom_type; };
static geometry_type geometry_type_merge(geometry_type, geometry_type);
}; };
#endif /*HAVE_SPATIAL*/ #endif /*HAVE_SPATIAL*/

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. /* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2009, 2014, Monty Program Ab. Copyright (c) 2009, 2015, MariaDB
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by

View file

@ -1,5 +1,4 @@
/* Copyright (c) 2006, 2013, Oracle and/or its affiliates. /* Copyright (c) 2006, 2015, Oracle and/or its affiliates.
Copyright (c) 2012, 2013, Monty Proram Ab.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -2529,7 +2528,8 @@ ndbcluster_check_if_local_tables_in_db(THD *thd, const char *dbname)
char path[FN_REFLEN + 1]; char path[FN_REFLEN + 1];
build_table_filename(path, sizeof(path) - 1, dbname, "", "", 0); 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_PRINT("info", ("Failed to find files"));
DBUG_RETURN(true); DBUG_RETURN(true);

View file

@ -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 @details
Created mostly for mysql_prepare_table(). Important Created mostly for mysql_prepare_table(). Important
@ -9471,6 +9507,11 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
item_decimals= 0; item_decimals= 0;
decimals= MY_MAX(decimals, item_decimals); 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) if (Field::result_merge_type(fld_type) == DECIMAL_RESULT)
{ {
decimals= MY_MIN(MY_MAX(decimals, item->decimals), DECIMAL_MAX_SCALE); decimals= MY_MIN(MY_MAX(decimals, item->decimals), DECIMAL_MAX_SCALE);

View file

@ -4477,7 +4477,6 @@ class Item_cache: public Item_basic_constant
{ {
protected: protected:
Item *example; Item *example;
table_map used_table_map;
/** /**
Field that this object will get value from. This is used by Field that this object will get value from. This is used by
index-based subquery engines to detect and remove the equality injected index-based subquery engines to detect and remove the equality injected
@ -4495,7 +4494,7 @@ protected:
bool value_cached; bool value_cached;
public: public:
Item_cache(): Item_cache():
example(0), used_table_map(0), cached_field(0), example(0), cached_field(0),
cached_field_type(MYSQL_TYPE_STRING), cached_field_type(MYSQL_TYPE_STRING),
value_cached(0) value_cached(0)
{ {
@ -4504,7 +4503,7 @@ public:
null_value= 1; null_value= 1;
} }
Item_cache(enum_field_types field_type_arg): 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), cached_field_type(field_type_arg),
value_cached(0) value_cached(0)
{ {
@ -4513,8 +4512,6 @@ public:
null_value= 1; null_value= 1;
} }
void set_used_tables(table_map map) { used_table_map= map; }
virtual bool allocate(uint i) { return 0; } virtual bool allocate(uint i) { return 0; }
virtual bool setup(Item *item) virtual bool setup(Item *item)
{ {
@ -4531,7 +4528,6 @@ public:
enum_field_types field_type() const { return cached_field_type; } 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);
static Item_cache* get_cache(const Item* item, const Item_result type); 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 keep_array() {}
virtual void print(String *str, enum_query_type query_type); virtual void print(String *str, enum_query_type query_type);
bool eq_def(Field *field) bool eq_def(Field *field)
@ -4582,6 +4578,7 @@ public:
return TRUE; return TRUE;
return (this->*processor)(arg); return (this->*processor)(arg);
} }
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
}; };

View file

@ -5122,6 +5122,16 @@ null:
void Item_dyncol_get::print(String *str, enum_query_type query_type) 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 */ /* see create_func_dyncol_get */
DBUG_ASSERT(str->length() >= 5); DBUG_ASSERT(str->length() >= 5);
DBUG_ASSERT(strncmp(str->ptr() + str->length() - 5, "cast(", 5) == 0); DBUG_ASSERT(strncmp(str->ptr() + str->length() - 5, "cast(", 5) == 0);

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. /* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2008, 2014, SkySQL Ab. Copyright (c) 2008, 2015, MariaDB
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -3311,7 +3311,19 @@ void Item_func_group_concat::cleanup()
} }
DBUG_ASSERT(tree == 0); 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; DBUG_VOID_RETURN;
} }

View file

@ -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); int vprint_msg_to_log(enum loglevel level, const char *format, va_list args);
void sql_print_error(const char *format, ...); void sql_print_error(const char *format, ...);
void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); void sql_print_warning(const char *format, ...);
void sql_print_information(const char *format, ...) void sql_print_information(const char *format, ...);
ATTRIBUTE_FORMAT(printf, 1, 2); typedef void (*sql_print_message_func)(const char *format, ...);
typedef void (*sql_print_message_func)(const char *format, ...)
ATTRIBUTE_FORMAT_FPTR(printf, 1, 2);
extern sql_print_message_func sql_print_message_handlers[]; extern sql_print_message_func sql_print_message_handlers[];
int error_log_print(enum loglevel level, const char *format, int error_log_print(enum loglevel level, const char *format,

View file

@ -2406,6 +2406,12 @@ log_event_print_value(IO_CACHE *file, const uchar *ptr,
my_snprintf(typestr, typestr_length, "STRING(%d)", length); my_snprintf(typestr, typestr_length, "STRING(%d)", length);
return my_b_write_quoted_with_length(file, ptr, 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: default:
{ {
char tmp[5]; char tmp[5];

View file

@ -1,2 +1,2 @@
LANGUAGE 0x9,0x1 LANGUAGE 0x9,0x1
1 11 MSG00001.bin 1 11 MSG00001.bin

Some files were not shown because too many files have changed in this diff Show more