Merge branch '10.2' into bb-10.2-mdev9543

This commit is contained in:
Sergei Petrunia 2016-03-28 22:18:38 +03:00
commit 2bd4dc38e0
871 changed files with 28556 additions and 9730 deletions

5
.gitignore vendored
View file

@ -59,6 +59,9 @@ include/mysql_version.h
include/mysqld_ername.h
include/mysqld_error.h
include/sql_state.h
include/probes_mysql.d
include/probes_mysql_dtrace.h
include/probes_mysql_nodtrace.h
info_macros.cmake
libmysql*/libmysql*_exports_file.cc
libmysql*/merge_archives_mysql*.cmake
@ -112,6 +115,8 @@ scripts/wsrep_sst_mysqldump
scripts/wsrep_sst_rsync
scripts/wsrep_sst_xtrabackup
scripts/wsrep_sst_xtrabackup-v2
scripts/maria_add_gis_sp.sql
scripts/maria_add_gis_sp_bootstrap.sql
sql-bench/bench-count-distinct
sql-bench/bench-init.pl
sql-bench/compare-results

View file

@ -31,6 +31,7 @@ Usage: $0 [-h|-n] [configure-options]
-h, --help Show this help message.
-n, --just-print Don't actually run any commands; just print them.
-c, --just-configure Stop after running configure.
Combined with --just-print shows configure options.
--extra-configs=xxx Add this to configure options
--extra-flags=xxx Add this C and CXX flags
--extra-cflags=xxx Add this to C flags

View file

@ -348,11 +348,9 @@ IF(WITH_UNIT_TESTS)
ENDIF()
ENDIF()
IF(NOT WITHOUT_SERVER)
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
# Add storage engines and plugins.
CONFIGURE_PLUGINS()
ENDIF()
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
# Add storage engines and plugins.
CONFIGURE_PLUGINS()
ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(dbug)
@ -382,6 +380,10 @@ IF(NOT WITHOUT_SERVER)
ADD_SUBDIRECTORY(mysql-test)
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
ADD_SUBDIRECTORY(sql-bench)
IF(WIN32)
ADD_SUBDIRECTORY(win/upgrade_wizard)
ADD_SUBDIRECTORY(win/packaging)
ENDIF()
ENDIF()
IF(UNIX)
@ -391,10 +393,7 @@ ENDIF()
INCLUDE(cmake/abi_check.cmake)
INCLUDE(cmake/tags.cmake)
IF(WIN32)
ADD_SUBDIRECTORY(win/upgrade_wizard)
ADD_SUBDIRECTORY(win/packaging)
ENDIF()
INCLUDE(for_clients)

45
CREDITS
View file

@ -1,25 +1,30 @@
MariaDB is brought to you by the MariaDB foundation, a USA non profit
organization.
MariaDB is brought to you by the MariaDB Foundation, a non profit
organization registered in the USA.
The current main members and sponsors of the MariaDB foundation are:
The current main members and sponsors of the MariaDB Foundation are:
Automattic http://automattic.com (2014)
SkySQL Ab http://www.skysql.com (2013, 2014)
Booking.com http://www.booking.com (2013)
Parallels http://www.parallels.com/products/plesk (2013)
MariaDB Corporation http://www.mariadb.com (2013 - 2016)
Booking.com http://www.booking.com (2013 - 2016)
Parallels http://www.parallels.com/products/plesk (2013 - 2016)
Automattic http://automattic.com (2014 - 2016)
Verkkokauppa.com http://verkkokauppa.com (2015 - 2016)
Visma http://visma.com/ (2015 - 2016)
Webyog http://webyog.com (2015 - 2016)
Wikimedia Foundation http://wikimedia.org (2015 - 2016)
Acronis http://acronis.com (2016)
For a full list of supporters and sponsors see
https://mariadb.org/en/supporters/
https://mariadb.org/about/supporters/
You can also do this by doing SHOW CONTRIBUTORS.
You can also do this by running SHOW CONTRIBUTORS.
For all corporate memberships and sponsorships please contact the
MariaDB foundation Board via foundation@mariadb.org.
MariaDB Foundation Board via foundation@mariadb.org.
The MariaDB foundation is responsible for the MariaDB source
The MariaDB Foundation is responsible for the MariaDB source
repository, the official MariaDB binaries and http://mariadb.org.
The MariaDB foundation provides also, among other things, the
The MariaDB Foundation also provides, among other things, the
following services to the MariaDB community:
- Code reviews and applying patches for MariaDB
@ -28,17 +33,19 @@ following services to the MariaDB community:
- Bug fixing in MariaDB (for bugs that affects a large part of the community)
- Building the official MariaDB binaries
- Maintaining http://mariadb.org
- Documenting MariaDB in the MariaDB Knowledge Base http://mariadb.com/kb
To be able to do the above we need help from cooperations and individuals!
To be able to do the above we need help from corporations and individuals!
You can help support MariaDB by be becoming a MariaDB developer or a
member or sponsor of the MariaDB foundation!
You can help support MariaDB by becoming a MariaDB developer or a
member or sponsor of the MariaDB Foundation. To donate or sponsor,
go to https://mariadb.org/donate/
You can get a list of all main authors of MariaDB / MySQL by doing
You can get a list of all the main authors of MariaDB / MySQL by running
SHOW AUTHORS;
You can get a list sponsors and contributors by doing
You can get a list sponsors and contributors by running
SHOW CONTRIBUTORS;
You can read more about the MariaDB foundation at:
https://mariadb.org/en/foundation/
You can read more about the MariaDB Foundation at:
https://mariadb.org/about/

View file

@ -1,11 +1,11 @@
MariaDB is in most aspects identical to MySQL.
Differences between MySQL and MariaDB can be found at:
http://kb.askmonty.org/en/mariadb-versus-mysql-features/
http://kb.askmonty.org/en/mariadb-versus-mysql-compatibility/
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/
The MariaDB manual can be found at:
http://kb.askmonty.org/
https://mariadb.com/kb/
The MySQL Reference Manual is available in various formats on
http://dev.mysql.com/doc.

View file

@ -243,7 +243,7 @@
in the caller's frame is set in the new context as well.
4) For each instruction, call its execute() method.
The result is a pointer to the next instruction to execute (or NULL)
if an error occured.
if an error occurred.
5) On success, set the new values of the OUT and INOUT parameters in
the caller's frame.
@ -853,7 +853,7 @@
// '*nextp' will be set to the index of the next instruction
// to execute. (For most instruction this will be the
// instruction following this one.)
// Returns 0 on success, non-zero if some error occured.
// Returns 0 on success, non-zero if some error occurred.
virtual int execute(THD *, uint *nextp)
}

View file

@ -1,3 +1,3 @@
Instructions for building MariaDB can be found at:
https://kb.askmonty.org/en/compiling-mariadb-from-source/
https://mariadb.com/kb/en/compiling-mariadb-from-source

View file

@ -1,3 +1,3 @@
Up-to-date instructions about building MariaDB on Windows can be found
at: http://kb.askmonty.org/en/building-mariadb-on-windows
at: https://mariadb.com/kb/en/Building_MariaDB_on_Windows

8
README
View file

@ -1,17 +1,17 @@
MariaDB is designed as a drop-in replacement of MySQL(R) with more
features, new storage engines, fewer bugs, and better performance.
MariaDB is brought to you by the MariaDB foundation.
Please read the file CREDITS for details about the MariaDB foundation,
MariaDB is brought to you by the MariaDB Foundation.
Please read the CREDITS file for details about the MariaDB Foundation,
and who is developing MariaDB.
MariaDB is developed by many of the original developers of MySQL who
now work for MariadB foundation and SkySQL Ab, and by many people in
now work for the MariadB Foundation and the MariaDB Corporation, and by many people in
the community.
MySQL, which is the base of MariaDB, is a product and trademark of Oracle
Corporation, Inc. For a list of developers and other contributors,
see the Credits appendix. You can also do 'SHOW authors' to get a
see the Credits appendix. You can also run 'SHOW authors' to get a
list of active contributors.
A description of the MariaDB project and a manual can be found at:

View file

@ -1,4 +1,3 @@
MYSQL_VERSION_MAJOR=10
MYSQL_VERSION_MINOR=2
MYSQL_VERSION_PATCH=0
MYSQL_VERSION_EXTRA=

View file

@ -1344,6 +1344,44 @@ sig_handler mysql_end(int sig)
exit(status.exit_status);
}
/*
set connection-specific options and call mysql_real_connect
*/
static bool do_connect(MYSQL *mysql, const char *host, const char *user,
const char *password, const char *database, ulong flags)
{
if (opt_secure_auth)
mysql_options(mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
if (opt_use_ssl)
{
mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
opt_ssl_capath, opt_ssl_cipher);
mysql_options(mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
}
mysql_options(mysql,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
(char*)&opt_ssl_verify_server_cert);
#endif
if (opt_protocol)
mysql_options(mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol);
#ifdef HAVE_SMEM
if (shared_memory_base_name)
mysql_options(mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
#endif
if (opt_plugin_dir && *opt_plugin_dir)
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
if (opt_default_auth && *opt_default_auth)
mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
"program_name", "mysql");
return mysql_real_connect(mysql, host, user, password, database,
opt_mysql_port, opt_mysql_unix_port, flags);
}
/*
This function handles sigint calls
@ -1365,11 +1403,7 @@ sig_handler handle_sigint(int sig)
}
kill_mysql= mysql_init(kill_mysql);
mysql_options(kill_mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
mysql_options4(kill_mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
"program_name", "mysql");
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
"", opt_mysql_port, opt_mysql_unix_port,0))
if (!do_connect(kill_mysql,current_host, current_user, opt_password, "", 0))
{
tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n");
goto err;
@ -1921,7 +1955,7 @@ static int get_options(int argc, char **argv)
connect_flag|= CLIENT_IGNORE_SPACE;
if (opt_progress_reports)
connect_flag|= CLIENT_PROGRESS;
connect_flag|= CLIENT_PROGRESS_OBSOLETE;
return(0);
}
@ -3320,7 +3354,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
end:
/* Show warnings if any or error occured */
/* Show warnings if any or error occurred */
if (show_warnings == 1 && (warnings >= 1 || error))
print_warnings();
@ -4575,27 +4609,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
}
if (opt_compress)
mysql_options(&mysql,MYSQL_OPT_COMPRESS,NullS);
if (opt_secure_auth)
mysql_options(&mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
if (using_opt_local_infile)
mysql_options(&mysql,MYSQL_OPT_LOCAL_INFILE, (char*) &opt_local_infile);
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
if (opt_use_ssl)
{
mysql_ssl_set(&mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
opt_ssl_capath, opt_ssl_cipher);
mysql_options(&mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(&mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
}
mysql_options(&mysql,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
(char*)&opt_ssl_verify_server_cert);
#endif
if (opt_protocol)
mysql_options(&mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol);
#ifdef HAVE_SMEM
if (shared_memory_base_name)
mysql_options(&mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
#endif
if (safe_updates)
{
char init_command[100];
@ -4607,17 +4622,7 @@ sql_real_connect(char *host,char *database,char *user,char *password,
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
if (opt_plugin_dir && *opt_plugin_dir)
mysql_options(&mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
if (opt_default_auth && *opt_default_auth)
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
"program_name", "mysql");
if (!mysql_real_connect(&mysql, host, user, password,
database, opt_mysql_port, opt_mysql_unix_port,
if (!do_connect(&mysql, host, user, password, database,
connect_flag | CLIENT_MULTI_STATEMENTS))
{
if (!silent ||
@ -4638,10 +4643,10 @@ sql_real_connect(char *host,char *database,char *user,char *password,
mysql.reconnect= debug_info_flag; // We want to know if this happens
/*
CLIENT_PROGRESS is set only if we requsted it in mysql_real_connect()
and the server also supports it
CLIENT_PROGRESS_OBSOLETE is set only if we requested it in
mysql_real_connect() and the server also supports it
*/
if (mysql.client_flag & CLIENT_PROGRESS)
if (mysql.client_flag & CLIENT_PROGRESS_OBSOLETE)
mysql_options(&mysql, MYSQL_PROGRESS_CALLBACK, (void*) report_progress);
#else
mysql.reconnect= 1;

View file

@ -184,6 +184,7 @@ static const char *load_default_groups[]=
static void free_used_memory(void)
{
/* Free memory allocated by 'load_defaults' */
if (defaults_argv)
free_defaults(defaults_argv);
dynstr_free(&ds_args);
@ -657,7 +658,7 @@ static int get_upgrade_info_file_name(char* name)
/*
Read the content of mysql_upgrade_info file and
compare the version number form file against
version number wich mysql_upgrade was compiled for
version number which mysql_upgrade was compiled for
NOTE
This is an optimization to avoid running mysql_upgrade
@ -1110,7 +1111,6 @@ int main(int argc, char **argv)
if (opt_systables_only && !opt_silent)
printf("The --upgrade-system-tables option was used, user tables won't be touched.\n");
/*
Read the mysql_upgrade_info file to check if mysql_upgrade
already has been run for this installation of MySQL

View file

@ -73,6 +73,8 @@ ulong opt_binlog_rows_event_max_size;
uint test_flags = 0;
static uint opt_protocol= 0;
static FILE *result_file;
static char *result_file_name= 0;
static const char *output_prefix= "";
#ifndef DBUG_OFF
static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace";
@ -96,6 +98,8 @@ static char* database= 0;
static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
static my_bool debug_info_flag, debug_check_flag;
static my_bool force_if_open_opt= 1;
static my_bool opt_raw_mode= 0, opt_stop_never= 0;
static ulong opt_stop_never_slave_server_id= 0;
static my_bool opt_verify_binlog_checksum= 1;
static ulonglong offset = 0;
static char* host = 0;
@ -120,7 +124,6 @@ static ulonglong start_position, stop_position;
static char *start_datetime_str, *stop_datetime_str;
static my_time_t start_datetime= 0, stop_datetime= MY_TIME_T_MAX;
static ulonglong rec_count= 0;
static short binlog_flags = 0;
static MYSQL* mysql = NULL;
static const char* dirname_for_local_load= 0;
static bool opt_skip_annotate_row_events= 0;
@ -142,7 +145,9 @@ enum Exit_status {
/** An error occurred and execution should stop. */
ERROR_STOP,
/** No error occurred but execution should stop. */
OK_STOP
OK_STOP,
/** No error occurred - end of file reached. */
OK_EOF,
};
/**
@ -1368,8 +1373,14 @@ static struct my_option my_options[] =
{"read-from-remote-server", 'R', "Read binary logs from a MySQL server.",
&remote_opt, &remote_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
{"result-file", 'r', "Direct output to a given file.", 0, 0, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"raw", 0, "Requires -R. Output raw binlog data instead of SQL "
"statements. Output files named after server logs.",
&opt_raw_mode, &opt_raw_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
{"result-file", 'r', "Direct output to a given file. With --raw this is a "
"prefix for the file names.",
&result_file_name, &result_file_name, 0, GET_STR, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
{"server-id", 0,
"Extract only binlog entries created by the server having the given id.",
&server_id, &server_id, 0, GET_ULONG,
@ -1418,6 +1429,14 @@ static struct my_option my_options[] =
"(you should probably use quotes for your shell to set it properly).",
&stop_datetime_str, &stop_datetime_str,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"stop-never", 0, "Wait for more data from the server "
"instead of stopping at the end of the last log. Implies --to-last-log.",
&opt_stop_never, &opt_stop_never, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"stop-never-slave-server-id", 0,
"The slave server_id used for --read-from-remote-server --stop-never.",
&opt_stop_never_slave_server_id, &opt_stop_never_slave_server_id, 0,
GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"stop-position", OPT_STOP_POSITION,
"Stop reading the binlog at position N. Applies to the last binlog "
"passed on the command line.",
@ -1620,10 +1639,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
else
tty_password=1;
break;
case 'r':
if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME))))
exit(1);
break;
case 'R':
remote_opt= 1;
break;
@ -1719,7 +1734,6 @@ static int parse_args(int *argc, char*** argv)
{
int ho_error;
result_file = stdout;
if ((ho_error=handle_options(argc, argv, my_options, get_one_option)))
exit(ho_error);
if (debug_info_flag)
@ -1809,6 +1823,7 @@ static Exit_status dump_log_entries(const char* logname)
Set safe delimiter, to dump things
like CREATE PROCEDURE safely
*/
if (!opt_raw_mode)
fprintf(result_file, "DELIMITER /*!*/;\n");
strmov(print_event_info.delimiter, "/*!*/;");
@ -1818,6 +1833,7 @@ static Exit_status dump_log_entries(const char* logname)
dump_local_log_entries(&print_event_info, logname));
/* Set delimiter back to semicolon */
if (!opt_raw_mode)
fprintf(result_file, "DELIMITER ;\n");
strmov(print_event_info.delimiter, ";");
return rc;
@ -1924,87 +1940,19 @@ err:
}
/**
Requests binlog dump from a remote server and prints the events it
receives.
@param[in,out] print_event_info Parameters and context state
determining how to print.
@param[in] logname Name of input binlog.
@retval ERROR_STOP An error occurred - the program should terminate.
@retval OK_CONTINUE No error, the program should continue.
@retval OK_STOP No error, but the end of the specified range of
events to process has been reached and the program should terminate.
*/
static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname)
static Exit_status handle_event_text_mode(PRINT_EVENT_INFO *print_event_info,
ulong *len,
const char* logname,
uint logname_len, my_off_t old_off)
{
uchar buf[128];
ulong len;
uint logname_len;
NET* net;
my_off_t old_off= start_position_mot;
char fname[FN_REFLEN+1];
Exit_status retval= OK_CONTINUE;
DBUG_ENTER("dump_remote_log_entries");
/*
Even if we already read one binlog (case of >=2 binlogs on command line),
we cannot re-use the same connection as before, because it is now dead
(COM_BINLOG_DUMP kills the thread when it finishes).
*/
if ((retval= safe_connect()) != OK_CONTINUE)
DBUG_RETURN(retval);
net= &mysql->net;
if ((retval= check_master_version()) != OK_CONTINUE)
DBUG_RETURN(retval);
/*
COM_BINLOG_DUMP accepts only 4 bytes for the position, so we are forced to
cast to uint32.
*/
DBUG_ASSERT(start_position <= UINT_MAX32);
int4store(buf, (uint32)start_position);
if (!opt_skip_annotate_row_events)
binlog_flags|= BINLOG_SEND_ANNOTATE_ROWS_EVENT;
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
size_t tlen = strlen(logname);
if (tlen > UINT_MAX)
{
error("Log name too long.");
DBUG_RETURN(ERROR_STOP);
}
logname_len = (uint) tlen;
int4store(buf + 6, 0);
memcpy(buf + 10, logname, logname_len);
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
{
error("Got fatal error sending the log dump command.");
DBUG_RETURN(ERROR_STOP);
}
for (;;)
{
const char *error_msg;
Log_event *ev;
NET *net= &mysql->net;
DBUG_ENTER("handle_event_text_mode");
len= cli_safe_read(mysql);
if (len == packet_error)
{
error("Got error reading packet from server: %s", mysql_error(mysql));
DBUG_RETURN(ERROR_STOP);
}
if (len < 8 && net->read_pos[0] == 254)
break; // end of data
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
len, net->read_pos[5]));
if (net->read_pos[5] == ANNOTATE_ROWS_EVENT)
{
if (!(ev= read_remote_annotate_event(net->read_pos + 1, len - 1,
if (!(ev= read_remote_annotate_event(net->read_pos + 1, *len - 1,
&error_msg)))
{
error("Could not construct annotate event object: %s", error_msg);
@ -2014,7 +1962,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
else
{
if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 ,
len - 1, &error_msg,
*len - 1, &error_msg,
glob_description_event,
opt_verify_binlog_checksum)))
{
@ -2053,13 +2001,14 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
*/
if (rev->when == 0)
{
*len= 1; // fake Rotate, so don't increment old_off
if (!to_last_remote_log)
{
if ((rev->ident_len != logname_len) ||
memcmp(rev->new_log_ident, logname, logname_len))
{
delete ev;
DBUG_RETURN(OK_CONTINUE);
DBUG_RETURN(OK_EOF);
}
/*
Otherwise, this is a fake Rotate for our log, at the very
@ -2068,9 +2017,8 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
because it serves as a useful marker between binlogs then.
*/
delete ev;
continue;
DBUG_RETURN(OK_CONTINUE);
}
len= 1; // fake Rotate, so don't increment old_off
}
}
else if (type == FORMAT_DESCRIPTION_EVENT)
@ -2083,7 +2031,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
starts from BIN_LOG_HEADER_SIZE position.
*/
if (old_off != BIN_LOG_HEADER_SIZE)
len= 1; // fake event, don't increment old_off
*len= 1; // fake event, don't increment old_off
}
Exit_status retval= process_event(print_event_info, ev, old_off, logname);
if (retval != OK_CONTINUE)
@ -2096,6 +2044,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
uint old_len= le->fname_len;
File file;
Exit_status retval;
char fname[FN_REFLEN+1];
if ((file= load_processor.prepare_new_file_for_old_format(le,fname)) < 0)
{
@ -2113,6 +2062,229 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
if (retval != OK_CONTINUE)
DBUG_RETURN(retval);
}
DBUG_RETURN(OK_CONTINUE);
}
static char out_file_name[FN_REFLEN + 1];
static Exit_status handle_event_raw_mode(PRINT_EVENT_INFO *print_event_info,
ulong *len,
const char* logname, uint logname_len)
{
const char *error_msg;
const unsigned char *read_pos= mysql->net.read_pos + 1;
Log_event_type type;
DBUG_ENTER("handle_event_raw_mode");
DBUG_ASSERT(opt_raw_mode && remote_opt);
type= (Log_event_type) read_pos[EVENT_TYPE_OFFSET];
if (type == HEARTBEAT_LOG_EVENT)
DBUG_RETURN(OK_CONTINUE);
if (type == ROTATE_EVENT || type == FORMAT_DESCRIPTION_EVENT)
{
Log_event *ev;
if (!(ev= Log_event::read_log_event((const char*) read_pos ,
*len - 1, &error_msg,
glob_description_event,
opt_verify_binlog_checksum)))
{
error("Could not construct %s event object: %s",
type == ROTATE_EVENT ? "rotate" : "format description", error_msg);
DBUG_RETURN(ERROR_STOP);
}
/*
If reading from a remote host, ensure the temp_buf for the
Log_event class is pointing to the incoming stream.
*/
ev->register_temp_buf((char *) read_pos, FALSE);
if (type == ROTATE_EVENT)
{
Exit_status ret_val= OK_CONTINUE;
Rotate_log_event *rev= (Rotate_log_event *)ev;
char *pe= strmake(out_file_name, output_prefix, sizeof(out_file_name)-1);
strmake(pe, rev->new_log_ident, sizeof(out_file_name) - (pe-out_file_name));
/*
If this is a fake Rotate event, and not about our log, we can stop
transfer. If this a real Rotate event (so it's not about our log,
it's in our log describing the next log), we print it (because it's
part of our log) and then we will stop when we receive the fake one
soon.
*/
if (rev->when == 0)
{
if (!to_last_remote_log)
{
if ((rev->ident_len != logname_len) ||
memcmp(rev->new_log_ident, logname, logname_len))
{
ret_val= OK_EOF;
}
/*
Otherwise, this is a fake Rotate for our log, at the very
beginning for sure. Skip it, because it was not in the original
log. If we are running with to_last_remote_log, we print it,
because it serves as a useful marker between binlogs then.
*/
}
*len= 1; // fake Rotate, so don't increment old_off
ev->temp_buf= 0;
delete ev;
DBUG_RETURN(ret_val);
}
ev->temp_buf= 0;
delete ev;
}
else /* if (type == FORMAT_DESCRIPTION_EVENT) */
{
DBUG_ASSERT(type == FORMAT_DESCRIPTION_EVENT);
if (result_file)
my_fclose(result_file, MYF(0));
if (!(result_file= my_fopen(out_file_name,
O_WRONLY | O_BINARY, MYF(MY_WME))))
{
error("Could not create output log file: %s", out_file_name);
DBUG_RETURN(ERROR_STOP);
}
/* TODO - add write error simulation here */
if (my_fwrite(result_file, (const uchar *) BINLOG_MAGIC,
BIN_LOG_HEADER_SIZE, MYF(MY_NABP)))
{
error("Could not write into log file '%s'", out_file_name);
DBUG_RETURN(ERROR_STOP);
}
delete glob_description_event;
glob_description_event= (Format_description_log_event*) ev;
print_event_info->common_header_len=
glob_description_event->common_header_len;
ev->temp_buf= 0;
/* We do not want to delete the event here. */
}
}
if (my_fwrite(result_file, read_pos, *len - 1, MYF(MY_NABP)))
{
error("Could not write into log file '%s'", out_file_name);
DBUG_RETURN(ERROR_STOP);
}
DBUG_RETURN(OK_CONTINUE);
}
/**
Requests binlog dump from a remote server and prints the events it
receives.
@param[in,out] print_event_info Parameters and context state
determining how to print.
@param[in] logname Name of input binlog.
@retval ERROR_STOP An error occurred - the program should terminate.
@retval OK_CONTINUE No error, the program should continue.
@retval OK_STOP No error, but the end of the specified range of
events to process has been reached and the program should terminate.
*/
static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname)
{
uchar buf[128];
ulong len;
uint logname_len;
NET* net;
my_off_t old_off= start_position_mot;
Exit_status retval= OK_CONTINUE;
short binlog_flags = 0;
ulong slave_id;
DBUG_ENTER("dump_remote_log_entries");
/*
Even if we already read one binlog (case of >=2 binlogs on command line),
we cannot re-use the same connection as before, because it is now dead
(COM_BINLOG_DUMP kills the thread when it finishes).
*/
if ((retval= safe_connect()) != OK_CONTINUE)
DBUG_RETURN(retval);
net= &mysql->net;
if ((retval= check_master_version()) != OK_CONTINUE)
DBUG_RETURN(retval);
/*
COM_BINLOG_DUMP accepts only 4 bytes for the position, so we are forced to
cast to uint32.
*/
DBUG_ASSERT(start_position <= UINT_MAX32);
int4store(buf, (uint32)start_position);
if (!opt_skip_annotate_row_events)
binlog_flags|= BINLOG_SEND_ANNOTATE_ROWS_EVENT;
if (!opt_stop_never)
binlog_flags|= BINLOG_DUMP_NON_BLOCK;
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
size_t tlen = strlen(logname);
if (tlen > UINT_MAX)
{
error("Log name too long.");
DBUG_RETURN(ERROR_STOP);
}
logname_len = (uint) tlen;
if (opt_stop_never)
{
DBUG_ASSERT(to_last_remote_log);
slave_id= (opt_stop_never_slave_server_id == 0) ?
1 : opt_stop_never_slave_server_id;
}
else
slave_id= 0;
int4store(buf + 6, slave_id);
memcpy(buf + 10, logname, logname_len);
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
{
error("Got fatal error sending the log dump command.");
DBUG_RETURN(ERROR_STOP);
}
for (;;)
{
len= cli_safe_read(mysql);
if (len == packet_error)
{
error("Got error reading packet from server: %s", mysql_error(mysql));
DBUG_RETURN(ERROR_STOP);
}
if (len < 8 && net->read_pos[0] == 254)
break; // end of data
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
len, net->read_pos[5]));
if (opt_raw_mode)
{
retval= handle_event_raw_mode(print_event_info, &len,
logname, logname_len);
}
else
{
retval= handle_event_text_mode(print_event_info, &len,
logname, logname_len, old_off);
}
if (retval != OK_CONTINUE)
{
if (retval == OK_EOF)
break;
DBUG_RETURN(retval);
}
/*
Let's adjust offset for remote log as for local log to produce
similar text and to have --stop-position to work identically.
@ -2449,6 +2621,7 @@ end:
return retval;
}
int main(int argc, char** argv)
{
char **defaults_argv;
@ -2495,6 +2668,43 @@ int main(int argc, char** argv)
my_set_max_open_files(open_files_limit);
if (opt_stop_never)
to_last_remote_log= TRUE;
if (opt_raw_mode)
{
if (!remote_opt)
{
error("The --raw mode only works with --read-from-remote-server");
exit(1);
}
if (one_database)
warning("The --database option is ignored in raw mode");
if (stop_position != (ulonglong)(~(my_off_t)0))
warning("The --stop-position option is ignored in raw mode");
if (stop_datetime != MY_TIME_T_MAX)
warning("The --stop-datetime option is ignored in raw mode");
result_file= 0;
if (result_file_name)
output_prefix= result_file_name;
}
else
{
if (result_file_name)
{
if (!(result_file= my_fopen(result_file_name,
O_WRONLY | O_BINARY, MYF(MY_WME))))
{
error("Could not create log file '%s'", result_file_name);
exit(1);
}
}
else
result_file= stdout;
}
MY_TMPDIR tmpdir;
tmpdir.list= 0;
if (!dirname_for_local_load)
@ -2517,6 +2727,8 @@ int main(int argc, char** argv)
else
load_processor.init_by_cur_dir();
if (!opt_raw_mode)
{
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;\n");
fprintf(result_file,
@ -2540,6 +2752,7 @@ int main(int argc, char** argv)
"\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;"
"\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;"
"\n/*!40101 SET NAMES %s */;\n", charset);
}
for (save_stop_position= stop_position, stop_position= ~(my_off_t)0 ;
(--argc >= 0) ; )
@ -2553,6 +2766,8 @@ int main(int argc, char** argv)
start_position= BIN_LOG_HEADER_SIZE;
}
if (!opt_raw_mode)
{
/*
Issue a ROLLBACK in case the last printed binlog was crashed and had half
of transaction.
@ -2570,10 +2785,11 @@ int main(int argc, char** argv)
"/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\n");
}
if (tmpdir.list)
free_tmpdir(&tmpdir);
if (result_file != stdout)
if (result_file && result_file != stdout)
my_fclose(result_file, MYF(0));
cleanup();
free_annotate_event();

View file

@ -277,8 +277,8 @@ static void usage(void)
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname);
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n",
my_progname);
puts("Please consult the MariaDB/MySQL knowledgebase at");
puts("http://kb.askmonty.org/v/mysqlcheck for latest information about");
puts("Please consult the MariaDB Knowledge Base at");
puts("https://mariadb.com/kb/en/mysqlcheck for latest information about");
puts("this program.");
print_defaults("my", load_default_groups);
puts("");
@ -523,7 +523,6 @@ static int is_view(const char *table)
{
fprintf(stderr, "Failed to %s\n", query);
fprintf(stderr, "Error: %s\n", mysql_error(sock));
my_free(query);
DBUG_RETURN(-1);
}
res= mysql_store_result(sock);

View file

@ -1104,7 +1104,7 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query,
Run query and dump the result to stderr in vertical format
NOTE! This function should be safe to call when an error
has occured and thus any further errors will be ignored(although logged)
has occurred and thus any further errors will be ignored (although logged)
SYNOPSIS
show_query
@ -1170,7 +1170,7 @@ static void show_query(MYSQL* mysql, const char* query)
is added to the warning stack, only print @@warning_count-1 warnings.
NOTE! This function should be safe to call when an error
has occured and this any further errors will be ignored(although logged)
has occurred and this any further errors will be ignored(although logged)
SYNOPSIS
show_warnings_before_error
@ -4699,7 +4699,7 @@ void do_sync_with_master2(struct st_command *command, long offset,
master_pos_wait returned NULL. This indicates that
slave SQL thread is not started, the slave's master
information is not initialized, the arguments are
incorrect, or an error has occured
incorrect, or an error has occurred
*/
die("%.*s failed: '%s' returned NULL " \
"indicating slave SQL thread failure",
@ -4977,12 +4977,13 @@ static int my_kill(int pid, int sig)
{
#ifdef __WIN__
HANDLE proc;
if ((proc= OpenProcess(PROCESS_TERMINATE, FALSE, pid)) == NULL)
if ((proc= OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pid)) == NULL)
return -1;
if (sig == 0)
{
DWORD wait_result= WaitForSingleObject(proc, 0);
CloseHandle(proc);
return 0;
return wait_result == WAIT_OBJECT_0?-1:0;
}
(void)TerminateProcess(proc, 201);
CloseHandle(proc);

View file

@ -94,6 +94,7 @@ ELSEIF(DEB)
ELSE()
SET(WITH_SSL bundled CACHE STRING "")
SET(WITH_ZLIB bundled CACHE STRING "")
SET(WITH_JEMALLOC static CACHE STRING "")
ENDIF()
IF(NOT COMPILATION_COMMENT)

View file

@ -43,8 +43,8 @@ SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_SUMMARY}
It is GPL v2 licensed, which means you can use the it free of charge under the
conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
MariaDB documentation can be found at http://kb.askmonty.org/
MariaDB bug reports should be submitted through https://mariadb.atlassian.net/
MariaDB documentation can be found at https://mariadb.com/kb
MariaDB bug reports should be submitted through https://jira.mariadb.org
")
@ -78,14 +78,17 @@ SET(ignored
"%ignore ${CMAKE_INSTALL_PREFIX}/bin"
"%ignore ${CMAKE_INSTALL_PREFIX}/include"
"%ignore ${CMAKE_INSTALL_PREFIX}/lib"
"%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd"
"%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
"%ignore ${CMAKE_INSTALL_PREFIX}/lib64"
"%ignore ${CMAKE_INSTALL_PREFIX}/sbin"
"%ignore ${CMAKE_INSTALL_PREFIX}/share"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1*"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8*"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8"
"%ignore ${CMAKE_INSTALL_PREFIX}/share/pkgconfig"
)
SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
@ -122,6 +125,7 @@ SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
"MySQL"
"mysql-server"
"MySQL-server"
"MariaDB-Galera-server"
"MySQL-OurDelta-server")
SETA(CPACK_RPM_server_PACKAGE_PROVIDES
"MariaDB"
@ -175,7 +179,7 @@ MACRO(ALTERNATIVE_NAME real alt)
SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
SET(${o} "${${o}} ${alt} ${alt}%{_isa}")
SET(${o} "${${o}} ${alt} ${alt}%{?_isa}")
ENDMACRO(ALTERNATIVE_NAME)
ALTERNATIVE_NAME("devel" "mysql-devel")

View file

@ -86,6 +86,9 @@ IF(ENABLE_DTRACE)
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
)
ELSE()
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/probes_mysql_nodtrace.h.in
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h COPYONLY)
ENDIF()
FUNCTION(DTRACE_INSTRUMENT target)

View file

@ -25,7 +25,7 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
# Filter out "general", it is not a library, just CMake hint
# Also, remove duplicates
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
IF (lib MATCHES "^\\-l")
IF (lib MATCHES "^\\-")
SET(${var} "${${var}} ${lib} ")
ELSEIF(lib MATCHES "^/")
IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$")

View file

@ -137,7 +137,7 @@ SET(INSTALL_SCRIPTDIR_RPM "bin")
SET(INSTALL_SYSCONFDIR_RPM "/etc")
SET(INSTALL_SYSCONF2DIR_RPM "/etc/my.cnf.d")
#
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(INSTALL_LIBDIR_RPM "lib64")
SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin")
ELSE()

View file

@ -44,12 +44,11 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
ENDIF()
set(comp "")
IF(ARG_COMPONENT STREQUAL "Server")
IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
#MESSAGE("PDB: ${targets}")
SET(comp Server)
ENDIF()
ENDIF()
IF(NOT comp MATCHES Server)
IF(ARG_COMPONENT MATCHES Development

View file

@ -3,20 +3,6 @@ INCLUDE (CheckLibraryExists)
SET(WITH_JEMALLOC auto CACHE STRING
"Build with jemalloc. Possible values are 'yes', 'no', 'static', 'auto'")
MACRO(JEMALLOC_TRY_STATIC)
SET(libname jemalloc_pic)
SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
SET(what bundled)
CHECK_LIBRARY_EXISTS(${libname} malloc_stats_print "" HAVE_STATIC_JEMALLOC)
SET(CMAKE_REQUIRED_LIBRARIES)
ENDMACRO()
MACRO(JEMALLOC_TRY_DYNAMIC)
SET(libname jemalloc)
SET(what system)
CHECK_LIBRARY_EXISTS(${libname} malloc_stats_print "" HAVE_DYNAMIC_JEMALLOC)
ENDMACRO()
MACRO (CHECK_JEMALLOC)
# compatibility with old WITH_JEMALLOC values
IF(WITH_JEMALLOC STREQUAL "bundled")
@ -26,21 +12,30 @@ MACRO (CHECK_JEMALLOC)
SET(WITH_JEMALLOC "yes")
ENDIF()
IF (WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto")
JEMALLOC_TRY_DYNAMIC()
IF(WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto" OR
WITH_JEMALLOC STREQUAL "static")
IF(WITH_JEMALLOC STREQUAL "static")
SET(libname jemalloc_pic)
SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
SET(what bundled)
ELSE()
SET(libname jemalloc c)
SET(what system)
ENDIF()
IF (WITH_JEMALLOC STREQUAL "static" OR WITH_JEMALLOC STREQUAL "auto"
AND NOT HAVE_DYNAMIC_JEMALLOC)
JEMALLOC_TRY_STATIC()
ENDIF()
IF (libname)
IF (HAVE_DYNAMIC_JEMALLOC OR HAVE_STATIC_JEMALLOC)
SET(LIBJEMALLOC ${libname})
FOREACH(lib ${libname})
CHECK_LIBRARY_EXISTS(${lib} malloc_stats_print "" HAVE_JEMALLOC_IN_${lib})
IF (HAVE_JEMALLOC_IN_${lib})
SET(LIBJEMALLOC ${lib})
SET(MALLOC_LIBRARY "${what} jemalloc")
ELSEIF (NOT WITH_JEMALLOC STREQUAL "auto")
MESSAGE(FATAL_ERROR "${libname} is not found")
BREAK()
ENDIF()
ENDFOREACH()
SET(CMAKE_REQUIRED_LIBRARIES)
IF (NOT LIBJEMALLOC AND NOT WITH_JEMALLOC STREQUAL "auto")
MESSAGE(FATAL_ERROR "jemalloc is not found")
ENDIF()
ENDIF()
ENDMACRO()

View file

@ -87,6 +87,11 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
ENDFOREACH()
SET(CONTENT "${CONTENT} (void *)0\n}\;")
CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
# Avoid "function redeclared as variable" error
# when using gcc/clang option -flto(link time optimization)
IF(" ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} " MATCHES " -flto")
SET_SOURCE_FILES_PROPERTIES(${EXPORTS} PROPERTIES COMPILE_FLAGS "-fno-lto")
ENDIF()
SET(${VAR} ${EXPORTS})
ENDIF()
ENDMACRO()

View file

@ -56,3 +56,10 @@ ELSEIF(MYSQL_MAINTAINER_MODE MATCHES "AUTO")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MY_MAINTAINER_C_WARNINGS}")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MY_MAINTAINER_CXX_WARNINGS}")
ENDIF()
IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
STRING(REPLACE " -E " " -E -dDI " CMAKE_C_CREATE_PREPROCESSED_SOURCE ${CMAKE_C_CREATE_PREPROCESSED_SOURCE})
ENDIF()
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
STRING(REPLACE " -E " " -E -dDI " CMAKE_CXX_CREATE_PREPROCESSED_SOURCE ${CMAKE_CXX_CREATE_PREPROCESSED_SOURCE})
ENDIF()

View file

@ -18,6 +18,7 @@ INCLUDE(CMakeParseArguments)
# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN
# [STORAGE_ENGINE]
# [CLIENT]
# [MANDATORY|DEFAULT]
# [STATIC_ONLY|DYNAMIC_ONLY]
# [MODULE_OUTPUT_NAME module_name]
@ -28,11 +29,12 @@ INCLUDE(CMakeParseArguments)
MACRO(MYSQL_ADD_PLUGIN)
CMAKE_PARSE_ARGUMENTS(ARG
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED"
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED;CLIENT"
"MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG"
"LINK_LIBRARIES;DEPENDENCIES"
${ARGN}
)
IF(NOT WITHOUT_SERVER OR ARG_CLIENT)
# Add common include directories
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
@ -72,7 +74,9 @@ MACRO(MYSQL_ADD_PLUGIN)
SET(compat "with${compat}")
ENDIF()
IF (compat STREQUAL ".")
IF (ARG_DISABLED)
SET(howtobuild NO)
ELSEIF (compat STREQUAL ".")
SET(howtobuild DYNAMIC)
ELSEIF (compat STREQUAL "with.")
IF (NOT ARG_MODULE_ONLY)
@ -120,7 +124,7 @@ MACRO(MYSQL_ADD_PLUGIN)
# Build either static library or module
IF (PLUGIN_${plugin} MATCHES "(STATIC|AUTO|YES)" AND NOT ARG_MODULE_ONLY
AND NOT ARG_DISABLED)
AND NOT ARG_CLIENT)
IF(CMAKE_GENERATOR MATCHES "Makefiles|Ninja")
# If there is a shared library from previous shared build,
@ -176,8 +180,7 @@ MACRO(MYSQL_ADD_PLUGIN)
SET (mysql_optional_plugins ${mysql_optional_plugins} PARENT_SCOPE)
ENDIF()
ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)"
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS
AND NOT ARG_DISABLED)
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
ADD_VERSION_INFO(${target} MODULE SOURCES)
ADD_LIBRARY(${target} MODULE ${SOURCES})
@ -188,14 +191,14 @@ MACRO(MYSQL_ADD_PLUGIN)
TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES})
# Plugin uses symbols defined in mysqld executable.
# Server plugins use symbols defined in mysqld executable.
# Some operating systems like Windows and OSX and are pretty strict about
# unresolved symbols. Others are less strict and allow unresolved symbols
# in shared libraries. On Linux for example, CMake does not even add
# executable to the linker command line (it would result into link error).
# Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate
# an additional dependency.
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ARG_CLIENT)
TARGET_LINK_LIBRARIES (${target} mysqld)
ENDIF()
ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
@ -206,20 +209,23 @@ MACRO(MYSQL_ADD_PLUGIN)
IF(ARG_COMPONENT)
IF(CPACK_COMPONENTS_ALL AND
NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT})
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} PARENT_SCOPE)
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT})
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE)
IF (NOT ARG_CLIENT)
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB" PARENT_SCOPE)
IF (NOT ARG_CONFIG)
SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/${target}.cnf")
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
ENDIF()
INSTALL(FILES ${ARG_CONFIG} COMPONENT ${ARG_COMPONENT} DESTINATION ${INSTALL_SYSCONF2DIR})
# workarounds for cmake issues #13248 and #12864:
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE)
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_OBSOLETES "cmake_bug_13248" PARENT_SCOPE)
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} PARENT_SCOPE)
IF(NOT ARG_CLIENT AND NOT ARG_CONFIG AND UNIX)
SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/${target}.cnf")
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
INSTALL(FILES ${ARG_CONFIG} COMPONENT ${ARG_COMPONENT} DESTINATION ${INSTALL_SYSCONF2DIR})
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" PARENT_SCOPE)
ENDIF()
ENDIF()
ELSE()
SET(ARG_COMPONENT Server)
ENDIF()
@ -232,13 +238,17 @@ MACRO(MYSQL_ADD_PLUGIN)
INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
ENDIF()
ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT)
ENDMACRO()
# Add all CMake projects under storage and plugin
# subdirectories, configure sql_builtins.cc
MACRO(CONFIGURE_PLUGINS)
IF(NOT WITHOUT_SERVER)
FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
ENDIF()
FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
FOREACH(dir ${dirs_storage} ${dirs_plugin})
IF (EXISTS ${dir}/CMakeLists.txt)

View file

@ -26,7 +26,7 @@ ENDIF()
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
# Set the patch version
SET(WSREP_PATCH_VERSION "11")
SET(WSREP_PATCH_VERSION "13")
# Obtain wsrep API version
FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION

View file

@ -88,6 +88,7 @@
#cmakedefine HAVE_SYS_UN_H 1
#cmakedefine HAVE_SYS_VADVISE_H 1
#cmakedefine HAVE_SYS_STATVFS_H 1
#cmakedefine HAVE_UCONTEXT_H 1
#cmakedefine HAVE_TERM_H 1
#cmakedefine HAVE_TERMBITS_H 1
#cmakedefine HAVE_TERMIOS_H 1
@ -236,7 +237,6 @@
#cmakedefine HAVE_THR_YIELD 1
#cmakedefine HAVE_TIME 1
#cmakedefine HAVE_TIMES 1
#cmakedefine HAVE_UCONTEXT 1
#cmakedefine HAVE_VIDATTR 1
#define HAVE_VIO_READ_BUFF 1
#cmakedefine HAVE_VASPRINTF 1

View file

@ -196,6 +196,7 @@ CHECK_INCLUDE_FILES (ndir.h HAVE_NDIR_H)
CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILES (paths.h HAVE_PATHS_H)
CHECK_INCLUDE_FILES (poll.h HAVE_POLL_H)
CHECK_INCLUDE_FILES (sys/poll.h HAVE_SYS_POLL_H)
CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
CHECK_INCLUDE_FILES (sched.h HAVE_SCHED_H)
CHECK_INCLUDE_FILES (select.h HAVE_SELECT_H)
@ -727,16 +728,36 @@ ENDIF()
#
# Test for how the C compiler does inline, if at all
#
# SunPro is weird, apparently it only supports inline at -xO3 or -xO4.
# And if CMAKE_C_FLAGS has -xO4 but CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} has -xO2
# then CHECK_C_SOURCE_COMPILES will succeed but the built will fail.
# We must test all flags here.
# XXX actually, we can do this for all compilers, not only SunPro
IF (CMAKE_CXX_COMPILER_ID MATCHES "SunPro" AND
CMAKE_GENERATOR MATCHES "Makefiles")
STRING(TOUPPER "CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}" flags)
SET(CMAKE_REQUIRED_FLAGS "${${flags}}")
ENDIF()
CHECK_C_SOURCE_COMPILES("
static inline int foo(){return 0;}
extern int bar(int x);
static inline int foo(){return bar(1);}
int main(int argc, char *argv[]){return 0;}"
C_HAS_inline)
IF(NOT C_HAS_inline)
CHECK_C_SOURCE_COMPILES("
static __inline int foo(){return 0;}
extern int bar(int x);
static __inline int foo(){return bar(1);}
int main(int argc, char *argv[]){return 0;}"
C_HAS___inline)
IF(C_HAS___inline)
SET(C_INLINE __inline)
ElSE()
SET(C_INLINE)
MESSAGE(WARNING "C compiler does not support funcion inlining")
IF(NOT NOINLINE)
MESSAGE(FATAL_ERROR "Use -DNOINLINE=TRUE to allow compilation without inlining")
ENDIF()
ENDIF()
ENDIF()
IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC)
@ -977,6 +998,11 @@ CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_len
SET(CMAKE_EXTRA_INCLUDE_FILES)
CHECK_INCLUDE_FILE(ucontext.h HAVE_UCONTEXT_H)
IF(NOT HAVE_UCONTEXT_H)
CHECK_INCLUDE_FILE(sys/ucontext.h HAVE_UCONTEXT_H)
ENDIF()
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_sec "time.h" STRUCT_TIMESPEC_HAS_TV_SEC)
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_nsec "time.h" STRUCT_TIMESPEC_HAS_TV_NSEC)
@ -997,4 +1023,3 @@ IF(NOT MSVC)
HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE
)
ENDIF()

View file

@ -1503,7 +1503,7 @@ my %exprs = (
my %columns = (
active_secs => { hdr => 'SecsActive', num => 1, label => 'Seconds transaction has been active', },
add_pool_alloc => { hdr => 'Add\'l Pool', num => 1, label => 'Additonal pool allocated' },
add_pool_alloc => { hdr => 'Add\'l Pool', num => 1, label => 'Additional pool allocated' },
attempted_op => { hdr => 'Action', num => 0, label => 'The action that caused the error' },
awe_mem_alloc => { hdr => 'AWE Memory', num => 1, label => '[Windows] AWE memory allocated' },
binlog_cache_overflow => { hdr => 'Binlog Cache', num => 1, label => 'Transactions too big for binlog cache that went to disk' },
@ -10365,7 +10365,7 @@ show you something like this:
pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
total_mem_alloc Memory Total memory allocate IB_bp_total_m
add_pool_alloc Add'l Pool Additonal pool alloca IB_bp_add_poo
add_pool_alloc Add'l Pool Additional pool alloca IB_bp_add_poo
The first line shows which table you're editing, and reminds you again to press
'?' for a list of key mappings. The rest is a tabular representation of the

View file

@ -1579,7 +1579,7 @@ show you something like this:
\& pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
\& buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
\& total_mem_alloc Memory Total memory allocate IB_bp_total_m
\& add_pool_alloc Add\*(Aql Pool Additonal pool alloca IB_bp_add_poo
\& add_pool_alloc Add\*(Aql Pool Additional pool alloca IB_bp_add_poo
.Ve
.PP
The first line shows which table you're editing, and reminds you again to press

View file

@ -177,7 +177,7 @@ quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
#no-auto-rehash # faster start of mysql but no tab completion
[isamchk]
key_buffer = 16M

View file

@ -1,10 +1,11 @@
#!/usr/bin/perl -w
# mysqlreport v3.5 Apr 16 2008
# mysqlreport v4.0 Oct 23 2015
# http://hackmysql.com/mysqlreport
# mysqlreport makes an easy-to-read report of important MySQL status values.
# mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
# Copyright 2006-2008 Daniel Nichter
# Copyright 2012-2015 Jean Weisbuch
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@ -36,15 +37,18 @@ my ($stat_name, $stat_val, $stat_label);
my $MySQL_version;
my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES
my (%DMS_vals, %Com_vals, %ib_vals);
my ($dbh, $query);
my $dbh;
my ($questions, $key_read_ratio, $key_write_ratio, $dms, $slow_query_t);
my ($key_cache_block_size, $key_buffer_used, $key_buffer_usage);
my ($qc_mem_used, $qc_hi_r, $qc_ip_r); # Query Cache
my $have_innodb_vals;
my ($ib_bp_used, $ib_bp_total, $ib_bp_read_ratio);
my ($relative_live, $relative_infiles);
my $real_uptime;
my (%stats_present, %stats_past); # For relative reports
my ($pagecache_read_ratio, $pagecache_write_ratio, $pagecache_block_size, $pagecache_buffer_used, $pagecache_buffer_usage); # AriaDB pagecache stats
my ($binlog_cache_ratio, $binlog_stmt_cache_ratio); # binary log cache
my $dbms;
my ($rows, $rows_using_indexes);
GetOptions (
\%op,
@ -127,13 +131,19 @@ $| = 1 if ($op{'detach'} || $relative_live);
print "tmp file: $tmpfile\n" if $op{debug};
# Connect to MySQL
# Connect to MySQL/MariaDB
if(!$op{'infile'} && !$relative_infiles)
{
connect_to_MySQL();
}
$have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version()
my $have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version()
my $have_aria_vals = 0;
my $have_subquerycache_vals = 0;
my $have_binlog_vals = 0;
my $have_tokudb_engine = 0;
my $use_thread_pool = 0;
my $use_xtradb = 0;
if(defined $op{'r'})
{
@ -163,6 +173,9 @@ else
set_myisam_vals();
set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
write_report();
}
@ -177,8 +190,8 @@ exit;
sub show_help_and_exit
{
print <<"HELP";
mysqlreport v3.5 Apr 16 2008
mysqlreport makes an easy-to-read report of important MySQL status values.
mysqlreport v4.0 Oct 23 2015
mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
Command line options (abbreviations work):
--user USER Connect to MySQL as USER
@ -264,6 +277,9 @@ sub collect_reports
set_myisam_vals();
set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
print "#\n# Beginning report, 0 0:0:0\n#\n";
@ -350,7 +366,7 @@ sub read_relative_infiles
# The infile must begin with the system variable values.
# Therefore, the first occurance of Aborted_clients indicates the beginning
# of the first set of status values if no sets have occured yet ($stat_n == 0).
# of the first set of status values if no sets have occurred yet ($stat_n == 0).
# In this case, the following status values are printed to the current fh,
# along with the system variable values read thus far, until Aborted_clients
# occurs again. Then begins the second and subsequent sets of status values.
@ -403,6 +419,9 @@ sub relative_infile_report
set_myisam_vals();
set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
print "#\n# Beginning report, 0 0:0:0\n#\n";
@ -422,7 +441,7 @@ sub get_vals
{
print "get_vals\n" if $op{debug};
my @row;
my (@row, $query);
# Get status values
if($MySQL_version >= 50002)
@ -434,7 +453,9 @@ sub get_vals
$query = $dbh->prepare("SHOW STATUS;");
}
$query->execute();
while(@row = $query->fetchrow_array()) { $stats{$row[0]} = $row[1]; }
# To avoid problems if the variable capitalization would change (eg. TokuDB on MariaDB 5.5 => 10.0), the $stats index is forced to have its first char uppercase and the rest lowercase
while(@row = $query->fetchrow_array()) { $stats{ucfirst(lc($row[0]))} = $row[1]; }
$query->finish();
$real_uptime = $stats{'Uptime'};
}
@ -443,18 +464,23 @@ sub get_vars
{
print "get_vars\n" if $op{debug};
my @row;
my (@row, $query);
# Get server system variables
$query = $dbh->prepare("SHOW VARIABLES;");
$query->execute();
while(@row = $query->fetchrow_array()) { $vars{$row[0]} = $row[1]; }
$query->finish();
# table_cache was renamed to table_open_cache in MySQL 5.1.3
if($MySQL_version >= 50103)
{
$vars{'table_cache'} = $vars{'table_open_cache'};
}
# log_slow_queries was renamed to slow_query_log in MySQL 5.1.29
if($MySQL_version >= 50129)
{
$vars{'log_slow_queries'} = $vars{'slow_query_log'};
}
}
sub read_infile
@ -572,25 +598,116 @@ sub get_MySQL_version
if($op{'infile'} || $relative_infiles)
{
($major, $minor, $patch) = ($vars{'version'} =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
($major, $minor, $patch) = ($vars{'version'} =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
if($vars{'version'} =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/) {
print "MariaDB detected\n" if $op{debug};
$dbms = "MariaDB";
} else {
$dbms = "MySQL";
}
}
else
{
my @row;
my (@row, $query);
$query = $dbh->prepare("SHOW VARIABLES LIKE 'version';");
$query->execute();
@row = $query->fetchrow_array();
($major, $minor, $patch) = ($row[1] =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
$query->finish();
($major, $minor, $patch) = ($row[1] =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
if($row[1] =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/)
{
print "MariaDB detected\n" if $op{debug};
$dbms = "MariaDB";
}
else
{
$dbms = "MySQL";
}
}
# The major version number is kept as is while the minor version and the revision number are forced to 2 digits
# e.g.: 5.5.9 will be 50509, 10.0.5 will be 100005 and 10.1.23 will be 100123
$MySQL_version = sprintf("%d%02d%02d", $major, $minor, $patch);
print "Version $MySQL_version\n" if $op{debug};
# Innodb_ status values were added in 5.0.2
if($MySQL_version < 50002)
{
$have_innodb_vals = 0;
print "get_MySQL_version: no InnoDB reports because MySQL version is older than 5.0.2\n" if $op{debug};
} else {
$have_innodb_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'InnoDB';", undef)->[0][0];
if(defined($have_innodb_vals) && ($have_innodb_vals eq "YES" || $have_innodb_vals eq "DEFAULT"))
{
print "InnoDB detected\n" if $op{debug};
$have_innodb_vals = 1;
} else {
print "InnoDB is not activated\n" if $op{debug};
$have_innodb_vals = 0;
}
}
if($dbms eq "MariaDB") {
$have_aria_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'Aria';", undef)->[0][0];
if(defined($have_aria_vals) && $have_aria_vals eq "YES")
{
print "Aria engine detected\n" if $op{debug};
$have_aria_vals = 1;
} else {
$have_aria_vals = 0;
}
# MariaDB 5.3+, activated by default since 5.3.2
$have_subquerycache_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE REGEXP ',subquery_cache=on,|^subquery_cache=on,|,subquery_cache=on\$' AS SUBQUERY_CACHE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'optimizer_switch';", undef)->[0][0];
if(defined($have_subquerycache_vals) && $have_subquerycache_vals eq "1")
{
print "Subquery cache is activated\n" if $op{debug};
$have_subquerycache_vals = 1;
} else {
$have_subquerycache_vals = 0;
}
}
if($MySQL_version >= 50000)
{
# These checks use the 'information_schema' virtual database that has been added on MySQL 5.0
# MariaDB 5.5.21+ and Percona Server 5.5.30+ use the same thread pool implementation
$use_thread_pool = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'thread_handling';", undef)->[0][0];
if(defined($use_thread_pool) && $use_thread_pool eq "pool-of-threads") {
print "Thread pool is used\n" if $op{debug};
$use_thread_pool = 1;
} else {
$use_thread_pool = 0;
}
$have_binlog_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'log_bin';", undef)->[0][0];
if(defined($have_binlog_vals) && $have_binlog_vals eq "ON")
{
print "Binary log is activated\n" if $op{debug};
$have_binlog_vals = 1;
} else {
$have_binlog_vals = 0;
}
$have_tokudb_engine = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'TokuDB';", undef)->[0][0];
if(defined($have_tokudb_engine) && ($have_tokudb_engine eq "YES" || $have_tokudb_engine eq "DEFAULT"))
{
print "TokuDB detected\n" if $op{debug};
$have_tokudb_engine = 1;
} else {
$have_tokudb_engine = 0;
}
$use_xtradb = $dbh->selectall_arrayref("SELECT 1 FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE = 'InnoDB' AND COMMENT LIKE 'Percona-XtraDB%';", undef)->[0][0];
if(defined($use_xtradb) && $use_xtradb eq "1")
{
print "XtraDB detected\n" if $op{debug};
$use_xtradb = 1;
} else {
$use_xtradb = 0;
}
}
}
@ -598,6 +715,7 @@ sub set_myisam_vals
{
print "set_myisam_vals\n" if $op{debug};
# should be moved elsewere
$questions = $stats{'Questions'};
$key_read_ratio = sprintf "%.2f",
@ -638,7 +756,6 @@ sub set_myisam_vals
$dms = $DMS_vals{SELECT} + $DMS_vals{INSERT} + $DMS_vals{REPLACE} + $DMS_vals{UPDATE} + $DMS_vals{DELETE};
$slow_query_t = format_u_time($vars{long_query_time});
}
sub set_ib_vals
@ -658,6 +775,46 @@ sub set_ib_vals
0);
}
sub set_aria_vals
{
print "set_aria_vals\n" if $op{debug};
$pagecache_read_ratio = sprintf "%.2f",
($stats{'Aria_pagecache_read_requests'} ?
100 - ($stats{'Aria_pagecache_reads'} / $stats{'Aria_pagecache_read_requests'}) * 100 :
0);
$pagecache_write_ratio = sprintf "%.2f",
($stats{'Aria_pagecache_write_requests'} ?
100 - ($stats{'Aria_pagecache_writes'} / $stats{'Aria_pagecache_write_requests'}) * 100 :
0);
$pagecache_block_size = (defined $vars{'aria_block_size'} ?
$vars{'aria_block_size'} :
1024);
$pagecache_buffer_used = $stats{'Aria_pagecache_blocks_used'} * $pagecache_block_size;
$pagecache_buffer_usage = $vars{'aria_pagecache_buffer_size'} -
($stats{'Aria_pagecache_blocks_unused'} * $pagecache_block_size);
}
sub set_subquerycache_vals
{
print "set_subquerycache_vals\n" if $op{debug};
}
sub set_binlog_vals
{
print "set_binlog_vals\n" if $op{debug};
if($stats{'Binlog_cache_use'} gt 0) { $binlog_cache_ratio = $stats{'Binlog_cache_disk_use'} / $stats{'Binlog_cache_use'}; }
else { $binlog_cache_ratio = 0; }
if(defined($stats{'Binlog_stmt_cache_use'}) && $stats{'Binlog_stmt_cache_use'} gt 0) { $binlog_stmt_cache_ratio = $stats{'Binlog_stmt_cache_disk_use'} / $stats{'Binlog_stmt_cache_use'}; }
else { $binlog_stmt_cache_ratio = 0; }
}
sub write_relative_report
{
print "write_relative_report\n" if $op{debug};
@ -708,6 +865,10 @@ sub write_relative_report
$stats{'Innodb_row_lock_time_max'} = $stats_present{'Innodb_row_lock_time_max'};
}
}
if($have_aria_vals)
{
$stats{'Aria_pagecache_blocks_used'} = $stats_present{'Aria_pagecache_blocks_used'};
}
get_Com_values();
@ -715,6 +876,9 @@ sub write_relative_report
set_myisam_vals();
set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
write_report();
}
@ -731,15 +895,27 @@ sub write_report
$~ = 'SLOW_DMS', write;
write_DMS();
write_Com();
write_Rows();
$~ = 'SAS', write;
write_qcache();
$~ = 'REPORT_END', write;
$~ = 'THREADS', write;
if($use_thread_pool)
{
$~ = 'THREADPOOL', write;
} else {
$~ = 'THREADPERCONNECTION', write;
}
$~ = 'TAB', write;
write_InnoDB() if $have_innodb_vals;
write_Aria() if $have_aria_vals;
write_Subquerycache() if $have_subquerycache_vals;
write_Binlog() if $have_binlog_vals;
write_TokuDB() if $have_tokudb_engine;
}
sub sec_to_dhms # Seconds to days hours:minutes:seconds
sub sec_to_dhms # Seconds to days+hours:minutes:seconds
{
my $s = shift;
my ($d, $h, $m) = (0, 0, 0);
@ -761,7 +937,7 @@ sub sec_to_dhms # Seconds to days hours:minutes:seconds
$m = int $s / 60;
$s -= $m * 60;
return "$d $h:$m:$s";
return "$d+$h:$m:$s";
}
sub make_short
@ -782,12 +958,11 @@ sub make_short
}
# What began as a simple but great idea has become the new standard:
# long_query_time in microseconds. For MySQL 5.1.21+ and 6.0.4+ this
# is now standard. For 4.1 and 5.0 patches, the architects of this
# idea provide: http://www.mysqlperformanceblog.com/mysql-patches/
# long_query_time in microseconds. For MySQL 5.1.21+ this is now
# standard. For 4.1 and 5.0 patches, the architects of this idea
# provide: http://www.mysqlperformanceblog.com/mysql-patches/
# Relevant notes in MySQL manual:
# http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
# http://dev.mysql.com/doc/refman/6.0/en/slow-query-log.html
#
# The format_u_time sub simply beautifies long_query_time.
@ -848,7 +1023,7 @@ sub email_report # Email given report to $op{'email'}
open SENDMAIL, "|/usr/sbin/sendmail -t";
print SENDMAIL "From: mysqlreport\n";
print SENDMAIL "To: $op{email}\n";
print SENDMAIL "Subject: MySQL status report on " . ($mycnf{'host'} || 'localhost') . "\n\n";
print SENDMAIL "Subject: $dbms status report on " . ($mycnf{'host'} || 'localhost') . "\n\n";
print SENDMAIL `cat $report`;
close SENDMAIL;
}
@ -979,6 +1154,7 @@ sub write_qcache
# ergo this method is slightly more reliable
return if not exists $vars{'query_cache_size'};
return if $vars{'query_cache_size'} == 0;
return if defined($vars{'query_cache_type'}) and $vars{'query_cache_type'} eq 'OFF';
$qc_mem_used = $vars{'query_cache_size'} - $stats{'Qcache_free_memory'};
$qc_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1);
@ -988,6 +1164,36 @@ sub write_qcache
write;
}
sub write_Subquerycache
{
print "write_Subquerycache\n" if $op{debug};
return if not defined $stats{'Subquery_cache_hit'};
return if $stats{'Subquery_cache_hit'} == 0 && $stats{'Subquery_cache_miss'} == 0;
$~ = 'SUBQUERYCACHE';
write;
}
sub write_Binlog
{
print "write_Binlog\n" if $op{debug};
return if $binlog_cache_ratio == 0 && $binlog_stmt_cache_ratio == 0;
$~ = 'BINLOG';
write;
}
sub write_TokuDB
{
print "write_TokuDB\n" if $op{debug};
return if $stats{'Tokudb_cachetable_size_current'} == 0;
$~ = 'TOKUDB';
write;
}
sub write_InnoDB
{
print "write_InnoDB\n" if $op{debug};
@ -998,6 +1204,11 @@ sub write_InnoDB
$~ = 'IB';
write;
if($use_xtradb)
{
$~ = 'IB_XTRADB';
write;
}
# Innodb_row_lock_ values were added in MySQL 5.0.3
if($MySQL_version >= 50003)
@ -1005,12 +1216,44 @@ sub write_InnoDB
$~ = 'IB_LOCK';
write;
}
if($use_xtradb)
{
$~ = 'IB_LOCK_XTRADB';
write;
}
# Data, Pages, Rows
$~ = 'IB_DPR';
write;
}
sub write_Aria
{
print "write_Aria\n" if $op{debug};
return if not defined $stats{'Aria_pagecache_blocks_used'};
$~ = 'PAGECACHE_BUFF_MAX';
write;
if($pagecache_buffer_usage != -1) { $~ = 'PAGECACHE_BUFF_USAGE', write }
$~ = 'PAGECACHE_RATIOS';
write;
}
sub write_Rows
{
print "write_Rows\n" if $op{debug};
$rows_using_indexes = $stats{'Handler_read_first'} + $stats{'Handler_read_key'} + $stats{'Handler_read_next'} + $stats{'Handler_read_prev'};
$rows = $rows_using_indexes + $stats{'Handler_read_rnd'} + $stats{'Handler_read_rnd_next'} + $stats{'Sort_rows'};
$~ = 'ROWS';
write;
}
sub have_op
{
my $key = shift;
@ -1043,19 +1286,17 @@ sub exit_tasks_and_cleanup
}
else
{
if($WIN) { `del $tmpfile`; }
else { `rm -f $tmpfile`; }
unlink $tmpfile;
}
if(!$op{'infile'} && !$relative_infiles)
{
if($op{'flush-status'})
{
$query = $dbh->prepare("FLUSH STATUS;");
my $query = $dbh->prepare("FLUSH STATUS;");
$query->execute();
}
$query->finish();
}
$dbh->disconnect();
}
}
@ -1065,8 +1306,8 @@ sub exit_tasks_and_cleanup
#
format MYSQL_TIME =
MySQL @<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>
$vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
@<<<<<< @<<<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
$dbms, $vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
.
format KEY_BUFF_MAX =
@ -1122,41 +1363,52 @@ $stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions)
format SAS =
__ SELECT and Sort _____________________________________________________
Scan @>>>>>> @>>>>/s %SELECT: @>>>>>
Scan @>>>>>> @>>>>>/s %SELECT: @>>>>>
make_short($stats{'Select_scan'}), t($stats{'Select_scan'}), perc($stats{'Select_scan'}, $stats{'Com_select'})
Range @>>>>>> @>>>>/s @>>>>>
Range @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_range'}), t($stats{'Select_range'}), perc($stats{'Select_range'}, $stats{'Com_select'})
Full join @>>>>>> @>>>>/s @>>>>>
Full join @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_full_join'}), t($stats{'Select_full_join'}), perc($stats{'Select_full_join'}, $stats{'Com_select'})
Range check @>>>>>> @>>>>/s @>>>>>
Range check @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_range_check'}), t($stats{'Select_range_check'}), perc($stats{'Select_range_check'}, $stats{'Com_select'})
Full rng join @>>>>>> @>>>>/s @>>>>>
Full rng join @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_full_range_join'}), t($stats{'Select_full_range_join'}), perc($stats{'Select_full_range_join'}, $stats{'Com_select'})
Sort scan @>>>>>> @>>>>/s
Sort scan @>>>>>> @>>>>>/s
make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'})
Sort range @>>>>>> @>>>>/s
Sort range @>>>>>> @>>>>>/s
make_short($stats{'Sort_range'}), t($stats{'Sort_range'})
Sort mrg pass @>>>>>> @>>>>/s
Sort mrg pass @>>>>>> @>>>>>/s
make_short($stats{'Sort_merge_passes'}), t($stats{'Sort_merge_passes'})
.
format QCACHE =
__ Query Cache _________________________________________________________
Memory usage @>>>>>> of @>>>>>> %Used: @>>>>>
Memory usage @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
Block Fragmnt @>>>>>%
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
Hits @>>>>>> @>>>>/s
Hits @>>>>>> @>>>>>/s
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
Inserts @>>>>>> @>>>>/s
Inserts @>>>>>> @>>>>>/s
make_short($stats{'Qcache_inserts'}), t($stats{'Qcache_inserts'})
Insrt:Prune @>>>>>>:1 @>>>>/s
Insrt:Prune @>>>>>>:1 @>>>>>/s
make_short($qc_ip_r), t($stats{'Qcache_inserts'} - $stats{'Qcache_lowmem_prunes'})
Hit:Insert @>>>>>>:1
$qc_hi_r, t($qc_hi_r)
.
format SUBQUERYCACHE =
__ Subquery Cache ______________________________________________________
Hit ratio @>>>>>%
perc($stats{'Subquery_cache_hit'} / ($stats{'Subquery_cache_hit'} + $stats{'Subquery_cache_miss'}))
Hits @>>>>>> @>>>>>/s
make_short($stats{'Subquery_cache_hit'}), t($stats{'Subquery_cache_hit'})
Miss @>>>>>> @>>>>>/s
make_short($stats{'Subquery_cache_miss'}), t($stats{'Subquery_cache_miss'})
.
# Not really the end...
format REPORT_END =
@ -1167,37 +1419,52 @@ Immediate @>>>>>>>> @>>>>>/s
make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'})
__ Tables ______________________________________________________________
Open @>>>>>>>> of @>>> %Cache: @>>>>>
Open @>>>>>>>> of @>>>>> %Cache: @>>>>>
$stats{'Open_tables'}, $vars{'table_cache'}, perc($stats{'Open_tables'}, $vars{'table_cache'})
Opened @>>>>>>>> @>>>>>/s
make_short($stats{'Opened_tables'}), t($stats{'Opened_tables'})
__ Connections _________________________________________________________
Max used @>>>>>>>> of @>>> %Max: @>>>>>
Max used @>>>>>>>> of @>>>>> %Max: @>>>>>
$stats{'Max_used_connections'}, $vars{'max_connections'}, perc($stats{'Max_used_connections'}, $vars{'max_connections'})
Total @>>>>>>>> @>>>>>/s
make_short($stats{'Connections'}), t($stats{'Connections'})
__ Created Temp ________________________________________________________
Disk table @>>>>>>>> @>>>>>/s
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'})
Disk table @>>>>>>>> @>>>>>/s %Disk: @>>>>>
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'}), perc($stats{'Created_tmp_disk_tables'}, $stats{'Created_tmp_tables'})
Table @>>>>>>>> @>>>>>/s Size: @>>>>>
make_short($stats{'Created_tmp_tables'}), t($stats{'Created_tmp_tables'}), make_short($vars{'tmp_table_size'}, 1, 1)
File @>>>>>>>> @>>>>>/s
make_short($stats{'Created_tmp_files'}), t($stats{'Created_tmp_files'})
.
format TAB =
format THREADS =
__ Threads _____________________________________________________________
Running @>>>>>>>> of @>>>
Running @>>>>>>>> of @>>>>>
$stats{'Threads_running'}, $stats{'Threads_connected'}
Cached @>>>>>>>> of @>>> %Hit: @>>>>>
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
Created @>>>>>>>> @>>>>>/s
make_short($stats{'Threads_created'}), t($stats{'Threads_created'})
Slow @>>>>>>>> @>>>>>/s
$stats{'Slow_launch_threads'}, t($stats{'Slow_launch_threads'})
.
format THREADPERCONNECTION =
Cached @>>>>>>>> of @>>>>> %Hit: @>>>>>
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
.
format THREADPOOL =
Threadpool @>>>>>>>> of @>>>>> %Used: @>>>>>
$stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
Running @>>>>>>>> of @>>>>> %Running: @>>>>>
$stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}))
Idle @>>>>>>>> of @>>>>> %Idle: @>>>>>
$stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
.
format TAB =
__ Aborted _____________________________________________________________
Clients @>>>>>>>> @>>>>>/s
@ -1215,7 +1482,7 @@ make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'})
format IB =
__ InnoDB Buffer Pool __________________________________________________
Usage @>>>>>> of @>>>>>> %Used: @>>>>>
Usage @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($ib_bp_used, 1), make_short($ib_bp_total, 1), perc($ib_bp_used, $ib_bp_total)
Read hit @>>>>>%
$ib_bp_read_ratio;
@ -1230,18 +1497,23 @@ make_short($stats{'Innodb_buffer_pool_pages_data'}), perc($stats{'Innodb_buffer_
$stats{'Innodb_buffer_pool_pages_latched'}, perc($stats{'Innodb_buffer_pool_pages_latched'}, $stats{'Innodb_buffer_pool_pages_total'})
Reads @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_read_requests'}), t($stats{'Innodb_buffer_pool_read_requests'})
From file @>>>>>>>> @>>>>>/s @>>>>>
From disk @>>>>>>>> @>>>>>/s %Disk: @>>>>>
make_short($stats{'Innodb_buffer_pool_reads'}), t($stats{'Innodb_buffer_pool_reads'}), perc($stats{'Innodb_buffer_pool_reads'}, $stats{'Innodb_buffer_pool_read_requests'})
Ahead Rnd @>>>>>>>> @>>>>>/s
$stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'})
Ahead Sql @>>>>>>>> @>>>>>/s
$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
# Ahead Sql @>>>>>>>> @>>>>>/s
#$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
Writes @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_write_requests'}), t($stats{'Innodb_buffer_pool_write_requests'})
Wait Free @>>>>>>>> @>>>>>/s %Wait: @>>>>>
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'}), perc($stats{'Innodb_buffer_pool_wait_free'}, $stats{'Innodb_buffer_pool_write_requests'})
Flushes @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_pages_flushed'}), t($stats{'Innodb_buffer_pool_pages_flushed'})
Wait Free @>>>>>>>> @>>>>>/s
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'})
.
format IB_XTRADB =
LRU @>>>>>>>> @>>>>>/s %LRU: @>>>>>
make_short($stats{'Innodb_buffer_pool_pages_lru_flushed'}), t($stats{'Innodb_buffer_pool_pages_lru_flushed'}), perc($stats{'Innodb_buffer_pool_pages_lru_flushed'}, $stats{'Innodb_buffer_pool_pages_flushed'})
.
format IB_LOCK =
@ -1260,6 +1532,11 @@ $stats{'Innodb_row_lock_time_avg'}
$stats{'Innodb_row_lock_time_max'}
.
format IB_LOCK_XTRADB =
Trx history @>>>>>>>>
make_short($stats{'Innodb_history_list_length'})
.
format IB_DPR =
__ InnoDB Data, Pages, Rows ____________________________________________
@ -1296,3 +1573,54 @@ make_short($stats{'Innodb_rows_read'}), t($stats{'Innodb_rows_read'})
Updated @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_rows_updated'}), t($stats{'Innodb_rows_updated'})
.
format PAGECACHE_BUFF_MAX =
__ Aria Pagecache ______________________________________________________
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
make_short($pagecache_buffer_used, 1), make_short($vars{'aria_pagecache_buffer_size'}, 1), perc($pagecache_buffer_used, $vars{'aria_pagecache_buffer_size'})
.
format PAGECACHE_BUFF_USAGE =
Current @>>>>>> %Usage: @>>>>>
make_short($pagecache_buffer_usage, 1), perc($pagecache_buffer_usage, $vars{'aria_pagecache_buffer_size'})
.
format PAGECACHE_RATIOS =
Write hit @>>>>>%
$pagecache_write_ratio
Read hit @>>>>>%
$pagecache_read_ratio
.
format BINLOG =
__ Binary Log Cache _____________________________________________________
Disk use
Transactional @>>>>>%
perc($binlog_cache_ratio)
Non transactional @>>>>>%
perc($binlog_stmt_cache_ratio)
.
format TOKUDB =
__ TokuDB ______________________________________________________________
Cachetable @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($stats{Tokudb_cachetable_size_current}, 1), make_short($vars{tokudb_cache_size}, 1), perc($stats{Tokudb_cachetable_size_current}, $vars{tokudb_cache_size})
Miss @>>>>>> @>>>>>/s
make_short($stats{'Tokudb_cachetable_miss'}), t($stats{'Tokudb_cachetable_miss'})
Evictions @>>>>>> @>>>>>/s
make_short($stats{'Tokudb_cachetable_evictions'}), t($stats{'Tokudb_cachetable_evictions'})
.
format ROWS =
__ Rows ________________________________________________________________
Rows @>>>>>>>> @>>>>>/s
make_short($rows), t($rows)
Using idx @>>>>>>>> @>>>>>/s %Index: @>>>>>
make_short($rows_using_indexes), t($rows_using_indexes), perc($rows_using_indexes,$rows)
Rows/question @>>>>>>
make_short($rows/$questions)
.

13
debian/control vendored
View file

@ -12,6 +12,7 @@ Build-Depends: bison,
libaio-dev,
libboost-dev,
libjudy-dev,
libkrb5-dev,
libncurses5-dev (>= 5.0-6~),
libpam0g-dev,
libreadline-gplv2-dev,
@ -441,3 +442,15 @@ Depends: libcrack2 (>= 2.9.0), mariadb-server-10.2
Description: CrackLib Password Validation Plugin for MariaDB
This password validation plugin uses cracklib to allow only
sufficiently secure (as defined by cracklib) user passwords in MariaDB.
Package: mariadb-gssapi-server-10.1
Section: database
Architecture: any
Depends: libgssapi-krb5-2, mariadb-server-10.1
Description: GSSAPI authentication plugin for MariaDB server
Package: mariadb-gssapi-client-10.1
Section: database
Architecture: any
Depends: libgssapi-krb5-2, mariadb-client-10.1
Description: GSSAPI authentication plugin for MariaDB client

2
debian/copyright vendored
View file

@ -9,7 +9,7 @@ The MariaDB packages were initally made by http://ourdelta.org/, and
are now managed by the MariaDB development team,
maria-developers@lists.launchpad.net
MariaDB can be downloaded from http://downloads.askmonty.org/mariadb/
MariaDB can be downloaded from https://downloads.mariadb.org/
Copyright:

View file

@ -1,4 +1,4 @@
FAQ:
Q: My <tab> completition is gone, why?
Q: My <tab> completion is gone, why?
A: You have "no-auto-rehash" in the "[mysql]" section of /etc/mysql/my.cnf!

View file

@ -0,0 +1 @@
usr/lib/mysql/plugin/auth_gssapi_client.so

View file

@ -0,0 +1 @@
usr/lib/mysql/plugin/auth_gssapi.so

View file

@ -6,6 +6,7 @@ usr/lib/mysql/plugin/ha_blackhole.so
usr/lib/mysql/plugin/ha_federated.so
usr/lib/mysql/plugin/ha_federatedx.so
usr/lib/mysql/plugin/ha_innodb.so
usr/lib/mysql/plugin/ha_mroonga.so
usr/lib/mysql/plugin/ha_sphinx.so
usr/lib/mysql/plugin/handlersocket.so
usr/lib/mysql/plugin/locales.so
@ -18,6 +19,7 @@ usr/lib/mysql/plugin/server_audit.so
usr/lib/mysql/plugin/simple_password_check.so
usr/lib/mysql/plugin/sql_errlog.so
usr/lib/mysql/plugin/wsrep_info.so
usr/lib/mysql/plugin/user_variables.so
usr/lib/libhsclient.so.*
etc/apparmor.d/usr.sbin.mysqld
usr/share/apport/package-hooks/source_mariadb-10.2.py
@ -83,6 +85,8 @@ usr/share/mysql/echo_stderr
usr/share/mysql/errmsg-utf8.txt
usr/share/mysql/fill_help_tables.sql
usr/share/mysql/maria_add_gis_sp_bootstrap.sql
usr/share/mysql/mroonga/install.sql
usr/share/mysql/mroonga/uninstall.sql
usr/share/mysql/mysql_system_tables_data.sql
usr/share/mysql/mysql_system_tables.sql
usr/share/mysql/mysql_performance_tables.sql

View file

@ -12,16 +12,9 @@
postrotate
test -x /usr/bin/mysqladmin || exit 0
if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
# If this fails, check debian.conf!
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
# Really no mysqld or rather a missing debian-sys-maint user?
# If this occurs and is not a error please report a bug.
if ps cax | grep -q mysqld; then
exit 1
fi
else
$MYADMIN flush-logs
mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
fi
endscript
}

View file

@ -37,6 +37,9 @@ umask 077
# so break my scripts.
export HOME=/etc/mysql/
# Source default config file.
[ -r /etc/default/mariadb ] && . /etc/default/mariadb
## Fetch a particular option from mysql's invocation.
#
# Usage: void mysqld_get_param option
@ -109,7 +112,7 @@ case "${1:-''}" in
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &
# 6s was reported in #352070 to be too little
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-60}"); do
sleep 1
if mysqld_status check_alive nowarn ; then break; fi
log_progress_msg "."

View file

@ -240,7 +240,10 @@ db_stop # in case invoke failes
# Thus MariaDB server is started via init.d script, which in turn redirects to
# systemctl. If we upgrade from MySQL mysql.service may be masked, which also
# means init.d script is disabled. Unmask mysql service explicitely.
deb-systemd-helper unmask mysql.service >/dev/null || true
# Check first that the command exists, to avoid emitting any warning messages.
if [ -x "$(command -v deb-systemd-helper)" ]; then
deb-systemd-helper unmask mysql.service > /dev/null
fi
#DEBHELPER#

View file

@ -694,14 +694,14 @@ int main(int argc, char **argv)
if (*filename == '\0')
{
fprintf(stderr, "Error; File name missing\n");
goto error;
goto error_out;
}
/* stat the file to get size and page count */
if (stat(filename, &st))
{
fprintf(stderr, "Error; %s cannot be found\n", filename);
goto error;
goto error_out;
}
size= st.st_size;
@ -711,7 +711,7 @@ int main(int argc, char **argv)
{
fprintf(stderr, "Error; %s cannot be opened", filename);
perror(" ");
goto error;
goto error_out;
}
big_buf = (unsigned char *)malloc(2 * UNIV_PAGE_SIZE_MAX);
@ -719,7 +719,7 @@ int main(int argc, char **argv)
{
fprintf(stderr, "Error; failed to allocate memory\n");
perror("");
goto error;
goto error_f;
}
/* Make sure the page is aligned */
@ -731,7 +731,7 @@ int main(int argc, char **argv)
{
fprintf(stderr, "Error; failed to allocate memory\n");
perror("");
return 1;
goto error_big_buf;
}
/* Make sure the page is aligned */
@ -983,12 +983,17 @@ ok:
print_stats();
free(big_xdes);
free(big_buf);
fclose(f);
my_end(0);
exit(0);
error:
free(big_xdes);
error_big_buf:
free(big_buf);
error_f:
fclose(f);
error_out:
my_end(0);
exit(1);
}

View file

@ -12,6 +12,17 @@ before calling SSL_new();
*** end Note ***
yaSSL Release notes, version 2.3.9 (12/01/2015)
This release of yaSSL fixes two client side Diffie-Hellman problems.
yaSSL was only handling the cases of zero or one leading zeros for the key
agreement instead of potentially any number. This caused about 1 in 50,000
connections to fail when using DHE cipher suites. The second problem was
the case where a server would send a public value shorter than the prime
value, causing about 1 in 128 client connections to fail, and also
caused the yaSSL client to read off the end of memory. All client side
DHE cipher suite users should update.
Thanks to Adam Langely (agl@imperialviolet.org) for the detailed report!
yaSSL Release notes, version 2.3.8 (9/17/2015)
This release of yaSSL fixes a high security vulnerability. All users
SHOULD update. If using yaSSL for TLS on the server side with private

View file

@ -378,6 +378,7 @@ public:
uint get_agreedKeyLength() const;
const byte* get_agreedKey() const;
uint get_publicKeyLength() const;
const byte* get_publicKey() const;
void makeAgreement(const byte*, unsigned int);

View file

@ -34,7 +34,7 @@
#include "rsa.h"
#define YASSL_VERSION "2.3.8"
#define YASSL_VERSION "2.3.9"
#if defined(__cplusplus)

View file

@ -342,6 +342,7 @@ private:
Sessions& GetSessions(); // forward singletons
sslFactory& GetSSL_Factory();
Errors& GetErrors();
bool HasErrors();
// openSSL method and context types

View file

@ -751,9 +751,10 @@ struct DiffieHellman::DHImpl {
byte* publicKey_;
byte* privateKey_;
byte* agreedKey_;
uint pubKeyLength_;
DHImpl(TaoCrypt::RandomNumberGenerator& r) : ranPool_(r), publicKey_(0),
privateKey_(0), agreedKey_(0) {}
privateKey_(0), agreedKey_(0), pubKeyLength_(0) {}
~DHImpl()
{
ysArrayDelete(agreedKey_);
@ -762,7 +763,7 @@ struct DiffieHellman::DHImpl {
}
DHImpl(const DHImpl& that) : dh_(that.dh_), ranPool_(that.ranPool_),
publicKey_(0), privateKey_(0), agreedKey_(0)
publicKey_(0), privateKey_(0), agreedKey_(0), pubKeyLength_(0)
{
uint length = dh_.GetByteLength();
AllocKeys(length, length, length);
@ -810,7 +811,7 @@ DiffieHellman::DiffieHellman(const byte* p, unsigned int pSz, const byte* g,
using TaoCrypt::Integer;
pimpl_->dh_.Initialize(Integer(p, pSz).Ref(), Integer(g, gSz).Ref());
pimpl_->publicKey_ = NEW_YS opaque[pubSz];
pimpl_->publicKey_ = NEW_YS opaque[pimpl_->pubKeyLength_ = pubSz];
memcpy(pimpl_->publicKey_, pub, pubSz);
}
@ -869,6 +870,10 @@ const byte* DiffieHellman::get_agreedKey() const
return pimpl_->agreedKey_;
}
uint DiffieHellman::get_publicKeyLength() const
{
return pimpl_->pubKeyLength_;
}
const byte* DiffieHellman::get_publicKey() const
{

View file

@ -1493,6 +1493,7 @@ int SSLeay_add_ssl_algorithms() // compatibility only
void ERR_remove_state(unsigned long)
{
if (HasErrors())
GetErrors().Remove();
}

View file

@ -121,11 +121,11 @@ void SetErrorString(YasslError error, char* buffer)
break;
case certificate_error :
strncpy(buffer, "unable to proccess cerificate", max);
strncpy(buffer, "unable to process cerificate", max);
break;
case privateKey_error :
strncpy(buffer, "unable to proccess private key, bad format", max);
strncpy(buffer, "unable to process private key, bad format", max);
break;
case badVersion_error :

View file

@ -109,14 +109,11 @@ void ClientDiffieHellmanPublic::build(SSL& ssl)
uint keyLength = dhClient.get_agreedKeyLength(); // pub and agree same
alloc(keyLength, true);
dhClient.makeAgreement(dhServer.get_publicKey(), keyLength);
dhClient.makeAgreement(dhServer.get_publicKey(),
dhServer.get_publicKeyLength());
c16toa(keyLength, Yc_);
memcpy(Yc_ + KEY_OFFSET, dhClient.get_publicKey(), keyLength);
// because of encoding first byte might be zero, don't use it for preMaster
if (*dhClient.get_agreedKey() == 0)
ssl.set_preMaster(dhClient.get_agreedKey() + 1, keyLength - 1);
else
ssl.set_preMaster(dhClient.get_agreedKey(), keyLength);
}
@ -321,10 +318,6 @@ void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input)
}
dh.makeAgreement(Yc_, keyLength);
// because of encoding, first byte might be 0, don't use for preMaster
if (*dh.get_agreedKey() == 0)
ssl.set_preMaster(dh.get_agreedKey() + 1, dh.get_agreedKeyLength() - 1);
else
ssl.set_preMaster(dh.get_agreedKey(), dh.get_agreedKeyLength());
ssl.makeMasterSecret();
}

View file

@ -807,6 +807,19 @@ void SSL::set_random(const opaque* random, ConnectionEnd sender)
// store client pre master secret
void SSL::set_preMaster(const opaque* pre, uint sz)
{
uint i(0); // trim leading zeros
uint fullSz(sz);
while (i++ < fullSz && *pre == 0) {
sz--;
pre++;
}
if (sz == 0) {
SetError(bad_input);
return;
}
secure_.use_connection().AllocPreSecret(sz);
memcpy(secure_.use_connection().pre_master_secret_, pre, sz);
}
@ -924,6 +937,8 @@ void SSL::order_error()
// Create and store the master secret see page 32, 6.1
void SSL::makeMasterSecret()
{
if (GetError()) return;
if (isTLS())
makeTLSMasterSecret();
else {
@ -1673,6 +1688,11 @@ Errors& GetErrors()
return *errorsInstance;
}
bool HasErrors()
{
return (errorsInstance != 0);
}
typedef Mutex::Lock Lock;

View file

@ -16,6 +16,7 @@
/*
Optimized function-like macros for the x86 architecture (_WIN32 included).
*/
#define sint2korr(A) (int16) (*((int16 *) (A)))
#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
(((uint32) 255L << 24) | \
@ -31,7 +32,7 @@
Attention: Please, note, uint3korr reads 4 bytes (not 3)!
It means, that you have to provide enough allocated space.
*/
#if defined(HAVE_purify) && !defined(_WIN32)
#if defined(HAVE_valgrind) && !defined(_WIN32)
#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\
(((uint32) ((uchar) (A)[1])) << 8) +\
(((uint32) ((uchar) (A)[2])) << 16))
@ -39,17 +40,21 @@
#define uint3korr(A) (uint32) (*((unsigned int *) (A)) & 0xFFFFFF)
#endif
#define uint4korr(A) (uint32) (*((uint32 *) (A)))
#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
(((uint32) ((uchar) (A)[1])) << 8) +\
(((uint32) ((uchar) (A)[2])) << 16) +\
(((uint32) ((uchar) (A)[3])) << 24)) +\
(((ulonglong) ((uchar) (A)[4])) << 32))
#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \
(((uint32) ((uchar) (A)[1])) << 8) + \
(((uint32) ((uchar) (A)[2])) << 16) + \
(((uint32) ((uchar) (A)[3])) << 24)) + \
(((ulonglong) ((uchar) (A)[4])) << 32) + \
(((ulonglong) ((uchar) (A)[5])) << 40))
static inline ulonglong uint5korr(const void *p)
{
ulonglong a= *(uint32 *) p;
ulonglong b= *(4 + (uchar *) p);
return a | (b << 32);
}
static inline ulonglong uint6korr(const void *p)
{
ulonglong a= *(uint32 *) p;
ulonglong b= *(uint16 *) (4 + (char *) p);
return a | (b << 32);
}
#define uint8korr(A) (ulonglong) (*((ulonglong *) (A)))
#define sint8korr(A) (longlong) (*((longlong *) (A)))
@ -61,23 +66,67 @@
*(T+1)=(uchar) (((uint) (A) >> 8));\
*(T+2)=(uchar) (((A) >> 16));\
} while (0)
#define int4store(T,A) do { uchar *pT= (uchar*)(T);\
*((uint32 *) (pT))= (uint32) (A); \
} while (0)
#define int5store(T,A) do { *(T)= (uchar)((A));\
*((T)+1)=(uchar) (((A) >> 8));\
*((T)+2)=(uchar) (((A) >> 16));\
*((T)+3)=(uchar) (((A) >> 24));\
*((T)+4)=(uchar) (((A) >> 32));\
} while(0)
#define int6store(T,A) do { *(T)= (uchar)((A)); \
*((T)+1)=(uchar) (((A) >> 8)); \
*((T)+2)=(uchar) (((A) >> 16)); \
*((T)+3)=(uchar) (((A) >> 24)); \
*((T)+4)=(uchar) (((A) >> 32)); \
*((T)+5)=(uchar) (((A) >> 40)); \
} while(0)
#define int5store(T,A) do { uchar *pT= (uchar*)(T);\
*((uint32 *) (pT))= (uint32) (A); \
*((pT)+4)=(uchar) (((A) >> 32));\
} while (0)
#define int6store(T,A) do { uchar *pT= (uchar*)(T);\
*((uint32 *) (pT))= (uint32) (A); \
*((uint16*)(pT+4))= (uint16) (A >> 32);\
} while (0)
#define int8store(T,A) do { uchar *pT= (uchar*)(T);\
*((ulonglong *) (pT))= (ulonglong) (A);\
} while(0)
#if defined(__GNUC__)
#define HAVE_mi_uint5korr
#define HAVE_mi_uint6korr
#define HAVE_mi_uint7korr
#define HAVE_mi_uint78orr
/* Read numbers stored in high-bytes-first order */
static inline ulonglong mi_uint5korr(const void *p)
{
ulonglong a= *(uint32 *) p;
ulonglong b= *(4 + (uchar *) p);
ulonglong v= (a | (b << 32)) << 24;
asm ("bswapq %0" : "=r" (v) : "0" (v));
return v;
}
static inline ulonglong mi_uint6korr(const void *p)
{
ulonglong a= *(uint32 *) p;
ulonglong b= *(uint16 *) (4 + (char *) p);
ulonglong v= (a | (b << 32)) << 16;
asm ("bswapq %0" : "=r" (v) : "0" (v));
return v;
}
static inline ulonglong mi_uint7korr(const void *p)
{
ulonglong a= *(uint32 *) p;
ulonglong b= *(uint16 *) (4 + (char *) p);
ulonglong c= *(6 + (uchar *) p);
ulonglong v= (a | (b << 32) | (c << 48)) << 8;
asm ("bswapq %0" : "=r" (v) : "0" (v));
return v;
}
static inline ulonglong mi_uint8korr(const void *p)
{
ulonglong v= *(ulonglong *) p;
asm ("bswapq %0" : "=r" (v) : "0" (v));
return v;
}
#endif

View file

@ -400,7 +400,6 @@ struct my_charset_handler_st
{
my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *loader);
/* Multibyte routines */
uint (*ismbchar)(CHARSET_INFO *, const char *, const char *);
uint (*mbcharlen)(CHARSET_INFO *, uint c);
size_t (*numchars)(CHARSET_INFO *, const char *b, const char *e);
size_t (*charpos)(CHARSET_INFO *, const char *b, const char *e,
@ -533,6 +532,7 @@ struct my_charset_handler_st
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
extern MY_CHARSET_HANDLER my_charset_utf8_handler;
/*
@ -800,16 +800,6 @@ uint my_instr_mb(CHARSET_INFO *,
const char *s, size_t s_length,
my_match_t *match, uint nmatch);
int my_strnncoll_mb_bin(CHARSET_INFO * cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen,
my_bool t_is_prefix);
int my_strnncollsp_mb_bin(CHARSET_INFO *cs,
const uchar *a, size_t a_length,
const uchar *b, size_t b_length,
my_bool diff_if_only_endspace_difference);
int my_wildcmp_mb_bin(CHARSET_INFO *cs,
const char *str,const char *str_end,
const char *wildstr,const char *wildend,
@ -889,6 +879,18 @@ uint32 my_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
const char *from, uint32 from_length,
CHARSET_INFO *from_cs, uint *errors);
/**
An extended version of my_convert(), to pass non-default mb_wc() and wc_mb().
For example, String::copy_printable() which is used in
Protocol::store_warning() uses this to escape control
and non-convertable characters.
*/
uint32 my_convert_using_func(char *to, uint32 to_length, CHARSET_INFO *to_cs,
my_charset_conv_wc_mb mb_wc,
const char *from, uint32 from_length,
CHARSET_INFO *from_cs,
my_charset_conv_mb_wc wc_mb,
uint *errors);
/*
Convert a string between two character sets.
Bad byte sequences as well as characters that cannot be
@ -959,8 +961,42 @@ size_t my_convert_fix(CHARSET_INFO *dstcs, char *dst, size_t dst_length,
#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num))
#define use_mb(s) ((s)->cset->ismbchar != NULL)
#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
#define use_mb(s) ((s)->mbmaxlen > 1)
/**
Detect if the leftmost character in a string is a valid multi-byte character
and return its length, or return 0 otherwise.
@param cs - character set
@param str - the beginning of the string
@param end - the string end (the next byte after the string)
@return >0, for a multi-byte character
@rerurn 0, for a single byte character, broken sequence, empty string.
*/
static inline
uint my_ismbchar(CHARSET_INFO *cs, const char *str, const char *end)
{
int char_length= (cs->cset->charlen)(cs, (const uchar *) str,
(const uchar *) end);
return char_length > 1 ? (uint) char_length : 0U;
}
/**
Return length of the leftmost character in a string.
@param cs - character set
@param str - the beginning of the string
@param end - the string end (the next byte after the string)
@return <=0 on errors (EOL, wrong byte sequence)
@return 1 on a single byte character
@return >1 on a multi-byte character
Note, inlike my_ismbchar(), 1 is returned for a single byte character.
*/
static inline
int my_charlen(CHARSET_INFO *cs, const char *str, const char *end)
{
return (cs->cset->charlen)(cs, (const uchar *) str,
(const uchar *) end);
}
#ifdef USE_MB
#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
#else

View file

@ -280,6 +280,12 @@ make_atomic_store(32)
make_atomic_store(64)
make_atomic_store(ptr)
#if SIZEOF_LONG == 4
#define my_atomic_addlong(A,B) my_atomic_add32((int32*) (A), (B))
#else
#define my_atomic_addlong(A,B) my_atomic_add64((int64*) (A), (B))
#endif
#ifdef _atomic_h_cleanup_
#include _atomic_h_cleanup_
#undef _atomic_h_cleanup_

View file

@ -121,6 +121,15 @@ static inline uint32 my_reverse_bits(uint32 key)
_my_bits_reverse_table[(key>>24) ];
}
/*
a number with the n lowest bits set
an overflow-safe version of (1 << n) - 1
*/
static inline uint32 my_set_bits(int n)
{
return (((1UL << (n - 1)) - 1) << 1) | 1;
}
C_MODE_END
#endif /* MY_BIT_INCLUDED */

View file

@ -31,7 +31,7 @@
#define MY_CONTEXT_USE_X86_64_GCC_ASM
#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__)
#define MY_CONTEXT_USE_I386_GCC_ASM
#elif defined(HAVE_UCONTEXT)
#elif defined(HAVE_UCONTEXT_H)
#define MY_CONTEXT_USE_UCONTEXT
#else
#define MY_CONTEXT_DISABLE
@ -178,7 +178,7 @@ struct mysql_async_context {
resumed, eg. whether we woke up due to connection completed or timeout
in mysql_real_connect_cont().
*/
unsigned int events_occured;
unsigned int events_occurred;
/*
This is set to the result of the whole asynchronous operation when it
completes. It uses a union, as different calls have different return

View file

@ -198,20 +198,6 @@
#define likely(x) __builtin_expect(((x) != 0),1)
#define unlikely(x) __builtin_expect(((x) != 0),0)
/*
now let's figure out if inline functions are supported
autoconf defines 'inline' to be empty, if not
*/
#define inline_test_1(X) X ## 1
#define inline_test_2(X) inline_test_1(X)
#if inline_test_2(inline) != 1
#define HAVE_INLINE
#else
#error Compiler does not support inline!
#endif
#undef inline_test_2
#undef inline_test_1
/* Fix problem with S_ISLNK() on Linux */
#if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
#undef _GNU_SOURCE
@ -452,7 +438,7 @@ extern "C" int madvise(void *addr, size_t len, int behav);
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#define STDERR_FILENO fileno(stderr)
#endif
#ifndef SO_EXT
@ -823,6 +809,9 @@ inline unsigned long long my_double2ulonglong(double d)
#else
#define finite(x) (1.0 / fabs(x) > 0.0)
#endif /* HAVE_FINITE */
#elif (__cplusplus >= 201103L)
#include <cmath>
static inline bool isfinite(double x) { return std::isfinite(x); }
#endif /* isfinite */
#ifndef HAVE_ISNAN

View file

@ -36,9 +36,11 @@ C_MODE_START
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_POLL
#if defined(HAVE_POLL_H)
#include <poll.h>
#elif defined(HAVE_SYS_POLL_H)
#include <sys/poll.h>
#endif
#endif /* defined(HAVE_POLL_H) */
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif

View file

@ -672,7 +672,7 @@ extern pthread_mutexattr_t my_errorcheck_mutexattr;
#define ESRCH 1
#endif
typedef ulong my_thread_id;
typedef int64 my_thread_id;
extern void my_threadattr_global_init(void);
extern my_bool my_thread_global_init(void);
@ -694,7 +694,7 @@ extern void my_mutex_end(void);
We need to have at least 256K stack to handle calls to myisamchk_init()
with the current number of keys and key parts.
*/
#define DEFAULT_THREAD_STACK (288*1024L)
#define DEFAULT_THREAD_STACK (290*1024L)
#endif
#define MY_PTHREAD_LOCK_READ 0

View file

@ -52,11 +52,16 @@
(((uint32) (((const uchar*) (A))[2])) << 8) +\
(((uint32) (((const uchar*) (A))[1])) << 16) +\
(((uint32) (((const uchar*) (A))[0])) << 24)))
#ifndef HAVE_mi_uint5korr
#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\
(((uint32) (((const uchar*) (A))[3])) << 8) +\
(((uint32) (((const uchar*) (A))[2])) << 16) +\
(((uint32) (((const uchar*) (A))[1])) << 24)) +\
(((ulonglong) (((const uchar*) (A))[0])) << 32))
#endif /* HAVE_mi_uint5korr */
#ifndef HAVE_mi_uint6korr
#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\
(((uint32) (((const uchar*) (A))[4])) << 8) +\
(((uint32) (((const uchar*) (A))[3])) << 16) +\
@ -64,6 +69,9 @@
(((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\
(((uint32) (((const uchar*) (A))[0]) << 8)))) <<\
32))
#endif /* HAVE_mi_uint6korr */
#ifndef HAVE_mi_uint7korr
#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\
(((uint32) (((const uchar*) (A))[5])) << 8) +\
(((uint32) (((const uchar*) (A))[4])) << 16) +\
@ -72,6 +80,9 @@
(((uint32) (((const uchar*) (A))[1])) << 8) +\
(((uint32) (((const uchar*) (A))[0])) << 16))) <<\
32))
#endif /* HAVE_mi_uint7korr */
#ifndef HAVE_mi_uint8korr
#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\
(((uint32) (((const uchar*) (A))[6])) << 8) +\
(((uint32) (((const uchar*) (A))[5])) << 16) +\
@ -81,6 +92,7 @@
(((uint32) (((const uchar*) (A))[1])) << 16) +\
(((uint32) (((const uchar*) (A))[0])) << 24))) <<\
32))
#endif /* HAVE_mi_uint8korr */
/* This one is for uniformity */
#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A)

View file

@ -9,6 +9,9 @@ enum enum_server_command
COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
COM_MDB_GAP_BEG,
COM_MDB_GAP_END=253,
COM_MULTI,
COM_END
};
struct st_vio;

View file

@ -56,7 +56,7 @@ struct mysql_event_general
unsigned int general_command_length;
const char *general_query;
unsigned int general_query_length;
struct charset_info_st *general_charset;
const struct charset_info_st *general_charset;
unsigned long long general_time;
unsigned long long general_rows;
/* Added in version 0x302 */

View file

@ -422,7 +422,7 @@ struct mysql_event_general
unsigned int general_command_length;
const char *general_query;
unsigned int general_query_length;
struct charset_info_st *general_charset;
const struct charset_info_st *general_charset;
unsigned long long general_time;
unsigned long long general_rows;
unsigned long long query_id;

View file

@ -19,8 +19,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
#ifndef MYSQL_SOCKET_H
#define MYSQL_SOCKET_H
/* For strlen() */
#include <string.h>
/* For MY_STAT */
#include <my_dir.h>
/* For my_chsize */

View file

@ -1240,7 +1240,7 @@ static inline int inline_mysql_thread_create(
return result;
}
static inline void inline_mysql_thread_set_psi_id(ulong id)
static inline void inline_mysql_thread_set_psi_id(my_thread_id id)
{
struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
PSI_THREAD_CALL(set_thread_id)(psi, id);

View file

@ -22,7 +22,7 @@
if requested.
The functions are documented at
http://kb.askmonty.org/en/progress-reporting#how-to-add-support-for-progress-reporting-to-a-storage-engine
https://mariadb.com/kb/en/progress-reporting/#how-to-add-support-for-progress-reporting-to-a-storage-engine
*/
#ifdef __cplusplus

View file

@ -104,7 +104,7 @@ extern struct wsrep_service_st {
const char * (*wsrep_thd_query_state_str_func)(THD *thd);
int (*wsrep_thd_retry_counter_func)(THD *thd);
void (*wsrep_thd_set_conflict_state_func)(THD *thd, enum wsrep_conflict_state state);
bool (*wsrep_thd_skip_append_keys_func)(THD *thd);
bool (*wsrep_thd_ignore_table_func)(THD *thd);
long long (*wsrep_thd_trx_seqno_func)(THD *thd);
struct wsrep_ws_handle * (*wsrep_thd_ws_handle_func)(THD *thd);
int (*wsrep_trx_is_aborting_func)(MYSQL_THD thd);
@ -145,7 +145,7 @@ extern struct wsrep_service_st {
#define wsrep_thd_query_state_str(T) wsrep_service->wsrep_thd_query_state_str_func(T)
#define wsrep_thd_retry_counter(T) wsrep_service->wsrep_thd_retry_counter_func(T)
#define wsrep_thd_set_conflict_state(T,S) wsrep_service->wsrep_thd_set_conflict_state_func(T,S)
#define wsrep_thd_skip_append_keys(T) wsrep_service->wsrep_thd_skip_append_keys_func(T)
#define wsrep_thd_ignore_table(T) wsrep_service->wsrep_thd_ignore_table_func(T)
#define wsrep_thd_trx_seqno(T) wsrep_service->wsrep_thd_trx_seqno_func(T)
#define wsrep_thd_ws_handle(T) wsrep_service->wsrep_thd_ws_handle_func(T)
#define wsrep_trx_is_aborting(T) wsrep_service->wsrep_trx_is_aborting_func(T)
@ -206,7 +206,7 @@ void wsrep_thd_LOCK(THD *thd);
void wsrep_thd_UNLOCK(THD *thd);
void wsrep_thd_awake(THD *thd, my_bool signal);
void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state);
bool wsrep_thd_skip_append_keys(THD *thd);
bool wsrep_thd_ignore_table(THD *thd);
void wsrep_unlock_rollback();
#endif

View file

@ -102,7 +102,9 @@ enum enum_server_command
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
/* don't forget to update const char *command_name[] in sql_parse.cc */
COM_MDB_GAP_BEG,
COM_MDB_GAP_END=253,
COM_MULTI,
/* Must be last */
COM_END
};
@ -188,7 +190,8 @@ enum enum_server_command
#define REFRESH_GENERIC (1ULL << 30)
#define REFRESH_FAST (1ULL << 31) /* Intern flag */
#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
#define CLIENT_LONG_PASSWORD 0 /* obsolete flag */
#define CLIENT_MYSQL 1 /* mysql/old mariadb server/client */
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
@ -215,7 +218,7 @@ enum enum_server_command
/* Don't close the connection for a connection with expired password. */
#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22)
#define CLIENT_PROGRESS (1UL << 29) /* Client support progress indicator */
#define CLIENT_PROGRESS_OBSOLETE (1UL << 29)
#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
/*
It used to be that if mysql_real_connect() failed, it would delete any
@ -228,14 +231,25 @@ enum enum_server_command
*/
#define CLIENT_REMEMBER_OPTIONS (1UL << 31)
/* MariaDB extended capability flags */
#define MARIADB_CLIENT_FLAGS_MASK 0xffffffff00000000ULL
/* Client support progress indicator */
#define MARIADB_CLIENT_PROGRESS (1ULL << 32)
/* support COM_MULTI */
#define MARIADB_CLIENT_COM_MULTI (1ULL << 33)
#ifdef HAVE_COMPRESS
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
#else
#define CAN_CLIENT_COMPRESS 0
#endif
/* Gather all possible capabilites (flags) supported by the server */
#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \
/*
Gather all possible capabilites (flags) supported by the server
MARIADB_* flags supported only by MariaDB connector(s).
*/
#define CLIENT_ALL_FLAGS (\
CLIENT_FOUND_ROWS | \
CLIENT_LONG_FLAG | \
CLIENT_CONNECT_WITH_DB | \
@ -256,10 +270,11 @@ enum enum_server_command
CLIENT_PS_MULTI_RESULTS | \
CLIENT_SSL_VERIFY_SERVER_CERT | \
CLIENT_REMEMBER_OPTIONS | \
CLIENT_PROGRESS | \
MARIADB_CLIENT_PROGRESS | \
CLIENT_PLUGIN_AUTH | \
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \
CLIENT_CONNECT_ATTRS)
CLIENT_CONNECT_ATTRS |\
MARIADB_CLIENT_COM_MULTI)
/*
To be added later:

View file

@ -100,8 +100,6 @@ bool thd_is_connection_alive(THD *thd);
void close_connection(THD *thd, uint errcode);
/* End the connection before closing it */
void end_connection(THD *thd);
/* Cleanup the THD object */
void thd_cleanup(THD *thd);
/* Decrement connection counter */
void dec_connection_count();
/* Destroy THD object */

View file

@ -208,7 +208,7 @@ void vio_end(void);
/* shutdown(2) flags */
#ifndef SHUT_RD
#define SHUT_RD SD_BOTH
#define SHUT_RD SD_RECEIVE
#endif
/*

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2011, 2015, Oracle and/or its affiliates.
Copyright (c) 2011, 2015, MariaDB
/* Copyright (c) 2011, 2016, Oracle and/or its affiliates.
Copyright (c) 2011, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -17,7 +17,7 @@
#ifndef _welcome_copyright_notice_h_
#define _welcome_copyright_notice_h_
#define COPYRIGHT_NOTICE_CURRENT_YEAR "2015"
#define COPYRIGHT_NOTICE_CURRENT_YEAR "2016"
/*
This define specifies copyright notice which is displayed by every MySQL

View file

@ -31,6 +31,14 @@
if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \
wsrep_to_isolation_end(thd);
/*
Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
NO_WRITE_TO_BINLOG.
*/
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto error;
#define WSREP_DEBUG(...) \
if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
@ -46,6 +54,7 @@
#define WSREP_ERROR(...)
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_)
#define WSREP_TO_ISOLATION_END
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
#endif
#endif /* WSERP_INCLUDED */

View file

@ -27,7 +27,7 @@ extern char * mysql_unix_port;
When adding capabilities here, consider if they should be also added to
the server's version.
*/
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
#define CLIENT_CAPABILITIES (CLIENT_MYSQL | \
CLIENT_LONG_FLAG | \
CLIENT_TRANSACTIONS | \
CLIENT_PROTOCOL_41 | \

View file

@ -47,9 +47,11 @@
#include <sys/select.h>
#endif
#endif /* !defined(__WIN__) */
#ifdef HAVE_POLL
#if defined(HAVE_POLL_H)
#include <poll.h>
#elif defined(HAVE_SYS_POLL_H)
#include <sys/poll.h>
#endif
#endif /* defined(HAVE_POLL_H) */
#ifdef HAVE_SYS_UN_H
#include <sys/un.h>
#endif
@ -2231,7 +2233,7 @@ static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row)
/*
Read one row from network: unbuffered non-cursor fetch.
If last row was read, or error occured, erase this statement
If last row was read, or error occurred, erase this statement
from record pointing to object unbuffered fetch is performed from.
SYNOPSIS

View file

@ -110,6 +110,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
../sql/item_inetfunc.cc
../sql/wsrep_dummy.cc ../sql/encryption.cc
../sql/item_windowfunc.cc ../sql/sql_window.cc
../sql/sql_cte.cc
${GEN_SOURCES}
${MYSYS_LIBWRAP_SOURCE}
)

View file

@ -165,7 +165,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
arg_length= header_length;
}
result= dispatch_command(command, thd, (char *) arg, arg_length);
result= dispatch_command(command, thd, (char *) arg, arg_length, FALSE,
FALSE);
thd->cur_data= 0;
thd->mysys_var= NULL;
@ -428,8 +429,8 @@ static void emb_free_embedded_thd(MYSQL *mysql)
thread_count--;
thd->store_globals();
thd->unlink();
delete thd;
mysql_mutex_unlock(&LOCK_thread_count);
delete thd;
my_pthread_setspecific_ptr(THR_THD, 0);
mysql->thd=0;
}
@ -664,7 +665,7 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag)
void *create_embedded_thd(int client_flag)
{
THD * thd= new THD;
thd->thread_id= thd->variables.pseudo_thread_id= thread_id++;
thd->thread_id= thd->variables.pseudo_thread_id= next_thread_id();
thd->thread_stack= (char*) &thd;
if (thd->store_globals())

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBCOMP_ERR\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBCOMP_ERR\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBINNOCHECKSUM\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBINNOCHECKSUM\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMAKE_WIN_BIN_DIST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMAKE_WIN_BIN_DIST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMSQL2MYSQL\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMSQL2MYSQL\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMY_PRINT_DEFAULTS" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMY_PRINT_DEFAULTS" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYISAM_FTDUMP\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYISAM_FTDUMP\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYISAMCHK\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYISAMCHK\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYISAMLOG\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYISAMLOG\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYISAMPACK\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYISAMPACK\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL\-STRESS\-TE" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL\-STRESS\-TE" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL\-TEST\-RUN\" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL\-TEST\-RUN\" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
@ -1583,7 +1583,7 @@ may fail in total, as each repetition is considered a new test case, which may i
\fB\-\-retry\-failure=\fR\fB\fIN\fR\fR
.sp
When using the \fB-\-retry\fR option to retry failed tests,
stop when N failures have occured (default 2)\&. Setting it to 0 or 1 effectively turns off retries\&.
stop when N failures have occurred (default 2)\&. Setting it to 0 or 1 effectively turns off retries\&.
.RE
.sp
.RS 4

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL\&.SERVER\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL\&.SERVER\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_CLIENT_TEST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_CLIENT_TEST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_CONFIG\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_CONFIG\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_CONVERT_TAB" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_CONVERT_TAB" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_FIND_ROWS\F" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_FIND_ROWS\F" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_FIX_EXTENSI" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_FIX_EXTENSI" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_INSTALL_DB\" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_INSTALL_DB\" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_PLUGIN\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_PLUGIN\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_SECURE_INST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_SECURE_INST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_SETPERMISSI" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_SETPERMISSI" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

View file

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_TZINFO_TO_S" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
.TH "\FBMYSQL_TZINFO_TO_S" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------

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